#!/bin/bash # Owncloud ########################## source setup/functions.sh # load our functions source /etc/mailinabox.conf # load global vars apt_install \ dbconfig-common \ php5-cli php5-sqlite php5-gd php5-imap php5-curl php-pear php-apc curl libapr1 libtool libcurl4-openssl-dev php-xml-parser \ php5 php5-dev php5-gd php5-fpm memcached php5-memcache unzip apt-get purge -qq -y owncloud* # Install ownCloud from source echo installing ownCloud... rm -f /tmp/owncloud.zip wget -qO /tmp/owncloud.zip https://download.owncloud.org/community/owncloud-latest.zip if [ ! -d /usr/local/lib/owncloud ]; then # fresh install unzip -q /tmp/owncloud.zip -d /usr/local/lib else # upgrade existing install unzip -u -o -q /tmp/owncloud.zip -d /usr/local/lib hide_output php /usr/local/lib/owncloud/occ upgrade fi rm -f /tmp/owncloud.zip # Setup ownCloud if the ownCloud database does not yet exist. Running setup when # the database does exist wipes the database and user data. if [ ! -f $STORAGE_ROOT/owncloud/owncloud.db ]; then # Create a configuration file. TIMEZONE=`cat /etc/timezone` instanceid=oc$(echo $PRIMARY_HOSTNAME | sha1sum | fold -w 10 | head -n 1) cat - > /usr/local/lib/owncloud/config/config.php < '$STORAGE_ROOT/owncloud', 'instanceid' => '$instanceid', 'trusted_domains' => array ( 0 => '$PRIMARY_HOSTNAME', ), 'forcessl' => true, # if unset/false, ownCloud sends a HSTS=0 header, which conflicts with nginx config 'overwritewebroot' => '/cloud', 'user_backends' => array( array( 'class'=>'OC_User_IMAP', 'arguments'=>array('{localhost:993/imap/ssl/novalidate-cert}') ) ), "memcached_servers" => array ( array('localhost', 11211), ), 'mail_smtpmode' => 'sendmail', 'mail_smtpsecure' => '', 'mail_smtpauthtype' => 'LOGIN', 'mail_smtpauth' => false, 'mail_smtphost' => '', 'mail_smtpport' => '', 'mail_smtpname' => '', 'mail_smtppassword' => '', 'mail_from_address' => 'owncloud', 'mail_domain' => '$PRIMARY_HOSTNAME', 'logtimezone' => '$TIMEZONE', ); ?> EOF # Create an auto-configuration file to fill in database settings # when the install script is run. Make an administrator account # here or else the install can't finish. adminpassword=$(dd if=/dev/random bs=1 count=40 2>/dev/null | sha1sum | fold -w 30 | head -n 1) cat - > /usr/local/lib/owncloud/config/autoconfig.php < '$STORAGE_ROOT/owncloud', 'dbtype' => 'sqlite3', # create an administrator account with a random password so that # the user does not have to enter anything on first load of ownCloud 'adminlogin' => 'root', 'adminpass' => '$adminpassword', ); ?> EOF # Create user data directory and set permissions mkdir -p $STORAGE_ROOT/owncloud chown -R www-data.www-data $STORAGE_ROOT/owncloud /usr/local/lib/owncloud # Execute ownCloud's setup step, which creates the ownCloud sqlite database. # It also wipes it if it exists. And it deletes the autoconfig.php file. (cd /usr/local/lib/owncloud; sudo -u www-data php /usr/local/lib/owncloud/index.php;) fi # Enable/disable apps. Note that this must be done after the ownCloud setup. # The firstrunwizard gave Josh all sorts of problems, so disabling that. # user_external is what allows ownCloud to use IMAP for login. hide_output php /usr/local/lib/owncloud/console.php app:disable firstrunwizard hide_output php /usr/local/lib/owncloud/console.php app:enable user_external # Set PHP FPM values to support large file uploads # (semicolon is the comment character in this file, hashes produce deprecation warnings) tools/editconf.py /etc/php5/fpm/php.ini -c ';' \ upload_max_filesize=16G \ post_max_size=16G \ output_buffering=16384 \ memory_limit=512M \ max_execution_time=600 \ short_open_tag=On # Set up a cron job for owncloud. cat > /etc/cron.hourly/mailinabox-owncloud << EOF; #!/bin/bash # Mail-in-a-Box sudo -u www-data php -f /usr/local/lib/owncloud/cron.php EOF chmod +x /etc/cron.hourly/mailinabox-owncloud ## Ensure all system admins are ownCloud admins. ## Actually we don't do this. There's nothing much of interest that the user could ## change from the ownCloud admin, and there's a lot they could mess up. #for user in $(tools/mail.py user admins); do # sqlite3 $STORAGE_ROOT/owncloud/owncloud.db "INSERT OR IGNORE INTO oc_group_user VALUES ('admin', '$user')" #done # Finished. php5enmod imap restart_service php5-fpm