From 66e574dd33a6e2d03f8a156af323839b6fdafba8 Mon Sep 17 00:00:00 2001
From: Alexey Berezhok
Date: Mon, 13 Jan 2025 23:21:50 +0300
Subject: [PATCH] Use local php. Part 1
---
CHANGELOG.md | 7 +-
bin/v-add-web-php | 22 ++----
func/main.sh | 50 +++++++++++++
install/hst-install-rhel.sh | 137 +++++++++++++++++++++++++++++-------
package.json | 2 +-
src/rpm/hestia/hestia.spec | 5 +-
6 files changed, 179 insertions(+), 44 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 875732d..961ee18 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,12 @@
All notable changes to this project will be documented in this file.
-## [1.9.2.rpm] - Alpha release
+## [1.9.4.rpm] - Release
+
+- Fixed sha-512 auth in hestiacp
+- Added quota support for rpm based os
+
+## [1.9.2.rpm] - Release
- Forked from 1.8.6 alpha and reworked for rpm based systems support
- Added passenger support (https://hestiadocs.brepo.ru/docs/extensions/extended-modules.html#passenger-manager)
diff --git a/bin/v-add-web-php b/bin/v-add-web-php
index b96361c..fe46733 100755
--- a/bin/v-add-web-php
+++ b/bin/v-add-web-php
@@ -113,12 +113,7 @@ if ! echo "$DB_SYSTEM" | grep -w 'pgsql' > /dev/null; then
fi
# Install php packages
-if [ -f '/etc/redhat-release' ]; then
- dnf install -q -y $mph > /dev/null 2>&1 &
-else
- apt-get -qq update
- apt-get -y -qq -o Dpkg::Options::="--force-confold" install $mph > /dev/null 2>&1 &
-fi
+dnf install -q -y $mph > /dev/null 2>&1 &
BACK_PID=$!
# Check if package installation is done, print a spinner
@@ -136,20 +131,15 @@ echo
# Check if installation was successful
if [ ! -f "$php_fpm" ]; then
echo "ERROR: Installation failed, please run the following command manually for debugging:"
- if [ -f '/etc/redhat-release' ]; then
- echo "dnf install $mph"
- else
- echo "apt-get install $mph"
- fi
+ echo "dnf install $mph"
fi
-if [ -f '/etc/redhat-release' ]; then
- 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
+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
+
# Check if required modules for apache2 are enabled
if [ "$WEB_SYSTEM" = "apache2" ]; then
if [ -f /etc/redhat-release ]; then
diff --git a/func/main.sh b/func/main.sh
index 6105294..b81a4cf 100644
--- a/func/main.sh
+++ b/func/main.sh
@@ -1449,6 +1449,56 @@ check_backup_conditions() {
done
}
+fn_get_link_name(){
+ str_result=""
+ ext_name=$1
+ pattern=("01-ioncube.ini" "10-opcache.ini" "20-bcmath.ini" "20-bz2.ini" "20-calendar.ini" "20-ctype.ini" "20-curl.ini" "20-dba.ini" "20-dom.ini" "20-enchant.ini" "20-exif.ini" "20-ffi.ini" "20-fileinfo.ini" "20-ftp.ini" "20-gd.ini" "20-gettext.ini" "20-gmp.ini" "20-iconv.ini" "20-imap.ini" "20-intl.ini" "20-ldap.ini" "20-mbstring.ini" "20-mysqlnd.ini" "20-odbc.ini" "20-pdo.ini" "20-phar.ini" "20-posix.ini" "20-pspell.ini" "20-shmop.ini" "20-simplexml.ini" "20-sockets.ini" "20-sqlite3.ini" "20-sysvmsg.ini" "20-sysvsem.ini" "20-sysvshm.ini" "20-tokenizer.ini" "20-xml.ini" "20-xmlwriter.ini" "20-xsl.ini" "30-mysqli.ini" "30-pdo_dblib.ini" "30-pdo_firebird.ini" "30-pdo_mysql.ini" "30-pdo_odbc.ini" "30-pdo_sqlite.ini" "30-xmlreader.ini" "30-zip.ini" "40-apcu.ini" "40-ast.ini" "40-bolt.ini" "40-brotli.ini" "40-geos.ini" "40-imagick.ini" "40-libvirt-php.ini" "40-lz4.ini" "40-pdlib.ini")
+ check="^[0-9]+-${ext_name}.ini"
+ for str in ${pattern[@]}; do
+ if [[ $str =~ $check ]]; then
+ str_result="$str"
+ break
+ fi
+ done
+ if [ -z "$str_result" ]; then
+ echo "50-${ext_name}.ini"
+ else
+ echo "$str_result"
+ fi
+}
+
+
+fn_enable_local_php_extension(){
+ vers=$1
+ ext_name=$2
+ ext_nm=$(fn_get_link_name "$ext_name")
+ if [ -e "/opt/brepo/php${vers}/etc/php.d/" ]; then
+ if [ ! -e "/opt/brepo/php${vers}/etc/php.d/${ext_nm}" -a -e "/opt/brepo/php${vers}/etc/mod-installed/${ext_name}.ini" ]; then
+ pushd "/opt/brepo/php${vers}/etc/php.d/"
+ ln -s ../mod-installed/${ext_name}.ini /opt/brepo/php${vers}/etc/php.d/${ext_nm}
+ popd
+ fi
+ fi
+}
+
+fn_disable_local_php_extension(){
+ vers=$1
+ ext_name=$2
+ ext_nm=$(fn_get_link_name "$ext_name")
+ if [ -e "/opt/brepo/php${vers}/etc/php.d/" ]; then
+ if [ -e "/opt/brepo/php${vers}/etc/php.d/${ext_nm}" ]; then
+ rm -f "/opt/brepo/php${vers}/etc/php.d/${ext_nm}"
+ fi
+ fi
+}
+
+fn_enable_mod_php(){
+ vers=$1
+ if [ -e "/etc/httpd/conf.d.prep/php${vers}.conf" ]; then
+ ln -s /etc/httpd/conf.d.prep/php${vers}.conf /etc/httpd/conf.h.d/mod_php${vers}.conf
+ fi
+}
+
# Define download function
download_file() {
local url=$1
diff --git a/install/hst-install-rhel.sh b/install/hst-install-rhel.sh
index dacb67d..291ddfa 100755
--- a/install/hst-install-rhel.sh
+++ b/install/hst-install-rhel.sh
@@ -38,25 +38,21 @@ HESTIA_COMMON_DIR="$HESTIA/install/common"
VERBOSE='no'
# Define software versions
-HESTIA_INSTALL_VER='1.9.0~alpha'
+HESTIA_INSTALL_VER='1.9.4.rpm~alpha'
# Dependencies
mariadb_v="10.11"
-if [ "$release" -lt 9 ]; then
-multiphp_v=("72" "73" "74" "80" "81" "82" "83")
-else
multiphp_v=("74" "80" "81" "82" "83")
-fi
# default PHP version
php_v="82"
+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=""
+mod_php="enable"
+
software="nginx
httpd.${arch} httpd-tools httpd-itk mod_fcgid mod_suphp mod_ssl
- php${php_v}-php.${arch} php${php_v}-php-cgi.${arch} php${php_v}-php-mysqlnd.${arch} php${php_v}-php-pgsql.${arch}
- php${php_v}-php-pdo php${php_v}-php-common php${php_v}-php-pecl-imagick php${php_v}-php-imap php${php_v}-php-ldap
- php${php_v}-php-pecl-apcu php${php_v}-php-pecl-zip php${php_v}-php-cli php${php_v}-php-opcache php${php_v}-php-xml
- php${php_v}-php-gd php${php_v}-php-intl php${php_v}-php-mbstring php${php_v}-php-pspell php${php_v}-php-readline
MariaDB-client MariaDB-common MariaDB-server
mysql.${arch} mysql-common mysql-server
postgresql-server postgresql sqlite.${arch}
@@ -95,6 +91,7 @@ help() {
-l, --lang Default language default: en
-y, --interactive Interactive install [yes|no] default: yes
-I, --nopublicip Use local ip [yes|no] default: yes
+ -u, --uselocalphp Use PHP from local repo [yes|no] default: yes
-s, --hostname Set hostname
-e, --email Set admin email
-p, --password Set admin password
@@ -206,6 +203,56 @@ validate_email() {
fi
}
+get_link_name(){
+ str_result=""
+ ext_name=$1
+ pattern=("01-ioncube.ini" "10-opcache.ini" "20-bcmath.ini" "20-bz2.ini" "20-calendar.ini" "20-ctype.ini" "20-curl.ini" "20-dba.ini" "20-dom.ini" "20-enchant.ini" "20-exif.ini" "20-ffi.ini" "20-fileinfo.ini" "20-ftp.ini" "20-gd.ini" "20-gettext.ini" "20-gmp.ini" "20-iconv.ini" "20-imap.ini" "20-intl.ini" "20-ldap.ini" "20-mbstring.ini" "20-mysqlnd.ini" "20-odbc.ini" "20-pdo.ini" "20-phar.ini" "20-posix.ini" "20-pspell.ini" "20-shmop.ini" "20-simplexml.ini" "20-sockets.ini" "20-sqlite3.ini" "20-sysvmsg.ini" "20-sysvsem.ini" "20-sysvshm.ini" "20-tokenizer.ini" "20-xml.ini" "20-xmlwriter.ini" "20-xsl.ini" "30-mysqli.ini" "30-pdo_dblib.ini" "30-pdo_firebird.ini" "30-pdo_mysql.ini" "30-pdo_odbc.ini" "30-pdo_sqlite.ini" "30-xmlreader.ini" "30-zip.ini" "40-apcu.ini" "40-ast.ini" "40-bolt.ini" "40-brotli.ini" "40-geos.ini" "40-imagick.ini" "40-libvirt-php.ini" "40-lz4.ini" "40-pdlib.ini")
+ check="^[0-9]+-${ext_name}.ini"
+ for str in ${pattern[@]}; do
+ if [[ $str =~ $check ]]; then
+ str_result="$str"
+ break
+ fi
+ done
+ if [ -z "$str_result" ]; then
+ echo "50-${ext_name}.ini"
+ else
+ echo "$str_result"
+ fi
+}
+
+
+enable_local_php_extension(){
+ vers=$1
+ ext_name=$2
+ ext_nm=$(get_link_name "$ext_name")
+ if [ -e "/opt/brepo/php${vers}/etc/php.d/" ]; then
+ if [ ! -e "/opt/brepo/php${vers}/etc/php.d/${ext_nm}" -a -e "/opt/brepo/php${vers}/etc/mod-installed/${ext_name}.ini" ]; then
+ pushd "/opt/brepo/php${vers}/etc/php.d/"
+ ln -s ../mod-installed/${ext_name}.ini /opt/brepo/php${vers}/etc/php.d/${ext_nm}
+ popd
+ fi
+ fi
+}
+
+disable_local_php_extension(){
+ vers=$1
+ ext_name=$2
+ ext_nm=$(get_link_name "$ext_name")
+ if [ -e "/opt/brepo/php${vers}/etc/php.d/" ]; then
+ if [ -e "/opt/brepo/php${vers}/etc/php.d/${ext_nm}" ]; then
+ rm -f "/opt/brepo/php${vers}/etc/php.d/${ext_nm}"
+ fi
+ fi
+}
+
+enable_mod_php(){
+ vers=$1
+ if [ -e "/etc/httpd/conf.d.prep/php${vers}.conf" ]; then
+ ln -s /etc/httpd/conf.d.prep/php${vers}.conf /etc/httpd/conf.h.d/mod_php${vers}.conf
+ fi
+}
+
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
@@ -245,6 +292,7 @@ for arg; do
--with-debs) args="${args}-D " ;;
--help) args="${args}-h " ;;
--nopublicip) args="${args}-I " ;;
+ --uselocalphp) args="${args}-u" ;;
*)
[[ "${arg:0:1}" == "-" ]] || delim="\""
args="${args}${delim}${arg}${delim} "
@@ -254,7 +302,7 @@ done
eval set -- "$args"
# Parsing arguments
-while getopts "I:a:w:v:j:k:m:M:g:d:x:z:Z:c:t:i:b:r:o:q:l:y:s:e:p:R:fh" Option; do
+while getopts "u:I:a:w:v:j:k:m:M:g:d:x:z:Z:c:t:i:b:r:o:q:l:y:s:e:p:R:fh" Option; do
case $Option in
a) apache=$OPTARG ;; # Apache
w) phpfpm=$OPTARG ;; # PHP-FPM
@@ -284,6 +332,7 @@ while getopts "I:a:w:v:j:k:m:M:g:d:x:z:Z:c:t:i:b:r:o:q:l:y:s:e:p:R:fh" Option; d
f) force='yes' ;; # Force install
h) help ;; # Help
I) nopublicip=$OPTARG ;; # NoPublicIP
+ u) uselocalphp=$OPTARG ;; # UseLocalPHP
*) help ;; # Print help (default)
esac
done
@@ -320,6 +369,7 @@ set_default_value 'api' 'yes'
set_default_value 'nopublicip' 'yes'
set_default_port '8083'
set_default_lang 'en'
+set_default_value 'uselocalphp' 'yes'
# Checking software conflicts
if [ "$proftpd" = 'yes' ]; then
@@ -460,23 +510,23 @@ esac
install_welcome_message() {
DISPLAY_VER=$(echo $HESTIA_INSTALL_VER | sed "s|~alpha||g" | sed "s|~beta||g")
echo
- echo ' _ _ _ _ ____ ____ '
- echo ' | | | | ___ ___| |_(_) __ _ / ___| _ \ '
- echo ' | |_| |/ _ \/ __| __| |/ _` | | | |_) | '
- echo ' | _ | __/\__ \ |_| | (_| | |___| __/ '
- echo ' |_| |_|\___||___/\__|_|\__,_|\____|_| '
+ echo ' _ _ _ _ ____ ____ '
+ echo ' | | | | ___ ___| |_(_) __ _ / ___| _ \ _ _ . . '
+ echo ' | |_| |/ _ \/ __| __| |/ _` | | | |_) | | \| \|\/| '
+ echo ' | _ | __/\__ \ |_| | (_| | |___| __/ |_/|_/| | '
+ echo ' |_| |_|\___||___/\__|_|\__,_|\____|_| | \| | | '
echo " "
- echo " Hestia Control Panel "
+ echo " Hestia Control Panel(rpm edition) "
if [[ "$HESTIA_INSTALL_VER" =~ "beta" ]]; then
echo " BETA RELEASE "
fi
if [[ "$HESTIA_INSTALL_VER" =~ "alpha" ]]; then
echo " DEVELOPMENT SNAPSHOT "
- echo " NOT INTENDED FOR PRODUCTION USE "
echo " USE AT YOUR OWN RISK "
fi
echo " ${DISPLAY_VER} "
- echo " www.hestiacp.com "
+ echo " hestiadocs.brepo.ru "
+ echo " Original: www.hestiacp.com "
echo
echo "========================================================================"
echo
@@ -682,7 +732,19 @@ echo "[ * ] NGINX"
# Installing Remi PHP repo
echo "[ * ] PHP"
-dnf install -y https://rpms.remirepo.net/enterprise/remi-release-$release.rpm
+php_pkgs_lst=""
+if [ "$uselocalphp" == "yes" ]; then
+ write_config_value "LOCAL_PHP" "yes"
+ php_pkgs_lst="brepo-php${php_v} brepo-php${php_v}-mod-apache"
+else
+ write_config_value "LOCAL_PHP" "no"
+ php_pkgs_lst="php${php_v}-php.${arch} php${php_v}-php-cgi.${arch} php${php_v}-php-mysqlnd.${arch} php${php_v}-php-pgsql.${arch}
+ php${php_v}-php-pdo php${php_v}-php-common php${php_v}-php-pecl-imagick php${php_v}-php-imap php${php_v}-php-ldap
+ php${php_v}-php-pecl-apcu php${php_v}-php-pecl-zip php${php_v}-php-cli php${php_v}-php-opcache php${php_v}-php-xml
+ php${php_v}-php-gd php${php_v}-php-intl php${php_v}-php-mbstring php${php_v}-php-pspell php${php_v}-php-readline"
+ dnf install -y https://rpms.remirepo.net/enterprise/remi-release-$release.rpm
+fi
+software="$software $php_pkgs_lst"
# Installing MariaDB repo
if [ "$mysql" = 'yes' ]; then
@@ -803,10 +865,14 @@ rm -rf $HESTIA > /dev/null 2>&1
#----------------------------------------------------------#
if [ "$phpfpm" = 'yes' ]; then
- fpm="php${php_v}-php-fpm php${php_v}-php-cgi.${arch} php${php_v}-php-mysqlnd.${arch} php${php_v}-php-pgsql.${arch}
- php${php_v}-php-pdo php${php_v}-php-common php${php_v}-php-pecl-imagick php${php_v}-php-imap php${php_v}-php-ldap
- php${php_v}-php-pecl-apcu php${php_v}-php-pecl-zip php${php_v}-php-cli php${php_v}-php-opcache php${php_v}-php-xml
- php${php_v}-php-gd php${php_v}-php-intl php${php_v}-php-mbstring php${php_v}-php-pspell php${php_v}-php-readline"
+ if [ "$uselocalphp" == "yes" ]; then
+ fpm="brepo-php${php_v}-fpm"
+ else
+ fpm="php${php_v}-php-fpm php${php_v}-php-cgi.${arch} php${php_v}-php-mysqlnd.${arch} php${php_v}-php-pgsql.${arch}
+ php${php_v}-php-pdo php${php_v}-php-common php${php_v}-php-pecl-imagick php${php_v}-php-imap php${php_v}-php-ldap
+ php${php_v}-php-pecl-apcu php${php_v}-php-pecl-zip php${php_v}-php-cli php${php_v}-php-opcache php${php_v}-php-xml
+ php${php_v}-php-gd php${php_v}-php-intl php${php_v}-php-mbstring php${php_v}-php-pspell php${php_v}-php-readline"
+ fi
software="$software $fpm"
fi
@@ -823,6 +889,8 @@ if [ "$apache" = 'no' ]; then
software=$(echo "$software" | sed -e "s/mod_fcgid//")
software=$(echo "$software" | sed -e "s/mod_ssl//")
software=$(echo "$software" | sed -e "s/php${php_v}-php.${arch}//")
+ software=$(echo "$software" | sed -e "s/brepo-php${php_v}-mod-apache//")
+ mod_php="disable"
fi
if [ "$vsftpd" = 'no' ]; then
software=$(echo "$software" | sed -e "s/vsftpd//")
@@ -871,6 +939,9 @@ if [ "$postgresql" = 'no' ]; then
software=$(echo "$software" | sed -e "s/postgresql-server//")
software=$(echo "$software" | sed -e "s/php${php_v}-php-pgsql.${arch}//")
software=$(echo "$software" | sed -e "s/phppgadmin//")
+ 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
if [ "$fail2ban" = 'no' ]; then
software=$(echo "$software" | sed -e "s/fail2ban//")
@@ -886,6 +957,8 @@ if [ "$phpfpm" = 'yes' ]; then
software=$(echo "$software" | sed -e "s/mod_suphp//")
software=$(echo "$software" | sed -e "s/mod_fcgid//")
software=$(echo "$software" | sed -e "s/php${php_v}-php.${arch}//")
+ software=$(echo "$software" | sed -e "s/brepo-php${php_v}-mod-apache//")
+ mod_php="disable"
fi
if [ -d "$withrpms" ]; then
software=$(echo "$software" | sed -e "s/hestia-nginx//")
@@ -933,7 +1006,21 @@ echo "========================================================================"
echo
# Create PHP symlink
-alternatives --install /usr/bin/php php /opt/remi/php${php_v}/root/usr/bin/php 1
+if [ "$uselocalphp" == "yes" ]; then
+ alternatives --install /usr/bin/php php /opt/brepo/php${php_v}/bin/php 1
+ echo "[ * ] Configuring php settings..."
+ for mod in $php_modules_install; do
+ enable_local_php_extension "${php_v}" "$mod"
+ done
+ for mod in $php_modules_disable; do
+ disable_local_php_extension "${php_v}" "$mod"
+ done
+ if [ "$mod_php" == "enable" ]; then
+ enable_mod_php "${php_v}"
+ fi
+else
+ alternatives --install /usr/bin/php php /opt/remi/php${php_v}/root/usr/bin/php 1
+fi
# Install Hestia packages from local folder
if [ -n "$withrpms" ] && [ -d "$withrpms" ]; then
@@ -1330,7 +1417,7 @@ if [ "$apache" = 'yes' ]; then
# Enable needed modules
if [ "$nginx" = "no" ]; then
- dnf install -y mod_ssl mod_h2
+ dnf install -y mod_ssl mod_http2
fi
# IDK why those modules still here, but ok. if they are disabled by default
diff --git a/package.json b/package.json
index b988694..ceead32 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "hestia",
"private": true,
- "version": "1.9.2.rpm",
+ "version": "1.9.4.rpm",
"description": "An open-source Linux web server control panel.",
"repository": "https://github.com/hestiacp/hestiacp",
"license": "GPL-3.0-or-later",
diff --git a/src/rpm/hestia/hestia.spec b/src/rpm/hestia/hestia.spec
index ae0b12f..b04fd89 100644
--- a/src/rpm/hestia/hestia.spec
+++ b/src/rpm/hestia/hestia.spec
@@ -2,7 +2,7 @@
%global _hardened_build 1
Name: hestia
-Version: 1.9.3
+Version: 1.9.4
Release: 1%{dist}
Summary: Hestia Control Panel
Group: System Environment/Base
@@ -184,6 +184,9 @@ fi
%{_tmpfilesdir}/%{name}.conf
%changelog
+* Sat Jan 11 2025 Alexey Berezhok - 1.9.4-1
+- Added quota support in rpm for xfs and ext4
+
* Sun Jan 05 2025 Alexey Berezhok - 1.9.3-1
- Added minor fixes
- Added authorization fix for rhel 9.5