@ -21,8 +21,8 @@ echo "Installing Nextcloud (contacts/calendar)..."
# we automatically install intermediate versions as needed.
# * The hash is the SHA1 hash of the ZIP package, which you can find by just running this script and
# copying it from the error message when it doesn't match what is below.
nextcloud_ver = 20.0.14
nextcloud_hash = 92cac708915f51ee2afc1787fd845476fd090c81
nextcloud_ver = 23.0.8
nextcloud_hash = 9d63416a0697eeecf243d09461f5881f8997f50a
# Nextcloud apps
# --------------
@ -33,21 +33,26 @@ nextcloud_hash=92cac708915f51ee2afc1787fd845476fd090c81
# https://github.com/nextcloud/user_external/blob/master/appinfo/info.xml
# * The hash is the SHA1 hash of the ZIP package, which you can find by just running this script and
# copying it from the error message when it doesn't match what is below.
contacts_ver = 4.0.7
contacts_hash = 45e7cf4bfe99cd8d03625cf9e5a1bb2e90549136
calendar_ver = 3.0.4
calendar_hash = d0284b68135777ec9ca713c307216165b294d0fe
user_external_ver = 1 .0.0
user_external_hash = 3bf2609061d7214e7f0f69dd8883e55c4ec8f50a
contacts_ver = 4.2.0
contacts_hash = 79b506574834db5e1b6ab47aadd4041e12ad9a9c
calendar_ver = 3.5.0
calendar_hash = 941381536287a015081669513f8f79f6f262508a
user_external_ver = 3 .0.0
user_external_hash = 0df781b261f55bbde73d8c92da3f99397000972f
# Clear prior packages and install dependencies from apt.
apt-get purge -qq -y owncloud* # we used to use the package manager
apt_install php php-fpm \
php-cli php-sqlite3 php-gd php-imap php-curl php-pear curl \
php-dev php-gd php-xml php-mbstring php-zip php-apcu php-json \
php-intl php-imagick php-gmp php-bcmath
apt_install curl php${ PHP_VER } php${ PHP_VER } -fpm \
php${ PHP_VER } -cli php${ PHP_VER } -sqlite3 php${ PHP_VER } -gd php${ PHP_VER } -imap php${ PHP_VER } -curl \
php${ PHP_VER } -dev php${ PHP_VER } -gd php${ PHP_VER } -xml php${ PHP_VER } -mbstring php${ PHP_VER } -zip php${ PHP_VER } -apcu \
php${ PHP_VER } -intl php${ PHP_VER } -imagick php${ PHP_VER } -gmp php${ PHP_VER } -bcmath
# Enable APC before Nextcloud tools are run.
tools/editconf.py /etc/php/$PHP_VER /mods-available/apcu.ini -c ';' \
apc.enabled= 1 \
apc.enable_cli= 1
InstallNextcloud( ) {
@ -90,7 +95,7 @@ InstallNextcloud() {
# Starting with Nextcloud 15, the app user_external is no longer included in Nextcloud core,
# we will install from their github repository.
if [ -n " $version_user_external " ] ; then
wget_verify https://github.com/nextcloud/user_external/releases/download/v$version_user_external /user_external-$version_user_external .tar.gz $hash_user_external /tmp/user_external.tgz
wget_verify https://github.com/nextcloud-releases /user_external/releases/download/v$version_user_external /user_external-v $version_user_external .tar.gz $hash_user_external /tmp/user_external.tgz
tar -xf /tmp/user_external.tgz -C /usr/local/lib/owncloud/apps/
rm /tmp/user_external.tgz
fi
@ -112,20 +117,20 @@ InstallNextcloud() {
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 php /usr/local/lib/owncloud/occ upgrade
sudo -u www-data php$PHP_VER /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 php /usr/local/lib/owncloud/occ upgrade
sudo -u www-data php$PHP_VER /usr/local/lib/owncloud/occ upgrade
if [ \( $? -ne 0 \) -a \( $? -ne 3 \) ] ; then exit 1; fi
sudo -u www-data php /usr/local/lib/owncloud/occ maintenance:mode --off
sudo -u www-data php$PHP_VER /usr/local/lib/owncloud/occ maintenance:mode --off
echo "...which seemed to work."
fi
# Add missing indices. NextCloud didn't include this in the normal upgrade because it might take some time.
sudo -u www-data php /usr/local/lib/owncloud/occ db:add-missing-indices
sudo -u www-data php$PHP_VER /usr/local/lib/owncloud/occ db:add-missing-indices
# Run conversion to BigInt identifiers, this process may take some time on large tables.
sudo -u www-data php /usr/local/lib/owncloud/occ db:convert-filecache-bigint --no-interaction
sudo -u www-data php$PHP_VER /usr/local/lib/owncloud/occ db:convert-filecache-bigint --no-interaction
fi
}
@ -137,7 +142,7 @@ InstallNextcloud() {
# If config.php exists, get version number, otherwise CURRENT_NEXTCLOUD_VER is empty.
if [ -f " $STORAGE_ROOT /owncloud/config.php " ] ; then
CURRENT_NEXTCLOUD_VER = $( php -r " include(\" $STORAGE_ROOT /owncloud/config.php\"); echo(\$CONFIG['version']); " )
CURRENT_NEXTCLOUD_VER = $( php$PHP_VER -r " include(\" $STORAGE_ROOT /owncloud/config.php\"); echo(\$CONFIG['version']); " )
else
CURRENT_NEXTCLOUD_VER = ""
fi
@ -146,8 +151,8 @@ fi
# from the version currently installed, do the install/upgrade
if [ ! -d /usr/local/lib/owncloud/ ] || [ [ ! ${ CURRENT_NEXTCLOUD_VER } = ~ ^$nextcloud_ver ] ] ; then
# Stop php-fpm if running. If theyre not running (which happens on a previously failed install), dont bail.
service php7.2 -fpm stop & > /dev/null || /bin/true
# Stop php-fpm if running. If they a re not running (which happens on a previously failed install), dont bail.
service php$PHP_VER -fpm stop & > /dev/null || /bin/true
# Backup the existing ownCloud/Nextcloud.
# Create a backup directory to store the current installation and database to
@ -174,42 +179,21 @@ if [ ! -d /usr/local/lib/owncloud/ ] || [[ ! ${CURRENT_NEXTCLOUD_VER} =~ ^$nextc
elif [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^1[ 012] ] ] ; then
echo "Upgrades from Mail-in-a-Box prior to v0.28 (dated July 30, 2018) with Nextcloud < 13.0.6 (you have ownCloud 10, 11 or 12) are not supported. Upgrade to Mail-in-a-Box version v0.30 first. Setup will continue, but skip the Nextcloud migration."
return 0
elif [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^13 ] ] ; then
# If we are running Nextcloud 13, upgrade to Nextcloud 14
InstallNextcloud 14.0.6 4e43a57340f04c2da306c8eea98e30040399ae5a 3.3.0 e55d0357c6785d3b1f3b5f21780cb6d41d32443a 2.0.3 9d9717b29337613b72c74e9914c69b74b346c466
CURRENT_NEXTCLOUD_VER = "14.0.6"
elif [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^1[ 3456789] ] ] ; then
echo "Upgrades from Mail-in-a-Box prior to v60 with Nextcloud 19 or earlier are not supported. Upgrade to the latest Mail-in-a-Box version supported on your machine first. Setup will continue, but skip the Nextcloud migration."
return 0
fi
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^20 ] ] ; then
InstallNextcloud 21.0.7 f5c7079c5b56ce1e301c6a27c0d975d608bb01c9 4.0.7 45e7cf4bfe99cd8d03625cf9e5a1bb2e90549136 3.0.4 d0284b68135777ec9ca713c307216165b294d0fe
CURRENT_NEXTCLOUD_VER = "21.0.7"
fi
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^14 ] ] ; then
# During the upgrade from Nextcloud 14 to 15, user_external may cause the upgrade to fail.
# We will disable it here before the upgrade and install it again after the upgrade.
hide_output sudo -u www-data php /usr/local/lib/owncloud/console.php app:disable user_external
InstallNextcloud 15.0.8 4129d8d4021c435f2e86876225fb7f15adf764a3 3.3.0 e55d0357c6785d3b1f3b5f21780cb6d41d32443a 2.0.3 a1f3835c752929e3598eb94f22300516867ac6ab 0.7.0 555a94811daaf5bdd336c5e48a78aa8567b86437
CURRENT_NEXTCLOUD_VER = "15.0.8"
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^21 ] ] ; then
InstallNextcloud 22.2.6 9d39741f051a8da42ff7df46ceef2653a1dc70d9 4.1.0 697f6b4a664e928d72414ea2731cb2c9d1dc3077 3.2.2 ce4030ab57f523f33d5396c6a81396d440756f5f 3.0.0 0df781b261f55bbde73d8c92da3f99397000972f
CURRENT_NEXTCLOUD_VER = "22.2.6"
fi
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^15 ] ] ; then
InstallNextcloud 16.0.6 0bb3098455ec89f5af77a652aad553ad40a88819 3.3.0 e55d0357c6785d3b1f3b5f21780cb6d41d32443a 2.0.3 a1f3835c752929e3598eb94f22300516867ac6ab 0.7.0 555a94811daaf5bdd336c5e48a78aa8567b86437
CURRENT_NEXTCLOUD_VER = "16.0.6"
fi
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^16 ] ] ; then
InstallNextcloud 17.0.6 50b98d2c2f18510b9530e558ced9ab51eb4f11b0 3.3.0 e55d0357c6785d3b1f3b5f21780cb6d41d32443a 2.0.3 a1f3835c752929e3598eb94f22300516867ac6ab 0.7.0 555a94811daaf5bdd336c5e48a78aa8567b86437
CURRENT_NEXTCLOUD_VER = "17.0.6"
fi
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^17 ] ] ; then
# Don't exit the install if this column already exists (see #2076)
( echo "ALTER TABLE oc_flow_operations ADD COLUMN entity VARCHAR;" | sqlite3 $STORAGE_ROOT /owncloud/owncloud.db 2>/dev/null) || true
InstallNextcloud 18.0.10 39c0021a8b8477c3f1733fddefacfa5ebf921c68 3.4.1 8f685e7dc99758636d660d595e389c324e51e9d1 2.0.3 a1f3835c752929e3598eb94f22300516867ac6ab 1.0.0 3bf2609061d7214e7f0f69dd8883e55c4ec8f50a
CURRENT_NEXTCLOUD_VER = "18.0.10"
fi
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^18 ] ] ; then
InstallNextcloud 19.0.4 01e98791ba12f4860d3d4047b9803f97a1b55c60 3.4.1 8f685e7dc99758636d660d595e389c324e51e9d1 2.0.3 a1f3835c752929e3598eb94f22300516867ac6ab 1.0.0 3bf2609061d7214e7f0f69dd8883e55c4ec8f50a
CURRENT_NEXTCLOUD_VER = "19.0.4"
fi
fi
InstallNextcloud $nextcloud_ver $nextcloud_hash $contacts_ver $contacts_hash $calendar_ver $calendar_hash $user_external_ver $user_external_hash
# Nextcloud 20 needs to have some optional columns added
sudo -u www-data php /usr/local/lib/owncloud/occ db:add-missing-columns
fi
# ### Configuring Nextcloud
@ -235,10 +219,10 @@ if [ ! -f $STORAGE_ROOT/owncloud/owncloud.db ]; then
'overwrite.cli.url' = > '/cloud' ,
'user_backends' = > array(
array(
'class' = > 'OC_User_ IMAP' ,
'arguments' = > array(
'127.0.0.1' , 143, null
) ,
'class' = > '\OCA\UserExternal\ IMAP' ,
'arguments' = > array(
'127.0.0.1' , 143, null, null, false, false
) ,
) ,
) ,
'memcache.local' = > '\OC\Memcache\APCu' ,
@ -280,7 +264,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 php$PHP_VER /usr/local/lib/owncloud/index.php; )
fi
# Update config.php.
@ -296,10 +280,12 @@ fi
# Use PHP to read the settings file, modify it, and write out the new settings array.
TIMEZONE = $( cat /etc/timezone)
CONFIG_TEMP = $( /bin/mktemp)
php <<EOF > $CONFIG_TE MP && mv $CONFIG_TEMP $STORAGE_ROOT /owncloud/config.php;
php$PHP_VER <<EOF > $CONFIG_TE MP && mv $CONFIG_TEMP $STORAGE_ROOT /owncloud/config.php;
<?php
include( " $STORAGE_ROOT /owncloud/config.php " ) ;
\$ CONFIG[ 'config_is_read_only' ] = true;
\$ CONFIG[ 'trusted_domains' ] = array( '$PRIMARY_HOSTNAME' ) ;
\$ CONFIG[ 'memcache.local' ] = '\OC\Memcache\APCu' ;
@ -311,7 +297,14 @@ include("$STORAGE_ROOT/owncloud/config.php");
\$ CONFIG[ 'mail_domain' ] = '$PRIMARY_HOSTNAME' ;
\$ CONFIG[ 'user_backends' ] = array( array( 'class' = > 'OC_User_IMAP' ,'arguments' = > array( '127.0.0.1' , 143, null) ,) ,) ;
\$ CONFIG[ 'user_backends' ] = array(
array(
'class' = > '\OCA\UserExternal\IMAP' ,
'arguments' = > array(
'127.0.0.1' , 143, null, null, false, false
) ,
) ,
) ;
echo "<?php\n\\\$CONFIG = " ;
var_export( \$ CONFIG) ;
@ -324,25 +317,25 @@ 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 php$PHP_VER /usr/local/lib/owncloud/console.php app:disable firstrunwizard
hide_output sudo -u www-data php$PHP_VER /usr/local/lib/owncloud/console.php app:enable user_external
hide_output sudo -u www-data php$PHP_VER /usr/local/lib/owncloud/console.php app:enable contacts
hide_output sudo -u www-data php$PHP_VER /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 php$PHP_VER /usr/local/lib/owncloud/occ upgrade
if [ \( $? -ne 0 \) -a \( $? -ne 3 \) ] ; then exit 1; fi
# Disable default apps that we don't support
sudo -u www-data \
php /usr/local/lib/owncloud/occ app:disable photos dashboard activity \
php$PHP_VER /usr/local/lib/owncloud/occ app:disable photos dashboard activity \
| ( grep -v "No such app enabled" || /bin/true)
# 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/php/7.2 /fpm/php.ini -c ';' \
tools/editconf.py /etc/php/$PHP_VER /fpm/php.ini -c ';' \
upload_max_filesize = 16G \
post_max_size = 16G \
output_buffering = 16384 \
@ -351,7 +344,7 @@ tools/editconf.py /etc/php/7.2/fpm/php.ini -c ';' \
short_open_tag = On
# Set Nextcloud recommended opcache settings
tools/editconf.py /etc/php/7.2 /cli/conf.d/10-opcache.ini -c ';' \
tools/editconf.py /etc/php/$PHP_VER /cli/conf.d/10-opcache.ini -c ';' \
opcache.enable= 1 \
opcache.enable_cli= 1 \
opcache.interned_strings_buffer= 8 \
@ -360,23 +353,20 @@ tools/editconf.py /etc/php/7.2/cli/conf.d/10-opcache.ini -c ';' \
opcache.save_comments= 1 \
opcache.revalidate_freq= 1
# If apc is explicitly disabled we need to enable it
if grep -q apc.enabled= 0 /etc/php/7.2/mods-available/apcu.ini; then
tools/editconf.py /etc/php/7.2/mods-available/apcu.ini -c ';' \
apc.enabled= 1
fi
# Migrate users_external data from <0.6.0 to version 3.0.0 (see https://github.com/nextcloud/user_external).
# This version was probably in use in Mail-in-a-Box v0.41 (February 26, 2019) and earlier.
# We moved to v0.6.3 in 193763f8. Ignore errors - maybe there are duplicated users with the
# correct backend already.
sqlite3 $STORAGE_ROOT /owncloud/owncloud.db "UPDATE oc_users_external SET backend='127.0.0.1';" || /bin/true
# Set up a cron job for Nextcloud.
cat > /etc/cron.d/mailinabox-nextcloud << EOF;
#!/bin/bash
# Mail-in-a-Box
*/5 * * * * root sudo -u www-data php -f /usr/local/lib/owncloud/cron.php
*/5 * * * * root sudo -u www-data php$PHP_VER -f /usr/local/lib/owncloud/cron.php
EOF
chmod +x /etc/cron.d/mailinabox-nextcloud
# Remove previous hourly cronjob
rm -f /etc/cron.hourly/mailinabox-owncloud
# There's nothing much of interest that a user could do as an admin for Nextcloud,
# and there's a lot they could mess up, so we don't make any users admins of Nextcloud.
# But if we wanted to, we would do this:
@ -387,4 +377,4 @@ rm -f /etc/cron.hourly/mailinabox-owncloud
# ```
# Enable PHP modules and restart PHP.
restart_service php7.2 -fpm
restart_service php$PHP_VER -fpm