Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion conf/nginx-top.conf
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
## your own --- please do not ask for help from us.

upstream php-fpm {
server unix:/var/run/php/php8.0-fpm.sock;
server unix:/var/run/php/php{{phpver}}-fpm.sock;
}

7 changes: 4 additions & 3 deletions management/backup.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import rtyaml
from exclusiveprocess import Lock

from utils import load_environment, shell, wait_for_service
from utils import load_environment, shell, wait_for_service, get_php_version

def backup_status(env):
# If backups are disabled, return no status.
Expand Down Expand Up @@ -266,6 +266,7 @@ def get_target_type(config):

def perform_backup(full_backup):
env = load_environment()
php_fpm = f"php{get_php_version()}-fpm"

# Create an global exclusive lock so that the backup script
# cannot be run more than one.
Expand Down Expand Up @@ -301,7 +302,7 @@ def service_command(service, command, quit=None):
if quit:
sys.exit(code)

service_command("php8.0-fpm", "stop", quit=True)
service_command(php_fpm, "stop", quit=True)
service_command("postfix", "stop", quit=True)
service_command("dovecot", "stop", quit=True)
service_command("postgrey", "stop", quit=True)
Expand Down Expand Up @@ -339,7 +340,7 @@ def service_command(service, command, quit=None):
service_command("postgrey", "start", quit=False)
service_command("dovecot", "start", quit=False)
service_command("postfix", "start", quit=False)
service_command("php8.0-fpm", "start", quit=False)
service_command(php_fpm, "start", quit=False)

# Remove old backups. This deletes all backup data no longer needed
# from more than 3 days ago.
Expand Down
4 changes: 4 additions & 0 deletions management/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,10 @@ def wait_for_service(port, public, env, timeout):
return False
time.sleep(min(timeout/4, 1))

def get_php_version():
# Gets the version of PHP installed in the system.
return shell("check_output", ["/usr/bin/php", "-v"])[4:7]

def get_ssh_port():
port_value = get_ssh_config_value("port")

Expand Down
3 changes: 2 additions & 1 deletion management/web_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from mailconfig import get_mail_domains
from dns_update import get_custom_dns_config, get_dns_zones
from ssl_certificates import get_ssl_certificates, get_domain_ssl_files, check_certificate
from utils import shell, safe_domain_name, sort_domains
from utils import shell, safe_domain_name, sort_domains, get_php_version

def get_web_domains(env, include_www_redirects=True, include_auto=True, exclude_dns_elsewhere=True):
# What domains should we serve HTTP(S) for?
Expand Down Expand Up @@ -82,6 +82,7 @@ def read_conf(conf_fn):

# Build an nginx configuration file.
nginx_conf = read_conf("nginx-top.conf")
nginx_conf = re.sub("{{phpver}}", get_php_version(), nginx_conf)

# Load the templates.
template0 = read_conf("nginx.conf")
Expand Down
7 changes: 5 additions & 2 deletions setup/functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
# -o pipefail: don't ignore errors in the non-last command in a pipeline
set -euo pipefail

PHP_VER=8.0

function hide_output {
# This function hides the output of a command unless the command fails
# and returns a non-zero exit code.
Expand Down Expand Up @@ -223,3 +221,8 @@ function git_clone {
mv $TMPPATH/"$SUBDIR" "$TARGETPATH"
rm -rf $TMPPATH
}

function php_version {
php --version | head -n 1 | cut -d " " -f 2 | cut -c 1-3
}

60 changes: 52 additions & 8 deletions setup/nextcloud.sh
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,12 @@ user_external_hash=280d24eb2a6cb56b4590af8847f925c28d8d853e
# Clear prior packages and install dependencies from apt.
apt-get purge -qq -y owncloud* # we used to use the package manager

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
apt_install curl php8.1 php8.1-fpm \
php8.1-cli php8.1-sqlite3 php8.1-gd php8.1-imap php8.1-curl \
php8.1-dev php8.1-xml php8.1-mbstring php8.1-zip php8.1-apcu \
php8.1-intl php8.1-imagick php8.1-gmp php8.1-bcmath

PHP_VER=$(php_version)

# Enable APC before Nextcloud tools are run.
tools/editconf.py /etc/php/"$PHP_VER"/mods-available/apcu.ini -c ';' \
Expand Down Expand Up @@ -214,10 +216,32 @@ if [ ! -d /usr/local/lib/owncloud/ ] || [[ ! ${CURRENT_NEXTCLOUD_VER} =~ ^$nextc
return 0
fi

# 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.
# Install php 8.0 for older versions of nextcloud that don't support 8.1
if [[ ${CURRENT_NEXTCLOUD_VER} =~ ^2[0123] ]]; then
# Version 20 is the latest version from the 18.04 version of miab. To upgrade to version 21, install php8.0. This is
# not supported by version 20, but that does not matter, as the InstallNextcloud function only runs the version 21 code.
# We need php 8.0 for nextcloud 21-23, as php 8.1 is supported starting nextcloud 24

# Install the ppa
add-apt-repository --yes ppa:ondrej/php

# Prevent installation of old packages
apt-mark hold php7.0-apcu php7.1-apcu php7.2-apcu php7.3-apcu php7.4-apcu

# Install older php version
apt_install php8.0 php8.0-fpm php8.0-apcu php8.0-cli php8.0-sqlite3 php8.0-gd php8.0-imap \
php8.0-curl php8.0-dev php8.0-xml php8.0-mbstring php8.0-zip

# set older php version as default
update-alternatives --set php /usr/bin/php8.0

PHP_VER=$(php_version)

# Make sure apc is enabled
tools/editconf.py /etc/php/$PHP_VER/mods-available/apcu.ini -c ';' \
apc.enabled=1 \
apc.enable_cli=1
fi

if [[ ${CURRENT_NEXTCLOUD_VER} =~ ^20 ]]; then
InstallNextcloud 21.0.7 f5c7079c5b56ce1e301c6a27c0d975d608bb01c9 4.0.7 45e7cf4bfe99cd8d03625cf9e5a1bb2e90549136 3.0.4 d0284b68135777ec9ca713c307216165b294d0fe
Expand All @@ -235,10 +259,30 @@ if [ ! -d /usr/local/lib/owncloud/ ] || [[ ! ${CURRENT_NEXTCLOUD_VER} =~ ^$nextc
InstallNextcloud 24.0.12 7aa5d61632c1ccf4ca3ff00fb6b295d318c05599 4.1.0 697f6b4a664e928d72414ea2731cb2c9d1dc3077 3.2.2 ce4030ab57f523f33d5396c6a81396d440756f5f 3.0.0 0df781b261f55bbde73d8c92da3f99397000972f
CURRENT_NEXTCLOUD_VER="24.0.12"
fi
if [[ ${CURRENT_NEXTCLOUD_VER} =~ ^2[45678] ]]; then
# From nextcloud 24 and higher, php8.1 is supported, so we can now remove the php8.0 ppa and packages

# Reset the default php version used
update-alternatives --auto php

PHP_VER=$(php_version)

# Remove older php version
apt-get purge -qq -y php8.0 php8.0-fpm php8.0-apcu php8.0-cli php8.0-sqlite3 php8.0-gd \
php8.0-imap php8.0-curl php8.0-dev php8.0-xml php8.0-mbstring php8.0-zip \
php8.0-common php8.0-opcache php8.0-readline

# Remove the ppa
add-apt-repository --yes --remove ppa:ondrej/php
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

# 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.
fi

InstallNextcloud $nextcloud_ver $nextcloud_hash $contacts_ver $contacts_hash $calendar_ver $calendar_hash $user_external_ver $user_external_hash
Expand Down
4 changes: 0 additions & 4 deletions setup/system.sh
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,6 @@ hide_output add-apt-repository -y universe
# Install the duplicity PPA.
hide_output add-apt-repository -y ppa:duplicity-team/duplicity-release-git

# Stock PHP is now 8.1, but we're transitioning through 8.0 because
# of Nextcloud.
hide_output add-apt-repository --y ppa:ondrej/php

# ### Update Packages

# Update system packages to make sure we have the latest upstream versions
Expand Down
4 changes: 3 additions & 1 deletion setup/web.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@ fi

echo "Installing Nginx (web server)..."

apt_install nginx php"${PHP_VER}"-cli php"${PHP_VER}"-fpm idn2
apt_install nginx php8.1-cli php8.1-fpm idn2

rm -f /etc/nginx/sites-enabled/default

PHP_VER=$(php_version)

# Copy in a nginx configuration file for common and best-practices
# SSL settings from @konklone. Replace STORAGE_ROOT so it can find
# the DH params.
Expand Down
2 changes: 2 additions & 0 deletions setup/webmail.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
source setup/functions.sh # load our functions
source /etc/mailinabox.conf # load global vars

PHP_VER=$(php_version)

# ### Installing Roundcube

# We install Roundcube from sources, rather than from Ubuntu, because:
Expand Down
2 changes: 2 additions & 0 deletions setup/zpush.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
source setup/functions.sh # load our functions
source /etc/mailinabox.conf # load global vars

PHP_VER=$(php_version)

# Prereqs.

echo "Installing Z-Push (Exchange/ActiveSync server)..."
Expand Down
7 changes: 5 additions & 2 deletions tools/owncloud-restore.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,10 @@ if [ ! -f "$1/config.php" ]; then
fi

echo "Restoring backup from $1"
service php8.0-fpm stop

PHP_VER=$(php_version)

service php$PHP_VER-fpm stop

# remove the current ownCloud/Nextcloud installation
rm -rf /usr/local/lib/owncloud/
Expand All @@ -45,5 +48,5 @@ chown www-data:www-data "$STORAGE_ROOT/owncloud/config.php"

sudo -u www-data "php$PHP_VER" /usr/local/lib/owncloud/occ maintenance:mode --off

service php8.0-fpm start
service php$PHP_VER-fpm start
echo "Done"
2 changes: 1 addition & 1 deletion tools/owncloud-unlockadmin.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,5 @@ echo "If in doubt, press CTRL-C to cancel."
echo
echo "Press enter to continue."
read

PHP_VER=$(php_version)
sudo -u www-data "php$PHP_VER" /usr/local/lib/owncloud/occ group:adduser admin "$ADMIN" && echo "Done."