2014-08-15 22:29:05 +00:00
#!/bin/bash
2017-04-02 09:19:21 +00:00
# Nextcloud
2014-08-11 14:24:29 +00:00
##########################
source setup/functions.sh # load our functions
source /etc/mailinabox.conf # load global vars
2017-04-02 09:19:21 +00:00
# ### Installing Nextcloud
2014-09-21 20:05:11 +00:00
2017-03-25 12:20:21 +00:00
echo "Installing Nextcloud (contacts/calendar)..."
2015-08-19 19:58:35 +00:00
2022-01-08 13:16:02 +00:00
# Nextcloud core and app (plugin) versions to install.
# With each version we store a hash to ensure we install what we expect.
# Nextcloud core
# --------------
# * See https://nextcloud.com/changelog for the latest version.
# * Check https://docs.nextcloud.com/server/latest/admin_manual/installation/system_requirements.html
# for whether it supports the version of PHP available on this machine.
# * Since Nextcloud only supports upgrades from consecutive major versions,
# 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.
2024-07-08 12:21:12 +00:00
nextcloud_ver = 26.0.13
nextcloud_hash = d5c10b650e5396d5045131c6d22c02a90572527c
2022-01-08 13:16:02 +00:00
# Nextcloud apps
# --------------
2024-03-10 11:22:51 +00:00
# * Find the most recent tag that is compatible with the Nextcloud version above by:
# https://github.com/nextcloud-releases/contacts/tags
# https://github.com/nextcloud-releases/calendar/tags
# https://github.com/nextcloud/user_external/tags
#
# * For these three packages, contact, calendar and user_external, 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:
# Always ensure the versions are supported, see https://apps.nextcloud.com/apps/contacts
contacts_ver = 5.5.3
contacts_hash = 799550f38e46764d90fa32ca1a6535dccd8316e5
2023-06-16 15:49:55 +00:00
# Always ensure the versions are supported, see https://apps.nextcloud.com/apps/calendar
2024-07-08 12:21:12 +00:00
calendar_ver = 4.7.6
calendar_hash = a995bca4effeecb2cab25f3bbeac9bfe05fee766
2023-06-16 15:49:55 +00:00
2024-03-10 11:22:51 +00:00
# Always ensure the versions are supported, see https://apps.nextcloud.com/apps/user_external
2024-07-08 12:21:12 +00:00
user_external_ver = 3.3.0
user_external_hash = 280d24eb2a6cb56b4590af8847f925c28d8d853e
2022-01-08 13:16:02 +00:00
2024-03-10 11:22:51 +00:00
# Developer advice (test plan)
# ----------------------------
# When upgrading above versions, how to test?
#
# 1. Enter your server instance (or on the Vagrant image)
# 1. Git clone <your fork>
# 2. Git checkout <your fork>
# 3. Run `sudo ./setup/nextcloud.sh`
# 4. Ensure the installation completes. If any hashes mismatch, correct them.
# 5. Enter nextcloud web, run following tests:
# 5.1 You still can create, edit and delete contacts
# 5.2 You still can create, edit and delete calendar events
# 5.3 You still can create, edit and delete users
# 5.4 Go to Administration > Logs and ensure no new errors are shown
2022-01-08 13:16:02 +00:00
2024-03-10 11:22:51 +00:00
# Clear prior packages and install dependencies from apt.
2018-07-07 18:41:41 +00:00
apt-get purge -qq -y owncloud* # we used to use the package manager
2014-08-11 14:24:29 +00:00
2023-12-21 14:58:34 +00:00
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
2015-06-12 12:53:02 +00:00
2022-01-09 00:29:25 +00:00
# Enable APC before Nextcloud tools are run.
2023-12-21 14:58:34 +00:00
tools/editconf.py /etc/php/" $PHP_VER " /mods-available/apcu.ini -c ';' \
2022-01-09 00:29:25 +00:00
apc.enabled= 1 \
apc.enable_cli= 1
2017-07-10 20:56:59 +00:00
InstallNextcloud( ) {
2017-03-26 13:20:27 +00:00
version = $1
hash = $2
2020-10-31 13:58:26 +00:00
version_contacts = $3
hash_contacts = $4
version_calendar = $5
hash_calendar = $6
2021-02-06 21:49:43 +00:00
version_user_external = ${ 7 :- }
hash_user_external = ${ 8 :- }
2017-03-26 13:20:27 +00:00
2016-10-18 10:04:13 +00:00
echo
2017-07-10 20:56:59 +00:00
echo " Upgrading to Nextcloud version $version "
2016-10-18 10:04:13 +00:00
echo
2014-09-01 08:02:46 +00:00
2024-08-02 06:55:21 +00:00
# set PHP version, set to earlier version if required for upgrade
nc_php_ver = " $PHP_VER "
if [ [ ${ version } = ~ ^2[ 0123] ] ] ; then
nc_php_ver = 8.0
fi
# install earlier PHP version
if [ " $nc_php_ver " != " $PHP_VER " ] ; then
apt_install curl php" ${ nc_php_ver } " php" ${ nc_php_ver } " -fpm \
php" ${ nc_php_ver } " -cli php" ${ nc_php_ver } " -sqlite3 php" ${ nc_php_ver } " -gd php" ${ nc_php_ver } " -imap php" ${ nc_php_ver } " -curl \
php" ${ nc_php_ver } " -dev php" ${ nc_php_ver } " -gd php" ${ nc_php_ver } " -xml php" ${ nc_php_ver } " -mbstring php" ${ nc_php_ver } " -zip php" ${ nc_php_ver } " -apcu \
php" ${ nc_php_ver } " -intl php" ${ nc_php_ver } " -imagick php" ${ nc_php_ver } " -gmp php" ${ nc_php_ver } " -bcmath
tools/editconf.py /etc/php/" $nc_php_ver " /mods-available/apcu.ini -c ';' \
apc.enabled= 1 \
apc.enable_cli= 1
fi
2023-05-13 10:37:24 +00:00
# Download and verify
2023-12-21 14:58:34 +00:00
wget_verify " https://download.nextcloud.com/server/releases/nextcloud- $version .zip " " $hash " /tmp/nextcloud.zip
2019-08-31 12:50:36 +00:00
2017-04-02 09:19:21 +00:00
# Remove the current owncloud/Nextcloud
2016-10-18 10:04:13 +00:00
rm -rf /usr/local/lib/owncloud
2017-04-02 09:19:21 +00:00
# Extract ownCloud/Nextcloud
2017-07-10 20:56:59 +00:00
unzip -q /tmp/nextcloud.zip -d /usr/local/lib
mv /usr/local/lib/nextcloud /usr/local/lib/owncloud
rm -f /tmp/nextcloud.zip
2015-02-12 19:53:17 +00:00
2017-04-02 09:19:21 +00:00
# The two apps we actually want are not in Nextcloud core. Download the releases from
2015-02-12 19:53:17 +00:00
# their github repositories.
mkdir -p /usr/local/lib/owncloud/apps
2017-03-25 12:20:21 +00:00
2023-12-21 14:58:34 +00:00
wget_verify " https://github.com/nextcloud-releases/contacts/archive/refs/tags/v $version_contacts .tar.gz " " $hash_contacts " /tmp/contacts.tgz
2016-10-18 10:04:13 +00:00
tar xf /tmp/contacts.tgz -C /usr/local/lib/owncloud/apps/
rm /tmp/contacts.tgz
2023-12-21 14:58:34 +00:00
wget_verify " https://github.com/nextcloud-releases/calendar/archive/refs/tags/v $version_calendar .tar.gz " " $hash_calendar " /tmp/calendar.tgz
2016-10-18 10:04:13 +00:00
tar xf /tmp/calendar.tgz -C /usr/local/lib/owncloud/apps/
rm /tmp/calendar.tgz
2015-02-12 19:53:17 +00:00
2019-06-16 15:10:53 +00:00
# Starting with Nextcloud 15, the app user_external is no longer included in Nextcloud core,
# we will install from their github repository.
2020-10-31 13:58:26 +00:00
if [ -n " $version_user_external " ] ; then
2023-12-21 14:58:34 +00:00
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
2019-07-12 10:41:16 +00:00
tar -xf /tmp/user_external.tgz -C /usr/local/lib/owncloud/apps/
rm /tmp/user_external.tgz
fi
2019-06-16 15:10:53 +00:00
2015-02-12 19:53:17 +00:00
# Fix weird permissions.
chmod 750 /usr/local/lib/owncloud/{ apps,config}
2015-06-14 15:42:32 +00:00
# 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).
2023-12-21 16:00:26 +00:00
ln -sf " $STORAGE_ROOT /owncloud/config.php " /usr/local/lib/owncloud/config/config.php
2015-02-12 19:53:17 +00:00
# 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.
2024-06-18 12:37:01 +00:00
chown -f -R www-data:www-data " $STORAGE_ROOT /owncloud " /usr/local/lib/owncloud || /bin/true
2015-02-12 19:53:17 +00:00
2015-08-19 19:43:34 +00:00
# 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).
2023-12-21 14:58:34 +00:00
if [ -e " $STORAGE_ROOT /owncloud/owncloud.db " ] ; then
2015-08-23 16:37:25 +00:00
# ownCloud 8.1.1 broke upgrades. It may fail on the first attempt, but
# that can be OK.
2024-08-02 06:55:21 +00:00
sudo -u www-data php" $nc_php_ver " /usr/local/lib/owncloud/occ upgrade
2023-12-21 16:05:18 +00:00
E = $?
if [ $E -ne 0 ] && [ $E -ne 3 ] ; then
2015-08-23 16:37:25 +00:00
echo "Trying ownCloud upgrade again to work around ownCloud upgrade bug..."
2024-08-02 06:55:21 +00:00
sudo -u www-data php" $nc_php_ver " /usr/local/lib/owncloud/occ upgrade
2023-12-21 16:05:18 +00:00
E = $?
if [ $E -ne 0 ] && [ $E -ne 3 ] ; then exit 1; fi
2024-08-02 06:55:21 +00:00
sudo -u www-data php" $nc_php_ver " /usr/local/lib/owncloud/occ maintenance:mode --off
2015-08-23 16:37:25 +00:00
echo "...which seemed to work."
fi
2019-02-09 02:24:03 +00:00
# Add missing indices. NextCloud didn't include this in the normal upgrade because it might take some time.
2024-08-02 06:55:21 +00:00
sudo -u www-data php" $nc_php_ver " /usr/local/lib/owncloud/occ db:add-missing-indices
sudo -u www-data php" $nc_php_ver " /usr/local/lib/owncloud/occ db:add-missing-primary-keys
2019-06-16 15:10:53 +00:00
# Run conversion to BigInt identifiers, this process may take some time on large tables.
2024-08-02 06:55:21 +00:00
sudo -u www-data php" $nc_php_ver " /usr/local/lib/owncloud/occ db:convert-filecache-bigint --no-interaction
2015-08-19 19:43:34 +00:00
fi
2016-10-18 10:04:13 +00:00
}
2019-08-31 12:50:36 +00:00
# Current Nextcloud Version, #1623
# Checking /usr/local/lib/owncloud/version.php shows version of the Nextcloud application, not the DB
2024-03-10 11:22:51 +00:00
# $STORAGE_ROOT/owncloud is kept together even during a backup. It is better to rely on config.php than
2019-08-31 12:50:36 +00:00
# version.php since the restore procedure can leave the system in a state where you have a newer Nextcloud
# application version than the database.
# If config.php exists, get version number, otherwise CURRENT_NEXTCLOUD_VER is empty.
if [ -f " $STORAGE_ROOT /owncloud/config.php " ] ; then
2023-12-21 14:58:34 +00:00
CURRENT_NEXTCLOUD_VER = $( php" $PHP_VER " -r " include(\" $STORAGE_ROOT /owncloud/config.php\"); echo(\$CONFIG['version']); " )
2019-08-31 12:50:36 +00:00
else
CURRENT_NEXTCLOUD_VER = ""
fi
# If the Nextcloud directory is missing (never been installed before, or the nextcloud version to be installed is different
# from the version currently installed, do the install/upgrade
if [ ! -d /usr/local/lib/owncloud/ ] || [ [ ! ${ CURRENT_NEXTCLOUD_VER } = ~ ^$nextcloud_ver ] ] ; then
2016-10-18 10:04:13 +00:00
2022-06-19 11:12:02 +00:00
# Stop php-fpm if running. If they are not running (which happens on a previously failed install), dont bail.
2023-12-21 14:58:34 +00:00
service php" $PHP_VER " -fpm stop & > /dev/null || /bin/true
2016-10-18 10:04:13 +00:00
2017-04-02 09:19:21 +00:00
# Backup the existing ownCloud/Nextcloud.
2016-10-18 10:04:13 +00:00
# Create a backup directory to store the current installation and database to
2021-05-03 23:28:23 +00:00
BACKUP_DIRECTORY = $STORAGE_ROOT /owncloud-backup/$( date +"%Y-%m-%d-%T" )
2016-10-18 10:04:13 +00:00
mkdir -p " $BACKUP_DIRECTORY "
if [ -d /usr/local/lib/owncloud/ ] ; then
2018-07-07 18:41:41 +00:00
echo " Upgrading Nextcloud --- backing up existing installation, configuration, and database to directory to $BACKUP_DIRECTORY ... "
2016-10-18 10:04:13 +00:00
cp -r /usr/local/lib/owncloud " $BACKUP_DIRECTORY /owncloud-install "
fi
2023-12-21 14:58:34 +00:00
if [ -e " $STORAGE_ROOT /owncloud/owncloud.db " ] ; then
cp " $STORAGE_ROOT /owncloud/owncloud.db " " $BACKUP_DIRECTORY "
2018-07-07 18:41:41 +00:00
fi
2023-12-21 14:58:34 +00:00
if [ -e " $STORAGE_ROOT /owncloud/config.php " ] ; then
cp " $STORAGE_ROOT /owncloud/config.php " " $BACKUP_DIRECTORY "
2018-07-07 18:41:41 +00:00
fi
2016-10-18 10:04:13 +00:00
2018-07-07 18:41:41 +00:00
# If ownCloud or Nextcloud was previously installed....
2023-12-21 16:06:26 +00:00
if [ -n " ${ CURRENT_NEXTCLOUD_VER } " ] ; then
2018-07-07 18:41:41 +00:00
# Database migrations from ownCloud are no longer possible because ownCloud cannot be run under
# PHP 7.
2023-06-16 15:49:55 +00:00
2023-12-21 14:58:34 +00:00
if [ -e " $STORAGE_ROOT /owncloud/config.php " ] ; then
2023-06-16 15:49:55 +00:00
# Remove the read-onlyness of the config, which is needed for migrations, especially for v24
2023-12-21 14:58:34 +00:00
sed -i -e '/config_is_read_only/d' " $STORAGE_ROOT /owncloud/config.php "
2023-06-16 15:49:55 +00:00
fi
2019-08-31 12:50:36 +00:00
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^[ 89] ] ] ; then
2020-09-21 19:45:58 +00:00
echo "Upgrades from Mail-in-a-Box prior to v0.28 (dated July 30, 2018) with Nextcloud < 13.0.6 (you have ownCloud 8 or 9) are not supported. Upgrade to Mail-in-a-Box version v0.30 first. Setup will continue, but skip the Nextcloud migration."
return 0
2019-08-31 12:50:36 +00:00
elif [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^1[ 012] ] ] ; then
2020-09-21 19:45:58 +00:00
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
2022-01-09 00:29:25 +00:00
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
2022-09-03 11:50:36 +00:00
fi
2023-06-16 15:49:55 +00:00
2024-03-10 11:22:51 +00:00
# Hint: whenever you bump, remember this:
# - Run a server with the previous version
# - On a new if-else block, copy the versions/hashes from the previous version
# - Run sudo ./setup/start.sh on the new machine. Upon completion, test its basic functionalities.
2022-09-03 11:50:36 +00:00
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^20 ] ] ; then
InstallNextcloud 21.0.7 f5c7079c5b56ce1e301c6a27c0d975d608bb01c9 4.0.7 45e7cf4bfe99cd8d03625cf9e5a1bb2e90549136 3.0.4 d0284b68135777ec9ca713c307216165b294d0fe
2022-01-09 00:29:25 +00:00
CURRENT_NEXTCLOUD_VER = "21.0.7"
2022-09-03 11:50:36 +00:00
fi
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^21 ] ] ; then
InstallNextcloud 22.2.6 9d39741f051a8da42ff7df46ceef2653a1dc70d9 4.1.0 697f6b4a664e928d72414ea2731cb2c9d1dc3077 3.2.2 ce4030ab57f523f33d5396c6a81396d440756f5f 3.0.0 0df781b261f55bbde73d8c92da3f99397000972f
2022-01-09 00:29:25 +00:00
CURRENT_NEXTCLOUD_VER = "22.2.6"
2019-06-16 15:10:53 +00:00
fi
2023-06-16 15:49:55 +00:00
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^22 ] ] ; then
2023-09-02 11:07:12 +00:00
InstallNextcloud 23.0.12 d138641b8e7aabebe69bb3ec7c79a714d122f729 4.1.0 697f6b4a664e928d72414ea2731cb2c9d1dc3077 3.2.2 ce4030ab57f523f33d5396c6a81396d440756f5f 3.0.0 0df781b261f55bbde73d8c92da3f99397000972f
2023-06-16 15:49:55 +00:00
CURRENT_NEXTCLOUD_VER = "23.0.12"
fi
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^23 ] ] ; then
InstallNextcloud 24.0.12 7aa5d61632c1ccf4ca3ff00fb6b295d318c05599 4.1.0 697f6b4a664e928d72414ea2731cb2c9d1dc3077 3.2.2 ce4030ab57f523f33d5396c6a81396d440756f5f 3.0.0 0df781b261f55bbde73d8c92da3f99397000972f
CURRENT_NEXTCLOUD_VER = "24.0.12"
fi
2024-03-10 11:22:51 +00:00
if [ [ ${ CURRENT_NEXTCLOUD_VER } = ~ ^24 ] ] ; then
InstallNextcloud 25.0.7 a5a565c916355005c7b408dd41a1e53505e1a080 5.3.0 4b0a6666374e3b55cfd2ae9b72e1d458b87d4c8c 4.4.2 21a42e15806adc9b2618760ef94f1797ef399e2f 3.2.0 a494073dcdecbbbc79a9c77f72524ac9994d2eec
CURRENT_NEXTCLOUD_VER = "25.0.7"
fi
2016-10-18 10:04:13 +00:00
fi
2020-10-31 13:58:26 +00:00
InstallNextcloud $nextcloud_ver $nextcloud_hash $contacts_ver $contacts_hash $calendar_ver $calendar_hash $user_external_ver $user_external_hash
2014-08-11 14:24:29 +00:00
fi
2017-04-02 09:19:21 +00:00
# ### Configuring Nextcloud
2014-09-21 20:05:11 +00:00
2017-04-02 09:19:21 +00:00
# Setup Nextcloud if the Nextcloud database does not yet exist. Running setup when
2014-08-16 12:38:03 +00:00
# the database does exist wipes the database and user data.
2023-12-21 14:58:34 +00:00
if [ ! -f " $STORAGE_ROOT /owncloud/owncloud.db " ] ; then
2015-06-12 12:53:02 +00:00
# Create user data directory
2023-12-21 14:58:34 +00:00
mkdir -p " $STORAGE_ROOT /owncloud "
2015-06-12 12:53:02 +00:00
2015-08-30 21:14:00 +00:00
# Create an initial configuration file.
2023-12-21 14:58:34 +00:00
instanceid = oc$( echo " $PRIMARY_HOSTNAME " | sha1sum | fold -w 10 | head -n 1)
cat > " $STORAGE_ROOT /owncloud/config.php " <<EOF;
2014-08-11 15:53:01 +00:00
<?php
2014-08-12 10:01:18 +00:00
\$ CONFIG = array (
2014-08-11 23:15:17 +00:00
'datadirectory' = > '$STORAGE_ROOT/owncloud' ,
2014-08-12 13:25:38 +00:00
'instanceid' = > '$instanceid' ,
2014-08-15 23:07:20 +00:00
2017-04-02 09:19:21 +00:00
'forcessl' = > true, # if unset/false, Nextcloud sends a HSTS=0 header, which conflicts with nginx config
2014-08-12 13:25:38 +00:00
'overwritewebroot' = > '/cloud' ,
2015-08-16 23:47:51 +00:00
'overwrite.cli.url' = > '/cloud' ,
2014-08-12 10:33:42 +00:00
'user_backends' = > array(
2019-06-16 15:10:53 +00:00
array(
2022-04-27 22:22:55 +00:00
'class' = > '\OCA\UserExternal\IMAP' ,
'arguments' = > array(
'127.0.0.1' , 143, null, null, false, false
) ,
2019-06-16 15:10:53 +00:00
) ,
2014-08-11 23:15:17 +00:00
) ,
2017-07-10 20:56:59 +00:00
'memcache.local' = > '\OC\Memcache\APCu' ,
2014-08-11 23:15:17 +00:00
) ;
2014-08-11 21:01:18 +00:00
?>
2014-08-11 15:53:01 +00:00
EOF
2014-08-12 08:10:53 +00:00
2014-08-16 12:38:03 +00:00
# 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.
2015-11-17 22:13:49 +00:00
adminpassword = $( dd if = /dev/urandom bs = 1 count = 40 2>/dev/null | sha1sum | fold -w 30 | head -n 1)
2014-09-21 20:05:11 +00:00
cat > /usr/local/lib/owncloud/config/autoconfig.php <<EOF;
2014-08-15 23:07:20 +00:00
<?php
\$ AUTOCONFIG = array (
# storage/database
'directory' = > '$STORAGE_ROOT/owncloud' ,
'dbtype' = > 'sqlite3' ,
# create an administrator account with a random password so that
2017-04-02 09:19:21 +00:00
# the user does not have to enter anything on first load of Nextcloud
2014-08-15 23:07:20 +00:00
'adminlogin' = > 'root' ,
'adminpass' = > '$adminpassword' ,
) ;
?>
EOF
2015-06-12 12:53:02 +00:00
# Set permissions
2023-12-21 14:58:34 +00:00
chown -R www-data:www-data " $STORAGE_ROOT /owncloud " /usr/local/lib/owncloud
2014-08-11 14:24:29 +00:00
2017-04-02 09:19:21 +00:00
# Execute Nextcloud's setup step, which creates the Nextcloud sqlite database.
2015-06-14 15:42:32 +00:00
# It also wipes it if it exists. And it updates config.php with database
# settings and deletes the autoconfig.php file.
2023-12-21 15:02:42 +00:00
( cd /usr/local/lib/owncloud || exit; sudo -u www-data php" $PHP_VER " /usr/local/lib/owncloud/index.php; )
2014-08-16 12:38:03 +00:00
fi
2014-08-15 23:07:20 +00:00
2015-08-30 21:14:00 +00:00
# Update config.php.
# * trusted_domains is reset to localhost by autoconfig starting with ownCloud 8.1.1,
# so set it here. It also can change if the box's PRIMARY_HOSTNAME changes, so
# this will make sure it has the right value.
# * Some settings weren't included in previous versions of Mail-in-a-Box.
2016-04-13 21:52:13 +00:00
# * We need to set the timezone to the system timezone to allow fail2ban to ban
# users within the proper timeframe
2016-06-27 03:19:12 +00:00
# * We need to set the logdateformat to something that will work correctly with fail2ban
2020-10-31 13:58:26 +00:00
# * mail_domain' needs to be set every time we run the setup. Making sure we are setting
2017-05-06 12:18:50 +00:00
# the correct domain name if the domain is being change from the previous setup.
2015-08-30 21:14:00 +00:00
# Use PHP to read the settings file, modify it, and write out the new settings array.
2016-04-13 21:52:13 +00:00
TIMEZONE = $( cat /etc/timezone)
2015-08-16 23:46:23 +00:00
CONFIG_TEMP = $( /bin/mktemp)
2023-12-21 14:58:34 +00:00
php" $PHP_VER " <<EOF > "$CONFIG_TE MP" && mv " $CONFIG_TEMP " " $STORAGE_ROOT /owncloud/config.php" ;
2015-08-16 23:46:23 +00:00
<?php
include( " $STORAGE_ROOT /owncloud/config.php " ) ;
2015-08-30 21:14:00 +00:00
2023-06-16 15:49:55 +00:00
\$ CONFIG[ 'config_is_read_only' ] = false;
2022-01-09 00:29:25 +00:00
2015-08-30 21:14:00 +00:00
\$ CONFIG[ 'trusted_domains' ] = array( '$PRIMARY_HOSTNAME' ) ;
2017-07-10 20:56:59 +00:00
\$ CONFIG[ 'memcache.local' ] = '\OC\Memcache\APCu' ;
2023-06-16 15:49:55 +00:00
\$ CONFIG[ 'overwrite.cli.url' ] = 'https://${PRIMARY_HOSTNAME}/cloud' ;
2015-08-30 21:14:00 +00:00
2016-04-13 21:52:13 +00:00
\$ CONFIG[ 'logtimezone' ] = '$TIMEZONE' ;
2016-06-26 12:17:12 +00:00
\$ CONFIG[ 'logdateformat' ] = 'Y-m-d H:i:s' ;
2016-04-13 21:52:13 +00:00
2022-04-27 22:22:55 +00:00
\$ CONFIG[ 'user_backends' ] = array(
array(
'class' = > '\OCA\UserExternal\IMAP' ,
'arguments' = > array(
'127.0.0.1' , 143, null, null, false, false
) ,
) ,
) ;
2019-06-16 15:10:53 +00:00
2024-05-15 16:36:51 +00:00
\$ CONFIG[ 'mail_domain' ] = '$PRIMARY_HOSTNAME' ;
\$ CONFIG[ 'mail_from_address' ] = 'administrator' ; # just the local part, matches the required administrator alias on mail_domain/$PRIMARY_HOSTNAME
\$ CONFIG[ 'mail_smtpmode' ] = 'sendmail' ;
\$ CONFIG[ 'mail_smtpauth' ] = true; # if smtpmode is smtp
\$ CONFIG[ 'mail_smtphost' ] = '127.0.0.1' ; # if smtpmode is smtp
\$ CONFIG[ 'mail_smtpport' ] = '587' ; # if smtpmode is smtp
\$ CONFIG[ 'mail_smtpsecure' ] = '' ; # if smtpmode is smtp, must be empty string
\$ CONFIG[ 'mail_smtpname' ] = '' ; # if smtpmode is smtp, set this to a mail user
\$ CONFIG[ 'mail_smtppassword' ] = '' ; # if smtpmode is smtp, set this to the user's password
2015-08-16 23:46:23 +00:00
echo "<?php\n\\\$CONFIG = " ;
var_export( \$ CONFIG) ;
echo ";" ;
?>
EOF
2023-12-21 14:58:34 +00:00
chown www-data:www-data " $STORAGE_ROOT /owncloud/config.php "
2015-08-16 23:46:23 +00:00
2017-04-02 09:19:21 +00:00
# Enable/disable apps. Note that this must be done after the Nextcloud setup.
2014-08-15 23:07:20 +00:00
# The firstrunwizard gave Josh all sorts of problems, so disabling that.
2017-04-02 09:19:21 +00:00
# user_external is what allows Nextcloud to use IMAP for login. The contacts
2015-02-12 19:53:17 +00:00
# and calendar apps are the extensions we really care about here.
2023-12-21 14:58:34 +00:00
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
2014-08-15 23:07:20 +00:00
2015-07-19 13:05:04 +00:00
# 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).
2023-12-21 14:58:34 +00:00
sudo -u www-data php" $PHP_VER " /usr/local/lib/owncloud/occ upgrade
2023-12-21 16:05:18 +00:00
E = $?
if [ $E -ne 0 ] && [ $E -ne 3 ] ; then exit 1; fi
2015-07-17 11:29:28 +00:00
2020-11-15 22:17:36 +00:00
# Disable default apps that we don't support
2021-05-03 23:41:00 +00:00
sudo -u www-data \
2023-12-21 14:58:34 +00:00
php" $PHP_VER " /usr/local/lib/owncloud/occ app:disable photos dashboard activity \
2021-05-08 13:01:40 +00:00
| ( grep -v "No such app enabled" || /bin/true)
2020-11-15 22:17:36 +00:00
2014-08-12 12:00:28 +00:00
# Set PHP FPM values to support large file uploads
2014-08-15 22:29:05 +00:00
# (semicolon is the comment character in this file, hashes produce deprecation warnings)
2023-12-21 14:58:34 +00:00
tools/editconf.py /etc/php/" $PHP_VER " /fpm/php.ini -c ';' \
2014-08-12 12:00:28 +00:00
upload_max_filesize = 16G \
post_max_size = 16G \
output_buffering = 16384 \
2014-08-13 05:30:32 +00:00
memory_limit = 512M \
max_execution_time = 600 \
short_open_tag = On
2014-08-12 12:00:28 +00:00
2017-07-10 20:56:59 +00:00
# Set Nextcloud recommended opcache settings
2023-12-21 14:58:34 +00:00
tools/editconf.py /etc/php/" $PHP_VER " /cli/conf.d/10-opcache.ini -c ';' \
2017-07-10 20:56:59 +00:00
opcache.enable= 1 \
opcache.enable_cli= 1 \
opcache.interned_strings_buffer= 8 \
opcache.max_accelerated_files= 10000 \
opcache.memory_consumption= 128 \
opcache.save_comments= 1 \
opcache.revalidate_freq= 1
2023-06-16 15:49:55 +00:00
# Migrate users_external data from <0.6.0 to version 3.0.0
# (see https://github.com/nextcloud/user_external).
2022-04-27 22:22:55 +00:00
# This version was probably in use in Mail-in-a-Box v0.41 (February 26, 2019) and earlier.
2022-09-03 11:50:36 +00:00
# We moved to v0.6.3 in 193763f8. Ignore errors - maybe there are duplicated users with the
# correct backend already.
2023-12-21 14:58:34 +00:00
sqlite3 " $STORAGE_ROOT /owncloud/owncloud.db " "UPDATE oc_users_external SET backend='127.0.0.1';" || /bin/true
2022-04-27 22:22:55 +00:00
2023-06-16 15:49:55 +00:00
# Set up a general cron job for Nextcloud.
# Also add another job for Calendar updates, per advice in the Nextcloud docs
# https://docs.nextcloud.com/server/24/admin_manual/groupware/calendar.html#background-jobs
2019-11-23 12:51:22 +00:00
cat > /etc/cron.d/mailinabox-nextcloud << EOF;
2014-08-16 13:00:36 +00:00
#!/bin/bash
# Mail-in-a-Box
2022-06-19 11:12:02 +00:00
*/5 * * * * root sudo -u www-data php$PHP_VER -f /usr/local/lib/owncloud/cron.php
2023-06-16 15:49:55 +00:00
*/5 * * * * root sudo -u www-data php$PHP_VER -f /usr/local/lib/owncloud/occ dav:send-event-reminders
2014-08-16 13:00:36 +00:00
EOF
2019-11-23 12:51:22 +00:00
chmod +x /etc/cron.d/mailinabox-nextcloud
2023-06-16 15:49:55 +00:00
# We also need to change the sending mode from background-job to occ.
# Or else the reminders will just be sent as soon as possible when the background jobs run.
2023-12-21 14:58:34 +00:00
hide_output sudo -u www-data php" $PHP_VER " -f /usr/local/lib/owncloud/occ config:app:set dav sendEventRemindersMode --value occ
2023-06-16 15:49:55 +00:00
# Now set the config to read-only.
# Do this only at the very bottom when no further occ commands are needed.
2023-12-21 14:58:34 +00:00
sed -i'' "s/'config_is_read_only'\s*=>\s*false/'config_is_read_only' => true/" " $STORAGE_ROOT /owncloud/config.php "
2023-06-16 15:49:55 +00:00
# Rotate the nextcloud.log file
cat > /etc/logrotate.d/nextcloud <<EOF
# Nextcloud logs
$STORAGE_ROOT /owncloud/nextcloud.log {
size 10M
create 640 www-data www-data
rotate 30
copytruncate
missingok
compress
}
EOF
2017-04-02 09:19:21 +00:00
# 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.
2014-09-21 20:05:11 +00:00
# But if we wanted to, we would do this:
# ```
2020-10-29 19:10:11 +00:00
# for user in $(management/cli.py user admins); do
2014-09-21 20:05:11 +00:00
# sqlite3 $STORAGE_ROOT/owncloud/owncloud.db "INSERT OR IGNORE INTO oc_group_user VALUES ('admin', '$user')"
# done
# ```
2014-08-16 12:59:29 +00:00
2014-09-21 20:05:11 +00:00
# Enable PHP modules and restart PHP.
2023-12-21 14:58:34 +00:00
restart_service php" $PHP_VER " -fpm