From d2ccf56adb746e75541844424a403472f4988de9 Mon Sep 17 00:00:00 2001 From: yodax Date: Tue, 4 Apr 2017 08:25:05 +0200 Subject: [PATCH] Update to NextCloud11 using PHP7 --- conf/nginx-primaryonly.conf | 2 +- setup/owncloud.sh | 147 +++++++++++++++++++++++++----------- tools/owncloud-restore.sh | 2 + 3 files changed, 105 insertions(+), 46 deletions(-) diff --git a/conf/nginx-primaryonly.conf b/conf/nginx-primaryonly.conf index ef1c990d..1f44742d 100644 --- a/conf/nginx-primaryonly.conf +++ b/conf/nginx-primaryonly.conf @@ -40,7 +40,7 @@ fastcgi_param MOD_X_ACCEL_REDIRECT_ENABLED on; fastcgi_param MOD_X_ACCEL_REDIRECT_PREFIX /owncloud-xaccel; fastcgi_read_timeout 630; - fastcgi_pass php-fpm; + fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; error_page 403 /cloud/core/templates/403.php; error_page 404 /cloud/core/templates/404.php; client_max_body_size 1G; diff --git a/setup/owncloud.sh b/setup/owncloud.sh index aeed6c17..f67bf88b 100755 --- a/setup/owncloud.sh +++ b/setup/owncloud.sh @@ -16,6 +16,13 @@ apt_install \ apt-get purge -qq -y owncloud* +# Install php-7 from the ppa of the ubuntu php maintainer Ondřej Surý located here https://launchpad.net/%7Eondrej/+archive/ubuntu/php +hide_output add-apt-repository -y ppa:ondrej/php +hide_output apt-get update +apt_install php7.0 php7.0-fpm \ + php7.0-cli php7.0-sqlite php7.0-gd php7.0-imap php7.0-curl php-pear php-apc curl \ + php7.0-dev php7.0-gd memcached php7.0-memcached php7.0-xml php7.0-mbstring php7.0-zip php7.0-apcu + # Migrate <= v0.10 setups that stored the ownCloud config.php in /usr/local rather than # in STORAGE_ROOT. Move the file to STORAGE_ROOT. if [ ! -f $STORAGE_ROOT/owncloud/config.php ] \ @@ -28,52 +35,96 @@ if [ ! -f $STORAGE_ROOT/owncloud/config.php ] \ ln -sf $STORAGE_ROOT/owncloud/config.php /usr/local/lib/owncloud/config/config.php fi -InstallOwncloud() { +InstallNextCloud() { version=$1 hash=$2 - flavor=$3 echo - echo "Upgrading to $flavor version $version" + echo "Upgrading to NextCloud version $version" echo # Remove the current owncloud/Nextcloud rm -rf /usr/local/lib/owncloud # Download and verify - if [ "$flavor" = "Nextcloud" ]; then - wget_verify https://download.nextcloud.com/server/releases/nextcloud-$version.zip $hash /tmp/owncloud.zip - else - wget_verify https://download.owncloud.org/community/owncloud-$version.zip $hash /tmp/owncloud.zip - fi + wget_verify https://download.nextcloud.com/server/releases/nextcloud-$version.zip $hash /tmp/nextcloud.zip # Extract ownCloud/Nextcloud - unzip -q /tmp/owncloud.zip -d /usr/local/lib - if [ "$flavor" = "Nextcloud" ]; then - mv /usr/local/lib/nextcloud /usr/local/lib/owncloud + unzip -q /tmp/nextcloud.zip -d /usr/local/lib + mv /usr/local/lib/nextcloud /usr/local/lib/owncloud + rm -f /tmp/nextcloud.zip + + # The two apps we actually want are not in Nextcloud core. Download the releases from + # their github repositories. + mkdir -p /usr/local/lib/owncloud/apps + + wget_verify https://github.com/nextcloud/contacts/releases/download/v1.5.3/contacts.tar.gz 78c4d49e73f335084feecd4853bd8234cf32615e /tmp/contacts.tgz + tar xf /tmp/contacts.tgz -C /usr/local/lib/owncloud/apps/ + rm /tmp/contacts.tgz + + wget_verify https://github.com/nextcloud/calendar/releases/download/v1.5.2/calendar.tar.gz 7b8a94e01fe740c5c23017ed5bc211983c780fce /tmp/calendar.tgz + tar xf /tmp/calendar.tgz -C /usr/local/lib/owncloud/apps/ + rm /tmp/calendar.tgz + + # Fix weird permissions. + chmod 750 /usr/local/lib/owncloud/{apps,config} + + # Create a symlink to the config.php in STORAGE_ROOT (for upgrades we're restoring the symlink we previously + # put in, and in new installs we're creating a symlink and will create the actual config later). + ln -sf $STORAGE_ROOT/owncloud/config.php /usr/local/lib/owncloud/config/config.php + + # Make sure permissions are correct or the upgrade step won't run. + # $STORAGE_ROOT/owncloud may not yet exist, so use -f to suppress + # that error. + chown -f -R www-data.www-data $STORAGE_ROOT/owncloud /usr/local/lib/owncloud + + # If this isn't a new installation, immediately run the upgrade script. + # Then check for success (0=ok and 3=no upgrade needed, both are success). + if [ -e $STORAGE_ROOT/owncloud/owncloud.db ]; then + # ownCloud 8.1.1 broke upgrades. It may fail on the first attempt, but + # that can be OK. + sudo -u www-data php7.0 /usr/local/lib/owncloud/occ upgrade + if [ \( $? -ne 0 \) -a \( $? -ne 3 \) ]; then + echo "Trying ownCloud upgrade again to work around ownCloud upgrade bug..." + sudo -u www-data php7.0 /usr/local/lib/owncloud/occ upgrade + if [ \( $? -ne 0 \) -a \( $? -ne 3 \) ]; then exit 1; fi + sudo -u www-data php7.0 /usr/local/lib/owncloud/occ maintenance:mode --off + echo "...which seemed to work." + fi fi +} + +# We only install ownCloud intermediate versions to be able to seemlesly upgrade to NextCloud +InstallOwncloud() { + + version=$1 + hash=$2 + + echo + echo "Upgrading to OwnCloud version $version" + echo + + # Remove the current owncloud/Nextcloud + rm -rf /usr/local/lib/owncloud + + # Download and verify + wget_verify https://download.owncloud.org/community/owncloud-$version.zip $hash /tmp/owncloud.zip + + + # Extract ownCloud + unzip -q /tmp/owncloud.zip -d /usr/local/lib rm -f /tmp/owncloud.zip # The two apps we actually want are not in Nextcloud core. Download the releases from # their github repositories. mkdir -p /usr/local/lib/owncloud/apps - if [ "$flavor" = "Nextcloud" ]; then - wget_verify https://github.com/nextcloud/contacts/releases/download/v1.5.3/contacts.tar.gz 78c4d49e73f335084feecd4853bd8234cf32615e /tmp/contacts.tgz - else - wget_verify https://github.com/owncloud/contacts/releases/download/v1.4.0.0/contacts.tar.gz c1c22d29699456a45db447281682e8bc3f10e3e7 /tmp/contacts.tgz - fi - + wget_verify https://github.com/owncloud/contacts/releases/download/v1.4.0.0/contacts.tar.gz c1c22d29699456a45db447281682e8bc3f10e3e7 /tmp/contacts.tgz tar xf /tmp/contacts.tgz -C /usr/local/lib/owncloud/apps/ rm /tmp/contacts.tgz - if [ "$flavor" = "Nextcloud" ]; then - wget_verify https://github.com/nextcloud/calendar/releases/download/v1.5.2/calendar.tar.gz 7b8a94e01fe740c5c23017ed5bc211983c780fce /tmp/calendar.tgz - else - wget_verify https://github.com/nextcloud/calendar/releases/download/v1.4.0/calendar.tar.gz c84f3170efca2a99ea6254de34b0af3cb0b3a821 /tmp/calendar.tgz - fi - + wget_verify https://github.com/nextcloud/calendar/releases/download/v1.4.0/calendar.tar.gz c84f3170efca2a99ea6254de34b0af3cb0b3a821 /tmp/calendar.tgz tar xf /tmp/calendar.tgz -C /usr/local/lib/owncloud/apps/ rm /tmp/calendar.tgz @@ -105,15 +156,15 @@ InstallOwncloud() { fi } -owncloud_ver=10.0.4 -owncloud_hash=346590278a5cc7b0a3c8d1a68eafec68ac59c475 -owncloud_flavor=Nextcloud +owncloud_ver=11.0.2 +owncloud_hash=a95ad7aefaaba3f95d2e0e77374f56e92c27d2ff # Check if Nextcloud dir exist, and check if version matches owncloud_ver (if either doesn't - install/upgrade) if [ ! -d /usr/local/lib/owncloud/ ] \ || ! grep -q $owncloud_ver /usr/local/lib/owncloud/version.php; then # Stop php-fpm + hide_output service php7.0-fpm stop hide_output service php5-fpm stop # Backup the existing ownCloud/Nextcloud. @@ -135,7 +186,7 @@ if [ ! -d /usr/local/lib/owncloud/ ] \ if [ -e /usr/local/lib/owncloud/version.php ]; then if grep -q "8\.1\.[0-9]" /usr/local/lib/owncloud/version.php; then echo "We are running 8.1.x, upgrading to 8.2.3 first" - InstallOwncloud 8.2.3 bfdf6166fbf6fc5438dc358600e7239d1c970613 ownCloud + InstallOwncloud 8.2.3 bfdf6166fbf6fc5438dc358600e7239d1c970613 fi # If we are upgrading from 8.2.x we should go to 9.0 first. Owncloud doesn't support skipping minor versions @@ -149,7 +200,7 @@ if [ ! -d /usr/local/lib/owncloud/ ] \ array('{127.0.0.1:993/imap/ssl/novalidate-cert}') ) ), - 'memcache.local' => '\OC\Memcache\APC', + 'memcache.local' => '\OC\Memcache\APCu', 'mail_smtpmode' => 'sendmail', 'mail_smtpsecure' => '', 'mail_smtpauthtype' => 'LOGIN', @@ -251,7 +308,7 @@ EOF # Execute Nextcloud's setup step, which creates the Nextcloud sqlite database. # It also wipes it if it exists. And it updates config.php with database # settings and deletes the autoconfig.php file. - (cd /usr/local/lib/owncloud; sudo -u www-data php /usr/local/lib/owncloud/index.php;) + (cd /usr/local/lib/owncloud; sudo -u www-data php7.0 /usr/local/lib/owncloud/index.php;) fi # Update config.php. @@ -271,7 +328,7 @@ include("$STORAGE_ROOT/owncloud/config.php"); \$CONFIG['trusted_domains'] = array('$PRIMARY_HOSTNAME'); -\$CONFIG['memcache.local'] = '\OC\Memcache\APC'; +\$CONFIG['memcache.local'] = '\OC\Memcache\APCu'; \$CONFIG['overwrite.cli.url'] = '/cloud'; \$CONFIG['mail_from_address'] = 'administrator'; # just the local part, matches our master administrator address @@ -289,20 +346,20 @@ chown www-data.www-data $STORAGE_ROOT/owncloud/config.php # The firstrunwizard gave Josh all sorts of problems, so disabling that. # user_external is what allows Nextcloud to use IMAP for login. The contacts # and calendar apps are the extensions we really care about here. -hide_output sudo -u www-data php /usr/local/lib/owncloud/console.php app:disable firstrunwizard -hide_output sudo -u www-data php /usr/local/lib/owncloud/console.php app:enable user_external -hide_output sudo -u www-data php /usr/local/lib/owncloud/console.php app:enable contacts -hide_output sudo -u www-data php /usr/local/lib/owncloud/console.php app:enable calendar +hide_output sudo -u www-data php7.0 /usr/local/lib/owncloud/console.php app:disable firstrunwizard +hide_output sudo -u www-data php7.0 /usr/local/lib/owncloud/console.php app:enable user_external +hide_output sudo -u www-data php7.0 /usr/local/lib/owncloud/console.php app:enable contacts +hide_output sudo -u www-data php7.0 /usr/local/lib/owncloud/console.php app:enable calendar # When upgrading, run the upgrade script again now that apps are enabled. It seems like # the first upgrade at the top won't work because apps may be disabled during upgrade? # Check for success (0=ok, 3=no upgrade needed). -sudo -u www-data php /usr/local/lib/owncloud/occ upgrade +sudo -u www-data php7.0 /usr/local/lib/owncloud/occ upgrade if [ \( $? -ne 0 \) -a \( $? -ne 3 \) ]; then exit 1; fi # 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 ';' \ +tools/editconf.py /etc/php/7.0/fpm/php.ini -c ';' \ upload_max_filesize=16G \ post_max_size=16G \ output_buffering=16384 \ @@ -311,8 +368,8 @@ tools/editconf.py /etc/php5/fpm/php.ini -c ';' \ short_open_tag=On # If apc is explicitly disabled we need to enable it -if grep -q apc.enabled=0 /etc/php5/mods-available/apcu.ini; then - tools/editconf.py /etc/php5/mods-available/apcu.ini -c ';' \ +if grep -q apc.enabled=0 /etc/php/7.0/mods-available/apcu.ini; then + tools/editconf.py /etc/php/7.0/mods-available/apcu.ini -c ';' \ apc.enabled=1 fi @@ -320,7 +377,7 @@ fi 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 +sudo -u www-data php7.0 -f /usr/local/lib/owncloud/cron.php EOF chmod +x /etc/cron.hourly/mailinabox-owncloud @@ -334,5 +391,5 @@ chmod +x /etc/cron.hourly/mailinabox-owncloud # ``` # Enable PHP modules and restart PHP. -php5enmod imap -restart_service php5-fpm +#php5enmod imap +restart_service php7.0-fpm diff --git a/tools/owncloud-restore.sh b/tools/owncloud-restore.sh index 4d647b10..1b006ca1 100755 --- a/tools/owncloud-restore.sh +++ b/tools/owncloud-restore.sh @@ -27,6 +27,7 @@ fi echo "Restoring backup from $1" service php5-fpm stop +service php7.0-fpm stop # remove the current ownCloud/Nextcloud installation rm -rf /usr/local/lib/owncloud/ @@ -46,4 +47,5 @@ chown www-data.www-data $STORAGE_ROOT/owncloud/config.php sudo -u www-data php /usr/local/lib/owncloud/occ maintenance:mode --off service php5-fpm start +service php7.0-fpm start echo "Done"