diff --git a/scripts/_common.sh b/scripts/_common.sh index 0036dc16..40125601 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -5,7 +5,7 @@ #================================================= # dependencies used by the app -pkg_dependencies="php7.1 php7.1-fpm php7.1-mbstring postgresql redis-server" +pkg_dependencies="php7.1-mbstring postgresql redis-server" #================================================= # PERSONAL HELPERS @@ -19,20 +19,6 @@ pkg_dependencies="php7.1 php7.1-fpm php7.1-mbstring postgresql redis-server" # FUTURE OFFICIAL HELPERS #================================================= -ynh_install_php7 () { - wget -q -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg - echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php7.list - - ynh_package_update -} - -ynh_remove_php7 () { - rm -f /etc/apt/sources.list.d/php7.list - apt-key del 4096R/89DF5277 - apt-key del 2048R/11A06851 -} - - # Execute a command as another user # usage: exec_as USER COMMAND [ARG ...] exec_as() { diff --git a/scripts/install b/scripts/install index 4c223e9d..1c633049 100644 --- a/scripts/install +++ b/scripts/install @@ -8,6 +8,7 @@ source _common.sh source _pgsql.sh +source ynh_install_php source /usr/share/yunohost/helpers #================================================= @@ -53,7 +54,7 @@ ynh_app_setting_set $app is_public $is_public #================================================= ynh_print_info "Installing dependencies..." -ynh_install_php7 +ynh_install_php --phpversion=7.1 ynh_install_app_dependencies $pkg_dependencies diff --git a/scripts/remove b/scripts/remove index a9d638f5..443c3f5d 100644 --- a/scripts/remove +++ b/scripts/remove @@ -8,6 +8,7 @@ source _common.sh source _pgsql.sh +source ynh_install_php source /usr/share/yunohost/helpers #================================================= @@ -39,6 +40,7 @@ ynh_print_info "Removing dependencies" # Remove metapackage and its dependencies ynh_remove_app_dependencies +ynh_remove_php #================================================= # REMOVE APP MAIN DIR diff --git a/scripts/ynh_install_php b/scripts/ynh_install_php new file mode 100644 index 00000000..c7d50567 --- /dev/null +++ b/scripts/ynh_install_php @@ -0,0 +1,139 @@ +#!/bin/bash + +# Install another version of php. +# +# usage: ynh_install_php --phpversion=phpversion +# | arg: -v, --phpversion - Version of php to install. Can be one of 7.1, 7.2 or 7.3 +ynh_install_php () { + # Declare an array to define the options of this helper. + local legacy_args=v + declare -Ar args_array=( [v]=phpversion= ) + local phpversion + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + # Store php_version into the config of this app + ynh_app_setting_set $app php_version $phpversion + + # Install an extra repo to get multiple php versions + ynh_install_extra_repo --repo="https://packages.sury.org/php/ $(lsb_release -sc) main" --key="https://packages.sury.org/php/apt.gpg" --name=php + + if [ "$phpversion" == "7.0" ]; then + ynh_die "Do not use ynh_install_php to install php7.0" + + # Php 7.1 + elif [ "$phpversion" == "7.1" ]; then + # Get the current version available for libpcre3 on packages.sury.org + local libpcre3_version=$(apt-cache madison "libpcre3" | grep "packages.sury.org" | tail -n1 | awk '{print $3}') + + # equivs doesn't handle correctly this dependence. + # Force the upgrade of libpcre3 for php7.1 + ynh_package_install "libpcre3=$libpcre3_version" + + local php_dependencies="php7.1, php7.1-fpm" + + # Php 7.2 + elif [ "$phpversion" == "7.2" ]; then + # Get the current version available for libpcre3 on packages.sury.org + local libpcre3_version=$(apt-cache madison "libpcre3" | grep "packages.sury.org" | tail -n1 | awk '{print $3}') + + # equivs doesn't handle correctly this dependence. + # Force the upgrade of libpcre3 for php7.2 + ynh_package_install "libpcre3=$libpcre3_version" + + local php_dependencies="php7.2, php7.2-fpm" + + # Php 7.3 + elif [ "$phpversion" == "7.3" ]; then + # Get the current version available for libpcre2-8-0 on packages.sury.org + local libpcre2_version=$(apt-cache madison "libpcre2-8-0" | grep "packages.sury.org" | tail -n1 | awk '{print $3}') + + # equivs doesn't handle correctly this dependence. + # Force the upgrade of libpcre2-8-0 for php7.3 + ynh_package_install "libpcre2-8-0=$libpcre2_version" + + local php_dependencies="php7.3, php7.3-fpm" + + else + ynh_die "The version $phpversion of php isn't handle by this helper." + fi + + # Store the ID of this app and the version of php requested for it + echo "$YNH_APP_ID:$phpversion" | tee --append "/etc/php/ynh_app_version" + + # Build a control file for equivs-build + echo "Section: misc +Priority: optional +Package: php${phpversion}-ynh-deps +Version: 1.0 +Depends: $php_dependencies +Architecture: all +Description: Fake package for php_$phpversion dependencies + This meta-package is only responsible of installing its dependencies." \ + > /tmp/php_${phpversion}-ynh-deps.control + + # Install the fake package for php + ynh_package_install_from_equivs /tmp/php_${phpversion}-ynh-deps.control \ + || ynh_die --message="Unable to install dependencies" + ynh_secure_remove /tmp/php_${phpversion}-ynh-deps.control + + # Advertise service in admin panel + yunohost service add php${phpversion}-fpm --log "/var/log/php${phpversion}-fpm.log" +} + +ynh_remove_php () { + # Get the version of php used by this app + local phpversion=$(ynh_app_setting_get $app php_version) + + if [ "$phpversion" == "7.0" ] || [ -z "$phpversion" ] + then + if [ "$phpversion" == "7.0" ] + then + ynh_print_err "Do not use ynh_remove_php to install php7.0" + fi + return 0 + fi + + # Remove the line for this app + sed --in-place "/$YNH_APP_ID:$phpversion/d" "/etc/php/ynh_app_version" + + # If no other app uses this version of php, remove it. + if ! grep --quiet "$phpversion" "/etc/php/ynh_app_version" + then + # Remove the metapackage for php + ynh_package_autopurge php${phpversion}-ynh-deps + # Then remove php-fpm php-cli for this version. + # The previous command won't remove them, but we have to remove those package to clean php + ynh_package_autopurge php${phpversion}-fpm php${phpversion}-cli + + if [ "$phpversion" == "7.1" ] || [ "$phpversion" == "7.2" ] + then + # Do not restore libpcre3 if php7.1 or 7.2 is still used. + if ! grep --quiet --extended-regexp "7.1|7.2" "/etc/php/ynh_app_version" + then + # Get the current version available for libpcre3 on the standard repo + local libpcre3_version=$(apt-cache madison "libpcre3" | grep "debian.org" | tail -n1 | awk '{print $3}') + + # Force to reinstall the standard version of libpcre3 + ynh_package_install --allow-downgrades libpcre3=$libpcre3_version >&2 + fi + elif [ "$phpversion" == "7.3" ] + then + # Get the current version available for libpcre2-8-0 on the standard repo + local libpcre2_version=$(apt-cache madison "libpcre2-8-0" | grep "debian.org" | tail -n1 | awk '{print $3}') + + # Force to reinstall the standard version of libpcre2-8-0 + ynh_package_install --allow-downgrades libpcre2-8-0=$libpcre2_version + fi + + # Remove the service from the admin panel + yunohost service remove php${phpversion}-fpm + fi + + # If no other app uses alternate php versions, remove the extra repo for php + if [ ! -s "/etc/php/ynh_app_version" ] + then + ynh_remove_extra_repo --name=php + ynh_secure_remove /etc/php/ynh_app_version + fi +}