From c8fbe2dd5df9f7e9318472b2646b26df3716ecd5 Mon Sep 17 00:00:00 2001 From: David Duque Date: Wed, 15 Jul 2020 15:28:02 +0100 Subject: [PATCH] Determine the PHP version at runtime (instead of at setup-time) --- conf/nginx-top.conf | 3 +-- management/backup.py | 7 ++++--- management/utils.py | 3 +++ management/web_update.py | 3 ++- setup/functions.sh | 14 +++----------- setup/nextcloud.sh | 12 ++++++------ setup/web.sh | 16 ++++++++-------- setup/webmail.sh | 2 +- setup/zpush.sh | 2 +- 9 files changed, 29 insertions(+), 33 deletions(-) diff --git a/conf/nginx-top.conf b/conf/nginx-top.conf index a4d0929..85d056c 100644 --- a/conf/nginx-top.conf +++ b/conf/nginx-top.conf @@ -7,6 +7,5 @@ ## your own --- please do not ask for help from us. upstream php-fpm { - server unix:/var/run/php/php!!___PHPVER___!!-fpm.sock; + server unix:/var/run/php/php{{phpver}}-fpm.sock; } - diff --git a/management/backup.py b/management/backup.py index bfae23b..ce53353 100755 --- a/management/backup.py +++ b/management/backup.py @@ -12,7 +12,7 @@ import dateutil.parser, dateutil.relativedelta, dateutil.tz import rtyaml from exclusiveprocess import Lock, CannotAcquireLock -from utils import load_environment, shell, wait_for_service, fix_boto +from utils import load_environment, shell, wait_for_service, fix_boto, get_php_version rsync_ssh_options = [ "--ssh-options= -i /root/.ssh/id_rsa_miab", @@ -212,6 +212,7 @@ def get_target_type(config): def perform_backup(full_backup, user_initiated=False): 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. @@ -255,7 +256,7 @@ def perform_backup(full_backup, user_initiated=False): if quit: sys.exit(code) - service_command("php!!___PHPVER___!!-fpm", "stop", quit=True) + service_command(php_fpm, "stop", quit=True) service_command("postfix", "stop", quit=True) service_command("dovecot", "stop", quit=True) @@ -289,7 +290,7 @@ def perform_backup(full_backup, user_initiated=False): # Start services again. service_command("dovecot", "start", quit=False) service_command("postfix", "start", quit=False) - service_command("php!!___PHPVER___!!-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. diff --git a/management/utils.py b/management/utils.py index f198286..28e387f 100644 --- a/management/utils.py +++ b/management/utils.py @@ -182,6 +182,9 @@ def fix_boto(): import os os.environ["BOTO_CONFIG"] = "/etc/boto3.cfg" +def get_php_version(): + # Gets the version of PHP installed in the system. + return shell("check_output", ["/usr/bin/php", "-v"])[4:7] if __name__ == "__main__": from web_update import get_web_domains diff --git a/management/web_update.py b/management/web_update.py index 67e2f07..ba801d8 100644 --- a/management/web_update.py +++ b/management/web_update.py @@ -7,7 +7,7 @@ import os.path, re, rtyaml 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, exclude_dns_elsewhere=True): # What domains should we serve HTTP(S) for? @@ -76,6 +76,7 @@ def do_web_update(env): # Build an nginx configuration file. nginx_conf = open(os.path.join(os.path.dirname(__file__), "../conf/nginx-top.conf")).read() + nginx_conf = re.sub("{{phpver}}", get_php_version(), nginx_conf) # Load the templates. template0 = open(os.path.join(os.path.dirname(__file__), "../conf/nginx.conf")).read() diff --git a/setup/functions.sh b/setup/functions.sh index 7097ad6..1153079 100644 --- a/setup/functions.sh +++ b/setup/functions.sh @@ -222,14 +222,6 @@ function git_clone { rm -rf $TMPPATH } -OS=`lsb_release -d | sed 's/.*:\s*//' ` - -# Expected php version -if [ "$OS" == "Debian GNU/Linux 10 (buster)" ]; then - export PHP_VERSION="7.3" -elif [ "$OS" == "Ubuntu 20.04 LTS" ]; then - export PHP_VERSION="7.4" -fi - -sed -i "s|!!___PHPVER___!!|${PHP_VERSION}|g" conf/nginx-top.conf -sed -i "s|!!___PHPVER___!!|${PHP_VERSION}|g" management/backup.py +function php_version { + php --version | head -n 1 | cut -d " " -f 2 | cut -c 1-3 +} diff --git a/setup/nextcloud.sh b/setup/nextcloud.sh index d424737..1c9c91e 100755 --- a/setup/nextcloud.sh +++ b/setup/nextcloud.sh @@ -112,7 +112,7 @@ fi 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 php$PHP_VERSION-fpm stop &> /dev/null || /bin/true + service php$(php_version)-fpm stop &> /dev/null || /bin/true # Backup the existing ownCloud/Nextcloud. # Create a backup directory to store the current installation and database to @@ -285,7 +285,7 @@ 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) -management/editconf.py /etc/php/$PHP_VERSION/fpm/php.ini -c ';' \ +management/editconf.py /etc/php/$(php_version)/fpm/php.ini -c ';' \ upload_max_filesize=16G \ post_max_size=16G \ output_buffering=16384 \ @@ -294,7 +294,7 @@ management/editconf.py /etc/php/$PHP_VERSION/fpm/php.ini -c ';' \ short_open_tag=On # Set Nextcloud recommended opcache settings -management/editconf.py /etc/php/$PHP_VERSION/cli/conf.d/10-opcache.ini -c ';' \ +management/editconf.py /etc/php/$(php_version)/cli/conf.d/10-opcache.ini -c ';' \ opcache.enable=1 \ opcache.enable_cli=1 \ opcache.interned_strings_buffer=8 \ @@ -304,8 +304,8 @@ management/editconf.py /etc/php/$PHP_VERSION/cli/conf.d/10-opcache.ini -c ';' \ opcache.revalidate_freq=1 # If apc is explicitly disabled we need to enable it -if grep -q apc.enabled=0 /etc/php/$PHP_VERSION/mods-available/apcu.ini; then - management/editconf.py /etc/php/$PHP_VERSION/mods-available/apcu.ini -c ';' \ +if grep -q apc.enabled=0 /etc/php/$(php_version)/mods-available/apcu.ini; then + management/editconf.py /etc/php/$(php_version)/mods-available/apcu.ini -c ';' \ apc.enabled=1 fi @@ -330,4 +330,4 @@ rm -f /etc/cron.hourly/mailinabox-owncloud # ``` # Enable PHP modules and restart PHP. -restart_service php$PHP_VERSION-fpm +restart_service php$(php_version)-fpm diff --git a/setup/web.sh b/setup/web.sh index f8c20f7..9db39c1 100755 --- a/setup/web.sh +++ b/setup/web.sh @@ -46,15 +46,15 @@ management/editconf.py /etc/nginx/nginx.conf -s \ ssl_protocols="TLSv1.2 TLSv1.3;" # Tell PHP not to expose its version number in the X-Powered-By header. -management/editconf.py /etc/php/$PHP_VERSION/fpm/php.ini -c ';' \ +management/editconf.py /etc/php/$(php_version)/fpm/php.ini -c ';' \ expose_php=Off # Set PHPs default charset to UTF-8, since we use it. See #367. -management/editconf.py /etc/php/$PHP_VERSION/fpm/php.ini -c ';' \ +management/editconf.py /etc/php/$(php_version)/fpm/php.ini -c ';' \ default_charset="UTF-8" # Configure the path environment for php-fpm -management/editconf.py /etc/php/$PHP_VERSION/fpm/pool.d/www.conf -c ';' \ +management/editconf.py /etc/php/$(php_version)/fpm/pool.d/www.conf -c ';' \ env[PATH]=/usr/local/bin:/usr/bin:/bin \ # Configure php-fpm based on the amount of memory the machine has @@ -64,7 +64,7 @@ management/editconf.py /etc/php/$PHP_VERSION/fpm/pool.d/www.conf -c ';' \ TOTAL_PHYSICAL_MEM=$(head -n 1 /proc/meminfo | awk '{print $2}' || /bin/true) if [ $TOTAL_PHYSICAL_MEM -lt 1000000 ] then - management/editconf.py /etc/php/$PHP_VERSION/fpm/pool.d/www.conf -c ';' \ + management/editconf.py /etc/php/$(php_version)/fpm/pool.d/www.conf -c ';' \ pm=ondemand \ pm.max_children=8 \ pm.start_servers=2 \ @@ -72,7 +72,7 @@ then pm.max_spare_servers=3 elif [ $TOTAL_PHYSICAL_MEM -lt 2000000 ] then - management/editconf.py /etc/php/$PHP_VERSION/fpm/pool.d/www.conf -c ';' \ + management/editconf.py /etc/php/$(php_version)/fpm/pool.d/www.conf -c ';' \ pm=ondemand \ pm.max_children=16 \ pm.start_servers=4 \ @@ -80,14 +80,14 @@ then pm.max_spare_servers=6 elif [ $TOTAL_PHYSICAL_MEM -lt 3000000 ] then - management/editconf.py /etc/php/$PHP_VERSION/fpm/pool.d/www.conf -c ';' \ + management/editconf.py /etc/php/$(php_version)/fpm/pool.d/www.conf -c ';' \ pm=dynamic \ pm.max_children=60 \ pm.start_servers=6 \ pm.min_spare_servers=3 \ pm.max_spare_servers=9 else - management/editconf.py /etc/php/$PHP_VERSION/fpm/pool.d/www.conf -c ';' \ + management/editconf.py /etc/php/$(php_version)/fpm/pool.d/www.conf -c ';' \ pm=dynamic \ pm.max_children=120 \ pm.start_servers=12 \ @@ -147,7 +147,7 @@ chown -R $STORAGE_USER $STORAGE_ROOT/www # Start services. restart_service nginx -restart_service php$PHP_VERSION-fpm +restart_service php$(php_version)-fpm # Open ports. ufw_allow http diff --git a/setup/webmail.sh b/setup/webmail.sh index 28457b2..f4ae1ed 100755 --- a/setup/webmail.sh +++ b/setup/webmail.sh @@ -198,4 +198,4 @@ chmod 664 $STORAGE_ROOT/mail/roundcube/roundcube.sqlite # Enable PHP modules. phpenmod -v php mcrypt imap -restart_service php$PHP_VERSION-fpm +restart_service php$(php_version)-fpm diff --git a/setup/zpush.sh b/setup/zpush.sh index 44d958d..5146011 100755 --- a/setup/zpush.sh +++ b/setup/zpush.sh @@ -102,7 +102,7 @@ EOF # Restart service. -restart_service php$PHP_VERSION-fpm +restart_service php$(php_version)-fpm # Fix states after upgrade