You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							216 lines
						
					
					
						
							7.3 KiB
						
					
					
				
			
		
		
	
	
							216 lines
						
					
					
						
							7.3 KiB
						
					
					
				#!/bin/bash
 | 
						|
# info: add php fpm version
 | 
						|
# options: VERSION
 | 
						|
#
 | 
						|
# example: v-add-web-php 8.0
 | 
						|
#
 | 
						|
# Install php-fpm for provided version.
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                Variables & Functions                     #
 | 
						|
#----------------------------------------------------------#
 | 
						|
 | 
						|
# Argument definition
 | 
						|
version=$1
 | 
						|
 | 
						|
# Includes
 | 
						|
# shellcheck source=/etc/hestiacp/hestia.conf
 | 
						|
source /etc/hestiacp/hestia.conf
 | 
						|
# shellcheck source=/usr/local/hestia/func/main.sh
 | 
						|
source $HESTIA/func/main.sh
 | 
						|
# load config file
 | 
						|
source_conf "$HESTIA/conf/hestia.conf"
 | 
						|
source_conf "$HESTIA/install/upgrade/upgrade.conf"
 | 
						|
 | 
						|
 | 
						|
for elem in "${!multiphp_v[@]}"; do
 | 
						|
	multiphp_v[$elem]=$(convert_dot_version_to_non_dot "${multiphp_v[$elem]}")
 | 
						|
done
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                    Verifications                         #
 | 
						|
#----------------------------------------------------------#
 | 
						|
 | 
						|
check_args '1' "$#" 'VERSION'
 | 
						|
 | 
						|
if [ -z "$WEB_BACKEND" ]; then
 | 
						|
	echo "Multiple php versions are not supported for modphp"
 | 
						|
fi
 | 
						|
 | 
						|
# Set file locations
 | 
						|
php_fpm=""
 | 
						|
if [ "$LOCAL_PHP" == "yes" ]; then
 | 
						|
	php_fpm="/usr/lib/systemd/system/brepo-php-fpm$version.service"
 | 
						|
else
 | 
						|
	php_fpm="/usr/lib/systemd/system/php$version-php-fpm.service"
 | 
						|
fi
 | 
						|
 | 
						|
 | 
						|
# Verify php version format
 | 
						|
if [[ ! $version =~ ^[0-9][0-9]+ ]]; then
 | 
						|
	echo "The specified PHP version format is invalid, it should look like [0-9][0-9]."
 | 
						|
	echo "Example: 70, 74, 80"
 | 
						|
	exit "$E_INVALID"
 | 
						|
fi
 | 
						|
 | 
						|
 | 
						|
# Check if php version already exists
 | 
						|
if [ -f "$php_fpm" ] && [ -f "$HESTIA/data/templates/web/php-fpm/PHP-${version/\./_}.tpl" ]; then
 | 
						|
	echo "ERROR: Specified PHP version is already installed."
 | 
						|
	exit "$E_INVALID"
 | 
						|
fi
 | 
						|
 | 
						|
# Check if php version is supported
 | 
						|
if [[ ! "$multiphp_v" =~ $version ]]; then
 | 
						|
	echo "ERROR: Specified PHP version is not supported or does not exist."
 | 
						|
	exit "$E_INVALID"
 | 
						|
fi
 | 
						|
 | 
						|
# Perform verification if read-only mode is enabled
 | 
						|
check_hestia_demo_mode
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                       Action                             #
 | 
						|
#----------------------------------------------------------#
 | 
						|
mph=""
 | 
						|
php_modules_install="mysqlnd mysqli pdo_mysql pgsql pdo sqlite pdo_sqlite pdo_pgsql imap ldap zip opcache xmlwriter xmlreader gd intl pspell"
 | 
						|
php_modules_disable=""
 | 
						|
if [ "$LOCAL_PHP" == "yes" ]; then
 | 
						|
	mph="brepo-php$version brepo-php$version-fpm"
 | 
						|
	if ! echo "$DB_SYSTEM" | grep -w 'pgsql' > /dev/null; then
 | 
						|
		php_modules_install=$(echo "$php_modules_install" | sed -e "s/pgsql//")
 | 
						|
		php_modules_install=$(echo "$php_modules_install" | sed -e "s/pdo_pgsql//")
 | 
						|
		php_modules_disable="$php_modules_disable pgsql pdo_pgsql"
 | 
						|
	fi
 | 
						|
else
 | 
						|
	# Packages in Remi repo have names with php$version-php- prefixes
 | 
						|
	mph="php$version-php-fpm php$version-php-cgi php$version-php-mysqlnd php$version-php-pgsql 
 | 
						|
		php$version-php-pdo php$version-php-common php$version-php-pecl-imagick php$version-php-imap 
 | 
						|
		php$version-php-ldap php$version-php-pecl-apcu php$version-php-pecl-zip php$version-php-cli 
 | 
						|
		php$version-php-opcache php$version-php-xml php$version-php-gd php$version-php-intl 
 | 
						|
		php$version-php-mbstring php$version-php-pspell php$version-php-readline"
 | 
						|
	if [ "$version" = "56" ]; then
 | 
						|
		mph=$(sed -e "s/php$version-php-pecl-apcu//")
 | 
						|
	fi
 | 
						|
 | 
						|
	# Check is version is 7.1 or below to add mcrypt
 | 
						|
	if [[ $(echo "$version 7.2" | awk '{print ($1 < $2)}') == 1 ]]; then
 | 
						|
		mph="$mph php$version-mcrypt"
 | 
						|
	fi
 | 
						|
 | 
						|
	# Check if version is 8.0 or higher and drop php json.
 | 
						|
	if [[ ${version:0:1} == "8" ]]; then
 | 
						|
		mph=$(echo "$mph" | sed -e "s/php$version\(-php\)\{0,1\}-json//")
 | 
						|
	fi
 | 
						|
 | 
						|
	if ! echo "$DB_SYSTEM" | grep -w 'mysql' > /dev/null; then
 | 
						|
		mph=$(echo "$mph" | sed -e "s/php$version\(-php\)\{0,1\}-mysql//")
 | 
						|
	fi
 | 
						|
 | 
						|
	if ! echo "$DB_SYSTEM" | grep -w 'pgsql' > /dev/null; then
 | 
						|
		mph=$(echo "$mph" | sed -e "s/php$version\(-php\)\{0,1\}-pgsql//")
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
# Install php packages
 | 
						|
dnf install -q -y $mph > /dev/null 2>&1 &
 | 
						|
BACK_PID=$!
 | 
						|
 | 
						|
# Check if package installation is done, print a spinner
 | 
						|
echo "Installing PHP-$version, please wait..."
 | 
						|
spinner="/-\|"
 | 
						|
spin_i=1
 | 
						|
while kill -0 $BACK_PID > /dev/null 2>&1; do
 | 
						|
	printf "\b${spinner:spin_i++%${#spinner}:1}"
 | 
						|
	sleep 0.5
 | 
						|
done
 | 
						|
 | 
						|
# Do a blank echo to get the \n back
 | 
						|
echo
 | 
						|
 | 
						|
if [ "$LOCAL_PHP" == "yes" ]; then
 | 
						|
	for mod in $php_modules_install; do
 | 
						|
		enable_local_php_extension "$version" "$mod"
 | 
						|
	done
 | 
						|
	for mod in $php_modules_disable; do
 | 
						|
		disable_local_php_extension "$version" "$mod"
 | 
						|
	done
 | 
						|
fi
 | 
						|
 | 
						|
# Check if installation was successful
 | 
						|
if [ ! -f "$php_fpm" ]; then
 | 
						|
	echo "ERROR: Installation failed, please run the following command manually for debugging:"
 | 
						|
	echo "dnf install $mph"
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$LOCAL_PHP" == "yes" ]; then
 | 
						|
	result_alt_php=$(alternatives --display php | grep /opt/brepo/php${version}/bin/php)
 | 
						|
	if [ -z "$result_alt_php" ]; then
 | 
						|
		alternatives --install /usr/bin/php php /opt/brepo/php${version}/bin/php 1 > /dev/null 2>&1
 | 
						|
	fi
 | 
						|
else
 | 
						|
	result_alt_php=$(alternatives --display php | grep /usr/bin/php$version)
 | 
						|
	if [ -z "$result_alt_php" ]; then
 | 
						|
		alternatives --install /usr/bin/php php /usr/bin/php$version 1 > /dev/null 2>&1
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
# Check if required modules for apache2 are enabled
 | 
						|
if [ "$WEB_SYSTEM" = "apache2" ]; then
 | 
						|
	if [ -f /etc/redhat-release ]; then
 | 
						|
		if ! httpd -M | grep 'proxy_fcgi_module' ; then
 | 
						|
			sed 's/#LoadModule proxy_fcgi_module/LoadModule proxy_fcgi_module/' -i /etc/httpd/conf.modules.d/00-proxy.conf
 | 
						|
			sed 's/#LoadModule proxy_module/LoadModule proxy_module/' -i /etc/httpd/conf.modules.d/00-proxy.conf
 | 
						|
		fi
 | 
						|
		if ! httpd -M | grep 'setenvif_module' ; then
 | 
						|
			sed 's/#LoadModule setenvif_module/LoadModule setenvif_module/' -i /etc/httpd/conf.modules.d/00-base.conf
 | 
						|
		fi
 | 
						|
	else
 | 
						|
		if ! a2query -q -m proxy_fcgi; then
 | 
						|
			a2enmod -q proxy_fcgi
 | 
						|
		fi
 | 
						|
		if ! a2query -q -m setenvif; then
 | 
						|
			a2enmod -q setenvif
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
	$BIN/v-restart-web "yes"
 | 
						|
fi
 | 
						|
 | 
						|
# Configure fpm
 | 
						|
v_tpl=${version//./}
 | 
						|
if [ "$LOCAL_PHP" == "yes" ]; then
 | 
						|
	systemctl enable brepo-php-fpm${version}.service
 | 
						|
	rm -f /opt/brepo/php${version}/etc/php-fpm.d/*
 | 
						|
	cp -f $HESTIA_INSTALL_DIR/php-fpm/dummy.conf /opt/brepo/php${version}/etc/php-fpm.d/
 | 
						|
	sed -i "s/9999/99$v_tpl/g" /opt/brepo/php${version}/etc/php-fpm.d/dummy.conf
 | 
						|
 | 
						|
	# Increase max upload and max post size
 | 
						|
	sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/g" /opt/brepo/php${version}/etc/php.ini
 | 
						|
	sed -i "s/post_max_size = 8M/post_max_size = 100M/g" /opt/brepo/php${version}/etc/php.ini
 | 
						|
	sed -i "s/max_execution_time = 30/max_execution_time = 60/g" /opt/brepo/php${version}/etc/php.ini
 | 
						|
else
 | 
						|
	systemctl enable php${version}-php-fpm
 | 
						|
	rm -f /etc/opt/remi/php${version}/php-fpm.d/*
 | 
						|
	cp -f $HESTIA_INSTALL_DIR/php-fpm/dummy.conf /etc/opt/remi/php${version}/php-fpm.d/
 | 
						|
	sed -i "s/9999/99$v_tpl/g" /etc/opt/remi/php${version}/php-fpm.d/dummy.conf
 | 
						|
 | 
						|
	# Increase max upload and max post size
 | 
						|
	sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/g" /etc/opt/remi/php${version}/php.ini
 | 
						|
	sed -i "s/post_max_size = 8M/post_max_size = 100M/g" /etc/opt/remi/php${version}/php.ini
 | 
						|
	sed -i "s/max_execution_time = 30/max_execution_time = 60/g" /etc/opt/remi/php${version}/php.ini
 | 
						|
fi
 | 
						|
 | 
						|
# Install backend template
 | 
						|
cp -f $HESTIA_INSTALL_DIR/php-fpm/multiphp.tpl \
 | 
						|
	$HESTIA/data/templates/web/php-fpm/PHP-${version/\./_}.tpl
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                       Hestia                             #
 | 
						|
#----------------------------------------------------------#
 | 
						|
 | 
						|
# Logging
 | 
						|
$BIN/v-log-action "system" "Info" "System" "Installed PHP $version."
 | 
						|
log_event "$OK" "$ARGUMENTS"
 | 
						|
 | 
						|
exit
 |