Browse Source

PHP module

Ernesto Nicolás Carrea 5 years ago
parent
commit
11d4072efc
4 changed files with 251 additions and 0 deletions
  1. 109 0
      bin/module/php/add.inc
  2. 83 0
      bin/module/php/del.inc
  3. 29 0
      bin/module/php/install.inc
  4. 30 0
      bin/module/php/remove.inc

+ 109 - 0
bin/module/php/add.inc

@@ -0,0 +1,109 @@
+#!/bin/sh
+
+hestia_module_php_add() {
+    source $HESTIA/bin/module/func.inc
+
+    module_installed=$(hestia_module_isinstalled php)
+    if [ ! "$module_installed" ] && [ ! "$param_force" ]; then
+        echo "PHP module is not installed. See 'hestia module info php'."
+        exit 1
+    fi
+
+    module_variant=$(hestia_module_getvariant php)
+    if [ "$module_variant" != 'php-fpm' ] && [ ! "$param_force" ]; then
+        echo "The installed PHP module is not FPM. See 'hestia module info php'."
+        exit 1
+    fi
+
+    # Verify php version format
+    if [[ ! $param_ver =~ ^[0-9]\.[0-9]+ ]]; then
+        echo "The PHP version format is invalid, it should look like [0-9].[0-9]..."
+        exit
+    fi
+
+    # Check version is supported
+    case $param_ver in
+        5.6|7.0|7.1|7.2|7.3|7.4)
+            php_version=$param_ver
+            ;;
+        *)
+            echo "PHP version $param_ver is not supported."
+            exit 1
+    esac
+
+    php_withoutdot=${php_version//.}
+    php_version_present=$(osal_kv_read $HESTIA_CONF_MODULES/php.conf "php${php_withoutdot}_present")
+
+    if [ "$php_version_present" ] && [ ! "$param_force" ]; then
+        echo "PHP version ${php_version} is already present. See 'hestia module php list'."
+        exit 1
+    fi
+
+    # Check if php version is supported
+    if [ ! -f "$HESTIA_INSTALL_DIR/multiphp/$WEB_SYSTEM/PHP-${php_withoutdot}.sh" ]; then
+        echo "PHP version ${php_version} is currently not supported or does not exist."
+        exit
+    fi
+
+    # Perform verification if read-only mode is enabled
+    check_hestia_demo_mode
+
+    echo "Adding PHP version ${php_version}..."
+
+    php_prefix=$(osal_multiphp_php_package_prefix $php_version)
+
+    mph="$php_prefix-mbstring $php_prefix-bcmath $php_prefix-cli $php_prefix-curl
+     $php_prefix-fpm $php_prefix-gd $php_prefix-intl $php_prefix-mysql
+     $php_prefix-soap $php_prefix-xml $php_prefix-zip $php_prefix-mbstring
+     $php_prefix-json $php_prefix-bz2 $php_prefix-pspell $php_prefix-imagick $php_prefix-pgsql
+     $php_prefix-imap $php_prefix-ldap"
+
+    # Check is version is 7.1 or below to add mcrypt
+    if [[ `echo "$php_version 7.2" | awk '{print ($1 < $2)}'` == 1 ]]; then
+        mph="$mph $php_prefix-mcrypt"
+    fi
+
+    # Install php packages
+    osal_package_preinstall
+    osal_execute_with_spinner osal_package_install $mph
+
+    # Check if installation was sucessfully
+    if [ ! $(osal_multiphp_fpm_isinstalled $php_version) ]; then
+        echo "Installation failed, please run the following command manualy for debuging:"
+        echo "$OSAL_CMD_PACKAGE_MANAGER install ${mph//\\n/ \\}"
+    fi
+
+    # Check if required modules for apache2 are enabled
+    if [ "$WEB_SYSTEM" = "apache2" ] || [ "$WEB_SYSTEM" = "httpd" ]; then
+        if [ ! $(osal_apache_module_isenabled 'proxy_fcgi') ]; then
+            osal_apache_module_enable 'proxy_fcgi'
+        fi
+        if [ ! $(osal_apache_module_isenabled 'setenvif') ]; then
+            osal_apache_module_enable 'setenvif'
+        fi
+        $BIN/v-restart-web
+    fi
+
+    # Configure fpm
+    osal_service_enable $php_prefix-fpm > /dev/null 2>&1
+    pool_d=$(osal_multiphp_fpm_pool_d $php_version)
+    if [ $pool_d ]; then
+        rm -f $pool_d/*
+        cp -f $HESTIA_INSTALL_DIR/php-fpm/dummy.conf $pool_d/
+        sed -i "s/9999/99$php_withoutdot/g" $pool_d/dummy.conf       # FIXME: this'll break with PHP 10.0
+    fi
+
+    # Install backend template
+    cp -f $HESTIA_INSTALL_DIR/php-fpm/multiphp.tpl \
+        $HESTIA/data/templates/web/php-fpm/PHP-${php_version/\./_}.tpl
+
+    #----------------------------------------------------------#
+    #                       Hestia                             #
+    #----------------------------------------------------------#
+
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf "php${php_withoutdot}_present" '1'
+
+    log_history "installed php $php_version" '' 'admin'
+
+    exit 0
+}

+ 83 - 0
bin/module/php/del.inc

@@ -0,0 +1,83 @@
+#!/bin/sh
+
+hestia_module_php_del() {
+    source $HESTIA/bin/module/func.inc
+
+    module_installed=$(hestia_module_isinstalled php)
+    if [ ! "$module_installed" ] && [ ! "$param_force" ]; then
+        echo "PHP module is not installed. See 'hestia module info php'."
+        exit 1
+    fi
+
+    module_variant=$(hestia_module_getvariant php)
+    if [ "$module_variant" != 'php-fpm' ] && [ ! "$param_force" ]; then
+        echo "The installed PHP module is not FPM. See 'hestia module info php'."
+        exit 1
+    fi
+
+    # Verify php version format
+    if [[ ! $param_ver =~ ^[0-9]\.[0-9]+ ]]; then
+        echo "The PHP version format is invalid, it should look like [0-9].[0-9]..."
+        exit
+    fi
+
+    # Check version is supported
+    case $param_ver in
+        5.6|7.0|7.1|7.2|7.3|7.4)
+            php_version=$param_ver
+            ;;
+        *)
+            echo "PHP version $param_ver is not supported."
+            exit 1
+    esac
+
+    php_withoutdot=${php_version//.}
+
+    php_version_present=$(osal_kv_read_bool $HESTIA_CONF_MODULES/php.conf "php${php_withoutdot}_present")
+    if [ ! "$php_version_present" ] && [ ! "$param_force" ]; then
+        echo "PHP version ${php_version} is not present. See 'hestia module php list'."
+        exit 1
+    fi
+
+    # Perform verification if read-only mode is enabled
+    check_hestia_demo_mode
+
+    echo "Removing PHP version ${php_version}..."
+
+    php_etc_folder=$(osal_multiphp_etc_folder $php_version)
+    hestia_config_backup 'php-del' $php_etc_folder \
+        $HESTIA/data/templates/web/php-fpm/PHP-${php_version/\./_}.tpl
+
+    php_prefix=$(osal_multiphp_php_package_prefix $php_version)
+
+    mph="$php_prefix-mbstring $php_prefix-bcmath $php_prefix-cli $php_prefix-curl
+        $php_prefix-fpm $php_prefix-gd $php_prefix-intl $php_prefix-mysql
+        $php_prefix-soap $php_prefix-xml $php_prefix-zip $php_prefix-mbstring
+        $php_prefix-json $php_prefix-bz2 $php_prefix-pspell"
+
+    # Check is version is 7.1 or below to add mcrypt
+    if [[ `echo "$php_version 7.2" | awk '{print ($1 < $2)}'` == 1 ]]; then
+        mph="$mph $php_prefix-mcrypt"
+    fi
+
+    # Purge php packages
+    osal_service_stop $php_prefix-fpm > /dev/null 2>&1
+    osal_service_disable $php_prefix-fpm > /dev/null 2>&1
+    osal_execute_with_spinner osal_package_remove $mph
+
+    # Check if uninstallation was sucessfully
+    if [ $(osal_multiphp_fpm_isinstalled $php_version) ]; then
+        echo "Uninstallation failed, please run the following command manualy for debuging:"
+        echo "$OSAL_CMD_PACKAGE_MANAGER (remove or purge) ${mph//\\n/ \\}"
+    fi
+
+    # Cleanup files and folders
+    [ -f $HESTIA/data/templates/web/php-fpm/PHP-${php_version/\./_}.tpl ] && rm -f $HESTIA/data/templates/web/php-fpm/PHP-${php_version/\./_}.tpl
+    [[ -d "$php_etc_folder" ]] && rm -rf "$php_etc_folder"
+
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf "php${php_withoutdot}_present" '0'
+
+    log_history "removed php $phpversion" '' 'admin'
+
+    exit 0
+}

+ 29 - 0
bin/module/php/install.inc

@@ -0,0 +1,29 @@
+#!/bin/sh
+
+hestia_module_php_install() {
+    source $HESTIA/bin/module/func.inc
+
+    PHP_DEFAULT_VERSION=7.3
+
+    module_installed=$(hestia_module_isinstalled php)
+    if [ "$module_installed" ] && [ ! "$param_force" ]; then
+        echo "PHP module is already installed. See 'hestia module info php'."
+        exit 1
+    fi
+
+    echo "Installing PHP (FPM) module..."
+
+    osal_kv_write $HESTIA/conf/hestia.conf 'WEB_BACKEND' 'php-fpm'
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'installed' '1'
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'description' 'Hestia PHP (FPM) module'
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'enabled' '1'
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'variant' 'php-fpm'
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'version' '1'
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'service_name' ''
+
+    # Add default version
+    echo "Adding default PHP version..."
+    hestia module php add --ver 7.3
+
+    exit 0
+}

+ 30 - 0
bin/module/php/remove.inc

@@ -0,0 +1,30 @@
+#!/bin/sh
+
+hestia_module_php_remove() {
+    source $HESTIA/bin/module/func.inc
+
+    module_installed=$(hestia_module_isinstalled php)
+    if [ ! "$module_installed" ] && [ ! "$param_force" ]; then
+        echo "PHP module is not installed. See 'hestia module info php'."
+        exit 1
+    fi
+
+    module_variant=$(hestia_module_getvariant php)
+    if [ "$module_variant" != 'php-fpm' ] && [ ! "$param_force" ]; then
+        echo "The installed PHP module is not FPM. See 'hestia module info php'."
+        exit 1
+    fi
+
+    echo "Removing PHP (FPM) module..."
+
+    # TODO: Remove all added versions
+
+    osal_kv_write $HESTIA/conf/hestia.conf 'WEB_BACKEND' 'no'
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'installed' '0'
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'description' ''
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'enabled' '0'
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'variant' ''
+    osal_kv_write $HESTIA_CONF_MODULES/php.conf 'version' '0'
+
+    exit 0
+}