Files
DirectAdmin-1.62.4/services/custombuild/custombuild.bk/custombuild/build
tuend-work 264cd752ce z
2025-11-13 07:57:06 +07:00

26325 lines
881 KiB
Bash

#!/bin/sh
# This script is written by DirectAdmin and Martynas Bendorius (smtalk)
BUILDSCRIPT_VER=2.0.0
NAME=custombuild
OS=`uname`
WORKDIR=/usr/local/directadmin/${NAME}
cd ${WORKDIR}
#Added for security
chmod 700 ${WORKDIR}/build >/dev/null 2>&1
chmod 700 ${WORKDIR} >/dev/null 2>&1
#Just making sure there are no default grep options set in .bashrc
GREP_OPTIONS=""
if [ "$(id -u)" != "0" ]; then
echo "You must be root to execute the script. Exiting."
exit 1
fi
#If we have no sysbk directory (it's first entry in doAll()), we know that CB has never ran, thus it's a new install, we also have no versions.txt at the same time
if [ ! -d /usr/local/sysbk ]; then
NEW_INSTALL=true
else
NEW_INSTALL=false
fi
doHook(){
if [ ! -z "${1}" ] && [ ! -z "${2}" ]; then
if [ -d ${WORKDIR}/custom/hooks/${1}/${2} ]; then
find ${WORKDIR}/custom/hooks/${1}/${2} -type f -name '*.sh' | while read line; do
echo "Executing '$line'..."
. "$line"
done
HOOK_ERROR_CODE=$?
if [ ${HOOK_ERROR_CODE} -ne 0 ]; then
echo "Hook exited with error code: ${HOOK_ERROR_CODE}. Exiting..."
exit ${HOOK_ERROR_CODE}
fi
fi
fi
}
OPTIONS_CONF=${WORKDIR}/options.conf
PHP_EXTENSIONS_CONF=${WORKDIR}/php_extensions.conf
OPTIONS_CONF_EXISTS=1
if [ ! -e ${OPTIONS_CONF} ]; then
OPTIONS_CONF_EXISTS=0
fi
VERSIONS_FILE=${WORKDIR}/versions.txt
PATCHES_VERSIONS_FILE=${WORKDIR}/patches_versions.txt
VERSIONS_FILE_CUSTOM=${WORKDIR}/custom_versions.txt
VERSIONS_FILE_CL=${WORKDIR}/versions_cl.txt
VERSIONS_FILE_CWAF=${WORKDIR}/versions_cwaf.txt
VERSIONS_FILE_LITESPEED=${WORKDIR}/versions_litespeed.txt
LOCKFILE=${WORKDIR}/.custombuild
LOGFILE=${WORKDIR}/custombuild.log
PROFTPD_PREFIX=/usr
B64=1
DEBIAN_VERSION=/etc/debian_version
if [ -e ${DEBIAN_VERSION} ]; then
OS_DEBIAN_VER=`grep -m1 -o '^[^\.]*' ${DEBIAN_VERSION}`
export DEBIAN_FRONTEND=noninteractive
else
if [ -s /etc/os-release ]; then
OS_CENTOS_VER=`grep -m1 '^VERSION_ID=' /etc/os-release | cut -d. -f1 | cut -d'"' -f2`
else
OS_CENTOS_VER=`grep -m1 -o '[0-9]*\.[0-9]*' /etc/redhat-release | cut -d. -f1`
#CentOS Stream 8 support
if [ -z "${OS_CENTOS_VER}" ]; then
OS_CENTOS_VER=`grep -m1 -o '[0-9]*$' /etc/redhat-release`
fi
fi
if [ -e /etc/yum.repos.d/oracle-epel-ol8.repo ]; then
EPEL_REPO_NAME=ol8_developer_EPEL
else
EPEL_REPO_NAME=epel
fi
fi
if [ "$1" != "update" ]; then
if [ "${OS}" = "FreeBSD" ]; then
echo "${OS} is not supported by DirectAdmin anymore."
exit 1
elif [ -e ${DEBIAN_VERSION} ]; then
if [ "${OS_DEBIAN_VER}" = "7" ] || [ "${OS_DEBIAN_VER}" = "8" ]; then
echo "${OS} ${OS_DEBIAN_VER} is not supported by DirectAdmin anymore."
exit 1
fi
elif [ "${OS_CENTOS_VER}" = "6" ]; then
echo "RHEL/CentOS ${OS_CENTOS_VER} is not supported by DirectAdmin anymore."
exit 1
fi
fi
if uname -m | grep -qE -m1 'amd64|x86_64'; then
B64=1
elif uname -m | grep -qE -m1 'aarch64'; then
B64=2
fi
EXEC_CL_COMMANDS_ONCE=false
CL_COMPONENT_UPDATE=false
CPU_CORES=1
DA_BIN=/usr/local/directadmin/directadmin
MD5SUM=/usr/bin/md5sum
is_os_eol() {
EOL_FILE=${WORKDIR}/configure/custombuild/eol_os.txt
if [ -e ${WORKDIR}/custom/custombuild/eol_os.txt ]; then
EOL_FILE=${WORKDIR}/custom/custombuild/eol_os.txt
fi
DA_OS=`${DA_BIN} o | head -n1 | cut -d"'" -f2 | cut -d"." -f1`
if grep -m1 -q "^${DA_OS}$" ${EOL_FILE}; then
echo 1
else
echo 0
fi
return
}
EXIT_CODE=0
LANG=C
LSWS_HOME=/usr/local/lsws
# Emulate ${!variable}
eval_var() {
var=${1}
if [ -z ${var} ]; then
echo ""
else
eval newval="\$${var}"
echo $newval
fi
}
removeLockfile() {
rm -f ${LOCKFILE}
trap - INT TERM EXIT
}
kill_childs() {
if [ -s ${LOCKFILE} ]; then
CB_PID=`cat ${LOCKFILE}`
for process in `ps -ef | awk -v cb_pid=${CB_PID} '{ if ( $3 == cb_pid ) { print $2 }}'`; do
kill ${process}
done
fi
}
doKill() {
if [ -s ${LOCKFILE} ]; then
kill_childs
removeLockfile
kill -9 ${CB_PID}
exit 0
else
echo "There is no CustomBuild process running."
fi
exit 0
}
getTimezone() {
if [ -e ${DEBIAN_VERSION} ]; then
if [ -e /etc/timezone ]; then
DATETIMEZONE="`cat /etc/timezone`"
fi
else
if [ -e /etc/sysconfig/clock ]; then
DATETIMEZONE="`grep -m1 '^ZONE=' /etc/sysconfig/clock | cut -d'"' -f2 | cut -d= -f2`"
elif [ -e /usr/bin/timedatectl ]; then
DATETIMEZONE="`timedatectl | grep -m1 'Time.*zone:' | cut -d: -f2 | awk '{print $1}'`"
fi
fi
if [ "${DATETIMEZONE}" = "" ]; then
DATETIMEZONE="Europe/London"
fi
echo ${DATETIMEZONE} | awk '{print $1}'
}
random_pass() {
#No special characters yet, because they'd cause problems with regexes and PEAR::DB to split the DNS string correctly in roundcube config.inc.php
RPC=`awk -v min=10 -v max=17 'BEGIN{srand(); print int(min+rand()*(max-min+1))}'`
tr -cd 'a-zA-Z0-9' < /dev/urandom 2>/dev/null | head -c${RPC} # perl generates a random integer between 10 and 16
}
remove_file() {
if [ "$1" = "" ]; then
do_exit 1 "File not specified for remove_file..."
fi
if [ -e $1 ]; then
echo "Removing file: $1..."
rm -f $1
fi
}
remove_directory() {
if [ "$1" = "" ]; then
do_exit 1 "File not specified for remove_file..."
fi
COUNT_SLASHES="`echo \"$1\" | grep -o '/' | wc -l`"
if [ "${COUNT_SLASHES}" -lt 2 ]; then
do_exit 1 "Too dangerous path to remove: $1. Exiting..."
fi
if [ -d $1 ]; then
echo "Removing directory: $1..."
rm -rf $1
fi
}
# Systemd
SYSTEMDDIR=/etc/systemd/system
CB_SYSTEMD=${WORKDIR}/configure/systemd
CB_CUST_SYSTEMD=${WORKDIR}/custom/systemd
SYSTEMD_SCRIPTS=/usr/libexec
HOSTNAME="`hostname -f 2>/dev/null`"
if [ -z "${HOSTNAME}" ] && [ -x /usr/bin/hostnamectl ]; then
HOSTNAME=`/usr/bin/hostnamectl --static | head -n1`
if ! echo "${HOSTNAME}" | grep -m1 -q '\.'; then
HOSTNAME=`grep -m1 -o "${HOSTNAME}\.[^ ]*" /etc/hosts`
fi
fi
if [ -z "${HOSTNAME}" ]; then
HOSTNAME="your.server.com"
fi
#There are used in other sections, so must be executed everytime
PHP1_RELEASE_SET="5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 8.2"
PHP1_SHORTRELEASE_SET="`echo ${PHP1_RELEASE_SET} | tr -d '.'`"
is_cloudlinux_solo() {
CL_SOLO_FILE=/etc/cloudlinux-edition-solo
if [ -e "$CL_SOLO_FILE" ]; then
echo 1
else
echo 0
fi
return
}
USE_ALL_SETTINGS=1
use_all_settings_toggle() {
USE_ALL_SETTINGS=0
}
GETOPT_CASE=1
getopt_case_toggle() {
GETOPT_CASE=0
}
case "$1" in
version) use_all_settings_toggle ;;
kill) use_all_settings_toggle ;;
update_da) getopt_case_toggle ;;
get_timezone) getopt_case_toggle ;;
set_versions_txt) getopt_case_toggle ;;
show_file) getopt_case_toggle ;;
esac
if [ ! -e ${OPTIONS_CONF} ]; then
USE_ALL_SETTINGS=1
fi
if [ "${USE_ALL_SETTINGS}" = "1" ]; then
#################################################
#ALL SETTINGS
#SECTIONS OF OPTIONS
ALL_SECTIONS="PHP_SETTINGS MYSQL_SETTINGS WEBSERVER_SETTINGS WEBAPPS_SETTINGS CLAMAV_SETTINGS MAIL_SETTINGS FTP_SETTINGS STATS_SETTINGS PHP_EXT_SETTINGS CUSTOMBUILD_SETTINGS CRON_SETTINGS CLOUDLINUX_SETTINGS ADVANCED_SETTINGS"
PHP_EXT_SETTINGS="BZ2 GMP IONCUBE IMAP OPCACHE HTSCANNER IGBINARY IMAGICK LDAP PHALCON REDIS SNUFFLEUPAGUS SUHOSIN XMLRPC ZEND"
PHP_SETTINGS="PHP1_RELEASE PHP1_MODE PHP2_RELEASE PHP2_MODE PHP3_RELEASE PHP3_MODE PHP4_RELEASE PHP4_MODE SECURE_PHP PHP_INI PHP_TIMEZONE PHP_INI_TYPE X_MAIL_HEADER"
MYSQL_SETTINGS="MYSQL MARIADB MYSQL_INST MYSQL_BACKUP MYSQL_BACKUP_GZIP MYSQL_BACKUP_DIR MYSQL_FORCE_COMPILE"
WEBSERVER_SETTINGS="UNIT WEBSERVER HTTP_METHODS LITESPEED_SERIALNO MODSECURITY MODSECURITY_RULESET APACHE_VER APACHE_MPM MOD_RUID2 USERDIR_ACCESS HARDEN_SYMLINKS_PATCH USE_HOSTNAME_FOR_ALIAS REDIRECT_HOST REDIRECT_HOST_HTTPS"
WEBAPPS_SETTINGS="PHPMYADMIN PHPMYADMIN_PUBLIC PHPMYADMIN_VER SQUIRRELMAIL ROUNDCUBE WEBAPPS_INBOX_PREFIX"
MAIL_SETTINGS="EXIM EXIMCONF EXIMCONF_RELEASE BLOCKCRACKING EASY_SPAM_FIGHTER SPAMD SA_UPDATE DOVECOT DOVECOT_CONF MAIL_COMPRESS PIGEONHOLE"
CLAMAV_SETTINGS="CLAMAV CLAMAV_EXIM MODSECURITY_UPLOADSCAN PROFTPD_UPLOADSCAN PUREFTPD_UPLOADSCAN SUHOSIN_PHP_UPLOADSCAN"
FTP_SETTINGS="FTPD"
STATS_SETTINGS="AWSTATS WEBALIZER"
CUSTOMBUILD_SETTINGS="CUSTOMBUILD CUSTOMBUILD_PLUGIN AUTOVER BOLD CLEAN CLEANAPACHE CLEAN_OLD_TARBALLS CLEAN_OLD_WEBAPPS DOWNLOADSERVER UNOFFICIAL_MIRRORS"
CRON_SETTINGS="CRON CRON_FREQUENCY EMAIL NOTIFICATIONS UPDATES WEBAPPS_UPDATES"
CLOUDLINUX_SETTINGS="CLOUDLINUX CLOUDLINUX_BETA CAGEFS"
ADVANCED_SETTINGS="CSF CURL SSL_CONFIGURATION REDIS"
PHP_EXT_SETTINGS_DESC="PHP Extension Settings"
PHP_SETTINGS_DESC="PHP Settings"
MYSQL_SETTINGS_DESC="MySQL Settings"
WEBSERVER_SETTINGS_DESC="WEB Server Settings"
WEBAPPS_SETTINGS_DESC="WEB Applications Settings"
CLAMAV_SETTINGS_DESC="ClamAV-related Settings"
MAIL_SETTINGS_DESC="Mail Settings"
FTP_SETTINGS_DESC="FTP Settings"
STATS_SETTINGS_DESC="Statistics Settings"
CUSTOMBUILD_SETTINGS_DESC="CustomBuild Settings"
CRON_SETTINGS_DESC="Cronjob Settings"
CLOUDLINUX_SETTINGS_DESC="CloudLinux Settings"
ADVANCED_SETTINGS_DESC="Advanced Settings"
YESNO_SET="yes no"
#OPTIONS.CONF
PHP1_RELEASE_DEF="8.1"
PHP1_MODE_SET="php-fpm fastcgi suphp lsphp mod_php"
PHP1_MODE_DEF="lsphp"
PHP1_RELEASE_DESC="Default version of PHP."
PHP1_MODE_DESC="Mode of the default PHP version. lsphp is only compatible with LiteSpeed, OpenLiteSpeed WWW servers or CloudLinux+Apache except CloudLinux Solo Edition. For nginx (not as a reverse proxy for apache) php-fpm must be chosen."
PHP2_RELEASE_SET="${PHP1_RELEASE_SET} no"
PHP2_RELEASE_DEF="no"
PHP2_MODE_SET="php-fpm fastcgi suphp lsphp"
PHP2_MODE_DEF="php-fpm"
PHP2_RELEASE_DESC="Additional version of PHP."
PHP2_MODE_DESC="Mode of the additional PHP version."
PHP3_RELEASE_SET="${PHP2_RELEASE_SET}"
PHP3_RELEASE_DEF="${PHP2_RELEASE_DEF}"
PHP3_MODE_SET="${PHP2_MODE_SET}"
PHP3_MODE_DEF="${PHP2_MODE_DEF}"
PHP3_RELEASE_DESC="${PHP2_RELEASE_DESC}"
PHP3_MODE_DESC="${PHP2_MODE_DESC}"
PHP4_RELEASE_SET="${PHP2_RELEASE_SET}"
PHP4_RELEASE_DEF="${PHP2_RELEASE_DEF}"
PHP4_MODE_SET="${PHP2_MODE_SET}"
PHP4_MODE_DEF="${PHP2_MODE_DEF}"
PHP4_RELEASE_DESC="${PHP2_RELEASE_DESC}"
PHP4_MODE_DESC="${PHP2_MODE_DESC}"
SECURE_PHP_SET="${YESNO_SET}"
SECURE_PHP_DEF="no"
SECURE_PHP_DESC="Disable dangerous PHP functions."
EOL_COMMENT="Not in active development anymore, thus not recommended."
#php_extensions.conf things start with PHP_, but they're listed without PHP_ inside the file
PHP_HTSCANNER_SET="${YESNO_SET}"
PHP_HTSCANNER_DEF="no"
PHP_HTSCANNER_DESC="htscanner for Apache (allows to confige php in .htaccess files using PHP)."
PHP_BZ2_SET="${YESNO_SET}"
PHP_BZ2_DEF="no"
PHP_BZ2_DESC="Bz2 extension for PHP."
PHP_GMP_SET="${YESNO_SET}"
PHP_GMP_DEF="no"
PHP_GMP_DESC="GMP extension for PHP."
PHP_LDAP_SET="${YESNO_SET}"
PHP_LDAP_DEF="no"
PHP_LDAP_DESC="LDAP extension for PHP."
PHP_OPCACHE_SET="${YESNO_SET}"
PHP_OPCACHE_DEF="yes"
PHP_OPCACHE_DESC="opCache opcode cacher for PHP."
PHP_IONCUBE_SET="${YESNO_SET}"
PHP_IONCUBE_DEF="yes"
PHP_IONCUBE_DESC="PHP loader for ionCube Secured Files."
PHP_IMAGICK_SET="${YESNO_SET}"
PHP_IMAGICK_DEF="no"
PHP_IMAGICK_DESC="ImageMagick extension for PHP."
PHP_PSR_SET="${YESNO_SET}"
PHP_PSR_DEF="no"
PHP_PSR_DESC="Psr extension for PHP."
PHP_PHALCON_SET="${YESNO_SET}"
PHP_PHALCON_DEF="no"
PHP_PHALCON_DESC="Phalcon extension for PHP."
PHP_REDIS_SET="${YESNO_SET}"
PHP_REDIS_DEF="no"
PHP_REDIS_DESC="Redis extension for PHP."
PHP_READLINE_SET="${YESNO_SET}"
PHP_READLINE_DEF="no"
PHP_READLINE_DESC="Readline extension for PHP."
PHP_IMAP_SET="${YESNO_SET}"
PHP_IMAP_DEF="no"
PHP_IMAP_DESC="IMAP extension for PHP."
PHP_XMLRPC_SET="${YESNO_SET}"
PHP_XMLRPC_DEF="no"
PHP_XMLRPC_DESC="XMLRPC extension for PHP."
PHP_SNUFFLEUPAGUS_SET="${YESNO_SET}"
PHP_SNUFFLEUPAGUS_DEF="no"
PHP_SNUFFLEUPAGUS_DESC="Snuffleupagus security module."
PHP_IGBINARY_SET="${YESNO_SET}"
PHP_IGBINARY_DEF="no"
PHP_IGBINARY_DESC="Drop in replacement for the standard php serializer."
PHP_SUHOSIN_SET="${YESNO_SET}"
PHP_SUHOSIN_DEF="no"
PHP_SUHOSIN_DESC="Suhosin advanced protection system for PHP. ${EOL_COMMENT}"
PHP_ZEND_SET="${YESNO_SET}"
PHP_ZEND_DEF="yes"
PHP_ZEND_DESC="Zend Guard Loader is a free runtime application that enables PHP to run the scripts encoded by Zend Guard. ${EOL_COMMENT}"
###end of php_extensions.conf
PHP_INI_SET="${YESNO_SET}"
PHP_INI_DEF="no"
PHP_INI_DESC="Enables ability to update php.ini file of PHP (rewrites any customizations!)."
PHP_TIMEZONE_SET="userinput"
PHP_TIMEZONE_DEF="$(getTimezone)"
PHP_TIMEZONE_DESC="date.timezone setting in php.ini file of PHP. https://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone."
PHP_INI_TYPE_SET="production development"
PHP_INI_TYPE_DEF="production"
PHP_INI_TYPE_DESC="Type of php.ini file. php.ini-development contains settings recommended for use in development environments. php.ini-production contains settings recommended for use in production environments."
REDIS_SET="${YESNO_SET}"
REDIS_DEF="no"
REDIS_DESC="Redis key-value database."
SUHOSIN_PHP_UPLOADSCAN_SET="${YESNO_SET}"
SUHOSIN_PHP_UPLOADSCAN_DEF="no"
SUHOSIN_PHP_UPLOADSCAN_DESC="Scan PHP uploaded scripts using suhosin upload verification script and ClamAV antivirus (clamdscan). ClamAV must be installed and suhosin option should be enabled for the setting to work."
#OUTPUT AS x-mail-header
X_MAIL_HEADER_SET="${YESNO_SET}"
X_MAIL_HEADER_DEF="yes"
X_MAIL_HEADER_DESC="mail.add_x_header setting in php.ini file of PHP. https://www.php.net/manual/en/mail.configuration.php#ini.mail.add-x-header"
UNIT_SET="${YESNO_SET}"
UNIT_DEF="no"
UNIT_DESC="Nginx Unit. Dynamic Application Server. ALPHA support."
WEBSERVER_SET="apache nginx nginx_apache litespeed openlitespeed"
WEBSERVER_DEF="openlitespeed"
WEBSERVER_DESC="WWW Server."
HTTP_METHODS_SET="userinput"
HTTP_METHODS_DEF="ALL"
HTTP_METHODS_DESC="Allowed HTTP methods. Enabled with rewrite_confs or webserver update."
LITESPEED_SERIALNO_SET="userinput"
LITESPEED_SERIALNO_DEF="trial"
LITESPEED_SERIALNO_DESC="Serial number of LiteSpeed Enterprise license."
MODSECURITY_SET="${YESNO_SET}"
MODSECURITY_DEF="no"
MODSECURITY_DESC="ModSecurity - Web application firewall."
MODSECURITY_RULESET_SET="comodo owasp no"
MODSECURITY_RULESET_DEF="owasp"
MODSECURITY_RULESET_DESC="ModSecurity rule set. Set to 'no' to use no ruleset. Comodo option provides Comodo Rule Set for ModSecurity: https://modsecurity.comodo.com/. OWASP ModSecurity Core Rule Set: https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project. Add custom rules to custom/modsecurity/conf, they'd be added automatically to /etc/modsecurity.d after './build modsecurity' or './build modsecurity_rules' is ran."
APACHE_VER_SET="2.4"
APACHE_VER_DEF="2.4"
APACHE_VER_DESC="Apache version."
APACHE_MPM_SET="prefork event worker auto"
APACHE_MPM_DEF="auto"
APACHE_MPM_DESC="Apache Multi-Processing Module. 'auto' mode sets MPM to be Prefork if PHP as mod_php is chosen, because this way PHP is not thread-safe. Otherwise Event MPM is set."
USERDIR_ACCESS_SET="${YESNO_SET}"
USERDIR_ACCESS_DEF="no"
USERDIR_ACCESS_DESC="Allows accessing contents of public_html using https://hostname/~user, if enabled."
MOD_RUID2_SET="${YESNO_SET}"
#mod_ruid2 segfaults on debian, centos8
MOD_RUID2_DEF="no"
MOD_RUID2_DESC="mod_ruid2 is an Apache extension that allows requests to a domain to run as the owner of that domain, instead of the Apache user. Not supported on newer Debian/AlmaLinux systems."
#OUTPUT as harden-symlinks-patch
HARDEN_SYMLINKS_PATCH_SET="${YESNO_SET}"
HARDEN_SYMLINKS_PATCH_DEF="yes"
HARDEN_SYMLINKS_PATCH_DESC="Patches apache to include hardened symlinks patch. https://da-mirror.wpcloud.vn/services/custombuild/harden-symlinks-2.4.patch."
USE_HOSTNAME_FOR_ALIAS_SET="${YESNO_SET} auto"
USE_HOSTNAME_FOR_ALIAS_DEF="no"
USE_HOSTNAME_FOR_ALIAS_DESC="Redirects WEB appplications addresses to server hostname. Useful with FastCGI mode of PHP ('auto' option enables it for FastCGI mode of PHP only)."
REDIRECT_HOST_SET="userinput"
REDIRECT_HOST_DEF="${HOSTNAME}"
REDIRECT_HOST_DESC="Hostname used for use_hostname_for_alias setting."
REDIRECT_HOST_HTTPS_SET="${YESNO_SET}"
REDIRECT_HOST_HTTPS_DEF="no"
REDIRECT_HOST_HTTPS_DESC="Enables SSL redirection for use_hostname_for_alias setting."
MYSQL_INST_SET="mysql mariadb no"
if [ -e /root/.skip_mysql_install ]; then
MYSQL_INST_DEF="no"
else
MYSQL_INST_DEF="mariadb"
fi
MYSQL_INST_DESC="Enables management of MySQL/MariaDB using CustomBuild."
MYSQL_DESC="MySQL version."
MARIADB_DESC="MariaDB version."
MYSQL_BACKUP_SET="${YESNO_SET}"
MYSQL_BACKUP_DEF="yes"
MYSQL_BACKUP_DESC="Backups MySQL databases before the installation of MySQL/MariaDB server."
MYSQL_BACKUP_GZIP_SET="${YESNO_SET}"
MYSQL_BACKUP_GZIP_DEF="no"
MYSQL_BACKUP_GZIP_DESC="Compress MySQL database backups."
MYSQL_BACKUP_DIR_SET="userinput"
MYSQL_BACKUP_DIR_DEF="/usr/local/directadmin/custombuild/mysql_backups"
MYSQL_BACKUP_DIR_DESC="Sets full path for mysql_backup option were MySQL backups should be placed."
MYSQL_FORCE_COMPILE_SET="${YESNO_SET}"
MYSQL_FORCE_COMPILE_DEF="no"
if [ "${B64}" = "2" ]; then
MYSQL_FORCE_COMPILE_DEF="yes"
fi
MYSQL_FORCE_COMPILE_DESC="Force compilation of MySQL/MariaDB instead of using system packages (RPM, DEB)"
PHPMYADMIN_SET="${YESNO_SET}"
if [ -e /root/.skip_mysql_install ]; then
PHPMYADMIN_DEF="no"
else
PHPMYADMIN_DEF="yes"
fi
PHPMYADMIN_DESC="Enables management of phpMyAdmin (Web application to manage MySQL databases) using CustomBuild."
PHPMYADMIN_PUBLIC_SET="${YESNO_SET}"
PHPMYADMIN_PUBLIC_DEF="yes"
PHPMYADMIN_PUBLIC_DESC="Makes phpMyAdmin accessible over /phpMyAdmin/ for everyone, if set to 'yes'. Setting this option to 'no' would make it available only from DirectAdmin (single-sign-on)."
PHPMYADMIN_VER_SET="3 4 5"
PHPMYADMIN_VER_DEF="5"
PHPMYADMIN_VER_DESC="Selects the version of phpMyAdmin to install. Takes effect only when phpmyadmin option is enabled."
SQUIRRELMAIL_SET="${YESNO_SET}"
SQUIRRELMAIL_DEF="no"
SQUIRRELMAIL_DESC="Enables management of SquirrelMail webmail using CustomBuild."
ROUNDCUBE_SET="${YESNO_SET}"
if [ -e /root/.skip_mysql_install ]; then
ROUNDCUBE_DEF="no"
else
ROUNDCUBE_DEF="yes"
fi
ROUNDCUBE_DESC="Enables management of RoundCube webmail using CustomBuild."
WEBAPPS_INBOX_PREFIX_SET="${YESNO_SET}"
WEBAPPS_INBOX_PREFIX_DEF="no"
WEBAPPS_INBOX_PREFIX_DESC="Adds INBOX. prefix to all of the mailbox folders in SquirrelMail/RoundCube (like: INBOX.Sent instead of just Sent)"
EXIM_SET="${YESNO_SET}"
EXIM_DEF="yes"
EXIM_DESC="Enables management of Exim MTA (Mail Transfer Agent) using CustomBuild."
EXIMCONF_SET="${YESNO_SET}"
EXIMCONF_DEF="yes"
EXIMCONF_DESC="Enables ability to update exim.conf and exim.pl files of Exim MTA (rewrites any customizations!)."
EXIMCONF_RELEASE_SET="4.5"
EXIMCONF_RELEASE_DEF="4.5"
EXIMCONF_RELEASE_DESC="Sets appopriate version of exim.conf to update."
BLOCKCRACKING_SET="${YESNO_SET}"
BLOCKCRACKING_DEF="no"
BLOCKCRACKING_DESC="Enables BlockCracking in exim.conf for outgoing spam mitigation. Requires exim configuration version 4.3 or higher. More information: https://forum.directadmin.com/showthread.php?t=50059."
EASY_SPAM_FIGHTER_SET="${YESNO_SET}"
EASY_SPAM_FIGHTER_DEF="no"
EASY_SPAM_FIGHTER_DESC="Enables Easy Spam Figher in exim.conf for incoming spam mitigation. Requires exim configuration version 4.3 or higher. More information: https://forum.directadmin.com/showthread.php?t=50059."
CLAMAV_SET="${YESNO_SET}"
CLAMAV_DEF="no"
CLAMAV_DESC="Enables management of ClamAV antivirus engine using CustomBuild. Enables ClamAV automatically in Exim configuration."
CLAMAV_EXIM_SET="${YESNO_SET}"
CLAMAV_EXIM_DEF="yes"
CLAMAV_EXIM_DESC="Enables ClamAV automatically in Exim configuration together with the installation of ClamAV."
SPAMD_SET="rspamd spamassassin no"
SPAMD_DEF="no"
SPAMD_DESC="Enables management of Rspamd or SpamAssassin spam filters using CustomBuild. Enables Rspamd or SpamAssassin automatically in Exim configuration."
SA_UPDATE_SET="no daily weekly monthly"
SA_UPDATE_DEF="daily"
SA_UPDATE_DESC="Installs a cronjob for sa-update to update SpamAssassin Spam Filter Rules daily, weekly or monthly using CustomBuild. Takes effect only if SpamAssassin is enabled on the server, at the installation time of SpamAssassin, CustomBuild cronjob or 'spamassassin_cron' call."
DOVECOT_SET="${YESNO_SET}"
DOVECOT_DEF="yes"
DOVECOT_DESC="Enables management of Dovecot IMAP and POP3 email server using CustomBuild."
DOVECOT_CONF_SET="${YESNO_SET}"
DOVECOT_CONF_DEF="yes"
DOVECOT_CONF_DESC="Enables management of Dovecot configuration files using CustomBuild."
PIGEONHOLE_SET="${YESNO_SET}"
PIGEONHOLE_DEF="yes"
PIGEONHOLE_DESC="Enables management of Pigeonhole (enables Sieve language and the ManageSieve protocol, allows users to configure email filtering in their email clients) for Dovecot IMAP and POP3 email server using CustomBuild. When this setting is enabled, Pigeonhole is enabled with update/installation of Dovecot. RoundCube plugin to manage email filtering is enabled with update/installation of RoundCube."
MAIL_COMPRESS_SET="${YESNO_SET}"
MAIL_COMPRESS_DEF="no"
MAIL_COMPRESS_DESC="Enables gzip compression for new emails (using zlib in dovecot). Compressed emails take less space (when testing, compressed mail folders took ~20% of their initial disk space). To compress old emails manual action is needed (script to automate the process: dovecot_compress.sh)."
AWSTATS_SET="${YESNO_SET}"
AWSTATS_DEF="no"
AWSTATS_DESC="Enables management of AWstats (generates advanced web server statistics graphically) using CustomBuild."
WEBALIZER_SET="${YESNO_SET}"
WEBALIZER_DEF="yes"
WEBALIZER_DESC="Enables management of Webalizer (generates advanced web server statistics graphically) using CustomBuild."
MODSECURITY_UPLOADSCAN_SET="${YESNO_SET}"
MODSECURITY_UPLOADSCAN_DEF="no"
MODSECURITY_UPLOADSCAN_DESC="Scan HTTP uploaded files using ClamAV, when ModSecurity is enabled. ClamAV needs to be installed for this setting to work."
FTPD_SET="proftpd pureftpd no"
FTPD_DEF="pureftpd"
FTPD_DESC="FTP Server."
PUREFTPD_UPLOADSCAN_SET="${YESNO_SET}"
PUREFTPD_UPLOADSCAN_DEF="no"
PUREFTPD_UPLOADSCAN_DESC="Scan FTP uploaded files in Pure-FTPd using ClamAV. ClamAV needs to be installed for this setting to work."
PROFTPD_UPLOADSCAN_SET="${YESNO_SET}"
PROFTPD_UPLOADSCAN_DEF="no"
PROFTPD_UPLOADSCAN_DESC="Scan FTP uploaded files in ProFTPd using ClamAV. ClamAV needs to be installed for this setting to work."
CURL_SET="${YESNO_SET}"
CURL_DEF="no"
CURL_DESC="Enables management of cURL (library and command-line tool for transferring data using various protocols) using CustomBuild."
SSL_CONFIGURATION_SET="modern intermediate old"
SSL_CONFIGURATION_DEF="intermediate"
SSL_CONFIGURATION_DESC="Auto-generated SSL ciphers/protocol list used in configuration, based on https://ssl-config.mozilla.org/."
CUSTOMBUILD_SET="1.1 1.2 2.0"
CUSTOMBUILD_DEF="2.0"
CUSTOMBUILD_DESC="CustomBuild version to be used. WARNING: not recommended to change the setting without deep knowledge about upgrade/downgrade of the CustomBuild script."
CUSTOMBUILD_PLUGIN_SET="${YESNO_SET}"
CUSTOMBUILD_PLUGIN_DEF="yes"
CUSTOMBUILD_PLUGIN_DESC="CustomBuild plugin, shown in DirectAdmin admin level."
AUTOVER_SET="${YESNO_SET}"
AUTOVER_DEF="no"
AUTOVER_DESC="Updates versions.txt file (latest versions of the packages are listed there) with every execution of the CustomBuild script."
BOLD_SET="${YESNO_SET}"
BOLD_DEF="yes"
BOLD_DESC="Enables bold effect for important output in terminal."
CLEAN_SET="${YESNO_SET}"
CLEAN_DEF="yes"
CLEAN_DESC="Cleans not needed folders in the CustomBuild directory. Folders are often left from the previous packge installations."
CLEANAPACHE_SET="${YESNO_SET}"
CLEANAPACHE_DEF="yes"
CLEANAPACHE_DESC="Removes Apache directory when the installation is finished. Takes effect only when 'clean' option is enabled."
CLEAN_OLD_TARBALLS_SET="${YESNO_SET}"
CLEAN_OLD_TARBALLS_DEF="yes"
CLEAN_OLD_TARBALLS_DESC="Removes tarballs of old (unused) packages."
CLEAN_OLD_WEBAPPS_SET="${YESNO_SET}"
CLEAN_OLD_WEBAPPS_DEF="yes"
CLEAN_OLD_WEBAPPS_DESC="Removes old WEB application folders from /var/www/html. Takes effect when any WEB application is installed/updated."
DOWNLOADSERVER_SET="da-mirror.wpcloud.vn"
if [ -s ${WORKDIR}/servers.txt ]; then
DOWNLOADSERVER_SET="da-mirror.wpcloud.vn `awk '{ printf "%s ", $0 }' ${WORKDIR}/servers.txt`"
fi
DOWNLOADSERVER_DEF="da-mirror.wpcloud.vn"
DOWNLOADSERVER_DESC="Sets which download server to use to download files needed by the CustomBuild script. Any other server than ${DOWNLOADSERVER_DEF} may take 24 hours for latest files to be synced, however they may have better speeds than ${DOWNLOADSERVER_DEF}."
UNOFFICIAL_MIRRORS_SET="${YESNO_SET}"
UNOFFICIAL_MIRRORS_DEF="no"
UNOFFICIAL_MIRRORS_DESC="Enables the use of unofficial mirror. DirectAdmin is not responsible for the content hosted there. Not recommended to use."
CRON_SET="${YESNO_SET}"
CRON_DEF="yes"
CRON_DESC="Enables cronjob for CustomBuild scheduled jobs set."
CRON_FREQUENCY_SET="daily weekly monthly"
CRON_FREQUENCY_DEF="daily"
CRON_FREQUENCY_DESC="Sets the execution frequency of the Cronjob (scheduled jobs). Takes effect only when the 'cron' option is enabled."
EMAIL_SET="userinput"
EMAIL_DEF="email@domain.com"
EMAIL_DESC="Sets the email for notifications about the updates available. Takes effect only when 'cron' and 'notifications' options are enabled."
NOTIFICATIONS_SET="${YESNO_SET}"
NOTIFICATIONS_DEF="no"
NOTIFICATIONS_DESC="Sets the email for notifications about the updates available. Takes effect only when 'cron' option is enabled."
UPDATES_SET="${YESNO_SET}"
UPDATES_DEF="no"
UPDATES_DESC="Enables automatic updates of all available to update packages managed by the CustomBuild script. Takes effect only when 'cron' option is enabled. WARNING: not recommended in production!"
WEBAPPS_UPDATES_SET="${YESNO_SET}"
WEBAPPS_UPDATES_DEF="no"
WEBAPPS_UPDATES_DESC="Enables automatic updates of all WEB applications enabled. Takes effect only when 'cron' option is enabled."
CSF_SET="${YESNO_SET}"
CSF_DEF="no"
CSF_DESC="Enables ConfigServer Security & Firewall (csf)."
CLOUDLINUX_SET="${YESNO_SET}"
if uname -a | grep -m1 -q '\.lve' || uname -a | grep -m1 -q 'el7h'; then
CLOUDLINUX_DEF="yes"
else
CLOUDLINUX_DEF="no"
fi
CLOUDLINUX_DESC="Enables CloudLinux support in the CustomBuild script (automatic patching using CloudLinux patches for specific components). NOTE: CloudLinux needs to be installed on the system. https://www.cloudlinux.com."
CLOUDLINUX_BETA_SET="${YESNO_SET}"
CLOUDLINUX_BETA_DEF="no"
CLOUDLINUX_BETA_DESC="Enables BETA repository for CloudLinux packages. NOTE: CloudLinux needs to be installed on the system. https://www.cloudlinux.com."
CAGEFS_SET="${YESNO_SET}"
if [ -x /usr/sbin/cagefsctl ]; then
CAGEFS_DEF="yes"
else
CAGEFS_DEF="no"
fi
CAGEFS_DESC="Enables support of CageFS component by CloudLinux in the CustomBuild script (automatic updating of files in CageFS using 'cagefsctl --force-update'). NOTE: CloudLinux needs to be installed on the system. https://www.cloudlinux.com."
fi
#################################################
showVersion() {
echo "${BUILDSCRIPT_VER} (rev: 2945)"
}
if [ ! -d ${WORKDIR}/patches ]; then
mkdir -p ${WORKDIR}/patches
chmod 700 ${WORKDIR}/patches
fi
doCSFpignore() {
CSF_PIGNORE="/etc/csf/csf.pignore"
CSF_PIGNORE_SOURCE="${WORKDIR}/configure/csf.pignore"
if [ -s ${WORKDIR}/custom/csf.pignore ]; then
CSF_PIGNORE_SOURCE="${WORKDIR}/custom/csf.pignore"
fi
if [ -s ${CSF_PIGNORE} ] && [ -s ${CSF_PIGNORE_SOURCE} ]; then
#very nice&quick way to add missing lines in destination file
grep -x -f ${CSF_PIGNORE_SOURCE} ${CSF_PIGNORE} | awk 'FNR==NR{a[$0]; next} !($0 in a)' - ${CSF_PIGNORE_SOURCE} >> ${CSF_PIGNORE}
#if file has been edited - restart lfd (suppress errors/warnings, as it could be disabled)
find ${CSF_PIGNORE} -mmin -1 -type f -print -exec csf --lfd restart 2>&1 >/dev/null \;
fi
}
initLogfile() {
LOG_IP=localhost
if [ `who | wc -l` -gt 0 ]; then
LOG_IP=`echo $SSH_CLIENT | cut -d' ' -f1`
fi
if [ ! -e ${LOGFILE} ]; then
touch ${LOGFILE}
chmod 600 ${LOGFILE}
else
LOGSIZE=`stat -c %s ${LOGFILE}`
#Rotate the logfile if the filesize is >10MB
if [ ${LOGSIZE} -gt 10485760 ]; then
rm -f ${LOGFILE}.1
mv ${LOGFILE} ${LOGFILE}.1
touch ${LOGFILE}
chmod 600 ${LOGFILE}
fi
fi
}
if [ "`grep -c processor /proc/cpuinfo`" -gt 0 ]; then
CPU_CORES="`grep -c processor /proc/cpuinfo`"
fi
MEMORY=`grep -m1 'MemTotal' /proc/meminfo | awk '{print $2}'`
#Avoid OOM by making CB not cross-compile on boxes with low amount of memory
if [ ! -z "${MEMORY}" ]; then
if [ ${MEMORY} -lt 2097152 ]; then
CPU_CORES=1
fi
fi
#check path for /usr/local/bin
if ! echo "${PATH}" | grep -qF -m1 '/usr/local/bin:'; then
export PATH=/usr/local/bin:$PATH
fi
#check PKG_CONFIG_PATH for /usr/local/lib/pkgconfig
if ! echo "${PKG_CONFIG_PATH}" | grep -qF -m1 '/usr/local/lib/pkgconfig:'; then
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}
fi
# Main variables
HTTPDDIR=/etc/httpd
HTTPDCONF=/etc/httpd/conf
HTTPD_CONF=${HTTPDCONF}/httpd.conf
PHPMODULES=${HTTPDCONF}/extra/httpd-phpmodules.conf
NGINXCONF=/etc/nginx
WWWDIR=/var/www/html
DACONF_FILE=/usr/local/directadmin/conf/directadmin.conf
DACONF_TEMPLATE_FILE=/usr/local/directadmin/data/templates/directadmin.conf
DA_MY_CNF=/usr/local/directadmin/conf/my.cnf
SERVICES=/usr/local/directadmin/data/admin/services.status
TASK_QUEUE=/usr/local/directadmin/data/task.queue.cb
DOVECOT_CONFIG=/etc/dovecot/dovecot.conf
SKIP_CMD_OPTIONS=0
skip_cmd_toggle() {
SKIP_CMD_OPTIONS=1
}
case "$1" in
"") skip_cmd_toggle ;;
opt_help) skip_cmd_toggle ;;
set) skip_cmd_toggle ;;
set_php) skip_cmd_toggle ;;
get_versions_txt) skip_cmd_toggle ;;
update_script) skip_cmd_toggle ;;
version) skip_cmd_toggle ;;
kill) skip_cmd_toggle ;;
update_da) skip_cmd_toggle ;;
list_configs_json) skip_cmd_toggle ;;
settings_json) skip_cmd_toggle ;;
get_timezone) skip_cmd_toggle ;;
custom_config) skip_cmd_toggle ;;
set_versions_txt) skip_cmd_toggle ;;
show_component_config) skip_cmd_toggle ;;
remove_customized_config) skip_cmd_toggle ;;
show_file) skip_cmd_toggle ;;
check_options) skip_cmd_toggle ;;
update) skip_cmd_toggle ;;
update_data) skip_cmd_toggle ;;
gen_help_json) skip_cmd_toggle ;;
versions_json) skip_cmd_toggle ;;
versions_ajax) skip_cmd_toggle ;;
versions_nobold) skip_cmd_toggle ;;
versions) skip_cmd_toggle ;;
gen_help) skip_cmd_toggle ;;
list_removals) skip_cmd_toggle ;;
list_removals_json) skip_cmd_toggle ;;
remove_items) skip_cmd_toggle ;;
esac
IPV6=0
if [ "${SKIP_CMD_OPTIONS}" = "0" ]; then
if [ -e ${DA_BIN} ]; then
IPV6=`${DA_BIN} c | grep -m1 '^ipv6=' | cut -d= -f2`
fi
fi
CWD=${WORKDIR}
FORCE=0
HIDE_CHANGES=0
# Applications variables
APPUSER=webapps
APPGROUP=${APPUSER}
APP_TMP=/var/www/tmp
STRINGS=/usr/bin/strings
MYSQL_DATA=/var/lib/mysql
if [ -e /etc/debian_version ]; then
# If /var/lib/mysql doesn't exist, and /home/mysql is there - our datadir is /home/mysql, used on very old boxes only
if [ -d /home/mysql ] && [ ! -d /var/lib/mysql/mysql ]; then
MYSQL_DATA=/home/mysql
fi
MYSQL_BIN=/usr/local/mysql/bin/mysql
elif [ -x /usr/local/mysql/bin/mysql ]; then
MYSQL_BIN=/usr/local/mysql/bin/mysql
elif [ ! -x /usr/bin/mysql ] && [ "${OS_CENTOS_VER}" != "7" ] && [ "${OS_CENTOS_VER}" != "8" ]; then
MYSQL_BIN=/usr/local/mysql/bin/mysql
else
MYSQL_BIN=/usr/bin/mysql
fi
#Check if mysql database exists
if [ -d ${MYSQL_DATA}/mysql ]; then
SQL_PATH_IS_EMPTY=false
else
SQL_PATH_IS_EMPTY=true
fi
CURL_CONNECT_OPTIONS="-L --progress-bar --connect-timeout 5 --retry 3 --fail"
#$1 = https://files1.da.com/some/exim.conf
#$2 = /etc/exim.conf
safeDownloadWithMove() {
OUTPUT_FILE=$1
DOWNLOAD_URL=$2
GLOBAL_TMP=${CWD}/temp
if [ ! -d "${GLOBAL_TMP}" ]; then
mkdir -p "${GLOBAL_TMP}"
fi
TMP_FILE=$(mktemp --tmpdir=${GLOBAL_TMP} --suffix=safeDownloadWithMove)
if [ -z "${TMP_FILE}" ]; then
do_exit 1 "Unable to create temporary file ${TMP_FILE}, exiting..."
fi
TRY=0
while ! curl ${CURL_CONNECT_OPTIONS} -o "${TMP_FILE}" "${DOWNLOAD_URL}"; do
echo "Download of ${DOWNLOAD_URL} failed, re-downloading the file..."
TRY=`expr ${TRY} + 1`
if [ ${TRY} -eq 4 ]; then
rm -f "${TMP_FILE}"
do_exit 1 "Download of ${DOWNLOAD_URL} failed ${TRY} times, exiting..."
fi
done
if ! mv -f "${TMP_FILE}" "${OUTPUT_FILE}"; then
rm -f "${TMP_FILE}"
do_exit 1 "Move from ${TMP_FILE} to ${OUTPUT_FILE} failed, exiting..."
fi
}
MARIADB_DEF="10.6"
MYSQL_DEF="5.7"
if [ "${OS_CENTOS_VER}" = "8" ]; then
#We don't have RPMs for EL8 of older versions in our mirrors
MARIADB_SET="10.3 10.4 10.5 10.6"
MYSQL_SET="8.0"
MYSQL_DEF="8.0"
elif [ "${OS_CENTOS_VER}" = "9" ]; then
#Even if we use binaries there, we still want to stay rpm-compatible
MARIADB_SET="10.6"
MYSQL_DEF="10.6"
MYSQL_SET="8.0"
MYSQL_DEF="8.0"
else
MARIADB_SET="5.5 10.0 10.1 10.2 10.3 10.4 10.5 10.6"
MYSQL_SET="5.5 5.6 5.7 8.0"
fi
# Check if workdir exists
if [ ! -d ${WORKDIR} ]; then
do_exit 1 "Directory ${WORKDIR} does not exist."
fi
file_mtime="stat --format=%Y"
set_LoadModule() {
# Add to httpd-phpmodules.conf
MODULE_NAME=$1
MODULE_FILENAME=$2
MODULE_FULLPATH=/usr/lib/apache/${MODULE_FILENAME}
if ! grep -m1 -q " ${MODULE_NAME} " ${PHPMODULES} && [ -e ${MODULE_FULLPATH} ]; then
echo "LoadModule ${MODULE_NAME} /usr/lib/apache/${MODULE_FILENAME}" >> ${PHPMODULES}
fi
perl -pi -e "s|^LoadModule ${MODULE_NAME}|#LoadModule ${MODULE_NAME}|g" /etc/httpd/conf/httpd.conf
}
ensure_my_cnf() {
#1 = path to cnf
#2 = user
#3 = pass
#4 = optional source file to compare with. update 1 if 4 is newer.
# host will be on the command line, as that's how DA already does it.
E_MY_CNF=$1
E_MY_CNF_DIR="`dirname ${E_MY_CNF}`"
if [ ! -d ${E_MY_CNF_DIR} ]; then
mkdir -p ${E_MY_CNF_DIR}
fi
W=0
if [ ! -s ${E_MY_CNF} ]; then
W=1
fi
if [ "${W}" = "0" ] && [ "${4}" != "" ]; then
if [ ! -s $4 ]; then
if [ -d "${MYSQL_DATA}" ]; then
echo "ensure_my_cnf: cannot find $4"
fi
W=1
else
MY_CNF_T=`${file_mtime} ${E_MY_CNF}`
SRC_CNF_T=`${file_mtime} ${4}`
if [ "${MY_CNF_T}" -lt "${SRC_CNF_T}" ]; then
echo "Found outdated ${E_MY_CNF}. Rewriting from ${4}"
W=1
fi
fi
fi
if [ "${W}" = "1" ]; then
echo '[client]' > ${E_MY_CNF}
chmod 600 ${E_MY_CNF}
echo "user=${2}" >> ${E_MY_CNF}
ESC_PASS=`echo "${3}" | sed -e 's/\"/\\\"/'`
echo "password=\"${ESC_PASS}\"" >> ${E_MY_CNF}
fi
}
csf_enable_quic() {
if [ -s /etc/csf/csf.conf ]; then
CSFRESTART=false
if ! grep -m1 -q '^UDP_IN = ".*443' /etc/csf/csf.conf && grep -m1 -q '^TCP_IN = ".*443' /etc/csf/csf.conf; then
if ! grep -m1 -q '^UDP_IN = ""' /etc/csf/csf.conf; then
perl -pi -e 's|^UDP_IN \= "|UDP_IN = "443,|g' /etc/csf/csf.conf
CSFRESTART=true
fi
fi
if ! grep -m1 -q '^UDP_OUT = ".*443' /etc/csf/csf.conf && grep -m1 -q '^TCP_OUT = ".*443' /etc/csf/csf.conf; then
if ! grep -m1 -q '^UDP6_IN = ""' /etc/csf/csf.conf; then
perl -pi -e 's|^UDP_OUT \= "|UDP_OUT = "443,|g' /etc/csf/csf.conf
CSFRESTART=true
fi
fi
if ! grep -m1 -q '^UDP6_IN = ".*443' /etc/csf/csf.conf && grep -m1 -q '^TCP6_IN = ".*443' /etc/csf/csf.conf; then
if ! grep -m1 -q '^UDP6_IN = ""' /etc/csf/csf.conf; then
perl -pi -e 's|^UDP6_IN \= "|UDP6_IN = "443,|g' /etc/csf/csf.conf
CSFRESTART=true
fi
fi
if ! grep -m1 -q '^UDP6_OUT = ".*443' /etc/csf/csf.conf && grep -m1 -q '^TCP6_OUT = ".*443' /etc/csf/csf.conf; then
if ! grep -m1 -q '^UDP6_OUT = ""' /etc/csf/csf.conf; then
perl -pi -e 's|^UDP6_OUT \= "|UDP6_OUT = "443,|g' /etc/csf/csf.conf
CSFRESTART=true
fi
fi
if ${CSFRESTART} && csf --status 2&>1 >/dev/null; then
echo "Opened UDP ports for QUIC in CSF, restarting CSF..."
/usr/sbin/csf -r 2&>1 >/dev/null
fi
fi
}
csf_enable_rspamd() {
if [ -s /etc/csf/csf.conf ]; then
CSFRESTART=false
if ! grep -m1 -q '^UDP_OUT = ".*11335' /etc/csf/csf.conf; then
if ! grep -m1 -q '^UDP6_IN = ""' /etc/csf/csf.conf; then
perl -pi -e 's|^UDP_OUT \= "|UDP_OUT = "11335,|g' /etc/csf/csf.conf
CSFRESTART=true
fi
fi
if ! grep -m1 -q '^UDP6_OUT = ".*11335' /etc/csf/csf.conf; then
if ! grep -m1 -q '^UDP6_OUT = ""' /etc/csf/csf.conf; then
perl -pi -e 's|^UDP6_OUT \= "|UDP6_OUT = "11335,|g' /etc/csf/csf.conf
CSFRESTART=true
fi
fi
if ${CSFRESTART} && csf --status 2&>1 >/dev/null; then
echo "Opened UDP ports for Rspamd in CSF, restarting CSF..."
/usr/sbin/csf -r 2&>1 >/dev/null
fi
fi
}
create_global_modsecurity_rules() {
if [ ! -e /usr/local/directadmin/data/admin/modsecurity_rules ]; then
touch /usr/local/directadmin/data/admin/modsecurity_rules
chmod 600 /usr/local/directadmin/data/admin/modsecurity_rules
chown diradmin:diradmin /usr/local/directadmin/data/admin/modsecurity_rules
fi
}
initMySQL() {
if [ "${MYSQL_OPT}" = "8.0" ] && [ "${MYSQL_INST_OPT}" = "mysql" ]; then
SKIP_MYSQL_UPGRADE=true
else
SKIP_MYSQL_UPGRADE=false
fi
#MySQL settings
DA_MYSQL=/usr/local/directadmin/conf/mysql.conf
if [ -s ${DA_MYSQL} ]; then
MYSQLUSER=`grep -m1 "^user=" ${DA_MYSQL} | cut -d= -f2`
MYSQLPASSWORD=`grep -m1 "^passwd=" ${DA_MYSQL} | cut -d= -f2`
else
MYSQLUSER='da_admin'
MYSQLPASSWORD='nothing'
fi
if [ -s $DA_MYSQL ] && [ `grep -m1 -c -e "^host=" ${DA_MYSQL}` -gt "0" ]; then
MYSQLHOST=`grep -m1 "^host=" ${DA_MYSQL} | cut -d= -f2`
else
MYSQLHOST=localhost
fi
#Where connections to mysql are from. Usualy the server IP, unless on a LAN.
MYSQL_ACCESS_HOST=localhost
if [ "$MYSQLHOST" != "localhost" ]; then
MYSQL_ACCESS_HOST="`grep -r -l -m1 '^status=server$' /usr/local/directadmin/data/admin/ips | cut -d/ -f8`"
if [ "${MYSQL_ACCESS_HOST}" = "" ]; then
MYSQL_ACCESS_HOST="`grep -im1 ${HOSTNAME} /etc/hosts | awk '{print $1}'`"
if [ "${MYSQL_ACCESS_HOST}" = "" ]; then
if [ -s ${WORKDIR}/scripts/setup.txt ]; then
MYSQL_ACCESS_HOST=`cat ${WORKDIR}/scripts/setup.txt | grep -m1 -e '^ip=' | cut -d= -f2`
fi
if [ "${MYSQL_ACCESS_HOST}" = "" ]; then
echo "Unable to detect your server IP in /etc/hosts. Please enter it: "
read MYSQL_ACCESS_HOST
fi
fi
fi
fi
ensure_my_cnf ${DA_MY_CNF} "${MYSQLUSER}" "${MYSQLPASSWORD}" "${DA_MYSQL}"
chown diradmin:diradmin ${DA_MY_CNF}
}
allSettings_options() {
for section in $ALL_SECTIONS; do
DESC=${section}_DESC
echo "#$(eval_var ${DESC})"
COUNT="0"
if [ ${section} = "PHP_EXT_SETTINGS" ]; then
continue
fi
for setting in $(eval_var ${section}); do
SETTING_NAME=`echo $setting | tr "[A-Z]" "[a-z]"`
POSSIBLE_VALUES_VAR=${setting}_SET
POSSIBLE_VALUES="`echo $(eval_var ${POSSIBLE_VALUES_VAR}) | awk -v OFS=", " '$1=$1'`"
DEFAULT_VALUE=${setting}_DEF
CURRENT_VALUE=${setting}_OPT
if [ ! -z "$(eval_var ${SETTING_NAME})" ]; then
echo "${SETTING_NAME}=$(eval_var ${SETTING_NAME})"
else
echo "${SETTING_NAME}=$(eval_var ${DEFAULT_VALUE})"
fi
COUNT="1"
done
if [ "${COUNT}" = "1" ]; then
echo ""
fi
done
echo '#PHP extensions can be found in php_extensions.conf'
}
allSettings_php_extensions() {
echo "#PHP Extension Settings"
for setting in $(eval_var ${PHP_EXT_SETTINGS}); do
SETTING_NAME=`echo $setting | tr "[A-Z]" "[a-z]"`
POSSIBLE_VALUES_VAR=PHP_${setting}_SET
POSSIBLE_VALUES="`echo $(eval_var ${POSSIBLE_VALUES_VAR}) | awk -v OFS=", " '$1=$1'`"
DEFAULT_VALUE=PHP_${setting}_DEF
CURRENT_VALUE=PHP_${setting}_OPT
EXPORTED_SETTING_NAME="php_${SETTING_NAME}"
if [ ! -z "$(eval_var ${EXPORTED_SETTING_NAME})" ]; then
echo "${SETTING_NAME}=$(eval_var ${EXPORTED_SETTING_NAME})"
else
echo "${SETTING_NAME}=$(eval_var ${DEFAULT_VALUE})"
fi
done
}
# Write options.conf
if [ "${OPTIONS_CONF_EXISTS}" = "0" ]; then
echo "Cannot find ${OPTIONS_CONF}, writing defaults."
allSettings_options > ${OPTIONS_CONF}
allSettings_php_extensions > ${PHP_EXTENSIONS_CONF}
fi
# Write php_extensions.conf exists
if [ ! -s "${PHP_EXTENSIONS_CONF}" ] && [ -s "${OPTIONS_CONF}" ]; then
for option in `echo "${PHP_EXT_SETTINGS}" | tr '[A-Z]' '[a-z]'`; do {
if grep -m1 -q "^${option}=" "${OPTIONS_CONF}"; then
grep -m1 "^${option}=" "${OPTIONS_CONF}" >> ${PHP_EXTENSIONS_CONF}
sed -i "/^${option}=/d" "${OPTIONS_CONF}"
fi
}
done
fi
# Check if options.conf exists
if [ -s ${PHP_EXTENSIONS_CONF} ]; then
#Read php_extensions.conf as 'source'
PHP_EXTENSIONS_CONF_SOURCE=`grep -o "^[a-zA-Z0-9_]*=[^;<>\'\!=() ]*" ${PHP_EXTENSIONS_CONF} | perl -p -e 's|^|php_|g'`
eval ${PHP_EXTENSIONS_CONF_SOURCE}
fi
# Check if options.conf exists
if [ ! -e ${OPTIONS_CONF} ]; then
do_exit 1 "Options file options.conf does not exist."
else
#Read options.conf as 'source'
OPTIONS_CONF_SOURCE=`grep -o "^[a-zA-Z0-9_]*=[^;<>\'\!=() ]*" ${OPTIONS_CONF}`
eval ${OPTIONS_CONF_SOURCE}
fi
####################################################
run_dataskq() {
DATASKQ_OPT=$1
if [ -s ${DACONF_FILE} ]; then
/usr/local/directadmin/dataskq ${DATASKQ_OPT} --custombuild
fi
}
cagefsctl_update() {
if [ "${CAGEFS_OPT}" = "yes" ] && [ -e /usr/sbin/cagefsctl ]; then
echo "CageFS: Executing 'cagefsctl --force-update'..."
if [ -e /usr/bin/ionice ]; then
/usr/bin/ionice -c3 /usr/sbin/cagefsctl --force-update
else
/usr/sbin/cagefsctl --force-update
fi
cagefsctl --remount-all
fi
}
writeLog() {
initLogfile
echo "`date +'%Y-%m-%d %H:%M:%S'` ${LOG_IP}: $@" >> ${LOGFILE}
}
get_line_from_file() {
#$1 is any part of the name, make sure it wouldn't have duplicates, as it'd select only the first instance of the match
#$2 is full path to txt file
if [ ! -s $2 ]; then
do_exit 1 "$2 does not exist."
fi
if grep -m1 -q "^$1" $2; then
RESULT="`grep -m1 \"^$1\" ${WORKDIR}/$2`"
else
RESULT=""
fi
echo "${RESULT}"
}
EXISTS_VERSIONS_FILE_CUSTOM=false
if [ -s ${VERSIONS_FILE_CUSTOM} ]; then
EXISTS_VERSIONS_FILE_CUSTOM=true
fi
getVer() {
APEEND=`echo ${1} | awk '{gsub(/\./,"_",$1);gsub(/-/,"_",$1);print $1;}'`
RESULT=$(eval_var VERSIONS_TXT_${APEEND})
if [ "${RESULT}" = "" ]; then
>&2 echo "ERROR: version of $1 not found in versions.txt!"
RESULT="0"
fi
echo "${RESULT}"
}
do_exit() {
if [ "$2" != "" ]; then
echo "$2"
fi
removeLockfile
if ${NEW_INSTALL}; then
echo "action=notify&value=admin&subject=CustomBuild installation has failed&message=CustomBuild installation has failed, please check the following file for more information:%0A/usr/local/directadmin/custombuild/install.txt" >> ${TASK_QUEUE}
run_dataskq
fi
exit $1
}
getDA_Opt() {
#$1 is option name
#$2 is default value
if [ ! -s ${DACONF_FILE} ]; then
echo $2
return
fi
if ! ${DA_BIN} c | grep -m1 -q -e "^$1="; then
echo $2
return
fi
${DA_BIN} c | grep -m1 "^$1=" | cut -d= -f2
}
getPhpOpt() {
#$1 is option name
#$2 is default value
FULL_VARIABLE=php_$1
GET_OPTION="$(eval_var ${FULL_VARIABLE})"
if [ "${GET_OPTION}" = "" ]; then
if grep -m1 -q "^${1}=" "${OPTIONS_CONF}"; then
grep -m1 "^${1}=" "${OPTIONS_CONF}" >> ${PHP_EXTENSIONS_CONF}
sed -i "/^${1}=/d" "${OPTIONS_CONF}"
GET_OPTION=`grep -m1 "^${1}=" "${PHP_EXTENSIONS_CONF}" | cut -d= -f2`
eval `echo "${FULL_VARIABLE}=${2}"`
else
echo "$1=$2" >> ${PHP_EXTENSIONS_CONF}
GET_OPTION="${2}"
eval `echo "${FULL_VARIABLE}=${2}"`
fi
fi
echo ${GET_OPTION}
}
getOpt() {
#$1 is option name
#$2 is default value
GET_OPTION="$(eval_var $1)"
if [ "${GET_OPTION}" = "" ]; then
echo "$1=$2" >> ${OPTIONS_CONF}
GET_OPTION="${2}"
eval `echo "${1}=${2}"`
fi
echo ${GET_OPTION}
}
have_php_system() {
#Checks to see if we can use system() based on the disable_functions
if [ ! -s "${PHP_INI}" ]; then
echo 1
return
fi
C=`grep -m1 -c ^disable_functions ${PHP_INI}`
if [ "${C}" -eq 0 ]; then
echo 1
return
fi
C=`grep -m1 ^disable_functions ${PHP_INI} | grep -m1 -c system`
if [ "${C}" -eq 1 ]; then
echo 0
return
fi
echo 1
return
}
secure_phpini() {
if [ -e $1 ]; then
if grep -m1 -q -e disable_functions $1; then
CURRENT_DISABLE_FUNCT="`grep -m1 'disable_functions' $1`"
if [ -s ${WORKDIR}/custom/php_disable_functions ]; then
NEW_DISABLE_FUNCT="`head -n1 ${WORKDIR}/custom/php_disable_functions`"
else
NEW_DISABLE_FUNCT="exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname"
fi
perl -pi -e "s#${CURRENT_DISABLE_FUNCT}#disable_functions \= ${NEW_DISABLE_FUNCT}#" $1
else
echo "disable_functions = ${NEW_DISABLE_FUNCT}" >> $1
fi
perl -pi -e 's/^register_globals = On/register_globals = Off/' $1
perl -pi -e 's/^mysql.allow_local_infile = On/mysql.allow_local_infile = Off/' $1
perl -pi -e 's/^mysqli.allow_local_infile = On/mysqli.allow_local_infile = Off/' $1
perl -pi -e 's/^;mysqli.allow_local_infile = On/mysqli.allow_local_infile = Off/' $1
perl -pi -e 's/^expose_php = On/expose_php = Off/' $1
writeLog "secure_phpini: $1 secured"
fi
}
####################################################
secure_php() {
if [ "${SECURE_PHP_OPT}" != "yes" ]; then
setOpt secure_php yes
fi
secure_phpini ${PHP_INI}
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
EVAL_PHP_INI_VAR=PHP_INI_FPM${php_shortrelease}
secure_phpini $(eval_var ${EVAL_PHP_INI_VAR})
done
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
if [ -e /etc/cl.selector/global_php.ini ]; then
secure_phpini /etc/cl.selector/global_php.ini
if [ -e /usr/sbin/cagefsctl ]; then
/usr/sbin/cagefsctl --setup-cl-selector
fi
fi
fi
echo "PHP has been secured."
RESTART_APACHE="1"
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
echo "Restarting php-fpm${PHP1_SHORTRELEASE}."
control_service php-fpm${PHP1_SHORTRELEASE} restart
RESTART_APACHE="0"
fi
if [ "${PHP2_MODE_OPT}" = "php-fpm" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
echo "Restarting php-fpm${PHP2_SHORTRELEASE}."
control_service php-fpm${PHP2_SHORTRELEASE} restart
fi
if [ "${PHP3_MODE_OPT}" = "php-fpm" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
echo "Restarting php-fpm${PHP3_SHORTRELEASE}."
control_service php-fpm${PHP3_SHORTRELEASE} restart
fi
if [ "${PHP4_MODE_OPT}" = "php-fpm" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
echo "Restarting php-fpm${PHP4_SHORTRELEASE}."
control_service php-fpm${PHP4_SHORTRELEASE} restart
fi
if [ "${RESTART_APACHE}" = "1" ]; then
control_service httpd restart
fi
}
#Used to set values ON/OFF in the services.status.
#set_service name ON|OFF|delete
set_service() {
if [ ! -e ${SERVICES} ]; then
if [ ! -d /usr/local/directadmin/data/admin ]; then
mkdir -p /usr/local/directadmin/data/admin
chown diradmin:diradmin /usr/local/directadmin/data/admin
chown diradmin:diradmin /usr/local/directadmin/data
chmod 700 /usr/local/directadmin/data/admin
chmod 711 /usr/local/directadmin/data
fi
touch ${SERVICES}
chown diradmin:diradmin ${SERVICES}
chmod 600 ${SERVICES}
fi
if [ "$2" = "delete" ]; then
if ! grep -q "^$1=" ${SERVICES}; then
return
else
perl -pi -e "s/^${1}=.*\n//" ${SERVICES}
fi
return
fi
if [ "$2" = "ON" ] || [ "$2" = "OFF" ]; then
if ! grep -q "^$1=" ${SERVICES}; then
echo "$1=$2" >> ${SERVICES}
else
perl -pi -e "s/^$1=.*/$1=$2/" ${SERVICES}
fi
return
fi
echo "setService $1: unknown option: $2"
}
control_service() {
SERVICE_NAME=$1
SERVICE_ACTION=$2
systemctl ${SERVICE_ACTION} ${SERVICE_NAME}.service
}
#sets the value of $1 to $2 in the file $3
setVal() {
if [ ! -e $3 ]; then
return
fi
if ! grep -m1 -q "^${1}=" ${3}; then
#ok, it's not there, add it.
echo "$1=$2" >> $3
return
else
#ok, the value is already in the file $3, so use perl to regex it.
perl -pi -e "s/^`grep -m1 "^${1}=" ${3}`/${1}=${2}/" ${3}
fi
}
#A > B: 1
#A = B: 0
#A < B: -1
#3rd option is descriptor
version_cmp() {
A=`echo $1 | cut -d- -f1`
B=`echo $2 | cut -d- -f1`
if [ "$A" = "" ] || [ "$B" = "" ]; then
echo "version_cmp has a blank value when checking $3"
return
fi
if ! echo "$A" | grep -m1 -q '^[0-9]' || ! echo "$B" | grep -m1 -q '^[0-9]'; then
echo "version_cmp has a wrong version when checking $3 for version comparison, ${A} vs. ${B}"
return
fi
#swap underscore with dot.
A=`echo $A | tr '_' '.'`
B=`echo $B | tr '_' '.'`
A1=`echo $A | cut -d. -f1`
B1=`echo $B | cut -d. -f1`
if [ "$A1" -gt "$B1" ]; then
echo 1
return
fi
if [ "$A1" -lt "$B1" ]; then
echo -1
return
fi
A2=`echo $A | cut -d. -f2`
B2=`echo $B | cut -d. -f2`
if [ "$A2" -gt "$B2" ]; then
echo 1
return
fi
if [ "$A2" -lt "$B2" ]; then
echo -1
return
fi
A3=`echo $A | cut -d. -f3`
B3=`echo $B | cut -d. -f3`
if [ "$A3" = "" ] && [ "$B3" = "" ]; then
echo 0
return
fi
if [ "$A3" = "" ]; then
if [ "$B3" = "0" ]; then
echo 0;
else
echo 1
fi
return
fi
if [ "$B3" = "" ]; then
if [ "$A3" = "0" ]; then
echo 0;
else
echo -1
fi
return
fi
if [ "$A3" -gt "$B3" ]; then
echo 1
return
fi
if [ "$A3" -lt "$B3" ]; then
echo -1
return
fi
echo 0
}
####################################################
GCCOPTIONS_CACHE=0
getGccOptions() {
if [ "${GCCOPTIONS_CACHE}" = "0" ]; then
# Exim always takes /usr/bin/gcc, even if it exists in /usr/local/bin/gcc. Other components built in /usr, not /usr/local might take it form there too.
if [ -s /usr/bin/gcc ]; then
GCC_VERSION="`/usr/bin/gcc --version | head -n1 | grep -o '[0-9]*\.[0-9]*' | head -n1`"
else
GCC_VERSION="`gcc --version | head -n1 | grep -o '[0-9]*\.[0-9]*' | head -n1`"
fi
if [ "`version_cmp ${GCC_VERSION} 4.9 'gcc ver check'`" -ge 0 ]; then
GCCOPTIONS_CACHE="-fstack-protector-strong"
else
GCCOPTIONS_CACHE="-fstack-protector --param ssp-buffer-size=4"
fi
fi
echo ${GCCOPTIONS_CACHE}
}
#These are needed for some functions outside
BOLD_OPT=`getOpt bold ${BOLD_DEF}`
# Variables for bolded text
boldon=""
boldoff=""
if [ "${BOLD_OPT}" = "yes" ]; then
boldon="`tput -Txterm bold`"
boldoff="`tput -Txterm sgr0`"
fi
CLEAN_OPT=`getOpt clean ${CLEAN_DEF}`
if [ -s ${DEBIAN_VERSION} ]; then
MYSQL_FORCE_COMPILE_OPT=`getOpt mysql_force_compile ${MYSQL_FORCE_COMPILE_DEF}`
else
MYSQL_FORCE_COMPILE_OPT=`getOpt mysql_force_compile ${MYSQL_FORCE_COMPILE_DEF}`
fi
DOWNLOADSERVER_OPT=`getOpt downloadserver ${DOWNLOADSERVER_DEF}`
UNOFFICIAL_MIRRORS_OPT=`getOpt unofficial_mirrors ${UNOFFICIAL_MIRRORS_DEF}`
DOWNLOADSERVERS_OFFICIAL_LIST="files-fi.directadmin.com files-fr.directadmin.com files-lt.directadmin.com da-mirror.wpcloud.vn files-sg.directadmin.com files-ca.directadmin.com"
DOWNLOADSERVERS_UNOFFICIAL_HTTPS_LIST="files6.directadmin.com files9.directadmin.com files11.directadmin.com directadmin.mirror.liteserver.nl damirror.unix-solutions.be mirror.serverion.com damirror.pars.host mirrors.ereznet.co.il mirror.ihost.md directadmin.mirrors.misaka.one directadmin.hostmark.pl damirror.cj2.nl"
#We have spacing at the beginning/end to let grep work fine with these
DOWNLOADSERVERS_HTTPS_LIST=" files1.directadmin.com ${DOWNLOADSERVERS_OFFICIAL_LIST} ${DOWNLOADSERVERS_UNOFFICIAL_HTTPS_LIST} "
DOWNLOADSERVER_SCHEME=http
if echo "${DOWNLOADSERVERS_HTTPS_LIST}" | grep -m1 -q " ${DOWNLOADSERVER_OPT} "; then
DOWNLOADSERVER_SCHEME=https
fi
WEBPATH=http://da-mirror.wpcloud.vn/services/custombuild
WEBPATH_SERVICES=http://da-mirror.wpcloud.vn/services
WEBPATH_BACKUP_IP=da-mirror.wpcloud.vn
WEBPATH_BACKUP=http://da-mirror.wpcloud.vn/services/custombuild
WEBPATH_SERVICES_BACKUP=http://da-mirror.wpcloud.vn/services
WEBPATH_CL=https://repo.cloudlinux.com/cloudlinux/sources/da
WEBPATH_CWAF=https://waf.comodo.com
WEBPATH_LITESPEED=https://www.litespeedtech.com/packages
WEBPATH_SGIT=https://raw.githubusercontent.com/irf1404/Directadmin/master/services
WEBPATH_BGIT=https://raw.githubusercontent.com/irf1404/Directadmin/master/services/custombuild
setPhpOpt() {
#$1 is option name
#$2 is value
READ_OPTION_NAME="$1"
READ_OPTION_VALUE="$2"
SET_IN_FILENAME="${PHP_EXTENSIONS_CONF}"
if echo " ioncube suhosin zend htscanner imagick opcache " | grep -m1 -q " ${READ_OPTION_NAME} "; then
if grep -m1 -q "^${READ_OPTION_NAME}=" ${OPTIONS_CONF}; then
if ! grep -m1 -q "^${READ_OPTION_NAME}=" ${PHP_EXTENSIONS_CONF}; then
grep -m1 "^${READ_OPTION_NAME}=" ${OPTIONS_CONF} >> "${PHP_EXTENSIONS_CONF}"
fi
sed -i "/^${READ_OPTION_NAME}=/d" ${OPTIONS_CONF}
fi
fi
VAR=`echo ${READ_OPTION_NAME} | tr "[a-z]" "[A-Z]"`
if [ -z "$(eval_var PHP_${VAR}_DEF)" ]; then
echo "${READ_OPTION_NAME} is not a valid option."
EXIT_CODE=50
return
fi
VALID="no"
for i in $(eval_var PHP_${VAR}_SET); do
if [ "${i}" = "${READ_OPTION_VALUE}" ] || [ "${i}" = "userinput" ]; then
VALID="yes"
break
fi
done
if [ "${VALID}" = "no" ]; then
echo "${READ_OPTION_VALUE} is not a valid setting for ${READ_OPTION_NAME} option."
EXIT_CODE=51
return
fi
OPT_VALUE="`grep -m1 "^${READ_OPTION_NAME}=" "${SET_IN_FILENAME}" | cut -d= -f2 | perl -p0 -e 's|@|\\\\@|g'`"
if [ -z "${OPT_VALUE}" ] && [ "${SET_IN_FILENAME}" = "${PHP_EXTENSIONS_CONF}" ]; then
if grep -m1 -q "^${READ_OPTION_NAME}=" ${OPTIONS_CONF}; then
grep -m1 "^${READ_OPTION_NAME}=" ${OPTIONS_CONF} >> "${PHP_EXTENSIONS_CONF}"
sed -i "/^${READ_OPTION_NAME}=/d" ${OPTIONS_CONF}
OPT_VALUE="`grep -m1 "^${READ_OPTION_NAME}=" "${SET_IN_FILENAME}" | cut -d= -f2 | perl -p0 -e 's|@|\\\\@|g'`"
fi
fi
if [ ! -z "${OPT_VALUE}" ]; then
perl -pi -e "s#${READ_OPTION_NAME}=${OPT_VALUE}#${READ_OPTION_NAME}=${READ_OPTION_VALUE}#" "${SET_IN_FILENAME}"
else
echo "${READ_OPTION_NAME}=${OPT_VALUE}" >> "${SET_IN_FILENAME}"
fi
if [ "${HIDE_CHANGES}" = "0" ] && [ "${OPT_VALUE}" != "${READ_OPTION_VALUE}" ]; then
echo "Changed ${boldon}${READ_OPTION_NAME}${boldoff} option from ${boldon}${OPT_VALUE}${boldoff} to ${boldon}${READ_OPTION_VALUE}${boldoff}" | perl -p0 -e 's|\\\@|\@|g'
elif [ "${HIDE_CHANGES}" = "0" ] && [ "${OPT_VALUE}" = "${READ_OPTION_VALUE}" ]; then
echo "${boldon}${READ_OPTION_NAME}${boldoff} is already set to ${boldon}${READ_OPTION_VALUE}${boldoff}" | perl -p0 -e 's|\\\@|\@|g'
fi
}
setOpt() {
#$1 is option name
#$2 is value
READ_OPTION_NAME="$1"
READ_OPTION_VALUE="`echo \"$2\" | perl -p0 -e 's|@|\\\\@|g' | perl -p0 -e 's|\\+|\\\\+|g'`"
#Rewrite spamassassin to spamd for backwards compatibility
if [ "${READ_OPTION_NAME}" = "spamassassin" ]; then
READ_OPTION_NAME="spamd"
if [ "${READ_OPTION_VALUE}" = "yes" ]; then
READ_OPTION_VALUE="spamassassin"
fi
fi
SET_IN_FILENAME="${OPTIONS_CONF}"
if echo " ioncube suhosin zend htscanner imagick opcache " | grep -m1 -q " ${READ_OPTION_NAME} "; then
setPhpOpt "${READ_OPTION_NAME}" "${READ_OPTION_VALUE}"
return
fi
VAR=`echo ${READ_OPTION_NAME} | tr "[a-z]" "[A-Z]"`
if [ -z "$(eval_var ${VAR}_DEF)" ]; then
echo "${READ_OPTION_NAME} is not a valid option."
EXIT_CODE=50
return
fi
VALID="no"
for i in $(eval_var ${VAR}_SET); do
if [ "${i}" = "${READ_OPTION_VALUE}" ] || [ "${i}" = "userinput" ]; then
VALID="yes"
break
fi
done
if [ "${VALID}" = "no" ]; then
echo "${READ_OPTION_VALUE} is not a valid setting for ${READ_OPTION_NAME} option."
EXIT_CODE=51
return
fi
OPT_VALUE="`grep -m1 "^${READ_OPTION_NAME}=" "${SET_IN_FILENAME}" | cut -d= -f2 | perl -p0 -e 's|@|\\\\@|g' | perl -p0 -e 's|\\+|\\\\+|g'`"
perl -pi -e "s#${READ_OPTION_NAME}=${OPT_VALUE}#${READ_OPTION_NAME}=${READ_OPTION_VALUE}#" "${SET_IN_FILENAME}"
if [ "${HIDE_CHANGES}" = "0" ] && [ "${OPT_VALUE}" != "${READ_OPTION_VALUE}" ]; then
echo "Changed ${boldon}${READ_OPTION_NAME}${boldoff} option from ${boldon}${OPT_VALUE}${boldoff} to ${boldon}${READ_OPTION_VALUE}${boldoff}" | perl -p0 -e 's|\\\@|\@|g' | perl -p0 -e 's|\\\+|\+|g'
elif [ "${HIDE_CHANGES}" = "0" ] && [ "${OPT_VALUE}" = "${READ_OPTION_VALUE}" ]; then
echo "${boldon}${READ_OPTION_NAME}${boldoff} is already set to ${boldon}${READ_OPTION_VALUE}${boldoff}" | perl -p0 -e 's|\\\@|\@|g' | perl -p0 -e 's|\\\+|\+|g'
fi
}
getWebserverPorts() {
# 443 and 80 ports
PORT_80=`getDA_Opt port_80 80`
PORT_443=`getDA_Opt port_443 443`
# Reverse proxy ports
PORT_8080=`getDA_Opt port_8080 8080`
PORT_8081=`getDA_Opt port_8081 8081`
}
case "$1" in
"") getopt_case_toggle ;;
version) getopt_case_toggle ;;
kill) getopt_case_toggle ;;
update_da) getopt_case_toggle ;;
get_timezone) getopt_case_toggle ;;
set_versions_txt) getopt_case_toggle ;;
show_file) getopt_case_toggle ;;
esac
if [ "${GETOPT_CASE}" = "1" ]; then
CSF_OPT=`getOpt csf ${CSF_DEF}`
#CloudLinux
CLOUDLINUX_OPT=`getOpt cloudlinux ${CLOUDLINUX_DEF}`
CLOUDLINUX_BETA_OPT=`getOpt cloudlinux_beta ${CLOUDLINUX_BETA_DEF}`
CAGEFS_OPT=`getOpt cagefs ${CAGEFS_DEF}`
#Find PowerTools repo name on RHEL-like distros version 8
#Find PowerTools repo name
if [ "${OS_CENTOS_VER}" = "8" ]; then
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
POWERTOOLS=cloudlinux-PowerTools
elif [ -e /etc/yum.repos.d/CentOS-PowerTools.repo ] && grep -m1 -q '\[PowerTools\]' /etc/yum.repos.d/CentOS-PowerTools.repo; then
POWERTOOLS=PowerTools
elif [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ]; then
POWERTOOLS=ol8_codeready_builder
elif [ -e /etc/yum.repos.d/redhat.repo ]; then
POWERTOOLS=codeready-builder-for-rhel-8-x86_64-rpms
else
POWERTOOLS=powertools
fi
fi
# Read options.conf
FTPD_OPT=`getOpt ftpd ${FTPD_DEF}`
PUREFTPD_UPLOADSCAN_OPT=`getOpt pureftpd_uploadscan ${PUREFTPD_UPLOADSCAN_DEF}`
PROFTPD_UPLOADSCAN_OPT=`getOpt proftpd_uploadscan ${PROFTPD_UPLOADSCAN_DEF}`
# Replace spamassassin= to spamd=
if grep -m1 -q "^spamassassin=" ${OPTIONS_CONF}; then
perl -pi -e 's|spamassassin=yes|spamd=spamassassin|g' ${OPTIONS_CONF}
perl -pi -e 's|spamassassin=no|spamd=no|g' ${OPTIONS_CONF}
fi
SPAMD_OPT=`getOpt spamd ${SPAMASSASSIN_DEF}`
SA_UPDATE_OPT=`getOpt sa_update ${SA_UPDATE_DEF}`
CLAMAV_OPT=`getOpt clamav ${CLAMAV_DEF}`
CLAMAV_EXIM_OPT=`getOpt clamav_exim ${CLAMAV_EXIM_DEF}`
MODSECURITY_UPLOADSCAN_OPT=`getOpt modsecurity_uploadscan ${MODSECURITY_UPLOADSCAN_DEF}`
UNIT_OPT=`getOpt unit ${UNIT_DEF}`
WEBSERVER_OPT=`getOpt webserver ${WEBSERVER_DEF}`
HTTP_METHODS_OPT=`getOpt http_methods ${HTTP_METHODS_DEF}`
LITESPEED_SERIALNO_OPT=`getOpt litespeed_serialno ${LITESPEED_SERIALNO_DEF}`
MODSECURITY_OPT=`getOpt modsecurity ${MODSECURITY_DEF}`
MODSECURITY_RULESET_OPT=`getOpt modsecurity_ruleset ${MODSECURITY_RULESET_DEF}`
HN_T=${HOSTNAME}
REDIRECT_HOST_OPT=`getOpt redirect_host ${HN_T}`
REDIRECT_HOST_HTTPS_OPT=`getOpt redirect_host_https ${REDIRECT_HOST_HTTPS_DEF}`
USE_HOSTNAME_FOR_ALIAS_OPT=`getOpt use_hostname_for_alias ${USE_HOSTNAME_FOR_ALIAS_DEF}`
TZ_T=$(getTimezone)
PHP_TIMEZONE_OPT=`getOpt php_timezone ${TZ_T}`
#Apache
APACHE_VER_OPT=`getOpt apache_ver ${APACHE_VER_DEF}`
APACHE_MPM_OPT=`getOpt apache_mpm ${APACHE_MPM_DEF}`
MOD_RUID2_OPT=`getOpt mod_ruid2 ${MOD_RUID2_DEF}`
USERDIR_ACCESS_OPT=`getOpt userdir_access ${USERDIR_ACCESS_DEF}`
HARDEN_SYMLINKS_PATCH_OPT=`getOpt harden_symlinks_patch ${HARDEN_SYMLINKS_PATCH_DEF}`
#PHP
PHP1_RELEASE_OPT=`getOpt php1_release ${PHP1_RELEASE_DEF}`
PHP2_RELEASE_OPT=`getOpt php2_release ${PHP2_RELEASE_DEF}`
PHP3_RELEASE_OPT=`getOpt php3_release ${PHP3_RELEASE_DEF}`
PHP4_RELEASE_OPT=`getOpt php4_release ${PHP4_RELEASE_DEF}`
PHP1_SHORTRELEASE=`echo ${PHP1_RELEASE_OPT} | tr -d '.'`
PHP2_SHORTRELEASE=`echo ${PHP2_RELEASE_OPT} | tr -d '.'`
PHP3_SHORTRELEASE=`echo ${PHP3_RELEASE_OPT} | tr -d '.'`
PHP4_SHORTRELEASE=`echo ${PHP4_RELEASE_OPT} | tr -d '.'`
PHP1_MODE_OPT=`getOpt php1_mode ${PHP1_MODE_DEF}`
PHP2_MODE_OPT=`getOpt php2_mode ${PHP2_MODE_DEF}`
PHP3_MODE_OPT=`getOpt php3_mode ${PHP3_MODE_DEF}`
PHP4_MODE_OPT=`getOpt php4_mode ${PHP4_MODE_DEF}`
SECURE_PHP_OPT=`getOpt secure_php ${SECURE_PHP_DEF}`
PHP_INI_TYPE_OPT=`getOpt php_ini_type ${PHP_INI_TYPE_DEF}`
REDIS_OPT=`getOpt redis ${REDIS_DEF}`
#php_extensions.conf options
PHP_BZ2_OPT=`getPhpOpt bz2 ${PHP_BZ2_DEF}`
PHP_GMP_OPT=`getPhpOpt gmp ${PHP_GMP_DEF}`
PHP_HTSCANNER_OPT=`getPhpOpt htscanner ${PHP_HTSCANNER_DEF}`
PHP_IGBINARY_OPT=`getPhpOpt igbinary ${PHP_IGBINARY_DEF}`
PHP_IMAGICK_OPT=`getPhpOpt imagick ${PHP_IMAGICK_DEF}`
PHP_IMAP_OPT=`getPhpOpt imap ${PHP_IMAP_DEF}`
PHP_IONCUBE_OPT=`getPhpOpt ioncube ${PHP_IONCUBE_DEF}`
PHP_LDAP_OPT=`getPhpOpt ldap ${PHP_LDAP_DEF}`
PHP_OPCACHE_OPT=`getPhpOpt opcache ${PHP_OPCACHE_DEF}`
PHP_PHALCON_OPT=`getPhpOpt phalcon ${PHP_PHALCON_DEF}`
PHP_REDIS_OPT=`getPhpOpt redis ${PHP_REDIS_DEF}`
PHP_READLINE_OPT=`getPhpOpt readline ${PHP_READLINE_DEF}`
PHP_SUHOSIN_OPT=`getPhpOpt suhosin ${PHP_SUHOSIN_DEF}`
PHP_SNUFFLEUPAGUS_OPT=`getPhpOpt snuffleupagus ${PHP_SNUFFLEUPAGUS_DEF}`
PHP_XMLRPC_OPT=`getPhpOpt xmlrpc ${PHP_XMLRPC_DEF}`
PHP_ZEND_OPT=`getPhpOpt zend ${PHP_ZEND_DEF}`
#backwards compatibility
IONCUBE_OPT=${PHP_IONCUBE_OPT}
OPCACHE_OPT=${PHP_OPCACHE_OPT}
HTSCANNER_OPT=${PHP_HTSCANNER_OPT}
ZEND_OPT=${PHP_ZEND_OPT}
IMAGICK_OPT=${PHP_IMAGICK_OPT}
SUHOSIN_OPT=${PHP_SUHOSIN_OPT}
SUHOSIN_PHP_UPLOADSCAN_OPT=`getOpt suhosin_php_uploadscan ${SUHOSIN_PHP_UPLOADSCAN_DEF}`
X_MAIL_HEADER_OPT=`getOpt x_mail_header ${X_MAIL_HEADER_DEF}`
APCONF=ap2
HAVE_FPM_CGI=no
HAVE_FCGID=no
HAVE_SUPHP_CGI=no
HAVE_CLI=no
HAVE_LSPHP=no
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
eval `echo "HAVE_FPM${php_shortrelease}_CGI=no"`
eval `echo "HAVE_FCGID${php_shortrelease}=no"`
eval `echo "HAVE_SUPHP${php_shortrelease}_CGI=no"`
eval `echo "HAVE_CLI${php_shortrelease}=no"`
eval `echo "HAVE_LSPHP${php_shortrelease}=no"`
eval `echo "PHP${php_shortrelease}_CONFIGURE=configure/php/configure.php${php_shortrelease}"`
if [ -e custom/${APCONF}/configure.php${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_CONFIGURE=custom/${APCONF}/configure.php${php_shortrelease}"`
fi
if [ -e custom/php/configure.php${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_CONFIGURE=custom/php/configure.php${php_shortrelease}"`
fi
done
if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
HAVE_FPM_CGI=yes
eval `echo "HAVE_FPM${PHP1_SHORTRELEASE}_CGI=yes"`
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP2_MODE_OPT}" = "php-fpm" ]; then
HAVE_FPM_CGI=yes
eval `echo "HAVE_FPM${PHP2_SHORTRELEASE}_CGI=yes"`
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ] && [ "${PHP3_MODE_OPT}" = "php-fpm" ]; then
HAVE_FPM_CGI=yes
eval `echo "HAVE_FPM${PHP3_SHORTRELEASE}_CGI=yes"`
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ "${PHP4_MODE_OPT}" = "php-fpm" ]; then
HAVE_FPM_CGI=yes
eval `echo "HAVE_FPM${PHP4_SHORTRELEASE}_CGI=yes"`
fi
if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "${PHP1_MODE_OPT}" = "fastcgi" ]; then
HAVE_FCGID=yes
eval `echo "HAVE_FCGID${PHP1_SHORTRELEASE}=yes"`
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP2_MODE_OPT}" = "fastcgi" ]; then
HAVE_FCGID=yes
eval `echo "HAVE_FCGID${PHP2_SHORTRELEASE}=yes"`
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP3_MODE_OPT}" = "fastcgi" ]; then
HAVE_FCGID=yes
eval `echo "HAVE_FCGID${PHP3_SHORTRELEASE}=yes"`
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP4_MODE_OPT}" = "fastcgi" ]; then
HAVE_FCGID=yes
eval `echo "HAVE_FCGID${PHP4_SHORTRELEASE}=yes"`
fi
if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "${PHP1_MODE_OPT}" = "suphp" ]; then
HAVE_SUPHP_CGI=yes
eval `echo "HAVE_SUPHP${PHP1_SHORTRELEASE}_CGI=yes"`
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP2_MODE_OPT}" = "suphp" ]; then
HAVE_SUPHP_CGI=yes
eval `echo "HAVE_SUPHP${PHP2_SHORTRELEASE}_CGI=yes"`
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ] && [ "${PHP3_MODE_OPT}" = "suphp" ]; then
HAVE_SUPHP_CGI=yes
eval `echo "HAVE_SUPHP${PHP3_SHORTRELEASE}_CGI=yes"`
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ "${PHP4_MODE_OPT}" = "suphp" ]; then
HAVE_SUPHP_CGI=yes
eval `echo "HAVE_SUPHP${PHP4_SHORTRELEASE}_CGI=yes"`
fi
#Check just php1 and no other modes, as mod_php is not allowed to be 2/3/4th
if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "${PHP1_MODE_OPT}" = "mod_php" ]; then
HAVE_CLI=yes
eval `echo "HAVE_CLI${PHP1_SHORTRELEASE}=yes"`
fi
if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "${PHP1_MODE_OPT}" = "lsphp" ]; then
HAVE_LSPHP=yes
eval `echo "HAVE_LSPHP${PHP1_SHORTRELEASE}=yes"`
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP2_MODE_OPT}" = "lsphp" ]; then
HAVE_LSPHP=yes
eval `echo "HAVE_LSPHP${PHP2_SHORTRELEASE}=yes"`
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ] && [ "${PHP3_MODE_OPT}" = "lsphp" ]; then
HAVE_LSPHP=yes
eval `echo "HAVE_LSPHP${PHP3_SHORTRELEASE}=yes"`
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ "${PHP4_MODE_OPT}" = "lsphp" ]; then
HAVE_LSPHP=yes
eval `echo "HAVE_LSPHP${PHP4_SHORTRELEASE}=yes"`
fi
if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${MOD_RUID2_OPT}" = "no" ]; then
APPGROUP=apache
fi
#MySQL
MYSQL_INST_OPT=`getOpt mysql_inst ${MYSQL_INST_DEF}`
if [ "${MYSQL_INST_OPT}" = "yes" ]; then
HIDE_CHANGES=1
if [ "`has_mariadb`" = "0" ]; then
setOpt mysql_inst mysql
else
setOpt mysql_inst mariadb
fi
MYSQL_INST_OPT=`getOpt mysql_inst ${MYSQL_INST_DEF}`
fi
MYSQL_BACKUP_OPT=`getOpt mysql_backup ${MYSQL_BACKUP_DEF}`
MYSQL_OPT=`getOpt mysql ${MYSQL_DEF}`
MARIADB_OPT=`getOpt mariadb ${MARIADB_DEF}`
MYSQL_BACKUP_GZIP_OPT=`getOpt mysql_backup_gzip ${MYSQL_BACKUP_GZIP_DEF}`
MYSQL_BACKUP_DIR_OPT=`getOpt mysql_backup_dir ${MYSQL_BACKUP_DIR_DEF}`
MYSQLNAME="MySQL"
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
MYSQLNAME="MariaDB"
fi
#Email
DOVECOT_OPT=`getOpt dovecot ${DOVECOT_DEF}`
DOVECOT_CONF_OPT=`getOpt dovecot_conf ${DOVECOT_CONF_DEF}`
PIGEONHOLE_OPT=`getOpt pigeonhole ${PIGEONHOLE_DEF}`
MAIL_COMPRESS_OPT=`getOpt mail_compress ${MAIL_COMPRESS_DEF}`
EXIM_OPT=`getOpt exim ${EXIM_DEF}`
EXIMCONF_OPT=`getOpt eximconf ${EXIMCONF_DEF}`
EXIMCONF_RELEASE_OPT=`getOpt eximconf_release ${EXIMCONF_RELEASE_DEF}`
BLOCKCRACKING_OPT=`getOpt blockcracking ${BLOCKCRACKING_DEF}`
EASY_SPAM_FIGHTER_OPT=`getOpt easy_spam_fighter ${EASY_SPAM_FIGHTER_DEF}`
#Applications
PHPMYADMIN_OPT=`getOpt phpmyadmin ${PHPMYADMIN_DEF}`
PHPMYADMIN_PUBLIC_OPT=`getOpt phpmyadmin_public ${PHPMYADMIN_PUBLIC_DEF}`
PHPMYADMIN_VER_OPT=`getOpt phpmyadmin_ver ${PHPMYADMIN_VER_DEF}`
SQUIRRELMAIL_OPT=`getOpt squirrelmail ${SQUIRRELMAIL_DEF}`
ROUNDCUBE_OPT=`getOpt roundcube ${ROUNDCUBE_DEF}`
WEBAPPS_INBOX_PREFIX_NEWDEF="no"
if [ "${OPTIONS_CONF_EXISTS}" = "1" ]; then
WEBAPPS_INBOX_PREFIX_NEWDEF="yes"
fi
WEBAPPS_INBOX_PREFIX_OPT=`getOpt webapps_inbox_prefix ${WEBAPPS_INBOX_PREFIX_NEWDEF}`
#Statistics software
AWSTATS_OPT=`getOpt awstats ${AWSTATS_DEF}`
WEBALIZER_OPT=`getOpt webalizer ${WEBALIZER_DEF}`
CURL_OPT=`getOpt curl ${CURL_DEF}`
SSL_CONFIGURATION_OPT=`getOpt ssl_configuration ${SSL_CONFIGURATION_DEF}`
#CustomBuild
AUTOVER_OPT=`getOpt autover ${AUTOVER_DEF}`
CLEAN_OLD_TARBALLS_OPT=`getOpt clean_old_tarballs ${CLEAN_OLD_TARBALLS_DEF}`
CLEAN_OLD_WEBAPPS_OPT=`getOpt clean_old_webapps ${CLEAN_OLD_WEBAPPS_DEF}`
CLEANAPACHE_OPT=`getOpt cleanapache ${CLEANAPACHE_DEF}`
CUSTOMBUILD_OPT=`getOpt custombuild ${CUSTOMBUILD_DEF}`
CUSTOMBUILD_PLUGIN_OPT=`getOpt custombuild_plugin ${CUSTOMBUILD_PLUGIN_DEF}`
#Cron
CRON_OPT=`getOpt cron ${CRON_DEF}`
CRON_FREQUENCY_OPT=`getOpt cron_frequency ${CRON_FREQUENCY_DEF}`
EMAIL_OPT=`getOpt email ${EMAIL_DEF}`
NOTIFICATIONS_OPT=`getOpt notifications ${NOTIFICATIONS_DEF}`
UPDATES_OPT=`getOpt updates ${UPDATES_DEF}`
WEBAPPS_UPDATES_OPT=`getOpt webapps_updates ${WEBAPPS_UPDATES_DEF}`
VERSIONS_CL="versions.txt"
if [ "${CLOUDLINUX_BETA_OPT}" = "yes" ]; then
VERSIONS_CL="versions_beta.txt"
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
if [ ! -s ${VERSIONS_FILE_LITESPEED} ]; then
curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_LITESPEED}/versions.txt -o ${VERSIONS_FILE_LITESPEED} 2> /dev/null
fi
if [ ! -s ${VERSIONS_FILE_LITESPEED} ]; then
curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_LITESPEED}/versions.txt -o ${VERSIONS_FILE_LITESPEED} 2> /dev/null
fi
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
if [ ! -s ${VERSIONS_FILE_CL} ]; then
curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_CL}/${VERSIONS_CL} -o ${VERSIONS_FILE_CL} 2> /dev/null
fi
if [ ! -s ${VERSIONS_FILE_CL} ]; then
curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_CL}/${VERSIONS_CL} -o ${VERSIONS_FILE_CL} 2> /dev/null
fi
fi
if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then
if [ ! -s ${VERSIONS_FILE_CWAF} ]; then
curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_CWAF}/doc/comodo_versions.txt -o ${VERSIONS_FILE_CWAF} 2> /dev/null
fi
if [ ! -s ${VERSIONS_FILE_CWAF} ]; then
curl ${CURL_CONNECT_OPTIONS} ${WEBPATH_CWAF}/doc/comodo_versions.txt -o ${VERSIONS_FILE_CWAF} 2> /dev/null
fi
fi
fi
allSettings() {
for section in $ALL_SECTIONS; do
PHP_EXT_SETTINGS_SECTION=false
PHP_EXT_SETTINGS_SECTION_PREFIX=""
if [ ${section} = "PHP_EXT_SETTINGS" ]; then
PHP_EXT_SETTINGS_SECTION=true
PHP_EXT_SETTINGS_SECTION_PREFIX="PHP_"
fi
DESC=${section}_DESC
echo "------------------------------------------"
echo "$(eval_var ${DESC})"
echo "------------------------------------------"
for setting in $(eval_var ${section}); do
SETTING_NAME=`echo $setting | tr "[A-Z]" "[a-z]"`
POSSIBLE_VALUES_VAR=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_SET
POSSIBLE_VALUES="`echo $(eval_var ${POSSIBLE_VALUES_VAR}) | awk -v OFS=", " '$1=$1'`"
DEFAULT_VALUE=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_DEF
CURRENT_VALUE=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_OPT
echo -n "${SETTING_NAME}: ${POSSIBLE_VALUES}. Current value: $(eval_var ${CURRENT_VALUE}). Default value: $(eval_var ${DEFAULT_VALUE})."
if [ "$1" = "full" ]; then
DESCRIPTION="${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_DESC"
echo " Description: $(eval_var ${DESCRIPTION})"
else
echo ""
fi
done
echo ""
done
}
allSettingsJSON() {
echo "{"
NUM_OF_SECTIONS=`echo $ALL_SECTIONS | wc -w`
CUR_SECTION=0
for section in $ALL_SECTIONS; do
PHP_EXT_SETTINGS_SECTION=false
PHP_EXT_SETTINGS_SECTION_PREFIX=""
if [ ${section} = "PHP_EXT_SETTINGS" ]; then
PHP_EXT_SETTINGS_SECTION=true
PHP_EXT_SETTINGS_SECTION_PREFIX="PHP_"
fi
CUR_SECTION=`expr ${CUR_SECTION} + 1`
NUM_OF_SETTINGS=`echo "$(eval_var ${section})" | wc -w`
CUR_SETTING=0
LOWERCASE_SECTION=`echo $section | tr "[A-Z]" "[a-z]"`
SECTION_DESC=${section}_DESC
printf "\t\"${LOWERCASE_SECTION}\": {\n"
printf "\t\t\"description\": \"$(eval_var ${SECTION_DESC})\",\n"
for setting in $(eval_var ${section}); do
CUR_SETTING=`expr ${CUR_SETTING} + 1`
SETTING_NAME=`echo $setting | tr "[A-Z]" "[a-z]"`
POSSIBLE_VALUES_VAR=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_SET
POSSIBLE_VALUES=""
NUM_OF_VALUES=`echo $(eval_var ${POSSIBLE_VALUES_VAR}) | wc -w`
CUR_VALUE=0
for value in $(eval_var ${POSSIBLE_VALUES_VAR}); do
CUR_VALUE=`expr ${CUR_VALUE} + 1`
if [ ${CUR_VALUE} -ne ${NUM_OF_VALUES} ]; then
POSSIBLE_VALUES="${POSSIBLE_VALUES}\"$value\","
else
POSSIBLE_VALUES="${POSSIBLE_VALUES}\"${value}\""
fi
done
DEFAULT_VALUE=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_DEF
CURRENT_VALUE=${PHP_EXT_SETTINGS_SECTION_PREFIX}${setting}_OPT
DESCRIPTION="${setting}_DESC"
printf "\t\t\"${SETTING_NAME}\": {\n"
printf "\t\t\t\"values\": [${POSSIBLE_VALUES}],\n"
printf "\t\t\t\"default\": \"$(eval_var ${DEFAULT_VALUE})\",\n"
printf "\t\t\t\"current\": \"$(eval_var ${CURRENT_VALUE})\",\n"
printf "\t\t\t\"description\": \"$(eval_var ${DESCRIPTION})\"\n"
if [ ${CUR_SETTING} -ne ${NUM_OF_SETTINGS} ]; then
printf "\t\t},\n"
else
printf "\t\t}\n"
fi
done
if [ ${CUR_SECTION} -ne ${NUM_OF_SECTIONS} ]; then
printf "\t},\n"
else
printf "\t}\n"
fi
done
echo "}"
}
OPENSSL_VERSION_CACHE=0
openssl_version() {
if [ "${OPENSSL_VERSION_CACHE}" = "0" ] && [ -x /usr/bin/openssl ]; then
#doesn't include letters!
OPENSSL_VERSION_CACHE=`/usr/bin/openssl version | head -n1 | cut -d\ -f2 | cut -d- -f1 | tr -d '[a-z]'`
fi
echo $OPENSSL_VERSION_CACHE
}
MYSQL_VERSION_CACHE=0
mysql_version() {
if [ "${MYSQL_VERSION_CACHE}" = "0" ] && [ -x ${MYSQL_BIN} ]; then
MYSQL_VERSION_CACHE=`${MYSQL_BIN} --version | grep -m1 -o '[0-9]*\.[0-9]*\.[0-9]*'`
fi
echo $MYSQL_VERSION_CACHE
}
MYSQL_MAIN_CACHE=0
mysql_main() {
if [ "${MYSQL_MAIN_CACHE}" = "0" ] && [ -x ${MYSQL_BIN} ]; then
MYSQL_MAIN_CACHE=`${MYSQL_BIN} --version | grep -m1 -o '[0-9]*\.[0-9]*\.[0-9]*' | cut -d. -f1,2`
fi
echo $MYSQL_MAIN_CACHE
}
HAS_MARIADB_CACHE=-1
has_mariadb() {
if [ "${HAS_MARIADB_CACHE}" = "-1" ] && [ -x ${MYSQL_BIN} ]; then
HAS_MARIADB_CACHE=`${MYSQL_BIN} --version | grep -c -m1 MariaDB`
fi
echo $HAS_MARIADB_CACHE
}
####################################################
doRestartDA() {
echo "action=directadmin&value=reload" >> ${TASK_QUEUE}
run_dataskq
}
doDAVersionCheck() {
DIRECTADMINV=`/usr/local/directadmin/directadmin v | awk '{print $3}' | cut -d. -f2,3`
if [ "`version_cmp ${DIRECTADMINV} 1.63 'DA version check'`" -lt 0 ]; then
do_exit 1 "${boldon}Your DirectAdmin version (${DIRECTADMINV}) is older than minimal required for this version of CustomBuild (1.63). Please run '/usr/local/directadmin/custombuild/build update_da'${boldoff}"
fi
}
doChecks() {
if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then
# doDAVersionCheck
echo "Phien ban Directadmin hoi cu nhung khong sao. Toi xu ly duoc ==))"
fi
doCSFpignore
if [ -s ${WORKDIR}/config.json ]; then
if grep -m1 -q 8372 ${WORKDIR}/config.json; then
rm -f ${WORKDIR}/config.json
fi
fi
if [ ! -s /etc/mime.types ]; then
curl ${CURL_CONNECT_OPTIONS} ${WEBPATH}/mime.types -o /etc/mime.types
fi
if [ "${APACHE_VER_OPT}" != "2.4" ] && [ "${APACHE_VER_OPT}" != "" ]; then
do_exit 1 "CustomBuild 2.0 does support Apache 2.4 only. Please check your apache_ver value in the options.conf file: ${APACHE_VER_OPT}."
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
CORRECT_MARIADB_VER="`echo ${MARIADB_SET} | grep -c ${MARIADB_OPT}`"
if [ "${CORRECT_MARIADB_VER}" = "0" ]; then
do_exit 1 "Incorrect mysql value (used to specify MariaDB release) set in the options.conf file. Set: ${MARIADB_OPT}. Available values: ${MARIADB_SET}."
fi
if [ "${MARIADB_OPT}" != "5.5" ] && [ "${MARIADB_OPT}" != "10.0" ] && [ "${MARIADB_OPT}" != "10.1" ] && [ "${MARIADB_OPT}" != "10.2" ] && [ "${MARIADB_OPT}" != "10.3" ] && [ "${MARIADB_OPT}" != "10.4" ] && [ "${MARIADB_OPT}" != "10.5" ] && [ "${MARIADB_OPT}" != "10.6" ]; then
do_exit 1 "Wrong mariadb value set in ${OPTIONS_CONF}."
fi
elif [ "${MYSQL_INST_OPT}" = "mysql" ]; then
CORRECT_MYSQL_VER="`echo ${MYSQL_SET} | grep -c ${MYSQL_OPT}`"
if [ "${CORRECT_MYSQL_VER}" = "0" ]; then
do_exit 1 "Incorrect mysql value (used to specify MySQL release) set in the options.conf file. Set: ${MYSQL_OPT}. Available values: ${MYSQL_SET}."
fi
if [ "${MYSQL_OPT}" != "5.5" ] && [ "${MYSQL_OPT}" != "5.6" ] && [ "${MYSQL_OPT}" != "5.7" ] && [ "${MYSQL_OPT}" != "8.0" ]; then
do_exit 1 "Wrong mysql value set in ${OPTIONS_CONF}."
fi
fi
if [ "${PHP_INI_TYPE_OPT}" != "development" ] && [ "${PHP_INI_TYPE_OPT}" != "production" ]; then
do_exit 1 "Wrong php_ini_type set in options.conf."
fi
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
if [ "${HAVE_CLI}" = "yes" ] || [ "${HAVE_SUPHP_CGI}" = "yes" ] || [ "${HAVE_FCGID}" = "yes" ] || [ "${HAVE_LSPHP}" = "yes" ]; then
do_exit 1 "nginx webserver is only compatible with php-fpm PHP mode."
fi
fi
if [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${SSL_CONFIGURATION_OPT}" = "modern" ]; then
OFFER_MODERN_SSL_SET=true
if [ -e ${DEBIAN_VERSION} ]; then
if [ "${OS_DEBIAN_VER}" = "9" ]; then
OFFER_MODERN_SSL_SET=false
OS_NAME="Debian ${OS_DEBIAN_VER}"
fi
else
if [ "${OS_CENTOS_VER}" = "7" ]; then
OFFER_MODERN_SSL_SET=false
OS_NAME="CentOS/RHEL/CloudLinux ${OS_CENTOS_VER}"
fi
fi
if ! ${OFFER_MODERN_SSL_SET}; then
do_exit 1 "${WEBSERVER_OPT} webserver does not support 'modern' ssl_configuration option due to lack of support of TLSv1.3 in OpenSSL package on ${OS_NAME}."
fi
fi
if [ "${MOD_RUID2_OPT}" = "yes" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${HAVE_FCGID}" = "yes" ] || [ "${PHP1_MODE_OPT}" = "lsphp" ] ; then
do_exit 1 "${WEBSERVER_OPT} webserver configuration option is not compatible with lsphp or php-fastcgi PHP mode with mod_ruid2 enabled."
fi
fi
fi
if [ "${MOD_RUID2_OPT}" = "yes" ] && [ "${HAVE_SUPHP_CGI}" = "yes" ]; then
echo "WARNING: It's not recommended to use ${WEBSERVER_OPT} with mod_ruid2 & suPHP enabled. It's a redundant and slow combination."
sleep 1
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
if [ "${PHP1_MODE_OPT}" != "lsphp" ]; then
do_exit 1 "php1_mode must be set to lsphp when using ${WEBSERVER_OPT} WEB server."
fi
if [ "${PHP2_MODE_OPT}" != "lsphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
do_exit 1 "php2_mode must be set to lsphp when using ${WEBSERVER_OPT} WEB server."
fi
if [ "${PHP3_MODE_OPT}" != "lsphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
do_exit 1 "php3_mode must be set to lsphp when using ${WEBSERVER_OPT} WEB server."
fi
if [ "${PHP4_MODE_OPT}" != "lsphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
do_exit 1 "php4_mode must be set to lsphp when using ${WEBSERVER_OPT} WEB server."
fi
elif [ "${CLOUDLINUX_OPT}" != "yes" ] || [ $(is_cloudlinux_solo) -eq 1 ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then
do_exit 1 "php1_mode cannot be set to lsphp when using ${WEBSERVER_OPT} WEB server and CloudLinux disabled."
fi
if [ "${PHP2_MODE_OPT}" = "lsphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
do_exit 1 "php2_mode cannot be set to lsphp when using ${WEBSERVER_OPT} WEB server and CloudLinux disabled."
fi
if [ "${PHP3_MODE_OPT}" = "lsphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
do_exit 1 "php3_mode cannot be set to lsphp when using ${WEBSERVER_OPT} WEB server and CloudLinux disabled."
fi
if [ "${PHP4_MODE_OPT}" = "lsphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
do_exit 1 "php4_mode cannot be set to lsphp when using ${WEBSERVER_OPT} WEB server and CloudLinux disabled."
fi
fi
fi
if [ "${PHP1_MODE_OPT}" != "php-fpm" ] && [ "${PHP1_MODE_OPT}" != "fastcgi" ] && [ "${PHP1_MODE_OPT}" != "mod_php" ] && [ "${PHP1_MODE_OPT}" != "suphp" ] && [ "${PHP1_MODE_OPT}" != "lsphp" ]; then
do_exit 1 "Please set a correct PHP mode (mode set for php1_release should be php-fpm, fastcgi, mod_php, suphp or lsphp)."
fi
if [ "${PHP2_MODE_OPT}" != "php-fpm" ] && [ "${PHP2_MODE_OPT}" != "fastcgi" ] && [ "${PHP2_MODE_OPT}" != "suphp" ] && [ "${PHP2_MODE_OPT}" != "lsphp" ]; then
do_exit 1 "Please set a correct PHP mode (mode set for php2_release should be php-fpm, fastcgi, suphp or lsphp)."
fi
if [ "${PHP3_MODE_OPT}" != "php-fpm" ] && [ "${PHP3_MODE_OPT}" != "fastcgi" ] && [ "${PHP3_MODE_OPT}" != "suphp" ] && [ "${PHP3_MODE_OPT}" != "lsphp" ]; then
do_exit 1 "Please set a correct PHP mode (mode set for php3_release should be php-fpm, fastcgi, suphp or lsphp)."
fi
if [ "${PHP4_MODE_OPT}" != "php-fpm" ] && [ "${PHP4_MODE_OPT}" != "fastcgi" ] && [ "${PHP4_MODE_OPT}" != "suphp" ] && [ "${PHP4_MODE_OPT}" != "lsphp" ]; then
do_exit 1 "Please set a correct PHP mode (mode set for php4_release should be php-fpm, fastcgi, suphp or lsphp)."
fi
PHP1_RELEASE_CHECK=0
for i in `echo "${PHP1_RELEASE_SET}"`; do
if [ "${PHP1_RELEASE_OPT}" = "$i" ]; then
PHP1_RELEASE_CHECK=1
fi
done
PHP2_RELEASE_CHECK=0
for i in `echo "${PHP2_RELEASE_SET} no"`; do
if [ "${PHP2_RELEASE_OPT}" = "$i" ]; then
PHP2_RELEASE_CHECK=1
fi
done
PHP3_RELEASE_CHECK=0
for i in `echo "${PHP3_RELEASE_SET} no"`; do
if [ "${PHP3_RELEASE_OPT}" = "$i" ]; then
PHP3_RELEASE_CHECK=1
fi
done
PHP4_RELEASE_CHECK=0
for i in `echo "${PHP4_RELEASE_SET} no"`; do
if [ "${PHP4_RELEASE_OPT}" = "$i" ]; then
PHP4_RELEASE_CHECK=1
fi
done
if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${PHP2_MODE_OPT}" = "mod_php" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
do_exit 1 "Cannot install both versions of PHP in mod_php mode."
elif [ "${PHP1_RELEASE_CHECK}" = "0" ]; then
do_exit 1 "Wrong php1_release set in the options.conf: ${PHP1_RELEASE_OPT}."
elif [ "${PHP2_RELEASE_CHECK}" = "0" ]; then
do_exit 1 "Wrong php2_release set in the options.conf: ${PHP2_RELEASE_OPT}."
elif [ "${PHP3_RELEASE_CHECK}" = "0" ]; then
do_exit 1 "Wrong php3_release set in the options.conf: ${PHP3_RELEASE_OPT}."
elif [ "${PHP4_RELEASE_CHECK}" = "0" ]; then
do_exit 1 "Wrong php4_release set in the options.conf: ${PHP4_RELEASE_OPT}."
fi
# Check for the same versions set
SAME_PHP_VERSION=false
if [ "${PHP1_RELEASE_OPT}" = "${PHP2_RELEASE_OPT}" ] || [ "${PHP1_RELEASE_OPT}" = "${PHP3_RELEASE_OPT}" ] || [ "${PHP1_RELEASE_OPT}" = "${PHP4_RELEASE_OPT}" ]; then
SAME_PHP_VERSION=true
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
if [ "${PHP2_RELEASE_OPT}" = "${PHP3_RELEASE_OPT}" ] || [ "${PHP2_RELEASE_OPT}" = "${PHP4_RELEASE_OPT}" ]; then
SAME_PHP_VERSION=true
fi
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ "${PHP3_RELEASE_OPT}" = "${PHP4_RELEASE_OPT}" ]; then
SAME_PHP_VERSION=true
fi
if ${SAME_PHP_VERSION}; then
do_exit 1 "Cannot install the same version of PHP for both releases."
fi
#ensure php2/3/4_release is not set twice
for php_number in {2..4}; do {
C=`grep -c -e "^php${php_number}_release=" ${OPTIONS_CONF}`
if [ "${C}" -gt 1 ]; then
grep -e "^php${php_number}_release=" ${OPTIONS_CONF}
do_exit 1 "php${php_number}_release has been set twice in the options.conf. This will cause problems. Edit it to remove one of them."
fi
C=`grep -c -e "^php${php_number}_mode=" ${OPTIONS_CONF}`
if [ "${C}" -gt 1 ]; then
grep -e "^php${php_number}_mode=" ${OPTIONS_CONF}
do_exit 1 "php${php_number}_mode has been set twice in the options.conf. This will cause problems. Edit it to remove one of them."
fi
};
done
# WARNING: REPETITION IS EVIL BUSINESS: it might be better to write it as a for loop
#php 5.5 and older will never compile with openssl 1.1.0
if [ "${PHP1_RELEASE_OPT}" = "5.3" ] || [ "${PHP1_RELEASE_OPT}" = "5.4" ] || [ "${PHP1_RELEASE_OPT}" = "5.5" ] || [ "${PHP2_RELEASE_OPT}" = "5.3" ] || [ "${PHP2_RELEASE_OPT}" = "5.4" ] || [ "${PHP2_RELEASE_OPT}" = "5.5" ] || [ "${PHP3_RELEASE_OPT}" = "5.3" ] || [ "${PHP3_RELEASE_OPT}" = "5.4" ] || [ "${PHP3_RELEASE_OPT}" = "5.5" ] || [ "${PHP4_RELEASE_OPT}" = "5.3" ] || [ "${PHP4_RELEASE_OPT}" = "5.4" ] || [ "${PHP4_RELEASE_OPT}" = "5.5" ]; then
OV=`openssl_version | cut -d. -f1,2`
if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.1 'php 5.x vs openssl 1.1.0 ver check'`" -ge 0 ] && [ ! -e ${WORKDIR}/custom/fpm/.custom_openssl ]; then
do_exit 1 "php 5.3, 5.4, 5.5 cannot compile against openssl 1.1.0 or higher. Try php 5.6 or higher."
fi
fi
#php 8.0 and older will never compile with openssl 3.0
if echo "${PHP1_RELEASE_OPT}" | grep -q '^5\|^7\|^8\.0' || echo "${PHP2_RELEASE_OPT}" | grep -q '^5\|^7\|^8\.0' || echo "${PHP3_RELEASE_OPT}" | grep -q '^5\|^7\|^8\.0' || echo "${PHP4_RELEASE_OPT}" | grep -q '^5\|^7\|^8\.0'; then
OV=`openssl_version | cut -d. -f1,2`
if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 3.0 'php 5.x and 7.x vs openssl 3.0 ver check'`" -ge 0 ] && [ ! -e ${WORKDIR}/custom/fpm/.custom_openssl ]; then
do_exit 1 "php 5.x, 7.x and 8.0 cannot compile against openssl 3.0 or higher. Try php 8.1 or higher."
fi
fi
if [ "${APACHE_VER_OPT}" != "2.4" ] && [ "${APACHE_VER_OPT}" != "" ]; then
do_exit 1 "Wrong apache_ver value set in ${OPTIONS_CONF}."
fi
if [ "${MOD_RUID2_OPT}" = "yes" ]; then
if [ "${OS_CENTOS_VER}" != "7" ]; then
do_exit 1 "mod_ruid2 does not support CentOS8/9."
fi
fi
if [ "${FTPD_OPT}" = "pureftpd" ]; then
if [ -s "$DACONF_FILE" ]; then
UNIFIED_FTP=`/usr/local/directadmin/directadmin c | grep -m1 unified_ftp_password_file | cut -d= -f2`
if [ "$UNIFIED_FTP" != "1" ]; then
echo "unified_ftp_password_file is not set to 1. You must convert before you can use pureftpd"
echo "Please read this guide: https://www.directadmin.com/features.php?id=1134"
echo ""
echo "Simulation:"
echo " cd /usr/local/directadmin"
echo " echo 'action=convert&value=unifiedftp&simulate=yes' >> data/task.queue"
echo " ./dataskq d1"
echo ""
echo "Conversion:"
echo " cd /usr/local/directadmin"
echo " echo 'unified_ftp_password_file=1' >> conf/directadmin.conf"
echo " echo 'action=convert&value=unifiedftp' >> data/task.queue"
echo " ./dataskq d1"
do_exit 1 ""
fi
fi
fi
if [ "${CRON_FREQUENCY_OPT}" != "daily" ] && [ "${CRON_FREQUENCY_OPT}" != "weekly" ] && [ "${CRON_FREQUENCY_OPT}" != "monthly" ]; then
echo "Wrong cron_frequency value set in ${OPTIONS_CONF}"
echo "Current value: ${CRON_FREQUENCY_OPT}"
do_exit 1 "Valid values: daily, weekly, or monthly"
fi
if [ "${SA_UPDATE_OPT}" != "no" ] && [ "${SA_UPDATE_OPT}" != "daily" ] && [ "${SA_UPDATE_OPT}" != "weekly" ] && [ "${SA_UPDATE_OPT}" != "monthly" ]; then
echo "Wrong sa_update value set in ${OPTIONS_CONF}"
echo "Current value: ${SA_UPDATE_OPT}"
do_exit 1 "Valid values: no, daily, weekly, or monthly"
fi
if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ] && [ "${SPAMD_OPT}" != "spamassassin" ] && [ "${SPAMD_OPT}" != "rspamd" ]; then
echo "easy_spam_fighter requires spamassassin to be enabled."
do_exit 1 "Install SpamAssassin: https://help.directadmin.com/item.php?id=36"
fi
if [ "${DOWNLOADSERVER_OPT}" = "files26.directadmin.com" ]; then
setOpt downloadserver damirror.unix-solutions.be
echo "files26 has been replaced with new name damirror.unix-solutions.be, used on the next run"
fi
if [ -e /usr/include/sys/select.h ] && [ ! -s /usr/include/sys/select.h ] && [ ! -e ${DEBIAN_VERSION} ]; then
echo "Found broken glibc-headers package, reinstalling..."
yum -y reinstall glibc-headers
fi
if [ ! -e ${DEBIAN_VERSION} ]; then
if [ -e /etc/yum.repos.d/oracle-linux-ol8.repo ] && [ ! -e /etc/yum.repos.d/oracle-epel-ol8.repo ]; then
yum -y install oraclelinux-release-el8
elif [ ! -e /etc/yum.repos.d/oracle-linux-ol8.repo ] && [ ! -e /etc/yum.repos.d/oracle-epel-ol8.repo ] && [ ! -e /etc/yum.repos.d/epel.repo ]; then
yum -y install epel-release
if [ ! -e /etc/yum.repos.d/epel.repo ]; then
if [ "${OS_CENTOS_VER}" = "7" ]; then
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
elif [ "${OS_CENTOS_VER}" = "8" ]; then
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
elif [ "${OS_CENTOS_VER}" = "9" ]; then
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
fi
fi
fi
fi
}
json_toggle() {
JSON_CASE=1
}
JSON_CASE=0
case "$1" in
versions_json) json_toggle ;;
list_removals_json) json_toggle ;;
gen_help_json) json_toggle ;;
list_configs_json) json_toggle ;;
settings_json) json_toggle ;;
esac
GET_FILE_FAILED_COUNT=0
#getFile file.tar.gz name (localfile.tar.gz)
#getFile all/awstats/file.tar.gz awstats awstats.tar.gz
getFile() {
cd ${CWD}
TRY_DIFFERENT_THRESH=2
GIVE_UP_THRESH=5
LOCAL_NAME=$1
if [ "$3" != "" ]; then
LOCAL_NAME=$3
fi
if [ ! -s "${CWD}/${LOCAL_NAME}" ]; then
printf "Downloading\t\t${LOCAL_NAME}...\n"
if [ "$4" = "hexan" ]; then
safeDownloadWithMove "${CWD}/${LOCAL_NAME}" "${WEBPATH_BGIT}/${1}"
else
safeDownloadWithMove "${CWD}/${LOCAL_NAME}" "${WEBPATH}/${1}"
if [ ! -s "${CWD}/${LOCAL_NAME}" ]; then
echo "Downloaded file ${CWD}/${LOCAL_NAME} does not exist or is empty after download"
echo "cwd is: `pwd`"
echo "${boldon}Fileserver might be down, using the backup file server..${boldoff}"
safeDownloadWithMove "${CWD}/${LOCAL_NAME}" "${WEBPATH_BACKUP}/${1}"
if [ "${GET_FILE_FAILED_COUNT}" -eq ${GIVE_UP_THRESH} ]; then
echo ""
echo ""
echo "${boldon}There seem to be many connection issues. Check your network and /etc/resolv.conf file${boldoff}"
echo "Also try finding a faster server: https://help.directadmin.com/item.php?id=305"
echo ""
echo ""
sleep 5
#messages/changes will now stop because it's above.
GET_FILE_FAILED_COUNT=$((GET_FILE_FAILED_COUNT+1))
elif [ "${GET_FILE_FAILED_COUNT}" -lt ${GIVE_UP_THRESH} ]; then
GET_FILE_FAILED_COUNT=$((GET_FILE_FAILED_COUNT+1))
if [ "${GET_FILE_FAILED_COUNT}" -gt ${TRY_DIFFERENT_THRESH} ]; then
echo ""
echo "${boldon}Too many failed attempts with ${DOWNLOADSERVER_OPT}. Will try a different server.${boldoff}"
SET_DL=da-mirror.wpcloud.vn
case "${DOWNLOADSERVER_OPT}" in
da-mirror.wpcloud.vn) SET_DL=${WEBPATH_BACKUP_IP}
;;
files1.directadmin.com) SET_DL=${WEBPATH_BACKUP_IP}
;;
files2.directadmin.com) SET_DL=files1.directadmin.com
;;
files8.directadmin.com) SET_DL=files6.directadmin.com
;;
files11.directadmin.com) SET_DL=files6.directadmin.com
;;
files15.directadmin.com) SET_DL=files6.directadmin.com
;;
files16.directadmin.com) SET_DL=files6.directadmin.com
;;
esac
echo "${boldon}We'll temporarily try using $SET_DL instead${boldoff}"
echo ""
DOWNLOADSERVER_OPT=${SET_DL}
if echo "${DOWNLOADSERVERS_HTTPS_LIST}" | grep -m1 -q " ${DOWNLOADSERVER_OPT} "; then
DOWNLOADSERVER_SCHEME=https
else
DOWNLOADSERVER_SCHEME=http
fi
WEBPATH=http://da-mirror.wpcloud.vn/services/custombuild
WEBPATH_SERVICES=http://da-mirror.wpcloud.vn/services
sleep 2
fi
fi
fi
fi
fi
}
downloadVersionsTxt() {
#safeDownloadWithMove "${CWD}/versions.txt" "${WEBPATH}/versions.txt"
#safeDownloadWithMove "${CWD}/patches_versions.txt" "${WEBPATH}/patches_versions.txt"
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
safeDownloadWithMove "${CWD}/versions_litespeed.txt" "${WEBPATH_LITESPEED}/versions.txt"
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
safeDownloadWithMove "${CWD}/versions_cl.txt" "${WEBPATH_CL}/${VERSIONS_CL}"
fi
if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then
safeDownloadWithMove "${VERSIONS_FILE_CWAF}" "${WEBPATH_CWAF}/doc/comodo_versions.txt"
fi
}
SKIP_LDCONFIG_SECTION=0
skip_ldconfig_toggle() {
SKIP_LDCONFIG_SECTION=1
}
case "$1" in
"") skip_ldconfig_toggle ;;
opt_help) skip_ldconfig_toggle ;;
set) skip_ldconfig_toggle ;;
set_php) skip_ldconfig_toggle ;;
get_versions_txt) skip_ldconfig_toggle ;;
update_script) skip_ldconfig_toggle ;;
version) skip_ldconfig_toggle ;;
set_fastest) skip_ldconfig_toggle ;;
set_fastest_quiet) skip_ldconfig_toggle ;;
kill) skip_ldconfig_toggle ;;
update_da) skip_ldconfig_toggle ;;
list_configs_json) skip_ldconfig_toggle ;;
settings_json) skip_ldconfig_toggle ;;
get_timezone) skip_ldconfig_toggle ;;
custom_config) skip_ldconfig_toggle ;;
set_versions_txt) skip_ldconfig_toggle ;;
show_component_config) skip_ldconfig_toggle ;;
remove_customized_config) skip_ldconfig_toggle ;;
show_file) skip_ldconfig_toggle ;;
check_options) skip_ldconfig_toggle ;;
esac
if [ "${SKIP_LDCONFIG_SECTION}" = "0" ]; then
#Is the default PHP running as CGI? This variable is not used anymore, but left for the future
GREP_PHP_MODE="`grep -m1 '^php1_mode=' ${WORKDIR}/options.conf | cut -d= -f2`"
# Get apache version from directadmin.conf
DACONF_APACHE_VER=1.3
if [ -e ${DACONF_FILE} ]; then
DACONF_APACHE_VER=`grep -m1 "^apache_ver=" ${DACONF_FILE} | cut -d= -f2`
fi
# Download versions.txt if AUTOVER_OPT is set to "yes"
if [ "${AUTOVER_OPT}" = "yes" ]; then
downloadVersionsTxt
fi
# Check if ld.so.conf has /usr/local/lib
if [ ! -e /etc/ld.so.conf ] || [ "`grep -m1 -c -E '/usr/local/lib$' /etc/ld.so.conf`" = "0" ]; then
echo "/usr/local/lib" >> /etc/ld.so.conf
/sbin/ldconfig
fi
# Check if ld.so.conf has /usr/local/lib
if [ -d /usr/local/lib64 ]; then
if [ ! -e /etc/ld.so.conf ] || [ "`grep -m1 -c -E '/usr/local/lib64$' /etc/ld.so.conf`" = "0" ]; then
echo "/usr/local/lib64" >> /etc/ld.so.conf
/sbin/ldconfig
fi
fi
if [ "$1" = "apache" ] || [ "$1" = "nginx_apache" ]; then
if [ "`grep -m1 -c -E '^/usr/lib/apache$' /etc/ld.so.conf`" = "1" ]; then
perl -pi -e 's|^/usr/lib/apache|#/usr/lib/apache|' /etc/ld.so.conf
/sbin/ldconfig
fi
fi
fi
getFileCL() {
cd ${CWD}
if [ ! -s ${1} ]; then
safeDownloadWithMove "${CWD}/${1}" "${WEBPATH_CL}/${1}"
tar xzf ${1} --no-same-owner
fi
}
getFileCWAF() {
cd ${CWD}
if [ ! -s ${1} ]; then
safeDownloadWithMove "${CWD}/${1}" "${WEBPATH_CWAF}/api/da_vendor?file=${1}"
tar xzf ${1} --no-same-owner
fi
}
getFileLSWS() {
cd ${CWD}
if [ ! -s ${1} ]; then
safeDownloadWithMove "${CWD}/${1}" ${WEBPATH_LITESPEED}/${LITESPEED_REPO}/${1}
fi
}
####################################################
add_to_system_backup() {
SB_TYPE=$1
SB_WHERE=$2
F=/usr/local/sysbk/mod/custom.$SB_TYPE
if [ ! -e ${F} ]; then
return;
fi
if [ ! -e ${SB_WHERE} ]; then
echo "add_to_system_backups: cannot find $SB_WHERE to add to $F";
return;
fi
C=`grep -c -e "^${SB_WHERE}\$" $F`
if [ "$C" -gt 0 ]; then
return;
fi
echo "${SB_WHERE}" >> $F
echo "$SB_WHERE added to $F";
}
####################################################
# Rewrite directadmin-vhosts.conf
doVhosts() {
PATHNAME=${HTTPDCONF}/extra
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
PATHNAME=${NGINXCONF}
elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
PATHNAME=${LSWS_HOME}/conf
fi
if [ ! -d ${PATHNAME} ]; then
mkdir -p ${PATHNAME}
fi
echo -n '' > ${PATHNAME}/directadmin-vhosts.conf
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
for i in `ls /usr/local/directadmin/data/users/*/nginx.conf`; do
echo "include $i;" >> ${PATHNAME}/directadmin-vhosts.conf
done
elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then
for i in `ls /usr/local/directadmin/data/users/*/httpd.conf`; do
echo "Include $i" >> ${PATHNAME}/directadmin-vhosts.conf
done
elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
for i in `ls /usr/local/directadmin/data/users/*/openlitespeed.conf`; do
echo "include $i" >> ${PATHNAME}/directadmin-vhosts.conf
done
elif [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo -n '' > ${NGINXCONF}/directadmin-vhosts.conf
for i in `ls /usr/local/directadmin/data/users/*/nginx.conf`; do
echo "include $i;" >> ${NGINXCONF}/directadmin-vhosts.conf
done
for i in `ls /usr/local/directadmin/data/users/*/httpd.conf`; do
echo "Include $i" >> ${PATHNAME}/directadmin-vhosts.conf
done
fi
}
####################################################
# We need this up for compatibility purposes
PHP_INI_OPT=`getOpt php_ini no`
roundcube_version() {
RCVERFILE=/var/www/html/roundcube/program/include/iniset.php
if [ ! -e $RCVERFILE ]; then
echo 0
return
fi
grep -m1 "RCMAIL_VERSION" $RCVERFILE | cut -d\' -f4 | cut -d\ -f1
}
exim_version() {
/usr/sbin/exim -bV 2>/dev/null | grep -m1 'built' | head -n1 | awk '{ print $3 }' | tr '_' '.'
}
exim_conf_version() {
COUNT=0
T_EXIMCONFV=0
if [ -e /etc/exim.conf ]; then
COUNT=`head -n1 /etc/exim.conf | grep -c 'Version'`
if [ "${COUNT}" -gt 0 ]; then
T_EXIMCONFV="`head -n1 /etc/exim.conf | awk '{ print $6 }'`"
fi
if [ "${T_EXIMCONFV}" = "0" ]; then
COUNT=`head -n2 /etc/exim.conf | grep -c release`
if [ "${COUNT}" -gt 0 ]; then
T_EXIMCONFV="`head -n2 /etc/exim.conf | grep release | awk '{ print $2 }' | cut -d. -f4,5,6 | cut -d- -f1`"
fi
fi
fi
if [ "${T_EXIMCONFV}" = "0" ]; then
writeLog "exim_conf_version: Cannot determine version of /etc/exim.conf";
fi
echo $T_EXIMCONFV
}
exim_dkim_conf_version() {
T_EXIMDKIMV=0
if [ -e /etc/exim.dkim.conf ]; then
T_EXIMDKIMV=`head -n1 /etc/exim.dkim.conf | cut -d\# -f2`
fi
if [ "${T_EXIMDKIMV}" = "" ]; then
T_EXIMDKIMV=0
fi
echo ${T_EXIMDKIMV}
}
exim_pl_version() {
EPL=/etc/exim.pl
if [ ! -s ${EPL} ]; then
echo 0
return;
fi
grep '#VERSION=' /etc/exim.pl | head -n1 | cut -d= -f2
}
rspamd_conf_version() {
COUNT=0
T_RSDV=0
RSDTXT=/etc/exim/rspamd/README.txt
if [ -e ${RSDTXT} ]; then
COUNT=`head -n1 ${RSDTXT} | grep -c '^#'`
if [ "${COUNT}" -gt 0 ]; then
T_RSDV="`head -n1 ${RSDTXT} | cut -d'#' -f2`"
fi
fi
echo ${T_RSDV}
}
getVerLSWS() {
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_LITESPEED} | cut -d ':' -f 2`
if ${EXISTS_VERSIONS_FILE_CUSTOM}; then
if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 2`
fi
fi
if [ "${RESULT}" = "" ]; then
>&2 echo "ERROR: version of $1 not found in versions_litespeed.txt!"
RESULT="0"
fi
echo "${RESULT}"
}
getVerCL() {
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CL} | cut -d ':' -f 2`
if ${EXISTS_VERSIONS_FILE_CUSTOM}; then
if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 2`
fi
fi
if [ "${RESULT}" = "" ]; then
>&2 echo "ERROR: version of $1 not found in versions_cl.txt!"
RESULT="0"
fi
echo "${RESULT}"
}
getVerCWAF() {
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CWAF} | cut -d ':' -f 2`
if ${EXISTS_VERSIONS_FILE_CUSTOM}; then
if grep -m1 -q ^$1: ${VERSIONS_FILE_CUSTOM}; then
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CUSTOM} | cut -d ':' -f 2`
fi
fi
if [ "${RESULT}" = "" ]; then
>&2 echo "ERROR: version of $1 not found in versions_cwaf.txt!"
RESULT="0"
fi
echo "${RESULT}"
}
GET_SERVICE_VERSIONS=1
dont_skip_toggle() {
GET_SERVICE_VERSIONS=0
}
case "$1" in
"") dont_skip_toggle ;;
version) dont_skip_toggle ;;
kill) dont_skip_toggle ;;
update_da) dont_skip_toggle ;;
get_timezone) dont_skip_toggle ;;
set_versions_txt) dont_skip_toggle ;;
show_file) dont_skip_toggle ;;
settings_json) dont_skip_toggle ;;
check_options) dont_skip_toggle ;;
opt_help) dont_skip_toggle ;;
get_versions_txt) dont_skip_toggle ;;
update_script) dont_skip_toggle ;;
set_fastest) dont_skip_toggle ;;
set_fastest_quiet) dont_skip_toggle ;;
esac
if [ "$1" = "gen_help_json" ] && [ "$2" != "" ]; then
GET_SERVICE_VERSIONS=0
fi
# check if we have versions.txt
if [ ! -s ${VERSIONS_FILE} ]; then
cd ${WORKDIR}
getFile versions.txt versions.txt versions.txt hexan
# Hexan
fi
if [ ! -s ${VERSIONS_FILE} ]; then
do_exit 1 "There is no versions.txt file. Unable to download."
else
SOURCE_VERSIONS_TXT=`awk -F ":" '{gsub(/\./,"_",$1);gsub(/-/,"_",$1);print "VERSIONS_TXT_"$1"="$2}' ./versions.txt`
eval ${SOURCE_VERSIONS_TXT}
if [ -s ./custom_versions.txt ]; then
SOURCE_VERSIONS_TXT=`awk -F ":" '{gsub(/\./,"_",$1);gsub(/-/,"_",$1);print "VERSIONS_TXT_"$1"="$2}' ./custom_versions.txt`
eval ${SOURCE_VERSIONS_TXT}
fi
fi
# check if we have patches_versions.txt
#if [ ! -s ${PATCHES_VERSIONS_FILE} ]; then
# cd ${WORKDIR}
# getFile patches_versions.txt patches_versions
#fi
#if [ ! -s ${PATCHES_VERSIONS_FILE} ]; then
# do_exit 1 "There is no versions.txt file. Unable to download."
#fi
#The following one needs an exception:
ROUNDCUBE_VER=`getVer roundcubemail`
ROUNDCUBE_MAJOR_VER=`echo ${ROUNDCUBE_VER} | cut -d. -f1`
if [ "${PHP1_RELEASE_OPT}" = "5.3" ]; then
SQUIRRELMAIL_VER=`getVer squirrelmail`
SQUIRRELMAIL_VER_NAME=squirrelmail
else
SQUIRRELMAIL_VER=`getVer squirrelmail_svn`
SQUIRRELMAIL_VER_NAME=squirrelmail_svn
fi
if [ "${GET_SERVICE_VERSIONS}" = "1" ]; then
if [ "$1" != "list_configs_json" ] && [ "$1" != "custom_config" ] && [ "$1" != "show_component_config" ] && [ "$1" != "remove_customized_config" ]; then
if [ "${WEBSERVER_OPT}" = "litespeed" ] && [ ! -e versions_litespeed.txt ] ; then
getFile versions_litespeed.txt versions_litespeed
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ ! -e versions_cl.txt ]; then
getFile versions_cl.txt versions_cl
fi
if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "comodo" ] && [ ! -e versions_cwaf.txt ]; then
getFile versions_cwaf.txt versions_cwaf
fi
#####################################################
# User Variables
MOD_LSAPI_VER=no
MOD_HOSTINGLIMITS_VER=no
MOD_PROCTITLE_VER=no
CL_PHP_LSAPI_VER=no
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
MOD_LSAPI_VER=`getVerCL mod_lsapi`
MOD_HOSTINGLIMITS_VER=`getVerCL mod_hostinglimits`
MOD_PROCTITLE_VER=`getVerCL mod_proctitle`
CL_PHP_LSAPI_VER=`getVerCL php-litespeed`
fi
NGINX_VER=`getVer nginx`
APACHE2_VER=`getVer apache2.4`
APR_VER=`getVer apr`
APR_UTIL_VER=`getVer apr-util`
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
PHP_VERSION_NUMBER=`getVer php${php_shortrelease}`
eval `echo "PHP${php_shortrelease}_VER=${PHP_VERSION_NUMBER}"`
done
PHP1_VERSION_EVAL_VAR=PHP${PHP1_SHORTRELEASE}_VER
PHP1_RELEASE_VER=$(eval_var ${PHP1_VERSION_EVAL_VAR})
PHP2_RELEASE_VER=no
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
PHP2_VERSION_EVAL_VAR=PHP${PHP2_SHORTRELEASE}_VER
PHP2_RELEASE_VER=$(eval_var ${PHP2_VERSION_EVAL_VAR})
fi
PHP3_RELEASE_VER=no
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
PHP3_VERSION_EVAL_VAR=PHP${PHP3_SHORTRELEASE}_VER
PHP3_RELEASE_VER=$(eval_var ${PHP3_VERSION_EVAL_VAR})
fi
PHP4_RELEASE_VER=no
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
PHP4_VERSION_EVAL_VAR=PHP${PHP4_SHORTRELEASE}_VER
PHP4_RELEASE_VER=$(eval_var ${PHP4_VERSION_EVAL_VAR})
fi
MODSECURITY_VER=`getVer modsecurity`
MODSECURITY_FILENAME=modsecurity
LIBMODSECURITY_VER=`getVer modsecurity3`
LIBMODSECURITY_FILENAME=modsecurity
MODSECURITY_NGINX_CONNECTOR_VER=`getVer modsecurity3_nginx`
MODSECURITY_NGINX_CONNECTOR_FILENAME=modsecurity-nginx
MODSECURITY_APACHE_CONNECTOR_VER=`getVer modsecurity3_apache`
MODSECURITY_APACHE_CONNECTOR_FILENAME=modsecurity-apache
if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ] && [ "${MODSECURITY_OPT}" = "yes" ]; then
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
CWAF_RULES_LS_VER=`getVerCWAF cwaf_rules_ls`
elif [ "${WEBSERVER_OPT}" = "apache" ]; then
CWAF_RULES_VER=`getVerCWAF cwaf_rules`
else
CWAF_RULES_NGINX_VER=`getVerCWAF cwaf_rules_nginx_3`
fi
fi
OWASP_RULES_VER=`getVer owasp3_rules`
HTSCANNER_VER=`getVer htscanner`
MOD_RUID2_VER=`getVer mod_ruid2`
MOD_ACLR2_VER=`getVer mod_aclr2`
MOD_FCGID_VER=`getVer mod_fcgid`
FCGID_SH_VER=`getVer fcgid_sh`
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
if [ "${MYSQL_OPT}" = "5.5" ]; then
MYSQL_VER=`getVer mysql5.5`
elif [ "${MYSQL_OPT}" = "5.6" ]; then
MYSQL_VER=`getVer mysql5.6`
elif [ "${MYSQL_OPT}" = "5.7" ]; then
MYSQL_VER=`getVer mysql5.7`
elif [ "${MYSQL_OPT}" = "8.0" ]; then
MYSQL_VER=`getVer mysql8.0`
else
MYSQL_VER=0
fi
else
if [ "${MARIADB_OPT}" = "5.5" ]; then
MARIADB_VER=`getVer mariadb5.5`
elif [ "${MARIADB_OPT}" = "10.0" ]; then
MARIADB_VER=`getVer mariadb10.0`
elif [ "${MARIADB_OPT}" = "10.1" ]; then
MARIADB_VER=`getVer mariadb10.1`
elif [ "${MARIADB_OPT}" = "10.2" ]; then
MARIADB_VER=`getVer mariadb10.2`
elif [ "${MARIADB_OPT}" = "10.3" ]; then
MARIADB_VER=`getVer mariadb10.3`
elif [ "${MARIADB_OPT}" = "10.4" ]; then
MARIADB_VER=`getVer mariadb10.4`
elif [ "${MARIADB_OPT}" = "10.5" ]; then
MARIADB_VER=`getVer mariadb10.5`
elif [ "${MARIADB_OPT}" = "10.6" ]; then
MARIADB_VER=`getVer mariadb10.6`
else
MARIADB_VER=0
fi
fi
CURL_VER=`getVer curl`
SUPHP_VER=`getVer suphp_current`
DOVECOT_VER=`getVer dovecot`
DOVECOT_REL=`echo ${DOVECOT_VER} | cut -d. -f1,2`
PIGEONHOLE_VER=no
if [ "${DOVECOT_REL}" = "2.3" ]; then
DOVECOT_SHORTREL=23
PIGEONHOLE_VER=`getVer pigeonhole23`
fi
FTS_XAPIAN_VER=`getVer fts-xapian`
XAPIAN_CORE_VER=`getVer xapian-core`
BUBBLEWRAP_VER=`getVer bubblewrap`
JAILSHELL_SH_VER=`getVer jailshell_sh`
EXIM_VER=`getVer exim`
S_NAIL_VER=`getVer s-nail`
MSMTP_VER=`getVer msmtp`
LUA_VER=`getVer lua`
BLOCKCRACKING_VER=`getVer blockcracking`
EASY_SPAM_FIGHTER_VER=`getVer easy_spam_figther`
RSPAMD_CONF_VER=`getVer rspamd_conf`
LIBSPF2_VER=`getVer libspf2`
if [ "${EXIMCONF_RELEASE_OPT}" = "4.5" ]; then
EXIM_CONF_VER=`getVer exim_conf_45`
EXIM_PL_VER=`getVer exim_pl_45`
else
EXIM_CONF_VER=`getVer exim_conf_45`
EXIM_PL_VER=`getVer exim_pl_45`
fi
PROFTPD_VER=`getVer proftpd`
PUREFTPD_VER=`getVer pureftpd`
LIBZIP_VER=`getVer libzip`
COMPOSER_VER=`getVer composer`
WP_VER=`getVer wp-cli`
IMAPSYNC_VER=`getVer imapsync`
LEGO_VER=`getVer lego`
IMAGICK_VER=`getVer imagick`
XMLRPC_VER=`getVer xmlrpc`
IMAGEMAGICK_VER=`getVer imagemagick`
CLAMAV_VER=`getVer clamav`
AWSTATS_VER=`getVer awstats`
AWSTATS_PROCESS_VER=`getVer awstats_process`
UNIT_VER=`getVer unit`
SUHOSIN_VER=`getVer suhosin`
OPCACHE_VER=`getVer zendopcache`
IGBINARY_VER=`getVer igbinary`
PSR_VER=`getVer psr`
PHALCON_VER=`getVer phalcon`
REDIS_VER=`getVer redis`
PHPREDIS_VER=`getVer phpredis`
SNUFFLEUPAGUS_VER=`getVer snuffleupagus`
IMAP_VER=`getVer imap`
if [ "${B64}" = "1" ]; then
IONCUBE_VER=`getVer ioncube_loaders_lin_x86-64`
elif [ "${B64}" = "2" ]; then
IONCUBE_VER=`getVer ioncube_loaders_lin_aarch64`
fi
LIBMAXMINDDB_VER=`getVer libmaxminddb`
GEOIPUPDATE_VER=`getVer geoipupdate`
# Applications versions
PHPMYADMIN_REMOTE_PATCH=pma_auth_logging.patch
if [ "${PHPMYADMIN_VER_OPT}" = "5" ]; then
PHPMYADMIN_VER=`getVer phpmyadmin5`
else
PHPMYADMIN_VER=`getVer phpmyadmin4`
fi
SQUIRRELMAIL_LOCALE_VER=`getVer squirrelmail_locale`
SQUIRRELMAIL_LOGGER_VER=`getVer squirrel_logger`
OPENLITESPEED_VER=`getVer openlitespeed`
LITESPEED_VER=no
LETSENCRYPT_VER=`getVer letsencrypt_sh`
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
LITESPEED_MAIN_VER=`getVerLSWS release`
LITESPEED_REPO_START=`echo ${LITESPEED_MAIN_VER} | cut -d. -f1`
LITESPEED_REPO="${LITESPEED_REPO_START}.0"
if [ "${B64}" = "1" ]; then
LITESPEED_VER_NAME="lsws-${LITESPEED_MAIN_VER}-ent-x86_64-linux"
else
LITESPEED_VER_NAME="lsws-${LITESPEED_MAIN_VER}-ent-aarch64-linux"
fi
LITESPEED_VER=`getVerLSWS ${LITESPEED_VER_NAME}`
LSWS_OS="linux"
if [ "${B64}" = "1" ]; then
LITESPEED_NAME="lsws-${LITESPEED_VER}-ent-x86_64-${LSWS_OS}"
else
LITESPEED_NAME="lsws-${LITESPEED_VER}-ent-aarch64-${LSWS_OS}"
fi
fi
# SpamAssassin versions
SPAMASSASSIN_VER=`getVer spamassassin`
RSPAMD_VER=`getVer rspamd`
LITESPEED_TRIAL_KEY=${WORKDIR}/configure/litespeed/trial.key
if [ -e ${WORKDIR}/custom/litespeed/trial.key ]; then
LITESPEED_TRIAL_KEY=${WORKDIR}/custom/litespeed/trial.key
fi
fi
# Variable for proftpd
PROFTPD_CONFIGURE=configure/proftpd/configure.proftpd
if [ -e custom/proftpd/configure.proftpd ]; then
PROFTPD_CONFIGURE=custom/proftpd/configure.proftpd
fi
PROFTPD_CONF=configure/proftpd/conf/proftpd.conf
if [ -e custom/proftpd/conf/proftpd.conf ]; then
PROFTPD_CONF=custom/proftpd/conf/proftpd.conf
fi
# Variable for ImageMagick
IMAGEMAGICK_CONFIGURE=configure/imagemagick/configure.imagemagick
if [ -e custom/imagemagick/configure.imagemagick ]; then
IMAGEMAGICK_CONFIGURE=custom/imagemagick/configure.imagemagick
fi
# Variable for pureftpd
PUREFTPD_CONFIGURE=configure/pureftpd/configure.pureftpd
if [ -e custom/pureftpd/configure.pureftpd ]; then
PUREFTPD_CONFIGURE=custom/pureftpd/configure.pureftpd
fi
PUREFTPD_CONF=configure/pureftpd/pure-ftpd.conf
if [ -e custom/pureftpd/pure-ftpd.conf ]; then
PUREFTPD_CONF=custom/pureftpd/pure-ftpd.conf
fi
# Variable for ClamAV
CLAMAV_CONFIGURE=configure/clamav/configure.clamav
if [ -e custom/clamav/configure.clamav ]; then
CLAMAV_CONFIGURE=custom/clamav/configure.clamav
fi
#Variable for ModSecurity
if [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "nginx" ]; then
MODSECURITY_CONFIGURE=configure/modsecurity/configure.modsecurity
if [ -e custom/modsecurity/configure.modsecurity ]; then
MODSECURITY_CONFIGURE=custom/modsecurity/configure.modsecurity
fi
else
MODSECURITY_CONFIGURE=configure/ap2/configure.modsecurity
if [ -e custom/ap2/configure.modsecurity ]; then
MODSECURITY_CONFIGURE=custom/ap2/configure.modsecurity
fi
fi
# Variable for cURL
CURL_CONFIGURE=configure/curl/configure.curl
if [ -e custom/curl/configure.curl ]; then
CURL_CONFIGURE=custom/curl/configure.curl
fi
# Variables for ModSecurity uploadscan
RUNAV_PL=configure/clamav/runav.pl
if [ -e custom/clamav/runav.pl ]; then
RUNAV_PL=custom/clamav/runav.pl
fi
RUNAV_CONF=configure/clamav/runav.conf
if [ -e custom/clamav/runav.conf ]; then
RUNAV_CONF=custom/clamav/runav.conf
fi
# Variable for OPCACHE
OPCACHE_INI=configure/opcache/opcache.ini
if [ -e custom/opcache/opcache.ini ]; then
OPCACHE_INI=custom/opcache/opcache.ini
fi
# Variable for SUHOSIN
SUHOSIN_INI=configure/suhosin/suhosin.ini
if [ -e custom/suhosin/suhosin.ini ]; then
SUHOSIN_INI=custom/suhosin/suhosin.ini
fi
EXIM_MAKEFILE=""
if [ -e custom/exim/Makefile ]; then
EXIM_MAKEFILE=${CWD}/custom/exim/Makefile
fi
# Dovecot variables
DOVECOT_CONFIGURE=configure/dovecot/configure.dovecot
if [ -e custom/dovecot/configure.dovecot ]; then
DOVECOT_CONFIGURE=custom/dovecot/configure.dovecot
#to solve bogus ICU linking in FTS plugin of dovecot
if ! grep -m1 -q without-icu ${DOVECOT_CONFIGURE}; then
perl -pi -e 's|^\./configure |./configure --without-icu |g' ${DOVECOT_CONFIGURE}
fi
fi
DOVECOTCONFDIR=${WORKDIR}/configure/dovecot/conf
DOVECOTCUSTOMCONFDIR=0
if [ -d ${WORKDIR}/custom/dovecot/conf ]; then
DOVECOTCUSTOMCONFDIR=${WORKDIR}/custom/dovecot/conf
fi
DOVECTCONFFILE=${WORKDIR}/configure/dovecot/dovecot.conf
if [ -e ${WORKDIR}/custom/dovecot/dovecot.conf ]; then
DOVECTCONFFILE=${WORKDIR}/custom/dovecot/dovecot.conf
fi
DOVECTCONFSIEVE=${WORKDIR}/configure/dovecot/conf.d/90-sieve.conf
if [ -e ${WORKDIR}/custom/dovecot/conf.d/90-sieve.conf ]; then
DOVECTCONFSIEVE=${WORKDIR}/custom/dovecot/conf.d/90-sieve.conf
fi
DOVECTCONFFTS=${WORKDIR}/configure/dovecot/conf.d/90-fts-xapian.conf
if [ -e ${WORKDIR}/custom/dovecot/conf.d/90-fts-xapian.conf ]; then
DOVECTCONFFTS=${WORKDIR}/custom/dovecot/conf.d/90-fts-xapian.conf
fi
DOVECTCONFQUOTA=${WORKDIR}/configure/dovecot/conf.d/90-quota.conf
if [ -e ${WORKDIR}/custom/dovecot/conf.d/90-quota.conf ]; then
DOVECTCONFQUOTA=${WORKDIR}/custom/dovecot/conf.d/90-quota.conf
fi
DOVECOTCONFZLIB=${WORKDIR}/configure/dovecot/conf.d/90-zlib.conf
if [ -e ${WORKDIR}/custom/dovecot/conf.d/90-zlib.conf ]; then
DOVECOTCONFZLIB=${WORKDIR}/custom/dovecot/conf.d/90-zlib.conf
fi
# Variables for spamd
SPAMD_CONF=configure/${SPAMD_OPT}/exim.spamd.conf
if [ -e custom/${SPAMD_OPT}/exim.spamd.conf ]; then
SPAMD_CONF=custom/${SPAMD_OPT}/exim.spamd.conf
fi
# Variables for apache
APACHE2_CONFIGURE=configure/ap2/configure.apache
if [ -e custom/ap2/configure.apache ]; then
APACHE2_CONFIGURE=custom/ap2/configure.apache
fi
PHP_HANDLERS_HTTPD=/etc/httpd/conf/extra/httpd-php-handlers.conf
SUPHP_HTTPD=/etc/httpd/conf/extra/httpd-suphp.conf
APCONFDIR=${WORKDIR}/configure/${APCONF}/conf
APCUSTOMCONFDIR=0
#custom/configure isn't supposed to be there
if [ -d ${WORKDIR}/custom/configure/${APCONF}/conf ]; then
APCUSTOMCONFDIR=${WORKDIR}/custom/configure/${APCONF}/conf
fi
if [ -d ${WORKDIR}/custom/${APCONF}/conf ]; then
APCUSTOMCONFDIR=${WORKDIR}/custom/${APCONF}/conf
fi
APCERTCONF=configure/${APCONF}/cert_config.txt
if [ -e custom/configure/${APCONF}/cert_config.txt ]; then
APCERTCONF=custom/configure/${APCONF}/cert_config.txt
fi
if [ -e custom/${APCONF}/cert_config.txt ]; then
APCERTCONF=custom/${APCONF}/cert_config.txt
fi
# Variables for unit
UNIT_CONFIGURE=configure/unit/configure.unit
if [ -e custom/unit/configure.unit ]; then
UNIT_CONFIGURE=custom/unit/configure.unit
fi
# Variables for openlitespeed
OPENLITESPEED_CONFIGURE=configure/openlitespeed/configure.openlitespeed
if [ -e custom/openlitespeed/configure.openlitespeed ]; then
OPENLITESPEED_CONFIGURE=custom/openlitespeed/configure.openlitespeed
fi
OPENLITESPEEDCONFDIR=${WORKDIR}/configure/openlitespeed/conf
OPENLITESPEEDCUSTOMCONFDIR=0
if [ -d ${WORKDIR}/custom/openlitespeed/conf ]; then
OPENLITESPEEDCUSTOMCONFDIR=${WORKDIR}/custom/openlitespeed/conf
fi
OPENLITESPEED_EXTPROCESSORS_TEMPLATE=configure/openlitespeed/httpd-extprocessors.template
if [ -e custom/openlitespeed/httpd-extprocessors.template ]; then
OPENLITESPEED_EXTPROCESSORS_TEMPLATE=custom/openlitespeed/httpd-extprocessors.template
fi
OPENLITESPEED_WEBAPPS_EXTPROCESSOR_TEMPLATE=configure/openlitespeed/httpd-webapps-extprocessor.template
if [ -e custom/openlitespeed/httpd-webapps-extprocessor.template ]; then
OPENLITESPEED_WEBAPPS_EXTPROCESSOR_TEMPLATE=custom/openlitespeed/httpd-webapps-extprocessor.template
fi
# Variables for nginx
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
NGINX_CONFIGURE=configure/nginx_reverse/configure.nginx
if [ -e custom/nginx_reverse/configure.nginx ]; then
NGINX_CONFIGURE=custom/nginx_reverse/configure.nginx
fi
NGINXCONFDIR=${WORKDIR}/configure/nginx_reverse/conf
NGINXCUSTOMCONFDIR=0
if [ -d ${WORKDIR}/custom/nginx_reverse/conf ]; then
NGINXCUSTOMCONFDIR=${WORKDIR}/custom/nginx_reverse/conf
fi
else
NGINX_CONFIGURE=configure/nginx/configure.nginx
if [ -e custom/nginx/configure.nginx ]; then
NGINX_CONFIGURE=custom/nginx/configure.nginx
fi
NGINXCONFDIR=${WORKDIR}/configure/nginx/conf
NGINXCUSTOMCONFDIR=0
if [ -d ${WORKDIR}/custom/nginx/conf ]; then
NGINXCUSTOMCONFDIR=${WORKDIR}/custom/nginx/conf
fi
fi
NGINXTEMPLATESDIR=${WORKDIR}/configure/nginx_templates
NGINXCUSTOMEMPLATESDIR=0
if [ -d ${WORKDIR}/custom/nginx_templates ]; then
NGINXCUSTOMEMPLATESDIR=${WORKDIR}/custom/nginx_templates
fi
MODSECURITY_APACHE_INCLUDE=${WORKDIR}/configure/ap2/conf/extra/httpd-modsecurity.conf
if [ -e ${WORKDIR}/custom/ap2/conf/extra/httpd-modsecurity.conf ]; then
MODSECURITY_APACHE_INCLUDE=${WORKDIR}/custom/ap2/conf/extra/httpd-modsecurity.conf
fi
MODSECURITY_NGINX_INCLUDE=${WORKDIR}/configure/nginx/conf/nginx-modsecurity.conf
if [ -e ${WORKDIR}/custom/nginx/conf/nginx-modsecurity.conf ]; then
MODSECURITY_NGINX_INCLUDE=${WORKDIR}/custom/nginx/conf/nginx-modsecurity.conf
fi
if [ -s ${WORKDIR}/configure/openlitespeed/conf/httpd-listeners.conf ]; then
rm -f ${WORKDIR}/configure/openlitespeed/conf/httpd-listeners.conf
fi
MODSECURITY_OPENLITESPEED_INCLUDE=${WORKDIR}/configure/openlitespeed/conf/httpd-modsecurity.conf
if [ -e ${WORKDIR}/custom/openlitespeed/conf/httpd-modsecurity.conf ]; then
MODSECURITY_OPENLITESPEED_INCLUDE=${WORKDIR}/custom/openlitespeed/conf/httpd-modsecurity.conf
fi
MODSECURITY_NGINX_REVERSE_INCLUDE=${WORKDIR}/configure/nginx_reverse/conf/nginx-modsecurity.conf
if [ -e ${WORKDIR}/custom/nginx_reverse/conf/nginx-modsecurity.conf ]; then
MODSECURITY_NGINX_REVERSE_INCLUDE=${WORKDIR}/custom/nginx_reverse/conf/nginx-modsecurity.conf
fi
MODSECURITY_CUSTOM_RULES=${WORKDIR}/custom/modsecurity/conf
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
# Variables for php-fpm
eval `echo "PHP${php_shortrelease}_CONFIGURE_FPM=configure/php/configure.php${php_shortrelease}"`
if [ -e custom/fpm/configure.php${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_CONFIGURE_FPM=custom/fpm/configure.php${php_shortrelease}"`
fi
if [ -e custom/php/configure.php${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_CONFIGURE_FPM=custom/php/configure.php${php_shortrelease}"`
fi
eval `echo "PHP${php_shortrelease}_FPM_CONF=${WORKDIR}/configure/fpm/conf/php-fpm.conf.${php_shortrelease}"`
if [ -e ${WORKDIR}/custom/fpm/conf/php-fpm.conf.${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_FPM_CONF=${WORKDIR}/custom/fpm/conf/php-fpm.conf.${php_shortrelease}"`
fi
eval `echo "PHP_INI_FPM${php_shortrelease}=/usr/local/php${php_shortrelease}/lib/php.ini"`
eval `echo "PHP_SBIN_FPM${php_shortrelease}=/usr/local/php${php_shortrelease}/sbin/php-fpm${php_shortrelease}"`
# Variables for PHP as suPHP
EVAL_PHP_INI_SUPHP_VAR=PHP_SBIN_FPM${php_shortrelease}
eval `echo "PHP_INI_SUPHP${php_shortrelease}=$(eval_var ${EVAL_PHP_INI_SUPHP_VAR})"`
eval `echo "PHP_BIN_SUPHP${php_shortrelease}=/usr/local/php${php_shortrelease}/bin/php-cgi${php_shortrelease}"`
eval `echo "PHP_BIN_PHP${php_shortrelease}=/usr/local/php${php_shortrelease}/bin/php${php_shortrelease}"`
eval `echo "PHP${php_shortrelease}_CONFIGURE_SUPHP=configure/php/configure.php${php_shortrelease}"`
if [ -e custom/suphp/configure.php${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_CONFIGURE_SUPHP=custom/suphp/configure.php${php_shortrelease}"`
fi
if [ -e custom/php/configure.php${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_CONFIGURE_SUPHP=custom/php/configure.php${php_shortrelease}"`
fi
# Variables for php-fastcgi
eval `echo "PHP${php_shortrelease}_CONFIGURE_FCGI=configure/php/configure.php${php_shortrelease}"`
if [ -e custom/fastcgi/configure.php${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_CONFIGURE_FCGI=custom/fastcgi/configure.php${php_shortrelease}"`
fi
if [ -e custom/php/configure.php${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_CONFIGURE_FCGI=custom/php/configure.php${php_shortrelease}"`
fi
# Variables for lsphp
eval `echo "PHP${php_shortrelease}_CONFIGURE_LSPHP=configure/php/configure.php${php_shortrelease}"`
if [ -e custom/litespeed/configure.php${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_CONFIGURE_LSPHP=custom/litespeed/configure.php${php_shortrelease}"`
fi
if [ -e custom/php/configure.php${php_shortrelease} ]; then
eval `echo "PHP${php_shortrelease}_CONFIGURE_LSPHP=custom/php/configure.php${php_shortrelease}"`
fi
eval `echo "PHP_EXT_FPM${php_shortrelease}=/usr/local/php${php_shortrelease}/lib/php.conf.d/10-directadmin.ini"`
EVAL_PHP_EXT_SUPHP_VAR=PHP_EXT_FPM${php_shortrelease}
eval `echo "PHP_EXT_SUPHP${php_shortrelease}=$(eval_var ${EVAL_PHP_EXT_SUPHP_VAR})"`
done
PHP_CUSTOM_PHP_CONF_D_INI_PATH=${WORKDIR}/custom/php.conf.d
#php extensions file rewritten by DirectAdmin
PHP_EXT=/usr/local/lib/php.conf.d/10-directadmin.ini
PHP_INI=/usr/local/lib/php.ini
PHP_BIN=/usr/local/bin/php
PHP1_RELEASE_INI_EVAL="PHP_INI_FPM${PHP1_SHORTRELEASE}"
PHP1_INI_FILE="$(eval_var ${PHP1_RELEASE_INI_EVAL})"
PHP1_RELEASE_INI_EXT_EVAL="PHP_EXT_FPM${PHP1_SHORTRELEASE}"
PHP1_INI_EXT_FILE="$(eval_var ${PHP1_RELEASE_INI_EXT_EVAL})"
PHP1_INI_EXT_FILE_OLD="`echo ${PHP1_INI_EXT_FILE} | perl -p0 -e 's|10-directadmin.ini|directadmin.ini|'`"
if [ -e ${PHP1_INI_EXT_FILE_OLD} ] && [ ! -e ${PHP1_INI_EXT_FILE} ]; then
mv -f ${PHP1_INI_EXT_FILE_OLD} ${PHP1_INI_EXT_FILE}
fi
PHP2_INI_FILE="no"
PHP2_INI_EXT_FILE="no"
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
PHP2_INI_FILE=${PHP_INI}
PHP2_INI_EXT_FILE=${PHP_EXT}
if [ "${PHP2_MODE_OPT}" != "mod_php" ]; then
PHP2_RELEASE_INI_EVAL="PHP_INI_FPM${PHP2_SHORTRELEASE}"
PHP2_INI_FILE="$(eval_var ${PHP2_RELEASE_INI_EVAL})"
PHP2_RELEASE_INI_EXT_EVAL="PHP_EXT_FPM${PHP2_SHORTRELEASE}"
PHP2_INI_EXT_FILE="$(eval_var ${PHP2_RELEASE_INI_EXT_EVAL})"
fi
PHP2_INI_EXT_FILE_OLD="`echo ${PHP2_INI_EXT_FILE} | perl -p0 -e 's|10-directadmin.ini|directadmin.ini|'`"
if [ -e ${PHP2_INI_EXT_FILE_OLD} ] && [ ! -e ${PHP2_INI_EXT_FILE} ]; then
mv -f ${PHP2_INI_EXT_FILE_OLD} ${PHP2_INI_EXT_FILE}
fi
fi
PHP3_INI_FILE="no"
PHP3_INI_EXT_FILE="no"
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
PHP3_INI_FILE=${PHP_INI}
PHP3_INI_EXT_FILE=${PHP_EXT}
if [ "${PHP3_MODE_OPT}" != "mod_php" ]; then
PHP3_RELEASE_INI_EVAL="PHP_INI_FPM${PHP3_SHORTRELEASE}"
PHP3_INI_FILE="$(eval_var ${PHP3_RELEASE_INI_EVAL})"
PHP3_RELEASE_INI_EXT_EVAL="PHP_EXT_FPM${PHP3_SHORTRELEASE}"
PHP3_INI_EXT_FILE="$(eval_var ${PHP3_RELEASE_INI_EXT_EVAL})"
fi
PHP3_INI_EXT_FILE_OLD="`echo ${PHP3_INI_EXT_FILE} | perl -p0 -e 's|10-directadmin.ini|directadmin.ini|'`"
if [ -e ${PHP3_INI_EXT_FILE_OLD} ] && [ ! -e ${PHP3_INI_EXT_FILE} ]; then
mv -f ${PHP3_INI_EXT_FILE_OLD} ${PHP3_INI_EXT_FILE}
fi
fi
PHP4_INI_FILE="no"
PHP4_INI_EXT_FILE="no"
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
PHP4_INI_FILE=${PHP_INI}
PHP4_INI_EXT_FILE=${PHP_EXT}
if [ "${PHP4_MODE_OPT}" != "mod_php" ]; then
PHP4_RELEASE_INI_EVAL="PHP_INI_FPM${PHP4_SHORTRELEASE}"
PHP4_INI_FILE="$(eval_var ${PHP4_RELEASE_INI_EVAL})"
PHP4_RELEASE_INI_EXT_EVAL="PHP_EXT_FPM${PHP4_SHORTRELEASE}"
PHP4_INI_EXT_FILE="$(eval_var ${PHP4_RELEASE_INI_EXT_EVAL})"
fi
PHP4_INI_EXT_FILE_OLD="`echo ${PHP4_INI_EXT_FILE} | perl -p0 -e 's|10-directadmin.ini|directadmin.ini|'`"
if [ -e ${PHP4_INI_EXT_FILE_OLD} ] && [ ! -e ${PHP4_INI_EXT_FILE} ]; then
mv -f ${PHP4_INI_EXT_FILE_OLD} ${PHP4_INI_EXT_FILE}
fi
fi
#suhosin uploadscan script
SUHOSIN_PHP_UPLOADSCAN_SCRIPT=${WORKDIR}/configure/suhosin/php_uploadscan.sh
if [ -e ${WORKDIR}/custom/suhosin/php_uploadscan.sh ]; then
SUHOSIN_PHP_UPLOADSCAN_SCRIPT=${WORKDIR}/custom/suhosin/php_uploadscan.sh
fi
#pureftpd uploadscan script
PUREFTPD_UPLOADSCAN_SCRIPT=${WORKDIR}/configure/pureftpd/pureftpd_uploadscan.sh
if [ -e ${WORKDIR}/custom/pureftpd/pureftpd_uploadscan.sh ]; then
PUREFTPD_UPLOADSCAN_SCRIPT=${WORKDIR}/custom/pureftpd/pureftpd_uploadscan.sh
fi
#pureftpd SNI script
PUREFTPD_PURE_CERTD_SCRIPT=${WORKDIR}/configure/pureftpd/pureftpd_sni.sh
if [ -e ${WORKDIR}/custom/pureftpd/pureftpd_sni.sh ]; then
PUREFTPD_PURE_CERTD_SCRIPT=${WORKDIR}/custom/pureftpd/pureftpd_sni.sh
fi
SUPHP_CONFIGURE=configure/suphp/configure.suphp
if [ -e custom/suphp/configure.suphp ]; then
SUPHP_CONFIGURE=custom/suphp/configure.suphp
fi
SUPHP_PATH=/usr/local/suphp
SUPHP_CONF_FILE=${SUPHP_PATH}/etc/suphp.conf
SUPHP_SO=/usr/lib/apache/mod_suphp.so
PMA_MAIN_CONFIG=${CWD}/configure/phpmyadmin/config.inc.php
PMA_CUSTOM_CONFIG=
if [ -s ${CWD}/custom/phpmyadmin/config.inc.php ]; then
PMA_CUSTOM_CONFIG=${CWD}/custom/phpmyadmin/config.inc.php
fi
#custom script configs
WEBAPPS_LIST=${CWD}/custom/webapps.list
PMA_HTACCESS=${CWD}/custom/phpmyadmin/.htaccess
PMA_USER_INI=${CWD}/custom/phpmyadmin/.user.ini
PMA_THEMES=${CWD}/custom/phpmyadmin/themes
SQUIRREL_CONFIG=${CWD}/custom/squirrelmail/config.php
ROUNDCUBE_CONFIG=${CWD}/custom/roundcube/config.inc.php
ROUNDCUBE_CONFIG_DB=${ROUNDCUBE_CONFIG}
ROUNDCUBE_CONFIG_OLD=${CWD}/custom/roundcube/main.inc.php
ROUNDCUBE_CONFIG_DB_OLD=${CWD}/custom/roundcube/db.inc.php
if [ "${ROUNDCUBE_MAJOR_VER}" = "0" ]; then
ROUNDCUBE_CONFIG=${ROUNDCUBE_CONFIG_OLD}
ROUNDCUBE_CONFIG_DB=${ROUNDCUBE_CONFIG_DB_OLD}
fi
ROUNDCUBE_PLUGINS=${CWD}/custom/roundcube/plugins
ROUNDCUBE_SKINS=${CWD}/custom/roundcube/skins
ROUNDCUBE_VENDOR=${CWD}/custom/roundcube/vendor
ROUNDCUBE_COMPOSER=${CWD}/custom/roundcube/composer.json
ROUNDCUBE_PROGRAM=${CWD}/custom/roundcube/program
ROUNDCUBE_HTACCESS=${CWD}/custom/roundcube/.htaccess
# Variables for frontpage
ROOT_GRP=root
USER_INPUT=0
INPUT_VALUE=d
if [ ${B64} -eq 1 ]; then
IONCUBENAME=ioncube_loaders_lin_x86-64
ZENDNAME_PHP53=ZendGuardLoader-php-5.3-linux-glibc23-x86_64
ZENDNAME_PHP54=ZendGuardLoader-70429-PHP-5.4-linux-glibc23-x86_64
ZENDNAME_PHP55=zend-loader-php5.5-linux-x86_64
ZENDNAME_PHP56=zend-loader-php5.6-linux-x86_64
elif [ ${B64} -eq 2 ]; then
IONCUBENAME=ioncube_loaders_lin_aarch64
fi
ZENDFILE_GUARD53=${ZENDNAME_PHP53}.tar.gz
ZENDFILE_GUARD54=${ZENDNAME_PHP54}.tar.gz
ZENDFILE_GUARD55=${ZENDNAME_PHP55}.tar.gz
ZENDFILE_GUARD56=${ZENDNAME_PHP56}.tar.gz
IONCUBEFILE=${IONCUBENAME}.tar.gz
WEBALIZER_VER=`getVer webalizer`
WEBALIZER=webalizer-${WEBALIZER_VER}
WEBALIZER_FILE=webalizer-${WEBALIZER_VER}-src.tgz
fi
####################################################
ensureVersion() {
PERL_VER=`perl -v | head -n2 | tail -n1 | cut -d\ -f4 | cut -dv -f2`
NUM1=`echo $PERL_VER | cut -d. -f1`
NUM2=`echo $PERL_VER | cut -d. -f2`
NUM3=`echo $PERL_VER | cut -d. -f3`
if [ $NUM1 -gt 5 ]; then
return 1
fi
if [ $NUM2 -gt 6 ]; then
return 1
fi
if [ $NUM3 -gt 0 ]; then
return 1
fi
do_exit 1 "Your perl version is $PERL_VER. You require at least perl 5.6.1 for Mail-SpamAssassin-${SPAMASSASSIN_VER}."
}
####################################################
downloadMake() {
cd $CWD
VER=`getVer ${1}`
NAME=${1}-${VER}
getFile ${NAME}.tar.gz ${1}
tar xzf ${NAME}.tar.gz --no-same-owner
cd ${NAME}
perl Makefile.PL
make
make install
cd $CWD
}
####################################################
clean_tarball() {
#clean_tarball name current_version extension
if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ]; then
echo "Skipping $1 tarball, needs more arguments in doclean_old_tarballs()."
return
fi
for i in `ls ${WORKDIR} | grep "^${1}[-_][v0-9]" | grep -v "$2" | grep "$3$"`; do
rm -f ${WORKDIR}/$i
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing ${WORKDIR}/$i..."
fi
done
}
doclean_old_tarballs() {
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
clean_tarball lsws ${LITESPEED_VER} tar.gz
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
clean_tarball openlitespeed ${OPENLITESPEED_VER} tar.gz
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
clean_tarball nginx ${NGINX_VER} tar.gz
clean_tarball mod_aclr2 ${MOD_ACLR2_VER} tar.gz
fi
clean_tarball lego ${LEGO_VER} tar.gz
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
clean_tarball httpd ${APACHE2_VER} tar.gz
if [ "${HAVE_SUPHP_CGI}" = "yes" ]; then
clean_tarball suphp ${SUPHP_VER} tar.gz
fi
if [ "${HAVE_FCGID}" = "yes" ]; then
clean_tarball mod_fcgid ${MOD_FCGID_VER} tar.gz
fi
if [ "${MOD_RUID2_OPT}" = "yes" ]; then
clean_tarball mod_ruid2 ${MOD_RUID2_VER} tar.bz2
fi
if [ "${HTSCANNER_OPT}" = "yes" ]; then
clean_tarball mod_htscanner2 ${HTSCANNER_VER} tgz
fi
fi
clean_tarball redis ${REDIS_VER} tar.gz
clean_tarball apr ${APR_VER} tar.gz
clean_tarball apr-util ${APR_UTIL_VER} tar.gz
clean_tarball imapsync ${IMAPSYNC_VER} tar.gz
if [ "${MODSECURITY_OPT}" = "yes" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ]; then
clean_tarball ${MODSECURITY_FILENAME} ${MODSECURITY_VER} tar.gz
else
clean_tarball ${LIBMODSECURITY_FILENAME} ${LIBMODSECURITY_VER} tar.gz
fi
clean_tarball owasp-modsecurity-crs ${OWASP_RULES_VER} tar.gz
clean_tarball ${MODSECURITY_NGINX_CONNECTOR_FILENAME} ${MODSECURITY_NGINX_CONNECTOR_VER} tar.gz
clean_tarball ${MODSECURITY_APACHE_CONNECTOR_FILENAME} ${MODSECURITY_APACHE_CONNECTOR_VER} tar.gz
if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
clean_tarball cwaf_rules_ls ${CWAF_RULES_LS_VER} tgz
elif [ "${WEBSERVER_OPT}" = "apache" ]; then
clean_tarball cwaf_rules ${CWAF_RULES_VER} tgz
else
clean_tarball cwaf_rules_nginx_3 ${CWAF_RULES_NGINX_VER} tgz
fi
fi
fi
if [ "${CLAMAV_OPT}" = "yes" ]; then
clean_tarball clamav ${CLAMAV_VER} tar.gz
fi
if [ "${SPAMD_OPT}" = "spamassassin" ]; then
clean_tarball Mail-SpamAssassin ${SPAMASSASSIN_VER} tar.gz
elif [ "${SPAMD_OPT}" = "rspamd" ]; then
clean_tarball rspamd_conf ${RSPAMD_CONF_VER} tar.gz
fi
clean_tarball curl ${CURL_VER} tar.gz
clean_tarball libmaxminddb ${LIBMAXMINDDB_VER} tar.gz
clean_tarball geoipupdate ${GEOIPUPDATE_VER} tar.gz
clean_tarball libzip ${LIBZIP_VER} tar.gz
if [ "${PHP_IGBINARY_OPT}" = "yes" ]; then
clean_tarball igbinary ${IGBINARY_VER} tar.gz
fi
if [ "${IMAGICK_OPT}" = "yes" ]; then
clean_tarball imagick ${IMAGICK_VER} tgz
clean_tarball ImageMagick ${IMAGEMAGICK_VER} tar.gz
fi
if [ "${PHP_PHALCON_OPT}" = "yes" ]; then
clean_tarball psr ${PSR_VER} tgz
clean_tarball phalcon ${PHALCON_VER} tgz
fi
if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ]; then
clean_tarball snuffleupagus ${SNUFFLEUPAGUS_VER} tar.gz
fi
if [ "${PHP_REDIS_OPT}" = "yes" ]; then
clean_tarball redis ${PHPREDIS_VER} tgz
fi
if [ "${PHP_IMAP_OPT}" = "yes" ]; then
clean_tarball imap ${IMAP_VER} tgz
fi
clean_tarball libspf2 ${LIBSPF2_VER} tar.gz
if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then
clean_tarball exim.easy_spam_fighter ${EASY_SPAM_FIGHTER_VER} tar.gz
fi
if [ "${BLOCKCRACKING_OPT}" = "yes" ]; then
clean_tarball exim.blockcracking ${BLOCKCRACKING_VER} tar.gz
fi
if [ "${PIGEONHOLE_OPT}" = "yes" ]; then
clean_tarball pigeohole${DOVECOT_SHORTREL} ${PIGEONHOLE_VER} tar.gz
fi
if [ "${WEBALIZER_OPT}" = "yes" ]; then
clean_tarball webalizer ${WEBALIZER_VER}-src tgz
fi
if [ "${FTPD_OPT}" = "proftpd" ]; then
clean_tarball proftpd ${PROFTPD_VER} tar.gz
else
clean_tarball pure-ftpd ${PUREFTPD_VER} tar.gz
fi
if [ "${EXIM_OPT}" = "yes" ]; then
clean_tarball exim ${EXIM_VER} tar.gz
clean_tarball s-nail ${S_NAIL_VER} tar.gz
fi
clean_tarball msmtp ${MSMTP_VER} tar.xz
clean_tarball lua ${LUA_VER} tar.gz
clean_tarball dovecot ${DOVECOT_VER} tar.gz
clean_tarball fts-xapian ${FTS_XAPIAN_VER} tar.gz
clean_tarball xapian-core ${XAPIAN_CORE_VER} tar.xz
clean_tarball bubblewrap ${BUBBLEWRAP_VER} tar.xz
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
clean_tarball roundcubemail ${ROUNDCUBE_VER} tar.gz
fi
if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then
clean_tarball squirrelmail ${SQUIRRELMAIL_VER} tar.gz
fi
if [ "${AWSTATS_OPT}" = "yes" ]; then
clean_tarball awstats ${AWSTATS_VER} tar.gz
fi
if [ "${UNIT_OPT}" = "yes" ]; then
clean_tarball unit ${UNIT_VER} tar.gz
fi
if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
clean_tarball phpMyAdmin ${PHPMYADMIN_VER} tar.gz
fi
if [ "${SUHOSIN_OPT}" = "yes" ]; then
clean_tarball suhosin ${SUHOSIN_VER} tgz
fi
if [ "${OPCACHE_OPT}" = "yes" ]; then
clean_tarball zendopcache ${OPCACHE_VER} tgz
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
clean_tarball mod_lsapi ${MOD_LSAPI_VER} tar.gz
clean_tarball mod_hostinglimits ${MOD_HOSTINGLIMITS_VER} tar.gz
clean_tarball mod_proctitle ${MOD_PROCTITLE_VER} tar.gz
fi
#PHP bit needs to be different
for i in `ls ${WORKDIR} | grep '^php-' | grep -v "${PHP53_VER}" | grep -v "${PHP54_VER}" | grep -v "${PHP55_VER}" | grep -v "${PHP56_VER}" | grep -v "${PHP70_VER}" | grep -v "${PHP71_VER}" | grep -v "${PHP72_VER}" | grep -v "${PHP73_VER}" | grep -v "${PHP74_VER}" | grep -v "${PHP80_VER}" | grep -v "${PHP81_VER}" | grep tar.gz`; do
rm -f ${WORKDIR}/$i
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing ${WORKDIR}/$i..."
fi
done
#Clean MySQL/MariaDB tarballs
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
for i in `ls /usr/local/ | grep ^mysql- | grep 'tar.gz$' | grep -v "^mysql-${MYSQL_VER}"`; do
rm -f /usr/local/$i
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /usr/local/$i..."
fi
done
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
for i in `ls /usr/local/ | grep ^mariadb- | grep 'tar.gz$' | grep -v "^mariadb-${MARIADB_VER}"`; do
rm -f /usr/local/$i
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /usr/local/$i..."
fi
done
fi
}
####################################################
doclean_old_webapps() {
if [ "${CLEAN_OLD_WEBAPPS_OPT}" != "yes" ]; then
do_exit 1 "You cannot clean webapps, because you do not have it set in options.conf file."
fi
#Clean phpMyAdmin
if [ "${PHPMYADMIN_OPT}" = "yes" ] && [ -e /var/www/html/phpMyAdmin ]; then
PHPMYADMIN_CUR=`ls -ld /var/www/html/phpMyAdmin | cut -d\> -f2 | cut -d- -f2,3,4`
for i in `ls /var/www/html/ | grep phpMyAdmin- | grep -v "${PHPMYADMIN_CUR}"`; do
rm -rf /var/www/html/$i
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /var/www/html/$i..."
fi
done
fi
#Clean SquirrelMail
if [ "${SQUIRRELMAIL_OPT}" = "yes" ] && [ -e /var/www/html/squirrelmail ]; then
SQUIRRELMAIL_CUR=`ls -ld /var/www/html/squirrelmail | cut -d\> -f2 | cut -d- -f2,3`
for i in `ls /var/www/html/ | grep squirrelmail- | grep -v -e "${SQUIRRELMAIL_CUR}\$"`; do
rm -rf /var/www/html/$i
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /var/www/html/$i..."
fi
done
fi
#Clean RoundCube
if [ "${ROUNDCUBE_OPT}" = "yes" ] && [ -e /var/www/html/roundcube ]; then
#ROUNDCUBE_CUR=`ls -ld /var/www/html/roundcube | cut -d\> -f2 | cut -d- -f2`
ROUNDCUBE_CUR=`roundcube_version`
for i in `ls /var/www/html/ | grep roundcubemail- | grep -v "${ROUNDCUBE_CUR}"`; do
rm -rf /var/www/html/$i
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /var/www/html/$i..."
fi
done
fi
#Clean AWstats
if [ "${AWSTATS_OPT}" = "yes" ] && [ -e /usr/local/awstats ]; then
AWSTATS_CUR=`ls -ld /usr/local/awstats | cut -d\> -f2 | cut -d- -f2`
for i in `ls /usr/local/ | grep awstats- | grep -v "${AWSTATS_CUR}"`; do
rm -rf /usr/local/$i
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /usr/local/$i..."
fi
done
fi
}
####################################################
doClean() {
cd ${CWD}
if [ -e ${LOCKFILE} ]; then
return
fi
rm -rf mod_ruid2-${MOD_RUID2_VER}
rm -rf ${MODSECURITY_FILENAME}-${MODSECURITY_VER}
rm -rf ${LIBMODSECURITY_FILENAME}-v${LIBMODSECURITY_VER}
rm -rf ${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER}
rm -rf ${MODSECURITY_NGINX_CONNECTOR_FILENAME}-${MODSECURITY_NGINX_CONNECTOR_VER}
rm -rf mod_aclr2-${MOD_ACLR2_VER}
rm -rf htscanner-${HTSCANNER_VER}
rm -rf mod_fcgid-${MOD_FCGID_VER}
rm -rf php-${PHP53_VER}
rm -rf php-${PHP54_VER}
rm -rf php-${PHP55_VER}
rm -rf php-${PHP56_VER}
rm -rf php-${PHP70_VER}
rm -rf php-${PHP71_VER}
rm -rf php-${PHP72_VER}
rm -rf php-${PHP73_VER}
rm -rf php-${PHP74_VER}
rm -rf php-${PHP80_VER}
rm -rf php-${PHP81_VER}
rm -rf php-${PHP82_VER}
rm -rf redis-${REDIS_VER}
rm -rf imapsync-imapsync-${IMAPSYNC_VER}
if [ "${UNIT_OPT}" = "yes" ]; then
rm -rf unit-${UNIT_VER}
fi
rm -rf xapian-core-${XAPIAN_CORE_VER}
rm -rf bubblewrap-${BUBBLEWRAP_VER}
rm -rf s-nail-${S_NAIL_VER}
rm -rf msmtp-${MSMTP_VER}
rm -rf lua-${LUA_VER}
rm -rf libpsf2-${LIBSPF2_VER}
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
rm -rf lsws-${LITESPEED_VER}
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
rm -rf openlitespeed-${OPENLITESPEED_VER}
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
rm -rf mod_lsapi-${MOD_LSAPI_VER}
rm -rf mod_proctitle-${MOD_PROCTITLE_VER}
fi
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
rm -rf mysql-${MYSQL_VER}
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
rm -rf mariadb-${MARIADB_VER}
fi
if [ "${PHP_IMAGICK_OPT}" = "yes" ]; then
rm -rf imagick-${IMAGICK_VER}
rm -rf ImageMagick-${IMAGEMAGICK_VER}
fi
if [ "${PHP_PHALCON_OPT}" = "yes" ]; then
rm -rf psr-${PSR_VER}
rm -rf phalcon-${PHALCON_VER}
fi
if [ "${PHP_IMAP_OPT}" = "yes" ]; then
rm -rf imap-${IMAP_VER}
fi
rm -rf curl-${CURL_VER}
rm -rf nginx-${NGINX_VER}
rm -rf libmaxminddb-${LIBMAXMINDDB_VER}
rm -rf geoipupdate-${GEOIPUPDATE_VER}
rm -rf libzip-${LIBZIP_VER}
rm -rf easy_spam_fighter
rm -rf libspf2-${LIBSPF2_VER}
rm -rf ${ZENDNAME_PHP53}
rm -rf ${ZENDNAME_PHP54}
rm -rf ${ZENDNAME_PHP55}
rm -rf ${ZENDNAME_PHP56}
rm -rf ${WEBALIZER}
rm -rf proftpd-${PROFTPD_VER}
rm -rf pure-ftpd-${PUREFTPD_VER}
rm -rf httpd-${APACHE2_VER}
rm -rf exim-${EXIM_VER}
rm -rf dovecot-${DOVECOT_VER}
rm -rf dovecot-ce-${DOVECOT_VER}
rm -rf suphp-${SUPHP_VER}
rm -rf suhosin-${SUHOSIN_VER}
rm -rf zendopcache-${OPCACHE_VER}
rm -rf dovecot-${DOVECOT_REL}-pigeonhole-${PIGEONHOLE_VER}
rm -rf Mail-SpamAssassin-${SPAMASSASSIN_VER}
rm -rf rspamd-${RSPAMD_VER}
rm -rf clamav-${CLAMAV_VER}
rm -rf ${ZENDNAME_PHP53}
rm -rf ${ZENDNAME_PHP54}
#Clean MySQL/MariaDB
if [ -h /usr/local/mysql ] && [ "${MYSQL_INST_OPT}" != "no" ]; then
MYSQL_CUR=`ls -ld /usr/local/mysql | cut -d\> -f2 | cut -d' ' -f2`
for i in `ls /usr/local/ | grep '^mysql-\|^mariadb-' | grep -v "${MYSQL_CUR}"`; do
if [ -h /usr/local/${i}/data ]; then
rm -rf /usr/local/$i
if [ "${CLEAN_OPT}" = "no" ]; then
echo "Removing /usr/local/$i..."
fi
fi
done
fi
if [ "${CLEAN_OLD_TARBALLS_OPT}" = "yes" ]; then
doclean_old_tarballs
fi
if [ "${CLEAN_OLD_WEBAPPS_OPT}" = "yes" ]; then
doclean_old_webapps
fi
if [ "${CLEAN_OPT}" = "no" ]; then
echo "All clean!"
fi
}
DOCLEAN_CASE=1
doclean_toggle() {
DOCLEAN_CASE=0
}
####################################################
if [ ! -e ${LOCKFILE} ]; then
case "$1" in
update) doclean_toggle ;;
update_data) doclean_toggle ;;
"") doclean_toggle ;;
gen_help_json) doclean_toggle ;;
opt_help) doclean_toggle ;;
set) doclean_toggle ;;
set_php) doclean_toggle ;;
get_versions_txt) doclean_toggle ;;
update_script) doclean_toggle ;;
versions_json) doclean_toggle ;;
versions_ajax) doclean_toggle ;;
gen_help) doclean_toggle ;;
version) doclean_toggle ;;
versions) doclean_toggle ;;
list_removals) doclean_toggle ;;
list_removals_json) doclean_toggle ;;
remove_items) doclean_toggle ;;
set_fastest) doclean_toggle ;;
set_fastest_quiet) doclean_toggle ;;
kill) doclean_toggle ;;
update_da) doclean_toggle ;;
versions_nobold) doclean_toggle ;;
list_configs_json) doclean_toggle ;;
settings_json) doclean_toggle ;;
get_timezone) doclean_toggle ;;
custom_config) doclean_toggle ;;
set_versions_txt) doclean_toggle ;;
show_component_config) doclean_toggle ;;
remove_customized_config) doclean_toggle ;;
show_file) doclean_toggle ;;
check_options) doclean_toggle ;;
esac
if [ "${CLEAN_OPT}" = "yes" ] && [ "${DOCLEAN_CASE}" = "1" ]; then
doClean
fi
fi
####################################################
BUILD_SECTIONS_CASE=1
build_section_toggle() {
BUILD_SECTIONS_CASE=0
}
case "$1" in
opt_help) build_section_toggle ;;
set) build_section_toggle ;;
set_php) build_section_toggle ;;
get_versions_txt) build_section_toggle ;;
update_script) build_section_toggle ;;
version) build_section_toggle ;;
set_fastest) build_section_toggle ;;
set_fastest_quiet) build_section_toggle ;;
kill) build_section_toggle ;;
update_da) build_section_toggle ;;
list_configs_json) build_section_toggle ;;
settings_json) build_section_toggle ;;
get_timezone) build_section_toggle ;;
custom_config) build_section_toggle ;;
set_versions_txt) build_section_toggle ;;
show_component_config) build_section_toggle ;;
remove_customized_config) build_section_toggle ;;
show_file) build_section_toggle ;;
check_options) build_section_toggle ;;
esac
if [ "${BUILD_SECTIONS_CASE}" = "1" ]; then
HELP_SECTIONS="BUILD_COMP BUILD_PHP_EXT BUILD_COMP_CONF BUILD_COMP_WEBAPPS BUILD_CB BUILD_OLD BUILD_UPDATE BUILD_UPDATE_PCG BUILD_ALL BUILD_PHP_EXTENSIONS BUILD_EXPERIENCED"
BUILD_PHP_EXT_SET="php_gmp php_igbinary php_ioncube php_imagick php_imap php_ldap php_opcache php_phalcon php_psr php_redis php_readline php_snuffleupagus php_suhosin php_xmlrpc php_zend"
BUILD_PHP_EXT_DESC="Install/update PHP extensions"
BUILD_PHP_EXT_REQADD=""
BUILD_COMP_SET="apache awstats awstats_process bubblewrap csf clamav composer curl dovecot exim geoipupdate imagemagick imapsync jailshell lego libmaxminddb libmodsecurity libspf2 litespeed lua mod_lsapi mod_proctitle mod_aclr2 mod_ruid2 mod_htscanner2 mod_fcgid modsecurity modsecurity_rules msmtp mysql netdata nginx nginx_apache openlitespeed pigeonhole php proftpd pureftpd redis rspamd snail spamassassin suphp unit webalizer wp"
BUILD_COMP_DESC="Install/update server components"
BUILD_COMP_REQADD=""
BUILD_COMP_CONF_SET="exim_conf dovecot_conf blockcracking easy_spam_fighter php_ini rewrite_confs secure_php spamassassin_cron litespeed_license litespeed_license_migrate"
BUILD_COMP_CONF_DESC="Components configuration options"
BUILD_COMP_CONF_REQADD=""
BUILD_COMP_WEBAPPS_SET="phpmyadmin roundcube squirrelmail"
BUILD_COMP_WEBAPPS_DESC="Install/update web applications"
BUILD_COMP_WEBAPPS_REQADD=""
BUILD_CB_SET="create_options custombuild_plugin cron opt_help options_nobold list_removals remove_items set set_fastest set_fastest_quiet update_da update_versions update_webapps used_configs versions version"
BUILD_CB_DESC="CustomBuild related options/functions"
BUILD_CB_SET_REQADD="opt_help set"
SET_ADDIT="option_name value"
OPT_HELP_ADDIT="(full)"
BUILD_OLD_SET="clean clean_old_webapps"
BUILD_OLD_DESC="Remove old build data"
BUILD_OLD_REQUADD=""
BUILD_UPDATE_SET="update update_script"
BUILD_UPDATE_DESC="Get latest build script with or without new packages"
BUILD_UPDATE_REQADD=""
BUILD_UPDATE_PCG_SET="update_data"
BUILD_UPDATE_PCG_DESC="Get packages for current build script"
BUILD_UPDATE_PCG_REQADD=""
BUILD_ALL_SET="all"
BUILD_ALL_DESC="Build everything what is set in the options.conf file"
BUILD_ALL_REQADD=""
BUILD_PHP_EXTENSIONS_SET="php_extensions"
BUILD_PHP_EXTENSIONS_DESC="Build all PHP extensions set set in the php_extensions.conf file"
BUILD_PHP_EXTENSIONS_REQADD=""
BUILD_EXPERIENCED_SET="php_expert php_htscanner2 set_service"
BUILD_EXPERIENCED_DESC="Recommended for experienced users only (!)"
BUILD_EXPERIENCED_REQADD="php_expert php_htscanner2 set_service"
PHP_EXPERT_ADDIT="php_release php_mode"
PHP_HTSCANNER2_ADDIT="php_release"
SET_SERVICE_ADDIT="service ON|OFF|delete"
fi
###################################################
generateHelp() {
for section in ${HELP_SECTIONS}; do
DESC=${section}_DESC
echo " +-----------------------------------------------------------+"
printf " | %-55s %-2s|\n" "$(eval_var ${DESC}):"
BUILDSET="${section}_SET"
BUILD_ADD_TO_OUT="${section}_REQADD"
for setting in $(eval_var ${BUILDSET}); do
ADDIT=""
for i in $(eval_var ${BUILD_ADD_TO_OUT}); do
ADDIT_VAR=`echo "${i}_ADDIT" | tr "[a-z]" "[A-Z]"`
if [ "$i" = "${setting}" ]; then
ADDIT="$(eval_var ${ADDIT_VAR})"
fi
done
printf " | %-55s %-2s|\n" " $0 ${setting} ${ADDIT}"
done
done
}
initJSONVars() {
####################################################
#SKIP LISTS for CustomBuild plugin to generate in JSON format accoring to the options set
HELP_SECTIONS_JSON_SKIP="BUILD_EXPERIENCED"
BUILD_PHP_EXT_SKIP=""
if [ "${PHP_IGBINARY_OPT}" = "no" ]; then
BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}igbinary "
fi
if [ "${IMAGICK_OPT}" = "no" ]; then
BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}imagick "
fi
if [ "${ZEND_OPT}" = "no" ]; then
BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}zend "
fi
if [ "${IONCUBE_OPT}" = "no" ]; then
BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}ioncube "
fi
if [ "${SUHOSIN_OPT}" = "no" ]; then
BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}suhosin "
fi
if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "no" ]; then
BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}snuffleupagus "
fi
if [ "${PHP_PHALCON_OPT}" = "no" ]; then
BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}phalcon "
BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}psr "
fi
if [ "${PHP_IMAP_OPT}" = "no" ]; then
BUILD_PHP_EXT_SKIP="${BUILD_PHP_EXT_SKIP}imap "
fi
BUILD_COMP_SKIP=""
if [ "${WEBSERVER_OPT}" = "apache" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}nginx litespeed nginx_apache mod_aclr2 openlitespeed "
elif [ "${WEBSERVER_OPT}" = "nginx" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}apache litespeed nginx_apache mod_aclr2 openlitespeed "
elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}apache nginx nginx_apache mod_aclr2 openlitespeed "
elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}apache litespeed nginx nginx_apache mod_aclr2 "
fi
if [ "${CURL_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}curl "
fi
if [ "${CLAMAV_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}clamav "
fi
if [ "${AWSTATS_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}awstats "
fi
if [ "${WEBALIZER_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}webalizer "
fi
if [ "${CSF_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}csf "
fi
if [ "${FTPD_OPT}" = "pureftpd" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}proftpd "
else
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}pureftpd "
fi
if [ "${MOD_RUID2_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}mod_ruid2 "
fi
if [ "${MODSECURITY_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}libmodsecurity modsecurity modsecurity_rules "
fi
if [ "${CLOUDLINUX_OPT}" = "no" ] || [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}mod_hostinglimits ${BUILD_COMP_SKIP}mod_lsapi ${BUILD_COMP_SKIP}mod_proctitle "
fi
if [ "${HTSCANNER_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}mod_htscanner2 "
fi
if [ "${HAVE_FCGID}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}mod_fcgid "
fi
if [ "${HAVE_SUPHP_CGI}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}suphp "
fi
if [ "${PIGEONHOLE_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}pigeonhole "
fi
if [ "${DOVECOT_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}dovecot "
fi
if [ "${MYSQL_INST_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}mysql "
fi
if [ "${SPAMD_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}spamassassin rspamd "
elif [ "${SPAMD_OPT}" = "rspamd" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}spamassassin "
else
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}rspamd "
fi
if [ "${EXIM_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}exim "
fi
if [ "${OS_CENTOS_VER}" = "7" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}libzip "
fi
BUILD_COMP_CONF_SKIP=""
if [ "${PHP_INI_OPT}" = "no" ]; then
BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}php_ini "
fi
if [ "${EXIMCONF_OPT}" = "no" ]; then
BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}eximconf "
fi
if [ "${WEBSERVER_OPT}" != "litespeed" ]; then
BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}litespeed_license "
fi
if [ "${WEBSERVER_OPT}" != "litespeed" ] || [ "${LITESPEED_SERIALNO_OPT}" = "trial" ]; then
BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}litespeed_license_migrate "
fi
if [ "${DOVECOT_CONF_OPT}" = "no" ]; then
BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}dovecot_conf "
fi
if [ "${BLOCKCRACKING_OPT}" = "no" ]; then
BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}blockcracking "
fi
if [ "${EXIMCONF_OPT}" = "no" ]; then
BUILD_COMP_CONF_SKIP="${BUILD_COMP_CONF_SKIP}easy_spam_fighter "
fi
BUILD_CB_SKIP="create_options opt_help list_removals remove_items set set_fastest_quiet update_versions versions"
BUILD_COMP_WEBAPPS_SKIP=""
if [ "${PHPMYADMIN_OPT}" = "no" ]; then
BUILD_COMP_WEBAPPS_SKIP="${BUILD_COMP_WEBAPPS_SKIP}phpmyadmin "
fi
if [ "${ROUNDCUBE_OPT}" = "no" ]; then
BUILD_COMP_WEBAPPS_SKIP="${BUILD_COMP_WEBAPPS_SKIP}roundcube "
fi
if [ "${SQUIRRELMAIL_OPT}" = "no" ]; then
BUILD_COMP_WEBAPPS_SKIP="${BUILD_COMP_WEBAPPS_SKIP}squirremail "
fi
BUILD_OLD_SKIP=""
BUILD_UPDATE_SKIP=""
BUILD_UPDATE_PCG_SKIP=""
#DESCRIPTIONS
COMP_UNIT_NAME="Build Nginx Unit"
COMP_UNIT_DESC="Install/update Nginx Unit dynamic application server."
COMP_UNIT_VER="Version ${UNIT_VER}."
COMP_APACHE_NAME="Build Apache"
COMP_APACHE_DESC="Install/update Apache WEB server."
COMP_APACHE_VER="Version ${APACHE2_VER}."
COMP_AWSTATS_NAME="Build awstats"
COMP_AWSTATS_DESC="Install/update AWstats."
COMP_AWSTATS_VER="Version ${AWSTATS_VER}."
COMP_AWSTATS_PROCESS_NAME="Build awstats process"
COMP_AWSTATS_PROCESS_DESC="Install/update AWstats processing script."
COMP_AWSTATS_PROCESS_VER="Version ${AWSTATS_PROCESS_VER}."
COMP_BUBBLEWRAP_NAME="Build bubblewrap"
COMP_BUBBLEWRAP_DESC="Install/update bubblewrap."
COMP_BUBBLEWRAP_VER="Version ${BUBBLEWRAP_VER}."
COMP_JAILSHELL_NAME="Build jailshell"
COMP_JAILSHELL_DESC="Install/update jailshell."
COMP_JAILSHELL_VER="Version ${JAILSHELL_SH_VER}."
COMP_REDIS_NAME="Build redis"
COMP_REDIS_DESC="Install/update redis."
COMP_REDIS_VER="Version ${REDIS_VER}."
COMP_CSF_NAME="Build CSF"
COMP_CSF_DESC="Install/update ConfigServer Security & Firewall (csf)."
COMP_CSF_VER=""
COMP_CLAMAV_NAME="Build ClamAV"
COMP_CLAMAV_DESC="Install/update ClamAV antivirus engine."
COMP_CLAMAV_VER="Version ${CLAMAV_VER}."
COMP_COMPOSER_NAME="Build composer"
COMP_COMPOSER_DESC="Install/update composer."
COMP_COMPOSER_VER="Version ${COMPOSER_VER}."
COMP_WP_NAME="Build wp-cli"
COMP_WP_DESC="Install/update command-line interface for WordPress."
COMP_WP_VER="Version ${WP_VER}."
COMP_IMAPSYNC_NAME="Build imapsync"
COMP_IMAPSYNC_DESC="Install/update imapsync tool for mailbox synchronization."
COMP_IMAPSYNC_VER="Version ${IMAPSYNC_VER}."
COMP_LEGO_NAME="Build lego"
COMP_LEGO_DESC="Install/update lego Let's Encrypt client."
COMP_LEGO_VER="Version ${LEGO_VER}."
COMP_CURL_NAME="Build cURL"
COMP_CURL_DESC="Install/update cURL."
COMP_CURL_VER="Version ${CURL_VER}."
COMP_DOVECOT_NAME="Build Dovecot"
COMP_DOVECOT_DESC="Install/update Dovecot IMAP/POP3 server."
COMP_DOVECOT_VER="Version ${DOVECOT_VER}."
COMP_EXIM_NAME="Build Exim"
COMP_EXIM_DESC="Install/update Exim Mail Transfer Agent."
COMP_EXIM_VER="Version ${EXIM_VER}."
COMP_PHP_GMP_NAME="Build gmp"
COMP_PHP_GMP_DESC="Install/update gmp extension for PHP."
COMP_PHP_GMP_VER=""
COMP_PHP_LDAP_NAME="Build ldap"
COMP_PHP_LDAP_DESC="Install/update ldap extension for PHP."
COMP_PHP_LDAP_VER=""
COMP_PHP_BZ2_NAME="Build bz2"
COMP_PHP_BZ2_DESC="Install/update bz2 extension for PHP."
COMP_PHP_BZ2_VER=""
COMP_PHP_IGBINARY_NAME="Build igbinary"
COMP_PHP_IGBINARY_DESC="Install/update igbinary extension for PHP."
COMP_PHP_IGBINARY_VER="Version ${IGBINARY_VER}."
COMP_PHP_IMAGICK_NAME="Build imagick"
COMP_PHP_IMAGICK_DESC="Install/update ImageMagick extension for PHP."
COMP_PHP_IMAGICK_VER="Version ${IMAGICK_VER}."
COMP_PHP_SNUFFLEUPAGUS_NAME="Build snuffleupagus"
COMP_PHP_SNUFFLEUPAGUS_DESC="Install/update snuffleupagus extension for PHP."
COMP_PHP_SNUFFLEUPAGUS_VER="Version ${SNUFFLEUPAGUS_VER}."
COMP_PHP_PHALCON_NAME="Build phalcon"
COMP_PHP_PHALCON_DESC="Install/update Phalcon extension for PHP."
COMP_PHP_PHALCON_VER="Version ${PHALCON_VER}."
COMP_PHP_PSR_NAME="Build psr"
COMP_PHP_PSR_DESC="Install/update psr extension for PHP."
COMP_PHP_PSR_VER="Version ${PSR_VER}."
COMP_PHP_REDIS_NAME="Build redis"
COMP_PHP_REDIS_DESC="Install/update redis extension for PHP."
COMP_PHP_REDIS_VER="Version ${PHPREDIS_VER}."
COMP_PHP_READLINE_NAME="Build readline"
COMP_PHP_READLINE_DESC="Install/update readline extension for PHP."
COMP_PHP_READLINE_VER=""
COMP_PHP_IMAP_NAME="Build imap"
COMP_PHP_IMAP_DESC="Install/update imap extension for PHP."
COMP_PHP_IMAP_VER="Version ${IMAP_VER}."
COMP_PHP_XMLRPC_NAME="Build xmlrpc"
COMP_PHP_XMLRPC_DESC="Install/update xmlrpc extension for PHP."
COMP_PHP_XMLRPC_VER=""
COMP_IMAGEMAGICK_NAME="Build ImageMagick"
COMP_IMAGEMAGICK_DESC="Install/update ImageMagick."
COMP_IMAGEMAGICK_VER="Version ${IMAGEMAGICK_VER}."
COMP_PHP_IONCUBE_NAME="Build ionCube"
COMP_PHP_IONCUBE_DESC="Install/update ionCube."
COMP_PHP_IONCUBE_VER="Version ${IONCUBE_VER}."
COMP_PHP_SUHOSIN_NAME="Build suhosin"
COMP_PHP_SUHOSIN_DESC="Install/update suhosin."
COMP_PHP_SUHOSIN_VER="Version ${SUHOSIN_VER}."
COMP_LIBMAXMINDDB_NAME="Build libmaxminddb"
COMP_LIBMAXMINDDB_DESC="Install/update libmaxminddb."
COMP_LIBMAXMINDDB_VER="Version ${LIBMAXMINDDB_VER}."
COMP_GEOIPUPDATE_NAME="Build geoipupdate"
COMP_GEOIPUPDATE_DESC="Install/update geoipupdate."
COMP_GEOIPUPDATE_VER="Version ${GEOIPUPDATE_VER}."
COMP_LIBSPF2_NAME="Build libspf2"
COMP_LIBSPF2_DESC="Install/update libspf2."
COMP_LIBSPF2_VER="Version ${LIBSPF2_VER}."
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
COMP_MOD_LSAPI_NAME="Build mod_lsapi"
COMP_MOD_LSAPI_DESC="Install/update mod_lsapi."
COMP_MOD_LSAPI_VER="Version ${MOD_LSAPI_VER}."
COMP_MOD_HOSTINGLIMITS_NAME="Build mod_hostinglimits"
COMP_MOD_HOSTINGLIMITS_DESC="Install/update mod_hostinglimits."
COMP_MOD_HOSTINGLIMITS_VER="Version ${MOD_HOSTINGLIMITS_VER}."
COMP_MOD_PROCTITLE_NAME="Build mod_proctitle"
COMP_MOD_PROCTITLE_DESC="Install/update mod_proctitle."
COMP_MOD_PROCTITLE_VER="Version ${MOD_PROCTITLE_VER}."
fi
COMP_MOD_ACLR2_NAME="Build mod_aclr2"
COMP_MOD_ACLR2_DESC="Install/update mod_aclr2."
COMP_MOD_ACLR2_VER="Version ${MOD_ACLR2_VER}."
COMP_MOD_RUID2_NAME="Build mod_ruid2"
COMP_MOD_RUID2_DESC="Install/update mod_ruid2."
COMP_MOD_RUID2_VER="Version ${MOD_RUID2_VER}."
COMP_MODSECURITY_NAME="Build ModSecurity"
COMP_MODSECURITY_DESC="Install/update ModSecurity."
COMP_MODSECURITY_VER="Version ${MODSECURITY_VER}."
COMP_LIBMODSECURITY_NAME="Build LibModSecurity"
COMP_LIBMODSECURITY_DESC="Install/update LibModSecurity (ModSecurity 3.0)."
COMP_LIBMODSECURITY_VER="Version ${LIBMODSECURITY_VER}."
COMP_MODSECURITY_RULES_NAME="Build ModSecurity Rules"
COMP_MODSECURITY_RULES_DESC="Install/update ModSecurity rule set."
COMP_MODSECURITY_RULES_VER=""
COMP_PHP_OPCACHE_NAME="Build opcache"
COMP_PHP_OPCACHE_DESC="Install/update opcache."
COMP_PHP_OPCACHE_VER=""
COMP_MOD_HTSCANNER2_NAME="Build mod_htscanner2"
COMP_MOD_HTSCANNER2_DESC="Install/update mod_htscanner2."
COMP_MOD_HTSCANNER2_VER="Version ${HTSCANNER_VER}."
COMP_MOD_FCGID_NAME="Build mod_fcgid"
COMP_MOD_FCGID_DESC="Install/update mod_fcgid."
COMP_MOD_FCGID_VER="Version ${MOD_FCGID_VER}."
COMP_MYSQL_NAME="Build ${MYSQLNAME}"
COMP_MYSQL_DESC="Install/update ${MYSQLNAME}."
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
COMP_MYSQL_VER="Version ${MYSQL_VER}."
else
COMP_MYSQL_VER="Version ${MARIADB_VER}."
fi
COMP_NGINX_NAME="Build nginx"
COMP_NGINX_DESC="Install/update nginx WEB server."
COMP_NGINX_VER="Version ${NGINX_VER}."
COMP_LITESPEED_NAME="Build litespeed"
COMP_LITESPEED_DESC="Install/update LiteSpeed WEB server."
COMP_LITESPEED_VER="Version ${LITESPEED_VER}."
COMP_OPENLITESPEED_NAME="Build openlitespeed"
COMP_OPENLITESPEED_DESC="Install/update OpenLiteSpeed WEB server."
COMP_OPENLITESPEED_VER="Version ${OPENLITESPEED_VER}."
COMP_NETDATA_NAME="Build netdata"
COMP_NETDATA_DESC="Install/update netdata metrics for your server."
COMP_NETDATA_VER=""
COMP_NGINX_APACHE_NAME="Build nginx+Apache"
COMP_NGINX_APACHE_DESC="Install/update Apache and nginx (nginx as a reverse proxy for Apache)."
COMP_NGINX_APACHE_VER="Apache ${APACHE2_VER} and nginx ${NGINX_VER}."
COMP_PIGEONHOLE_NAME="Build Pigeonhole"
COMP_PIGEONHOLE_DESC="Install/update Pigeonhole used in Dovecot to provide Sieve email filtering and ManageSieve protocol."
COMP_PIGEONHOLE_VER="Version ${PIGEONHOLE_VER}."
COMP_PHP_NAME="Build PHP"
COMP_PHP_DESC="Install/update PHP."
if [ "${PHP2_RELEASE_OPT}" = "no" ] && [ "${PHP3_RELEASE_OPT}" = "no" ] && [ "${PHP4_RELEASE_OPT}" = "no" ]; then
COMP_PHP_VER="Version ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT}."
elif [ "${PHP3_RELEASE_OPT}" = "no" ] && [ "${PHP4_RELEASE_OPT}" = "no" ]; then
COMP_PHP_VER="Version ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default) and ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional)."
elif [ "${PHP3_RELEASE_OPT}" = "no" ] && [ "${PHP4_RELEASE_OPT}" = "no" ]; then
COMP_PHP_VER="Version ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default), ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional) and ${PHP3_RELEASE_OPT} as ${PHP3_MODE_OPT} (additional)."
else
COMP_PHP_VER="Version ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default), ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional), ${PHP3_RELEASE_OPT} as ${PHP3_MODE_OPT} (additional) and ${PHP4_RELEASE_OPT} as ${PHP4_MODE_OPT} (additional)."
fi
COMP_PROFTPD_NAME="Build ProFTPd"
COMP_PROFTPD_DESC="Install/update ProFTPD FTP server."
COMP_PROFTPD_VER="Version ${PROFTPD_VER}."
COMP_PUREFTPD_NAME="Build Pure-FTPd"
COMP_PUREFTPD_DESC="Install/update Pure-FTPd FTP server."
COMP_PUREFTPD_VER="Version ${PUREFTPD_VER}."
COMP_SPAMASSASSIN_NAME="Build SpamAssassin"
COMP_SPAMASSASSIN_DESC="Install/update SpamAssassin."
COMP_SPAMASSASSIN_VER="Version ${SPAMASSASSIN_VER}."
COMP_RSPAMD_NAME="Build Rspamd"
COMP_RSPAMD_DESC="Install/update Rspamd."
COMP_RSPAMD_VER="Version ${RSPAMD_VER}."
COMP_SNAIL_NAME="Build s-nail"
COMP_SNAIL_DESC="Install/update s-nail - environment for sending and receiving mail."
COMP_SNAIL_VER="Version ${S_NAIL_VER}."
COMP_MSMTP_NAME="Build msmtp"
COMP_MSMTP_DESC="Install/update msmtp - smtp client for jailed environments."
COMP_MSMTP_VER="Version ${MSMTP_VER}."
COMP_LUA_NAME="Build lua"
COMP_LUA_DESC="Install/update lua scripting language."
COMP_LUA_VER="Version ${LUA_VER}."
COMP_SPAMASSASSIN_CRON_NAME="Build SpamAssassin cron."
COMP_SPAMASSASSIN_CRON_DESC="Install SpamAssassin cronjob for periodic rule updates."
COMP_SUPHP_NAME="Build suPHP"
COMP_SUPHP_DESC="Install/update suPHP."
COMP_SUPHP_VER="Version ${SUPHP_VER}."
COMP_WEBALIZER_NAME="Build Webalizer"
COMP_WEBALIZER_DESC="Install/update Webalizer."
COMP_WEBALIZER_VER="Version ${WEBALIZER_VER}."
COMP_PHP_ZEND_NAME="Build Zend Guard loader"
COMP_PHP_ZEND_DESC="Install/update Zend Guard loader."
COMP_PHP_ZEND_VER=""
COMP_EXIM_CONF_NAME="Update Exim configuration files"
COMP_EXIM_CONF_DESC="Updates Exim configuration files (exim.conf and exim.pl). WARNING: Any customizations done will be lost."
COMP_DOVECOT_CONF_NAME="Update Dovecot configuration files"
COMP_DOVECOT_CONF_DESC="Updates Dovecot configuration files."
COMP_BLOCKCRACKING_NAME="Enable BlockCracking"
COMP_BLOCKCRACKING_DESC="Enables BlockCracking for outgoing SPAM mitigation in Exim configuration file (exim.conf). Requires Exim configuration version 4.3 or higher. More information: https://forum.directadmin.com/showthread.php?t=50059."
COMP_EASY_SPAM_FIGHTER_NAME="Enable Easy Spam Fighter"
COMP_EASY_SPAM_FIGHTER_DESC="Enables Easy Spam Fighter for incoming SPAM mitigation in Exim configuration file (exim.conf). Requires Exim configuration version 4.3 or higher. More information: https://forum.directadmin.com/showthread.php?t=50059."
COMP_PHP_INI_NAME="Update PHP configuration files"
COMP_PHP_INI_DESC="Updates php.ini configuration files used by PHP. WARNING: Any customizations done will be lost."
COMP_REWRITE_CONFS_NAME="Rewrite WEB server configuration files"
COMP_REWRITE_CONFS_DESC="Rewrites Apache/Nginx WEB server configuration files (useful when configuration got corrupted or needs to be updated). WARNING: customizations must be present in 'custom/' folder, otherwise they will be lost."
COMP_SECURE_PHP_NAME="Secure PHP"
COMP_SECURE_PHP_DESC="Disables dangerous PHP functions in php.ini file."
COMP_LITESPEED_LICENSE_NAME="Update LiceSpeed License"
COMP_LITESPEED_LICENSE_DESC="Updates LiteSpeed license using the serial number provided."
COMP_LITESPEED_LICENSE_MIGRATE_NAME="Migrate LiteSpeed License"
COMP_LITESPEED_LICENSE_MIGRATE_DESC="Releases LiteSpeed license (equivalent of 'lshttpd -m').."
COMP_PHPMYADMIN_NAME="Build phpMyAdmin"
COMP_PHPMYADMIN_DESC="Install/update phpMyAdmin WEB MySQL administration tool."
COMP_PHPMYADMIN_VER="Version ${PHPMYADMIN_VER}."
COMP_ROUNDCUBE_NAME="Build RoundCube"
COMP_ROUNDCUBE_DESC="Install/update RoundCube webmail."
COMP_ROUNDCUBE_VER="Version ${ROUNDCUBE_VER}."
COMP_CUSTOMBUILD_PLUGIN_NAME="Build CustomBuild plugin"
COMP_CUSTOMBUILD_PLUGIN_DESC="Install/update CustomBuild plugin."
COMP_SQUIRRELMAIL_NAME="Build SquirrelMail"
COMP_SQUIRRELMAIL_DESC="Install/update SquirrelMail webmail."
COMP_SQUIRRELMAIL_VER="Version ${SQUIRRELMAIL_VER}."
COMP_CREATE_OPTIONS_NAME="Regenerate options.conf file"
COMP_CREATE_OPTIONS_DESC="Re-create options.conf file by asking questions."
COMP_CRON_NAME="Enable/update CustomBuild cronjob"
COMP_CRON_DESC="Enables or updates cronjob used by CustomBuild to send notifications to specified email address about the updates, auto-update components."
COMP_OPT_HELP_NAME="Options.conf help"
COMP_OPT_HELP_DESC="Generates available options that could be used in the options.conf file."
COMP_OPTIONS_NOBOLD_NAME="Display options.conf settings"
COMP_OPTIONS_NOBOLD_DESC="Shows current options set in the options.conf file"
COMP_SET_NAME="Change options.conf setting"
COMP_SET_DESC="Changes value in the options.conf file"
COMP_SET_FASTEST_NAME="Set fastest download server"
COMP_SET_FASTEST_DESC="Selects the fastest download server to use and sets it in the options.conf file."
COMP_SET_FASTEST_QUIET_NAME="Set fastest download server (no output)"
COMP_SET_FASTEST_QUIET_DESC="Selects the fastest download server to use and sets it in the options.conf file. Command generates no output."
COMP_UPDATE_DA_NAME="Update DirectAdmin"
COMP_UPDATE_DA_DESC="Updates DirectAdmin to the latest version."
COMP_UPDATE_VERSIONS_NAME="Update all components"
COMP_UPDATE_VERSIONS_DESC="Checks what updates are available and applies them."
COMP_UPDATE_WEBAPPS_NAME="Update WEB applications."
COMP_UPDATE_WEBAPPS_DESC="Updates WEB applications if updates are available (only phpMyAdmin, RoundCube and SquirrelMail)."
COMP_USED_CONFIGS_NAME="Used configuration files"
COMP_USED_CONFIGS_DESC="Displays full paths to component configuration (./configure) files used by CustomBuild."
COMP_VERSIONS_NAME="Updates availale"
COMP_VERSIONS_DESC="Shows what updates are available to be applied on the system. Does not update them automatically."
COMP_VERSION_NAME="CustomBuild version"
COMP_VERSION_DESC="Shows CustomBuild version."
COMP_LIST_REMOVALS_NAME="List components for removal"
COMP_LIST_REMOVALS_DESC="Lists all components that are available for removal."
COMP_REMOVE_ITEMS_NAME="Remove not needed components"
COMP_REMOVE_ITEMS_DESC="Removes all components that are available for removal (components that are installed, but not set in options.conf)."
COMP_ALL_NAME="Build everything"
COMP_ALL_DESC="(Re)installs all components set in the options.conf file"
COMP_CLEAN_NAME="Clean old directories"
COMP_CLEAN_DESC="Removes not needed folders from CustomBuild directory."
COMP_CLEAN_OLD_WEBAPPS_NAME="Clean old WEB applications"
COMP_CLEAN_OLD_WEBAPPS_DESC="Removes old WEB applications that are not currently used from /var/www/html directory."
COMP_UPDATE_NAME="Update CustomBuild script and packages"
COMP_UPDATE_DESC="Updates CustomBuild script, grabs latest versions.txt file and packages."
COMP_UPDATE_SCRIPT_NAME="Update CustomBuild script"
COMP_UPDATE_SCRIPT_DESC="Updates CustomBuild script only (the 'build' file)."
COMP_UPDATE_DATA_NAME="Download packages"
COMP_UPDATE_DATA_DESC="Downloads packages needed for the CustomBuild script (does not include versions.txt file or the 'build' file)."
COMP_PHP_EXPERT_NAME="Install specified PHP version"
COMP_PHP_EXPERT_DESC="Installs specified PHP version, but does not apply any automatic configuration to it."
COMP_PHP_HTSCANNER2_NAME="Build php_htscanner2"
COMP_PHP_HTSCANNER2_DESC="Install/update php_htscanner2 component used by Apache and PHP."
COMP_SET_SERVICE_NAME="Service autostart"
COMP_SET_SERVICE_DESC="Calls set_setvice function with specified ON|OFF|delete values."
}
generateHelpJSON() {
initJSONVars
echo "{"
if [ "${1}" != "" ]; then
NUM_OF_SECTIONS=1
HELP_SECTIONS=`echo ${1} | tr "[a-z]" "[A-Z]"`
else
NUM_OF_SECTIONS=`echo ${HELP_SECTIONS} | wc -w`
fi
CUR_SECTION=0
for section in ${HELP_SECTIONS}; do
CUR_SECTION=`expr ${CUR_SECTION} + 1`
LOWERCASE_SECTION=`echo $section | tr "[A-Z]" "[a-z]"`
SECTION_DESC=${section}_DESC
SECTION_SET=${section}_SET
NUM_OF_SETTINGS=`echo "$(eval_var ${SECTION_SET})" | wc -w`
CUR_SETTING=0
SKIP_CAT="no"
for skip_cat_opt in ${HELP_SECTIONS_JSON_SKIP}; do
if [ "${section}" = "${skip_cat_opt}" ]; then
SKIP_CAT="yes"
break
fi
done
printf "\t\"${LOWERCASE_SECTION}\": {\n"
printf "\t\t\"description\": \"$(eval_var ${SECTION_DESC})\",\n"
printf "\t\t\"skip\": \"${SKIP_CAT}\",\n"
for setting in $(eval_var ${SECTION_SET}); do
CUR_SETTING=`expr ${CUR_SETTING} + 1`
SETTING_UP=`echo $setting | tr "[a-z]" "[A-Z]"`
BUILD_NAME="COMP_${SETTING_UP}_NAME"
DESCRIPTION="COMP_${SETTING_UP}_DESC"
VER_VAR="COMP_${SETTING_UP}_VER"
SKIP_VAR="${section}_SKIP"
SKIP="no"
for skip_opt in $(eval_var ${SKIP_VAR}); do
if [ "${setting}" = "${skip_opt}" ]; then
SKIP="yes"
break
fi
done
printf "\t\t\"${setting}\": {\n"
printf "\t\t\t\"build\": \"${setting}\",\n"
VERSION_STRING="$(eval_var ${VER_VAR})"
if [ "${section}" = "BUILD_COMP" ] || [ "${section}" = "BUILD_PHP_EXT" ] || [ "${section}" = "BUILD_COMP_WEBAPPS" ]; then
if [ "${VERSION_STRING}" = "Version 0." ]; then
SKIP="yes"
fi
fi
printf "\t\t\t\"skip\": \"${SKIP}\",\n"
printf "\t\t\t\"name\": \"$(eval_var ${BUILD_NAME})\",\n"
if [ "${section}" = "BUILD_COMP" ] || [ "${section}" = "BUILD_PHP_EXT" ] || [ "${section}" = "BUILD_COMP_WEBAPPS" ]; then
if [ "${VERSION_STRING}" != "Version ." ]; then
printf "\t\t\t\"version\": \"$(eval_var ${VER_VAR})\"\n",
fi
fi
printf "\t\t\t\"description\": \"$(eval_var ${DESCRIPTION})\"\n"
if [ ${CUR_SETTING} -ne ${NUM_OF_SETTINGS} ]; then
printf "\t\t},\n"
else
printf "\t\t}\n"
fi
done
if [ ${CUR_SECTION} -ne ${NUM_OF_SECTIONS} ]; then
printf "\t},\n"
else
printf "\t}\n"
fi
done
echo "}"
}
###################################################
showHelp() {
printf " +%-55s+\n" "-----------------------------------------------------------"
printf " | %-55s %-2s|\n" "DirectAdmin WebServices Installer"
printf " | %-55s %-2s|\n" "Written by Martynas Bendorius and DirectAdmin"
printf " | %-55s %-2s|\n" "Version: $(showVersion)"
printf " +%-55s+\n" "-----------------------------------------------------------"
printf " | %-55s %-2s|\n" "To build everything run:"
printf " | %-55s %-2s|\n" " $0 all"
printf " | %-55s %-2s|\n" ""
printf " | %-55s %-2s|\n" " ${boldon}NOTE${boldoff}: Command all will compile everything as it is set"
printf " | %-55s %-2s|\n" " in the options.conf file, please take a look at"
printf " | %-55s %-2s|\n" " \"$0 options\"!"
generateHelp
printf " +%-55s+\n" "-----------------------------------------------------------"
printf " | %-55s %-2s|\n" "You can pass a 2nd argument to automate the input:"
printf " | %-55s %-2s|\n" " $0 <option> d : do the default action"
printf " | %-55s %-2s|\n" " $0 <option> y : answer yes to all questions"
printf " | %-55s %-2s|\n" " $0 <option> n : answer no to all questions"
printf " +%-55s+\n" "-----------------------------------------------------------"
}
checkFile() {
if [ ! -s $1 ]; then
echo "*** Cannot find $1. Aborting ***"
do_exit 0
else
echo "Found $1"
fi
}
quitIfLocked() {
if [ -e ${LOCKFILE} ]; then
PID="`cat ${LOCKFILE}`"
echo "Another instance of custombuild is running (lockfile: ${LOCKFILE}, PID ${PID})."
if [ "$1" != "" ]; then
echo "Executing: $1"
fi
do_exit 1 ""
else
trap "rm -f ${LOCKFILE}; kill_childs; exit" INT TERM EXIT
echo $$ > ${LOCKFILE}
fi
}
####################################################
get_webmail_link() {
WL=roundcube
if [ "$ROUNDCUBE_OPT" = "no" ]; then
WL=squirrelmail
fi
if [ -s ${DACONF_FILE} ] && [ -s /usr/local/directadmin/directadmin ]; then
WL=`/usr/local/directadmin/directadmin c | grep -m1 '^webmail_link' | cut -d= -f2`
fi
echo "${WL}"
}
doPasswdServerStatus() {
if [ -e /var/www/html/passwd-server-status ]; then
rm -f /var/www/html/passwd-server-status
fi
touch /var/www/passwd-server-status
chown apache:apache /var/www/passwd-server-status
chmod 640 /var/www/passwd-server-status
if command -v htpasswd > /dev/null; then
if grep -q da_admin /var/www/passwd-server-status; then
sed -i '/da_admin/d' /var/www/passwd-server-status
fi
RANDOM_HTPASSWD_USER=`random_pass`
RANDOM_HTPASSWD_PASS=`random_pass`
htpasswd -b -c /var/www/passwd-server-status "${RANDOM_HTPASSWD_USER}" "${RANDOM_HTPASSWD_PASS}" >/dev/null 2>&1
echo "#Authenticate using:" >> /etc/httpd/conf/extra/httpd-info.conf
echo "#Username: ${RANDOM_HTPASSWD_USER}" >> /etc/httpd/conf/extra/httpd-info.conf
echo "#Password: ${RANDOM_HTPASSWD_PASS}" >> /etc/httpd/conf/extra/httpd-info.conf
fi
}
####################################################
doApacheHostConf() {
HOSTCONF=${HTTPDCONF}/extra/httpd-hostname.conf
if [ -e ${WORKDIR}/custom/ap2/conf/extra/httpd-hostname.conf ]; then
cp -pf ${WORKDIR}/custom/ap2/conf/extra/httpd-hostname.conf ${HOSTCONF}
else
echo -n '' > ${HOSTCONF}
if [ "${HAVE_FPM_CGI}" = "yes" ]; then
echo 'SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1' >> ${HOSTCONF}
fi
echo '<Directory /var/www/html>' >> ${HOSTCONF}
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
echo '<FilesMatch "\.(inc|php[0-9]*|phtml|phps)$">' >> ${HOSTCONF}
echo "AddHandler \"proxy:unix:/usr/local/php${PHP1_SHORTRELEASE}/sockets/webapps.sock|fcgi://localhost\" .inc .php .php5 .php${PHP1_SHORTRELEASE} .phtml" >> ${HOSTCONF}
echo '</FilesMatch>' >> ${HOSTCONF}
fi
if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then
echo '<FilesMatch "\.(inc|php[0-9]*|phtml|phps)$">' >> ${HOSTCONF}
echo "AddHandler application/x-httpd-php .php" >> ${HOSTCONF}
echo '</FilesMatch>' >> ${HOSTCONF}
fi
echo ' Options +SymLinksIfOwnerMatch +IncludesNoExec -Indexes' >> ${HOSTCONF}
echo ' AllowOverride AuthConfig FileInfo Indexes Limit Options=Includes,IncludesNOEXEC,Indexes,ExecCGI,MultiViews,SymLinksIfOwnerMatch,None' >> ${HOSTCONF}
echo ' AllowMethods reset' >> ${HOSTCONF}
echo '' >> ${HOSTCONF}
echo ' Require all granted' >> ${HOSTCONF}
echo ' <IfModule mod_suphp.c>' >> ${HOSTCONF}
echo ' suPHP_Engine On' >> ${HOSTCONF}
echo ' suPHP_UserGroup webapps webapps' >> ${HOSTCONF}
echo ' </IfModule>' >> ${HOSTCONF}
echo ' <IfModule mod_ruid2.c>' >> ${HOSTCONF}
echo ' RUidGid webapps webapps' >> ${HOSTCONF}
echo ' </IfModule>' >> ${HOSTCONF}
echo ' <IfModule mod_lsapi.c>' >> ${HOSTCONF}
echo ' lsapi_user_group webapps webapps' >> ${HOSTCONF}
echo " php_admin_value session.save_path ${APP_TMP}" >> ${HOSTCONF}
echo " php_admin_value upload_tmp_dir ${APP_TMP}" >> ${HOSTCONF}
echo ' </IfModule>' >> ${HOSTCONF}
if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then
echo ' <IfModule mod_php5.c>' >> ${HOSTCONF}
echo " php_admin_value session.save_path ${APP_TMP}" >> ${HOSTCONF}
echo " php_admin_value upload_tmp_dir ${APP_TMP}" >> ${HOSTCONF}
echo ' </IfModule>' >> ${HOSTCONF}
echo ' <IfModule mod_php7.c>' >> ${HOSTCONF}
echo " php_admin_value session.save_path ${APP_TMP}" >> ${HOSTCONF}
echo " php_admin_value upload_tmp_dir ${APP_TMP}" >> ${HOSTCONF}
echo ' </IfModule>' >> ${HOSTCONF}
echo ' <IfModule mod_php8.c>' >> ${HOSTCONF}
echo " php_admin_value session.save_path ${APP_TMP}" >> ${HOSTCONF}
echo " php_admin_value upload_tmp_dir ${APP_TMP}" >> ${HOSTCONF}
echo ' </IfModule>' >> ${HOSTCONF}
fi
ensure_webapps_tmp
WEBAPPS_FCGID_DIR=/var/www/fcgid
SUEXEC_PER_DIR="0"
if [ -s /usr/sbin/suexec ]; then
SUEXEC_PER_DIR="`/usr/sbin/suexec -V 2>&1 | grep -c 'AP_PER_DIR'`"
fi
if [ "${PHP1_MODE_OPT}" = "fastcgi" ]; then
echo ' <IfModule mod_fcgid.c>' >> ${HOSTCONF}
echo " FcgidWrapper /usr/local/safe-bin/fcgid${PHP1_SHORTRELEASE}.sh .php" >> ${HOSTCONF}
if [ "${SUEXEC_PER_DIR}" -gt 0 ]; then
echo ' SuexecUserGroup webapps webapps' >> ${HOSTCONF}
fi
echo ' <FilesMatch "\.(inc|php[0-9]*|phtml|phps)$">' >> ${HOSTCONF}
echo ' Options +ExecCGI' >> ${HOSTCONF}
echo ' AddHandler fcgid-script .php' >> ${HOSTCONF}
echo ' </FilesMatch>' >> ${HOSTCONF}
echo ' </IfModule>' >> ${HOSTCONF}
fi
echo '</Directory>' >> ${HOSTCONF}
# Do not show authentication logs for public
echo '<Directory /var/www/html/phpMyAdmin/log>' >> ${HOSTCONF}
echo ' Require all denied' >> ${HOSTCONF}
echo '</Directory>' >> ${HOSTCONF}
fi
}
options() {
if [ "${UNIT_OPT}" = "yes" ]; then
echo "Nginx Unit: ${boldon}${UNIT_VER}${boldoff}"
else
echo "Nginx Unit: ${boldon}no${boldoff}"
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "Apache: ${boldon}${APACHE2_VER}${boldoff}"
elif [ "${WEBSERVER_OPT}" = "nginx" ]; then
echo "Nginx: ${boldon}${NGINX_VER}${boldoff}"
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "Nginx (reverse proxy): ${boldon}${NGINX_VER}${boldoff}"
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
echo "Litespeed: ${boldon}${LITESPEED_VER}${boldoff}"
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
echo "OpenLitespeed: ${boldon}${OPENLITESPEED_VER}${boldoff}"
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "mod_lsapi: ${boldon}${MOD_LSAPI_VER}${boldoff}"
echo "mod_hostinglimits: ${boldon}${MOD_HOSTINGLIMITS_VER}${boldoff}"
echo "mod_proctitle: ${boldon}${MOD_PROCTITLE_VER}${boldoff}"
fi
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${MOD_RUID2_OPT}" = "yes" ]; then
echo "mod_ruid2: ${boldon}${MOD_RUID2_VER}${boldoff}"
else
echo "mod_ruid2: ${boldon}no${boldoff}"
fi
fi
if [ "${WEBSERVER_OPT}" = "apache" ]; then
if [ "${MODSECURITY_OPT}" = "yes" ]; then
echo "ModSecurity: ${boldon}${MODSECURITY_VER}${boldoff}"
echo "ModSecurity Rule Set: ${boldon}${MODSECURITY_RULESET_OPT}${boldoff}"
else
echo "ModSecurity: ${boldon}no${boldoff}"
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "nginx" ]; then
if [ "${MODSECURITY_OPT}" = "yes" ]; then
echo "LibModSecurity: ${boldon}${LIBMODSECURITY_VER}${boldoff}"
echo "LibModSecurity Rule Set: ${boldon}${MODSECURITY_RULESET_OPT}${boldoff}"
else
echo "LibModSecurity: ${boldon}no${boldoff}"
fi
fi
if [ "${HAVE_CLI}" = "no" ] && [ "${PHP1_MODE_OPT}" != "lsphp" ]; then
if [ "${HTSCANNER_OPT}" = "yes" ]; then
echo "htscanner: ${boldon}${HTSCANNER_VER}${boldoff}"
else
echo "htscanner: ${boldon}no${boldoff}"
fi
fi
if [ "${DOVECOT_OPT}" = "yes" ]; then
echo "Dovecot: ${boldon}${DOVECOT_VER}${boldoff}"
else
echo "Dovecot: ${boldon}no${boldoff}"
fi
echo "Dovecot configuration: ${boldon}${DOVECOT_CONF_OPT}${boldoff}"
if [ "${AWSTATS_OPT}" = "yes" ]; then
echo "AWstats: ${boldon}${AWSTATS_VER}${boldoff}"
else
echo "AWstats: ${boldon}no${boldoff}"
fi
if [ "${EXIM_OPT}" = "yes" ]; then
echo "Exim: ${boldon}${EXIM_VER}${boldoff}"
else
echo "Exim: ${boldon}no${boldoff}"
fi
if [ "${EXIMCONF_OPT}" = "yes" ]; then
echo "exim.conf update: ${boldon}${EXIMCONF_OPT}, release ${EXIMCONF_RELEASE_OPT}${boldoff}"
else
echo "exim.conf update: ${boldon}${EXIMCONF_OPT}${boldoff}"
fi
echo "BlockCracking: ${boldon}${BLOCKCRACKING_OPT}${boldoff}"
echo "Easy Spam Fighter: ${boldon}${EASY_SPAM_FIGHTER_OPT}${boldoff}"
if [ "${SPAMD_OPT}" = "spamassassin" ]; then
echo "SpamAssassin: ${boldon}${SPAMASSASSIN_VER}${boldoff}"
echo "SpamAssassin rule updates: ${boldon}${SA_UPDATE_OPT}${boldoff}"
elif [ "${SPAMD_OPT}" = "rspamd" ]; then
echo "Rspamd: ${boldon}${RSPAMD_VER}${boldoff}"
else
echo "SpamAssassin: ${boldon}no${boldoff}"
fi
if [ "${CLAMAV_OPT}" = "yes" ]; then
echo "ClamAV: ${boldon}${CLAMAV_VER}${boldoff}"
else
echo "ClamAV: ${boldon}no${boldoff}"
fi
if [ "${MYSQL_INST_OPT}" != "no" ]; then
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
echo "${MYSQLNAME}: ${boldon}${MYSQL_VER}${boldoff}"
else
echo "${MYSQLNAME}: ${boldon}${MARIADB_VER}${boldoff}"
fi
else
echo "${MYSQLNAME}: ${boldon}no${boldoff}"
fi
echo "MySQL backup: ${boldon}${MYSQL_BACKUP_OPT}${boldoff}"
if [ "${MYSQL_BACKUP_OPT}" = "yes" ]; then
echo "MySQL backup directory: ${boldon}${MYSQL_BACKUP_DIR_OPT}${boldoff}"
echo "MySQL compress backups: ${boldon}${MYSQL_BACKUP_GZIP_OPT}${boldoff}"
fi
echo "PHP (default): ${boldon}${PHP1_RELEASE_OPT}${boldoff} as ${boldon}${PHP1_MODE_OPT}${boldoff}"
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
echo "PHP (additional): ${boldon}${PHP2_RELEASE_OPT}${boldoff} as ${boldon}${PHP2_MODE_OPT}${boldoff}"
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
echo "PHP (additional, 3rd): ${boldon}${PHP3_RELEASE_OPT}${boldoff} as ${boldon}${PHP3_MODE_OPT}${boldoff}"
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
echo "PHP (additional, 4th): ${boldon}${PHP4_RELEASE_OPT}${boldoff} as ${boldon}${PHP4_MODE_OPT}${boldoff}"
fi
if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
echo "phpMyAdmin: ${boldon}${PHPMYADMIN_VER}${boldoff}"
else
echo "phpMyAdmin: ${boldon}no${boldoff}"
fi
if [ "${FTPD_OPT}" = "proftpd" ]; then
echo "ProFTPD: ${boldon}${PROFTPD_VER}${boldoff}"
else
echo "ProFTPD: ${boldon}no${boldoff}"
fi
if [ "${FTPD_OPT}" = "pureftpd" ]; then
echo "Pure-FTPd: ${boldon}${PUREFTPD_VER}${boldoff}"
else
echo "Pure-FTPd: ${boldon}no${boldoff}"
fi
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
echo "RoundCube webmail: ${boldon}${ROUNDCUBE_VER}${boldoff}"
else
echo "RoundCube webmail: ${boldon}no${boldoff}"
fi
if [ "${WEBAPPS_INBBOX_PREFIX_OPT}" = "yes" ]; then
echo "Webapps using .INBOX prefix for IMAP folders: ${boldon}${WEBAPPS_INBBOX_PREFIX_OPT}${boldoff}"
fi
echo "Replace \"php.ini\" with '$0 all' and '$0 php_ini': ${boldon}${PHP_INI_OPT}${boldoff}"
if [ "${PHP_INI_OPT}" = "yes" ]; then
echo "Replace \"php.ini\" using type: ${boldon}${PHP_INI_TYPE_OPT}${boldoff}"
fi
if [ "${CRON_OPT}" = "yes" ]; then
echo "Cron for notifications and (or) updates: ${boldon}yes${boldoff}"
echo "Cron frequency: ${boldon}${CRON_FREQUENCY_OPT}${boldoff}"
if [ "${NOTIFICATIONS_OPT}" = "yes" ]; then
echo "Auto notifications: ${boldon}yes${boldoff}"
echo "Auto notifications email address: ${boldon}${EMAIL_OPT}${boldoff}"
fi
if [ "${UPDATES_OPT}" = "yes" ]; then
echo "Auto updates: ${boldon}yes${boldoff}"
fi
else
echo "Auto updates/notifications: ${boldon}no${boldoff}"
fi
echo "Run \"clean\" every time: ${boldon}${CLEAN_OPT}${boldoff}"
echo "Run \"clean_old_webapps\" every time: ${boldon}${CLEAN_OLD_WEBAPPS_OPT}${boldoff}"
echo "Run \"clean_old_tarballs\" every time: ${boldon}${CLEAN_OLD_TARBALLS_OPT}${boldoff}"
echo "Show texts in bold: ${boldon}${BOLD_OPT}${boldoff}"
if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then
echo "SquirrelMail: ${boldon}${SQUIRRELMAIL_VER}${boldoff}"
else
echo "SquirrelMail: ${boldon}no${boldoff}"
fi
echo "Zend Guard Loader: ${boldon}${ZEND_OPT}${boldoff}"
if [ "${IONCUBE_OPT}" = "yes" ]; then
echo "ionCube loader: ${boldon}${IONCUBE_VER}${boldoff}"
else
echo "ionCube loader: ${boldon}no${boldoff}"
fi
if [ "${SUHOSIN_OPT}" = "yes" ] && [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ]; then
echo "Suhosin (with PHP upload scan script): ${boldon}${SUHOSIN_VER}${boldoff}"
elif [ "${SUHOSIN_OPT}" = "yes" ] && [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "no" ]; then
echo "Suhosin: ${boldon}${SUHOSIN_VER}${boldoff}"
else
echo "Suhosin: ${boldon}no${boldoff}"
fi
}
####################################################
option_set_valid_php() {
#Used in create_options()
if [ -z $2 ]; then
if [ ! -z "$3" ]; then
OPTION_VALUE="${3}"
else
echo "Two arguments must be given for the function"
return
fi
else
OPTION_VALUE="${2}"
fi
VAR=`echo $1 | tr "[a-z]" "[A-Z]"`
if [ -z "$(eval_var PHP_${VAR}_SET)" ]; then
echo "${1} is not a valid option."
return
fi
VALID="no"
for i in $(eval_var PHP_${VAR}_SET); do
if [ "${i}" = "${OPTION_VALUE}" ] || [ "${i}" = "userinput" ]; then
VALID="yes"
break
fi
done
if [ "${VALID}" = "yes" ]; then
setPhpOpt $1 ${OPTION_VALUE}
else
echo "${boldon}Invalid selection, please enter the selection again.${boldoff}"
fi
echo ""
}
option_set_valid() {
#Used in create_options()
if [ -z "$2" ]; then
if [ ! -z "$3" ]; then
OPTION_VALUE="${3}"
else
echo "Two arguments must be given for the function"
return
fi
else
OPTION_VALUE="${2}"
fi
VAR=`echo $1 | tr "[a-z]" "[A-Z]"`
if [ -z "$(eval_var ${VAR}_SET)" ]; then
echo "${1} is not a valid option."
return
fi
VALID="no"
for i in $(eval_var ${VAR}_SET); do
if [ "${i}" = "${OPTION_VALUE}" ] || [ "${i}" = "userinput" ]; then
VALID="yes"
break
fi
done
if [ "${VALID}" = "yes" ]; then
setOpt $1 ${OPTION_VALUE}
else
echo "${boldon}Invalid selection, please enter the selection again.${boldoff}"
fi
echo ""
}
create_options() {
HIDE_CHANGES=1
if [ $# -eq 1 ]; then
INPUT_VALUE=$1
fi
if [ -s ${OPTIONS_CONF} ] && [ "${OPTIONS_CONF_EXISTS}" = "1" ]; then
echo -n "Would you like to backup the current options.conf? (yes/no, default: yes): "
read do_opt_backup
until [ "${do_opt_backup}" = "yes" ] || [ "${do_opt_backup}" = "no" ] || [ -z "${do_opt_backup}" ]; do
echo -n "Please enter 'yes', 'no' or click 'enter' for default: "
read do_opt_backup
done
if [ -z "${do_opt_backup}" ]; then
do_opt_backup="yes"
fi
if [ "${do_opt_backup}" = "yes" ]; then
cp -f ${OPTIONS_CONF} ${OPTIONS_CONF}.`date +%Y%m%d%I%M%S`.backup
echo "Backup created: ${OPTIONS_CONF}.`date +%Y%m%d%I%M%S`.backup"
fi
echo ""
fi
echo -n "Would you like the default settings of ${WEBSERVER_OPT} and php ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT}? (yes/no, default: yes):"
read cb_defaults
until [ "${cb_defaults}" = "yes" ] || [ "${cb_defaults}" = "no" ] || [ -z "${cb_defaults}" ]; do
echo -n "Please enter 'yes' or 'no': "
read cb_defaults
done
if [ -z "${cb_defaults}" ]; then
cb_defaults="yes"
fi
if [ "${cb_defaults}" != "yes" ]; then
QUESTION_SET="`echo ${WEBSERVER_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select webserver you would like to use (${QUESTION_SET}, default: ${WEBSERVER_DEF}):"
read option_answer
option_set_valid webserver "${option_answer}" "${WEBSERVER_DEF}"
done
if [ -e /etc/redhat-release ]; then
if grep -q CloudLinux /etc/redhat-release; then
echo -n "Would you like to enable CloudLinux in CustomBuild? (yes/no, default: yes): "
read clopt
until [ "${clopt}" = "yes" ] || [ "${clopt}" = "no" ] || [ -z "${do_opt_backup}" ]; do
echo -n "Please enter 'yes' or 'no': "
read clopt
done
if [ -z "${clopt}" ]; then
clopt="yes"
fi
setOpt cloudlinux "${clopt}"
echo ""
fi
fi
QUESTION_SET="`echo ${MYSQL_INST_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select MySQL database server you would like to use (${QUESTION_SET}, default: ${MYSQL_INST_DEF}):"
read option_answer
option_set_valid mysql_inst "${option_answer}" "${MYSQL_INST_DEF}"
done
MYSQL_INST_ANSWER=${option_answer}
if [ -z "${MYSQL_INST_ANSWER}" ]; then
MYSQL_INST_ANSWER=${MYSQL_INST_DEF}
fi
if [ "${MYSQL_INST_ANSWER}" != "no" ]; then
if [ "${MYSQL_INST_ANSWER}" = "mysql" ]; then
QUESTION_SET="`echo ${MYSQL_SET} | tr ' ' '/'`"
QUESTION_DEF="${MYSQL_DEF}"
else
QUESTION_SET="`echo ${MARIADB_SET} | tr ' ' '/'`"
QUESTION_DEF="${MARIADB_DEF}"
fi
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select ${MYSQL_INST_ANSWER} version you would like to use (${QUESTION_SET}, default: ${QUESTION_DEF}):"
read option_answer
option_set_valid ${MYSQL_INST_ANSWER} "${option_answer}" "${QUESTION_DEF}"
done
fi
QUESTION_SET="`echo ${FTPD_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select FTP server you would like to use (${QUESTION_SET}, ${FTPD_DEF}):"
read option_answer
option_set_valid ftpd "${option_answer}" "${FTPD_DEF}"
done
QUESTION_SET="`echo ${PHP1_RELEASE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select default PHP version you would like to use (${QUESTION_SET}, default: ${PHP1_RELEASE_DEF}):"
read option_answer
option_set_valid php1_release "${option_answer}" "${PHP1_RELEASE_DEF}"
done
DEFPHP_ANSWER="no"
QUESTION_SET="`echo ${PHP1_MODE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select default PHP mode you would like to use (${QUESTION_SET}, default: ${PHP1_MODE_DEF}):"
read option_answer
option_set_valid php1_mode "${option_answer}" "${PHP1_MODE_DEF}"
done
DEFPHP_ANSWER=${option_answer}
if [ -z "${DEFPHP_ANSWER}" ]; then
DEFPHP_ANSWER="${PHP1_MODE_DEF}"
fi
echo -n "Would you like to have a second instance of PHP installed? (yes/no, default: no): "
read wantsec
until [ "${wantsec}" = "yes" ] || [ "${wantsec}" = "no" ] || [ -z "${wantsec}" ]; do
echo -n "Please enter 'yes' or 'no': "
read wantsec
if [ -z "${wantsec}" ]; then
wantsec="no"
fi
done
echo ""
if [ "${wantsec}" = "yes" ]; then
#PHP1_RELEASE_SET is not a bug here :) It's set not to display "no" as an option, because the previous question already asks if anyone would like to have a 2nd version of PHP
QUESTION_SET="`echo ${PHP1_RELEASE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select additional PHP version you would like to use (${QUESTION_SET}):"
read option_answer
option_set_valid php2_release ${option_answer}
done
QUESTION_SET="`echo ${PHP2_MODE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select additional PHP mode you would like to use (${QUESTION_SET}, default: ${PHP1_MODE_DEF}):"
read option_answer
option_set_valid php2_mode "${option_answer}" "${PHP1_MODE_DEF}"
done
echo -n "Would you like to have a third instance of PHP installed? (yes/no, default: no): "
read wantthird
until [ "${wantthird}" = "yes" ] || [ "${wantthird}" = "no" ] || [ -z "${wantthird}" ]; do
echo -n "Please enter 'yes' or 'no': "
read wantthird
if [ -z "${wantthird}" ]; then
wantthird="no"
fi
done
echo ""
if [ "${wantthird}" = "yes" ]; then
#PHP1_RELEASE_SET is not a bug here :) It's set not to display "no" as an option, because the previous question already asks if anyone would like to have a 2nd version of PHP
QUESTION_SET="`echo ${PHP1_RELEASE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select additional PHP version you would like to use (${QUESTION_SET}):"
read option_answer
option_set_valid php3_release ${option_answer}
done
QUESTION_SET="`echo ${PHP3_MODE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select additional PHP mode you would like to use (${QUESTION_SET}, default: ${PHP1_MODE_DEF}):"
read option_answer
option_set_valid php3_mode "${option_answer}" "${PHP1_MODE_DEF}"
done
echo -n "Would you like to have a fourth instance of PHP installed? (yes/no, default: no): "
read wantfourth
until [ "${wantfourth}" = "yes" ] || [ "${wantfourth}" = "no" ] || [ -z "${wantfourth}" ]; do
echo -n "Please enter 'yes' or 'no': "
read wantfourth
if [ -z "${wantfourth}" ]; then
wantfourth="no"
fi
done
echo ""
if [ "${wantfourth}" = "yes" ]; then
#PHP1_RELEASE_SET is not a bug here :) It's set not to display "no" as an option, because the previous question already asks if anyone would like to have a 2nd version of PHP
QUESTION_SET="`echo ${PHP1_RELEASE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select additional PHP version you would like to use (${QUESTION_SET}):"
read option_answer
option_set_valid php4_release ${option_answer}
done
QUESTION_SET="`echo ${PHP4_MODE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select additional PHP mode you would like to use (${QUESTION_SET}, default: ${PHP1_MODE_DEF}):"
read option_answer
option_set_valid php4_mode "${option_answer}" "${PHP1_MODE_DEF}"
done
fi
fi
fi
if [ "${DEFPHP_ANSWER}" = "mod_php" ]; then
QUESTION_SET="`echo ${MOD_RUID2_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select if you would like to use mod_ruid2 (${QUESTION_SET}, default: ${MOD_RUID2_DEF}):"
read option_answer
option_set_valid mod_ruid2 "${option_answer}" "${MOD_RUID2_DEF}"
done
else
setOpt mod_ruid2 no
fi
QUESTION_SET="`echo ${PHP_IONCUBE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select if you would like to use ionCube (${QUESTION_SET}, default: ${PHP_IONCUBE_DEF}):"
read option_answer
option_set_valid_php ioncube "${option_answer}" "${PHP_IONCUBE_DEF}"
done
QUESTION_SET="`echo ${PHP_OPCACHE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select if you would like to use opCache (${QUESTION_SET}, default: ${PHP_OPCACHE_DEF}):"
read option_answer
option_set_valid_php opcache "${option_answer}" "${PHP_OPCACHE_DEF}"
done
#EOL, not very useful question
#QUESTION_SET="`echo ${PHP_ZEND_SET} | tr ' ' '/'`"
#VALID="no"
#until [ "${VALID}" = "yes" ]; do
# echo -n "Please select if you would like to use Zend Guard Loader (${QUESTION_SET}, default: ${PHP_ZEND_DEF}):"
# read option_answer
# option_set_valid_php zend "${option_answer}" "${PHP_ZEND_DEF}"
#done
QUESTION_SET="`echo ${PHP_ZEND_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select if you would like to use Zend Guard Loader (${QUESTION_SET}, default: ${PHP_ZEND_DEF}):"
read option_answer
option_set_valid_php zend "${option_answer}" "${PHP_ZEND_DEF}"
done
QUESTION_SET="`echo ${EXIM_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select if you would like CustomBuild to manage Exim installation (${QUESTION_SET}, default: ${EXIM_DEF}):"
read option_answer
option_set_valid exim "${option_answer}" "${EXIM_DEF}"
done
QUESTION_SET="`echo ${DOVECOT_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select if you would like CustomBuild to manage Dovecot installation (${QUESTION_SET}, default: ${DOVECOT_DEF}):"
read option_answer
option_set_valid dovecot "${option_answer}" "${DOVECOT_DEF}"
done
QUESTION_SET="`echo ${PHPMYADMIN_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select if you would like CustomBuild to manage phpMyAdmin installation (${QUESTION_SET}, default: ${PHPMYADMIN_DEF}):"
read option_answer
option_set_valid phpmyadmin "${option_answer}" "${PHPMYADMIN_DEF}"
done
QUESTION_SET="`echo ${SQUIRRELMAIL_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select if you would like CustomBuild to manage SquirrelMail installation (${QUESTION_SET}, default: ${SQUIRRELMAIL_DEF}):"
read option_answer
option_set_valid squirrelmail "${option_answer}" "${SQUIRRELMAIL_DEF}"
done
QUESTION_SET="`echo ${ROUNDCUBE_SET} | tr ' ' '/'`"
VALID="no"
until [ "${VALID}" = "yes" ]; do
echo -n "Please select if you would like CustomBuild to manage RoundCube installation (${QUESTION_SET}, default: ${ROUNDCUBE_DEF}):"
read option_answer
option_set_valid roundcube "${option_answer}" "${ROUNDCUBE_DEF}"
done
fi
}
####################################################
used_configs() {
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "Apache configuration file: ${WORKDIR}/${APACHE2_CONFIGURE}"
fi
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
echo "Nginx configuration file: ${WORKDIR}/${NGINX_CONFIGURE}"
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "Nginx (reverse proxy) configuration file: ${WORKDIR}/${NGINX_CONFIGURE}"
fi
PHP_INI_VAR=PHP_INI_FPM${PHP1_SHORTRELEASE}
echo "PHP (default) php.ini file: $(eval_var ${PHP_INI_VAR})"
if [ "${PHP2_MODE_OPT}" != "mod_php" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
PHP_INI_VAR=PHP_INI_FPM${PHP2_SHORTRELEASE}
echo "PHP (additional) php.ini file: $(eval_var ${PHP_INI_VAR})"
fi
if [ "${PHP3_MODE_OPT}" != "mod_php" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
PHP_INI_VAR=PHP_INI_FPM${PHP3_SHORTRELEASE}
echo "PHP (additional, 3rd) php.ini file: $(eval_var ${PHP_INI_VAR})"
fi
if [ "${PHP4_MODE_OPT}" != "mod_php" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
PHP_INI_VAR=PHP_INI_FPM${PHP4_SHORTRELEASE}
echo "PHP (additional, 4th) php.ini file: $(eval_var ${PHP_INI_VAR})"
fi
if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then
CONFIGURE_FILE_VAR=PHP${PHP1_SHORTRELEASE}_CONFIGURE
echo "PHP (default) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
CONFIGURE_FILE_VAR=PHP${PHP1_SHORTRELEASE}_CONFIGURE_FPM
echo "PHP (default) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP1_MODE_OPT}" = "suphp" ] || [ "${PHP2_MODE_OPT}" = "suphp" ]; then
echo "suPHP configuration file: ${WORKDIR}/${SUPHP_CONFIGURE}"
fi
if [ "${PHP1_MODE_OPT}" = "suphp" ]; then
echo "suPHP configuration file: ${WORKDIR}/${SUPHP_CONFIGURE}"
CONFIGURE_FILE_VAR=PHP${PHP1_SHORTRELEASE}_CONFIGURE_SUPHP
echo "PHP (default) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP1_MODE_OPT}" = "fastcgi" ]; then
CONFIGURE_FILE_VAR=PHP${PHP1_SHORTRELEASE}_CONFIGURE_FCGI
echo "PHP (default) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then
CONFIGURE_FILE_VAR=PHP${PHP1_SHORTRELEASE}_CONFIGURE_LSPHP
echo "PHP (default) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP2_MODE_OPT}" = "lsphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP2_SHORTRELEASE}_CONFIGURE_LSPHP
echo "PHP (additional) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP2_MODE_OPT}" = "suphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP2_SHORTRELEASE}_CONFIGURE_SUPHP
echo "PHP (additional) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP2_MODE_OPT}" = "fastcgi" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP2_SHORTRELEASE}_CONFIGURE_FCGI
echo "PHP (additional) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP2_MODE_OPT}" = "mod_php" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP2_SHORTRELEASE}_CONFIGURE
echo "PHP (additional) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP2_MODE_OPT}" = "php-fpm" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP2_SHORTRELEASE}_CONFIGURE_FPM
echo "PHP (additional) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP3_MODE_OPT}" = "lsphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP3_SHORTRELEASE}_CONFIGURE_LSPHP
echo "PHP (additional, 3rd) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP3_MODE_OPT}" = "suphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP3_SHORTRELEASE}_CONFIGURE_SUPHP
echo "PHP (additional, 3rd) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP3_MODE_OPT}" = "fastcgi" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP3_SHORTRELEASE}_CONFIGURE_FCGI
echo "PHP (additional, 3rd) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP3_MODE_OPT}" = "mod_php" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP3_SHORTRELEASE}_CONFIGURE
echo "PHP (additional, 3rd) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP3_MODE_OPT}" = "php-fpm" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP3_SHORTRELEASE}_CONFIGURE_FPM
echo "PHP (additional, 3rd) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP4_MODE_OPT}" = "lsphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP4_SHORTRELEASE}_CONFIGURE_LSPHP
echo "PHP (additional, 4th) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP4_MODE_OPT}" = "suphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP4_SHORTRELEASE}_CONFIGURE_SUPHP
echo "PHP (additional, 4th) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP4_MODE_OPT}" = "fastcgi" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP4_SHORTRELEASE}_CONFIGURE_FCGI
echo "PHP (additional, 4th) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP4_MODE_OPT}" = "mod_php" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP4_SHORTRELEASE}_CONFIGURE
echo "PHP (additional, 4th) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${PHP4_MODE_OPT}" = "php-fpm" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
CONFIGURE_FILE_VAR=PHP${PHP4_SHORTRELEASE}_CONFIGURE_FPM
echo "PHP (additional, 4th) configuration file: ${WORKDIR}/$(eval_var ${CONFIGURE_FILE_VAR})"
fi
if [ "${FTPD_OPT}" = "proftpd" ]; then
echo "ProFTPD configuration file: ${WORKDIR}/${PROFTPD_CONFIGURE}"
fi
if [ "${FTPD_OPT}" = "pureftpd" ]; then
echo "PureFTPD configuration file: ${WORKDIR}/${PUREFTPD_CONFIGURE}"
fi
if [ "${IMAGICK_OPT}" = "yes" ]; then
echo "ImageMagick configuration file: ${WORKDIR}/${IMAGEMAGICK_CONFIGURE}"
fi
if [ "${EXIM_OPT}" = "yes" ]; then
echo -n "Exim Makefile: "
if [ "${EXIM_MAKEFILE}" != "" ]; then
echo "${EXIM_MAKEFILE}"
else
echo "${WEBPATH}/Makefile"
fi
fi
if [ "${DOVECOT_OPT}" = "yes" ]; then
echo "Dovecot configuration file: ${WORKDIR}/${DOVECOT_CONFIGURE}"
fi
if [ -d ${PMA_THEMES} ]; then
if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
echo "phpMyAdmin themes directory: ${PMA_THEMES}"
fi
fi
if [ -e ${PMA_MAIN_CONFIG} ]; then
if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
echo "phpMyAdmin configuration file: ${PMA_MAIN_CONFIG}"
fi
fi
if [ -e ${PMA_HTACCESS} ]; then
if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
echo "phpMyAdmin .htaccess file: ${PMA_HTACCESS}"
fi
fi
if [ -e ${PMA_USER_INI} ]; then
if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
echo "phpMyAdmin .user.ini file: ${PMA_USER_INI}"
fi
fi
if [ -e ${SQUIRREL_CONFIG} ]; then
if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then
echo "SquirrelMail configuration file: ${SQUIRREL_CONFIG}"
fi
fi
if [ -e ${ROUNDCUBE_CONFIG} ]; then
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
echo "RoundCube webmail configuration file: ${ROUNDCUBE_CONFIG}"
fi
fi
if [ -e ${ROUNDCUBE_CONFIG_DB} ]; then
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
echo "RoundCube webmail database configuration file: ${ROUNDCUBE_CONFIG_DB}"
fi
fi
if [ -e ${ROUNDCUBE_HTACCESS} ]; then
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
echo "RoundCube .htaccess file: ${ROUNDCUBE_HTACCESS}"
fi
fi
if [ -e ${ROUNDCUBE_COMPOSER} ]; then
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
echo "RoundCube composer.json file: ${ROUNDCUBE_COMPOSER}"
fi
fi
if [ -d ${ROUNDCUBE_PLUGINS} ]; then
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
echo "RoundCube webmail plugins overwrite directory: ${ROUNDCUBE_PLUGINS}"
fi
fi
if [ -d ${ROUNDCUBE_SKINS} ]; then
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
echo "RoundCube webmail skins overwrite directory: ${ROUNDCUBE_SKINS}"
fi
fi
if [ -d ${ROUNDCUBE_VENDOR} ]; then
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
echo "RoundCube webmail vendor overwrite directory: ${ROUNDCUBE_VENDOR}"
fi
fi
if [ -d ${ROUNDCUBE_PROGRAM} ]; then
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
echo "RoundCube webmail program overwrite directory: ${ROUNDCUBE_PROGRAM}"
fi
fi
}
####################################################
init_customize_write() {
PLUGIN_PATH=/usr/local/directadmin/plugins/custombuild/configure
CUSTOMIZE_AP2_WRITE=${PLUGIN_PATH}/ap2/configure.apache
CUSTOMIZE_NGINX_WRITE=${PLUGIN_PATH}/nginx/configure.nginx
CUSTOMIZE_NGINX_REVERSE_WRITE=${PLUGIN_PATH}/nginx_reverse/configure.nginx
CUSTOMIZE_PROFTPD_WRITE=${PLUGIN_PATH}/proftpd/configure.proftpd
CUSTOMIZE_PUREFTPD_WRITE=${PLUGIN_PATH}/pureftpd/configure.pureftpd
CUSTOMIZE_CLAMAV_WRITE=${PLUGIN_PATH}/clamav/configure.clamav
CUSTOMIZE_SUPHP_WRITE=${PLUGIN_PATH}/suphp/configure.suphp
CUSTOMIZE_DOVECOT_WRITE=${PLUGIN_PATH}/dovecot/configure.dovecot
}
set_versions() {
if [ "$1" = "show" ]; then
if [ -e ${VERSIONS_FILE} ]; then
if [ -e ${VERSIONS_FILE_LITESPEED} ] && [ -e ${VERSIONS_FILE_CL} ] && [ -e ${VERSIONS_FILE_CWAF} ]; then
cat ${VERSIONS_FILE_LITESPEED} ${VERSIONS_FILE_CL} ${VERSIONS_FILE_CWAF} ${VERSIONS_FILE}
elif [ -e ${VERSIONS_FILE_LITESPEED} ] && [ -e ${VERSIONS_FILE_CL} ] && [ ! -e ${VERSIONS_FILE_CWAF} ]; then
cat ${VERSIONS_FILE_LITESPEED} ${VERSIONS_FILE_CL} ${VERSIONS_FILE}
elif [ ! -e ${VERSIONS_FILE_LITESPEED} ] && [ -e ${VERSIONS_FILE_CL} ] && [ -e ${VERSIONS_FILE_CWAF} ]; then
cat ${VERSIONS_FILE_CL} ${VERSIONS_FILE_CWAF} ${VERSIONS_FILE}
elif [ -e ${VERSIONS_FILE_LITESPEED} ] && [ ! -e ${VERSIONS_FILE_CL} ] && [ -e ${VERSIONS_FILE_CWAF} ]; then
cat ${VERSIONS_FILE_LITESPEED} ${VERSIONS_FILE_CWAF} ${VERSIONS_FILE}
elif [ -e ${VERSIONS_FILE_LITESPEED} ] && [ ! -e ${VERSIONS_FILE_CL} ] && [ ! -e ${VERSIONS_FILE_CWAF} ]; then
cat ${VERSIONS_FILE_LITESPEED} ${VERSIONS_FILE}
elif [ ! -e ${VERSIONS_FILE_LITESPEED} ] && [ ! -e ${VERSIONS_FILE_CL} ] && [ -e ${VERSIONS_FILE_CWAF} ]; then
cat ${VERSIONS_FILE_CWAF} ${VERSIONS_FILE}
elif [ ! -e ${VERSIONS_FILE_LITESPEED} ] && [ -e ${VERSIONS_FILE_CL} ] && [ ! -e ${VERSIONS_FILE_CWAF} ]; then
cat ${VERSIONS_FILE_CL} ${VERSIONS_FILE}
else
cat ${VERSIONS_FILE}
fi
fi
elif [ "$1" = "show_customized" ]; then
if [ -e ${VERSIONS_FILE_CUSTOM} ]; then
cat ${VERSIONS_FILE_CUSTOM}
fi
elif [ "$1" = "remove_customized" ]; then
if [ -e ${VERSIONS_FILE_CUSTOM} ]; then
rm -f ${VERSIONS_FILE_CUSTOM}
fi
else
if [ -e /usr/local/directadmin/plugins/custombuild/configure/versions.txt ]; then
cat /usr/local/directadmin/plugins/custombuild/configure/versions.txt > ${VERSIONS_FILE_CUSTOM}
else
echo "/usr/local/directadmin/plugins/custombuild/configure/versions.txt does not exist."
fi
fi
}
customize_config() {
if [ "${1}" = "" ]; then
do_exit 1 "First argument (component) is needed for the function to work."
fi
init_customize_write
ARGUMENT=$1
if [ "${ARGUMENT}" = "ap2" ]; then
COMPONENT=${ARGUMENT}
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.apache
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${CUSTOMIZE_AP2_WRITE} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ "${ARGUMENT}" = "nginx" ]; then
COMPONENT=${ARGUMENT}
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.nginx
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${CUSTOMIZE_NGINX_WRITE} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ "${ARGUMENT}" = "nginx_reverse" ]; then
COMPONENT=${ARGUMENT}
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.nginx
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${CUSTOMIZE_NGINX_REVERSE_WRITE} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ "${ARGUMENT}" = "proftpd" ]; then
COMPONENT=${ARGUMENT}
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.proftpd
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${CUSTOMIZE_PROFTPD_WRITE} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ "${ARGUMENT}" = "clamav" ]; then
COMPONENT=${ARGUMENT}
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.clamav
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${CUSTOMIZE_CLAMAV_WRITE} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ "${ARGUMENT}" = "pureftpd" ]; then
COMPONENT=${ARGUMENT}
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.pureftpd
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${CUSTOMIZE_PUREFTPD_WRITE} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ "${ARGUMENT}" = "suphp" ]; then
COMPONENT=${ARGUMENT}
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.suphp
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${CUSTOMIZE_SUPHP_WRITE} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ "${ARGUMENT}" = "dovecot" ]; then
COMPONENT=${ARGUMENT}
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.dovecot
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${CUSTOMIZE_DOVECOT_WRITE} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ `echo ${ARGUMENT} | grep -c '^php[0-9][0-9]$'` -eq 1 ]; then
CONF_PATH=${WORKDIR}/custom/php
CONF_FILE=${CONF_PATH}/configure.${ARGUMENT}
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${PLUGIN_PATH}/php/configure.${ARGUMENT} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
}
####################################################
initConfigsJSON() {
NUM_OF_SECTIONS=0
AVAIL_CONFIGS=" "
PLUGIN_PATH=/usr/local/directadmin/plugins/custombuild/configure
PHP_CONFIGURE_ENDING="_CONFIGURE"
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}ap2 "
CUSTOMIZE_AP2_DESC="Apache configuration file"
CUSTOMIZE_AP2_READ="${WORKDIR}/${APACHE2_CONFIGURE}"
fi
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}nginx "
CUSTOMIZE_NGINX_DESC="Nginx configuration file"
CUSTOMIZE_NGINX_READ="${WORKDIR}/${NGINX_CONFIGURE}"
fi
if [ "${WEBSERVER_OPT}" = "nginx_reverse" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}nginx_reverse "
CUSTOMIZE_NGINX_REVERSE_DESC="Nginx (reverse proxy) configuration file"
CUSTOMIZE_NGINX_REVERSE_READ="${WORKDIR}/${NGINX_CONFIGURE}"
fi
if [ "${DOVECOT_OPT}" = "yes" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}dovecot "
CUSTOMIZE_DOVECOT_DESC="Dovecot configuration file"
CUSTOMIZE_DOVECOT_READ="${WORKDIR}/${DOVECOT_CONFIGURE}"
fi
if [ "${FTPD_OPT}" = "proftpd" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}proftpd "
CUSTOMIZE_PROFTPD_DESC="ProFTPd configuration file"
CUSTOMIZE_PROFTPD_READ="${WORKDIR}/${PROFTPD_CONFIGURE}"
elif [ "${FTPD_OPT}" = "pureftpd" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}pureftpd "
CUSTOMIZE_PUREFTPD_DESC="Pure-FTPd configuration file"
CUSTOMIZE_PUREFTPD_READ="${WORKDIR}/${PUREFTPD_CONFIGURE}"
fi
if [ "${IMAGICK}" = "yes" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}imagemagick "
CUSTOMIZE_IMAGEMAGICK_DESC="ImageMagick configuration file"
CUSTOMIZE_IMAGEMAGICK_READ="${WORKDIR}/${IMAGEMAGICK_CONFIGURE}"
fi
if [ "${CLAMAV_OPT}" = "yes" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}clamav "
CUSTOMIZE_CLAMAV_DESC="ClamAV configuration file"
CUSTOMIZE_CLAMAV_READ="${WORKDIR}/${CLAMAV_CONFIGURE}"
fi
#cURL
AVAIL_CONFIGS="${AVAIL_CONFIGS}curl "
CUSTOMIZE_CURL_DESC="cURL configuration file"
CUSTOMIZE_CURL_READ="${WORKDIR}/${CURL_CONFIGURE}"
#PHP1
AVAIL_CONFIGS="${AVAIL_CONFIGS}php${PHP1_SHORTRELEASE} "
eval `echo "CUSTOMIZE_PHP${PHP1_SHORTRELEASE}_DESC=\"PHP ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default) configuration file\""`
READ_VAR="PHP${PHP1_SHORTRELEASE}${PHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_PHP${PHP1_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""`
PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'`
eval `echo "CUSTOMIZE_PHP${PHP1_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
#PHP2
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}php${PHP2_SHORTRELEASE} "
eval `echo "CUSTOMIZE_PHP${PHP2_SHORTRELEASE}_DESC=\"PHP ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP2_SHORTRELEASE}${PHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_PHP${PHP2_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""`
PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'`
eval `echo "CUSTOMIZE_PHP${PHP2_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
fi
#PHP3
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}php${PHP3_SHORTRELEASE} "
eval `echo "CUSTOMIZE_PHP${PHP3_SHORTRELEASE}_DESC=\"PHP ${PHP3_RELEASE_OPT} as ${PHP3_MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP2_SHORTRELEASE}${PHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_PHP${PHP3_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""`
PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'`
eval `echo "CUSTOMIZE_PHP${PHP3_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
fi
#PHP4
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}php${PHP4_SHORTRELEASE} "
eval `echo "CUSTOMIZE_PHP${PHP4_SHORTRELEASE}_DESC=\"PHP ${PHP4_RELEASE_OPT} as ${PHP4_MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP4_SHORTRELEASE}${PHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_PHP${PHP4_SHORTRELEASE}_READ=\"${WORKDIR}/$(eval_var ${READ_VAR})\""`
PLUGIN_WRITE=`echo $(eval_var ${READ_VAR}) | perl -0p -e 's|^custom/||' | perl -0p -e 's|^configure/||'`
eval `echo "CUSTOMIZE_PHP${PHP4_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
fi
}
####################################################
listConfigsJSON() {
initConfigsJSON
init_customize_write
echo "{"
NUM_OF_SECTIONS=`echo ${AVAIL_CONFIGS} | wc -w`
CUR_SECTION=0
for section in ${AVAIL_CONFIGS}; do
CUR_SECTION=`expr ${CUR_SECTION} + 1`
UPPERCASE_SECTION=`echo $section | tr "[a-z]" "[A-Z]"`
SECTION_DESC=CUSTOMIZE_${UPPERCASE_SECTION}_DESC
SECTION_READ=CUSTOMIZE_${UPPERCASE_SECTION}_READ
SECTION_WRITE=CUSTOMIZE_${UPPERCASE_SECTION}_WRITE
FULL_WRITE_PATH="$(eval_var ${SECTION_WRITE})"
DIR_OF_THE_PATH="`dirname ${FULL_WRITE_PATH}`"
if [ ! -d ${DIR_OF_THE_PATH} ]; then
mkdir -p ${DIR_OF_THE_PATH}
fi
printf "\t\"${section}\": {\n"
printf "\t\t\"description\": \"$(eval_var ${SECTION_DESC})\",\n"
printf "\t\t\"read\": \"$(eval_var ${SECTION_READ})\",\n"
printf "\t\t\"write\": \"${FULL_WRITE_PATH}\"\n"
if [ ${CUR_SECTION} -ne ${NUM_OF_SECTIONS} ]; then
printf "\t},\n"
else
printf "\t}\n"
fi
done
echo "}"
if [ "`grep -c cb_plugin /etc/passwd`" = "0" ]; then
chown -R admin:admin /usr/local/directadmin/plugins/custombuild/configure
else
chown -R cb_plugin:cb_plugin /usr/local/directadmin/plugins/custombuild/configure
fi
chmod -R 700 /usr/local/directadmin/plugins/custombuild/configure
}
####################################################
showFile() {
if [ "$1" = "options" ]; then
cat ${WORKDIR}/options.conf
elif [ "$1" = "php_extensions" ]; then
cat ${WORKDIR}/php_extensions.conf
elif [ "$1" = "lockfile" ]; then
if [ -e ${WORKDIR}/.custombuild ]; then
cat ${WORKDIR}/.custombuild
else
echo "0"
fi
fi
}
####################################################
showComponentConfig() {
initConfigsJSON
if [ -z $1 ]; then
echo "Unable to find component config, because of no argument given."
return
fi
UPPERCASE_SECTION=`echo $1 | tr "[a-z]" "[A-Z]"`
SECTION_READ=CUSTOMIZE_${UPPERCASE_SECTION}_READ
cat $(eval_var ${SECTION_READ})
}
####################################################
removeComponentConfig() {
initConfigsJSON
if [ -z $1 ]; then
echo "Unable to find component config, because of no argument given."
return
fi
UPPERCASE_SECTION=`echo $1 | tr "[a-z]" "[A-Z]"`
SECTION_READ=CUSTOMIZE_${UPPERCASE_SECTION}_READ
PATH_TO_THE_FILE="$(eval_var ${SECTION_READ})"
if echo ${PATH_TO_THE_FILE} | grep -q "${WORKDIR}/custom/"; then
rm -f ${PATH_TO_THE_FILE}
else
echo "File ${PATH_TO_THE_FILE} is not a customized configuration file."
fi
}
####################################################
addToAccess() {
if [ -z $1 ]; then
return
fi
# Check for nginx user in access group
if grep -m1 -q "^access" /etc/group; then
if ! grep -m1 "^access" /etc/group | grep -q $1; then
usermod -G access $1
fi
fi
}
####################################################
fpmCheck() {
ARG=$1
CHANGED=0
COUNT=`grep -m1 -c nginx /usr/local/php${ARG}/etc/php-fpm.conf`
CHOWN_USER=${WEBSERVER_OPT}
if [ "${CHOWN_USER}" = "nginx_apache" ]; then
CHOWN_USER=apache
fi
chown ${CHOWN_USER}:${CHOWN_USER} /usr/local/php${ARG}/sockets
FPM_SOCK_CHMOD=710
if [ "${MOD_RUID2_OPT}" = "yes" ]; then
FPM_SOCK_CHMOD=711
fi
chmod ${FPM_SOCK_CHMOD} /usr/local/php${ARG}/sockets
if [ "${WEBSERVER_OPT}" = "nginx" ] && [ "${COUNT}" -eq 0 ]; then
perl -pi -e 's/apache/nginx/' /usr/local/php${ARG}/etc/php-fpm.conf
CHANGED=1
elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${COUNT}" -gt 0 ]; then
perl -pi -e 's/nginx/apache/' /usr/local/php${ARG}/etc/php-fpm.conf
CHANGED=1
fi
fi
if [ -d /usr/local/php${ARG}/sockets ]; then
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
chgrp -R nginx /usr/local/php${ARG}/sockets
elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
chgrp -R apache /usr/local/php${ARG}/sockets
fi
fi
if [ ${CHANGED} -eq 1 ]; then
control_service php-fpm${ARG} restart
fi
}
fpmChecks() {
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
EVAL_CHECK_VAR=HAVE_FPM${php_shortrelease}_CGI
EVAL_COPY_VAR=PHP${php_shortrelease}_FPM_CONF
if [ "$(eval_var ${EVAL_CHECK_VAR})" = "yes" ] && [ -d /usr/local/php${php_shortrelease}/sockets ]; then
cp -f $(eval_var ${EVAL_COPY_VAR}) /usr/local/php${php_shortrelease}/etc/php-fpm.conf
fpmCheck ${php_shortrelease}
fi
done
if [ "${HAVE_FPM_CGI}" = "yes" ]; then
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
perl -pi -e 's/apache/nginx/' /usr/local/directadmin/data/templates/php-fpm.conf
elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
perl -pi -e 's/nginx/apache/' /usr/local/directadmin/data/templates/php-fpm.conf
fi
#update the webapps_settings.conf
#swap "fastcgi_pass unix:/usr/local/php54/sockets/webapps.sock;" if needed
#might be a better way to do this, other checks. Close enough for now.
if [ -e /etc/nginx/webapps_settings.conf ]; then
PHP_REPLACE_STRING="`grep -m1 '^fastcgi_pass unix:/usr/local/php../sockets/webapps.sock;' /etc/nginx/webapps_settings.conf | cut -d/ -f4`"
if [ "${PHP_REPLACE_STRING}" = "" ]; then
PHP_REPLACE_STRING=php54
fi
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
perl -pi -e "s#${PHP_REPLACE_STRING}#php${PHP1_SHORTRELEASE}#" /etc/nginx/webapps_settings.conf
fi
fi
if [ -e /etc/nginx/nginx-vhosts.conf ]; then
PHP_REPLACE_STRING="`grep -m1 '^fastcgi_pass unix:/usr/local/php../sockets/webapps.sock;' /etc/nginx/nginx-vhosts.conf | cut -d/ -f4`"
if [ "${PHP_REPLACE_STRING}" = "" ]; then
PHP_REPLACE_STRING=php54
fi
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
perl -pi -e "s#${PHP_REPLACE_STRING}#php${PHP1_SHORTRELEASE}#" /etc/nginx/nginx-vhosts.conf
fi
fi
if [ -e /etc/nginx/nginx-userdir.conf ]; then
PHP_REPLACE_STRING="`grep -m1 '^fastcgi_pass unix:/usr/local/php../sockets/webapps.sock;' /etc/nginx/nginx-userdir.conf | cut -d/ -f4`"
if [ "${PHP_REPLACE_STRING}" = "" ]; then
PHP_REPLACE_STRING=php54
fi
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
perl -pi -e "s#${PHP_REPLACE_STRING}#php${PHP1_SHORTRELEASE}#" /etc/nginx/nginx-userdir.conf
fi
fi
fi
}
dovecotChecks() {
if [ -e ${DOVECOT_CONFIG} ]; then
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
if grep -m1 -q '/etc/httpd/conf/' ${DOVECOT_CONFIG}; then
perl -pi -e 's#/etc/httpd/conf/#/etc/nginx/#' ${DOVECOT_CONFIG}
control_service dovecot restart
elif grep -m1 -q '/usr/local/lsws/conf/' ${DOVECOT_CONFIG}; then
perl -pi -e 's#/usr/local/lsws/conf/#/etc/nginx/#' ${DOVECOT_CONFIG}
control_service dovecot restart
fi
elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
if grep -m1 -q '/etc/httpd/conf/' ${DOVECOT_CONFIG}; then
perl -pi -e 's#/etc/httpd/conf/#/usr/local/lsws/conf/#' ${DOVECOT_CONFIG}
control_service dovecot restart
elif grep -m1 -q '/etc/nginx/' ${DOVECOT_CONFIG}; then
perl -pi -e 's#/etc/nginx/#/usr/local/lsws/conf/#' ${DOVECOT_CONFIG}
control_service dovecot restart
fi
elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if grep -m1 -q '/etc/nginx/' ${DOVECOT_CONFIG}; then
perl -pi -e 's#/etc/nginx/#/etc/httpd/conf/#' ${DOVECOT_CONFIG}
control_service dovecot restart
elif grep -m1 -q '/usr/local/lsws/conf/' ${DOVECOT_CONFIG}; then
perl -pi -e 's#/usr/local/lsws/conf/#/etc/httpd/conf/#' ${DOVECOT_CONFIG}
control_service dovecot restart
fi
fi
fi
}
####################################################
SKIP_WEBAPPS_SECTION=0
skip_webapps_toggle() {
SKIP_WEBAPPS_SECTION=1
}
case "$1" in
"") skip_webapps_toggle ;;
opt_help) skip_webapps_toggle ;;
set) skip_webapps_toggle ;;
set_php) skip_webapps_toggle ;;
get_versions_txt) skip_webapps_toggle ;;
update_script) skip_webapps_toggle ;;
version) skip_webapps_toggle ;;
set_fastest) skip_webapps_toggle ;;
set_fastest_quiet) skip_webapps_toggle ;;
kill) skip_webapps_toggle ;;
update_da) skip_webapps_toggle ;;
list_configs_json) skip_webapps_toggle ;;
settings_json) skip_webapps_toggle ;;
get_timezone) skip_webapps_toggle ;;
custom_config) skip_webapps_toggle ;;
set_versions_txt) skip_webapps_toggle ;;
show_component_config) skip_webapps_toggle ;;
remove_customized_config) skip_webapps_toggle ;;
show_file) skip_webapps_toggle ;;
check_options) skip_webapps_toggle ;;
update) skip_webapps_toggle ;;
update_data) skip_webapps_toggle ;;
gen_help_json) skip_webapps_toggle ;;
versions_json) skip_webapps_toggle ;;
versions_ajax) skip_webapps_toggle ;;
versions_nobold) skip_webapps_toggle ;;
versions) skip_webapps_toggle ;;
gen_help) skip_webapps_toggle ;;
list_removals) skip_webapps_toggle ;;
list_removals_json) skip_webapps_toggle ;;
remove_items) skip_webapps_toggle ;;
esac
if [ "${SKIP_WEBAPPS_SECTION}" = "0" ]; then
# Check for webapps user
if [ `grep -c -m1 -e "^${APPUSER}:" /etc/passwd` = "0" ]; then
if [ -e /etc/debian_version ]; then
/usr/sbin/adduser --system --group --firstuid 100 --home ${WWWDIR} --no-create-home --disabled-login --force-badname ${APPUSER}
else
/usr/sbin/useradd -d ${WWWDIR} -s /bin/false ${APPUSER} 2> /dev/null
fi
fi
####################################################
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
# Do we have httpd-phpmodules.conf line?
NEWCONFIGS=1
if [ -e ${HTTPD_CONF} ]; then
if [ "`grep -m1 -c -e '/etc/httpd/conf/extra/httpd-phpmodules.conf' ${HTTPD_CONF}`" = "0" ]; then
NEWCONFIGS=0
fi
fi
fi
fi
####################################################
logrotate_ver() {
LOGROTATE_BIN=/usr/sbin/logrotate
if [ ! -x ${LOGROTATE_BIN} ]; then
echo "0.0.0"
fi
${LOGROTATE_BIN} -v 2>&1 | head -n1 | cut -d\ -f2
}
ensure_webapps_logrotate() {
cd ${CWD}
WL=/etc/logrotate.d/webapps
if [ ! -s ${WL} ]; then
getFile webapps.logrotate webapps_logrotate
CWL=${CWD}/webapps.logrotate
if [ ! -s ${CWL} ]; then
echo "Download of $CWL failed"
return
fi
cp -f ${CWL} ${WL}
chmod 644 ${WL}
fi
if grep -q 'su apache webapps' ${WL}; then
perl -pi -e 's/su apache webapps/su webapps webapps/' ${WL}
fi
if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${MOD_RUID2_OPT}" = "no" ]; then
#new logrotate and php as 'apache' shoud use su apache apache.
perl -pi -e 's/su webapps webapps/su apache apache/' ${WL}
else
#backup in case mod_php was used before
perl -pi -e 's/su apache apache/su webapps webapps/' ${WL}
fi
#this should comment out the su regardless of the php type. eg: breaks logrotate if su is present for old logrotate and php-fpm
LR_V=`logrotate_ver`
if [ "`version_cmp ${LR_V} 3.8.0 'logrotate version check'`" -ge 0 ]; then
perl -pi -e 's/#su /su /' ${WL}
else
perl -pi -e 's/\tsu /\t#su /' ${WL}
fi
}
####################################################
ensure_webapps_php_ini() {
WEBAPPS_INI=/usr/local/php${PHP1_SHORTRELEASE}/lib/php.conf.d/50-webapps.ini
mkdir -p /usr/local/php${PHP1_SHORTRELEASE}/lib/php.conf.d
if [ -e ${PHP_CUSTOM_PHP_CONF_D_INI_PATH}/50-webapps.ini ]; then
echo "Using custom ${PHP_CUSTOM_PHP_CONF_D_INI_PATH}/50-webapps.ini for ${WEBAPPS_INI}"
cp -f ${PHP_CUSTOM_PHP_CONF_D_INI_PATH}/50-webapps.ini ${WEBAPPS_INI}
else
echo "[PATH=${WWWDIR}]" > ${WEBAPPS_INI}
echo "session.save_path=${APP_TMP}" >> ${WEBAPPS_INI}
echo "upload_tmp_dir=${APP_TMP}" >> ${WEBAPPS_INI}
echo "disable_functions=exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname" >> ${WEBAPPS_INI}
fi
}
ensure_webapps_tmp() {
if [ ! -d ${APP_TMP} ]; then
mkdir -p ${APP_TMP}
fi
chmod 770 ${APP_TMP}
chown ${APPUSER}:${APPGROUP} ${APP_TMP}
ensure_webapps_php_ini
}
####################################################
dophpMyAdmin() {
if [ "${PHPMYADMIN_OPT}" != "yes" ]; then
do_exit 1 "You cannot install phpMyAdmin, because you do not have it set in options.conf file."
fi
if [ "`version_cmp ${PHPMYADMIN_VER} 4.7.0 'pma ver check for PHPMYADMIN_REMOTE_PATCH'`" -ge 0 ]; then
PHPMYADMIN_REMOTE_PATCH=pma_auth_logging-4.7.patch
fi
ensure_webapps_logrotate
cd ${CWD}
if [ ! -d ${WWWDIR} ]; then
echo "${WWWDIR} does not exist."
do_exit 0
fi
initMySQL
PMA_45_PHP_55_DROP=4.4.15-all-languages
PMA_52_PHP_71_DROP=5.1.3-all-languages
if [ ! -s "$MYSQL_BIN" ]; then
echo "${boldon}phpMyAdmin requires mysqld. Cannot find $MYSQL_BIN${boldoff}"
return
fi
if [ "`version_cmp ${PHPMYADMIN_VER} 4.5.0 'pma4.5 ver check'`" -ge 0 ]; then
#also requires mYSQL 5.5, but the above check handles that, and would have already lowered the PMA_V.
if [ "`version_cmp ${PHP1_RELEASE_OPT} 5.5 'pma4.5 php check'`" -lt 0 ]; then
echo "${boldon}phpMyAdmin ${PHPMYADMIN_VER} requires PHP 5.5+, but ${PHP1_RELEASE_OPT} is installed${boldoff}"
echo "${boldon}Dropping phpMyAdmin version down to ${PMA_45_PHP_55_DROP}${boldoff}"
PHPMYADMIN_VER=${PMA_45_PHP_55_DROP}
PHPMYADMIN_VER_OPT=old
PHPMYADMIN_REMOTE_PATCH=pma_auth_logging.patch
fi
fi
if [ "`version_cmp ${PHPMYADMIN_VER} 5.2.0 'pma5.2 ver check'`" -ge 0 ]; then
#also requires mYSQL 5.5, but the above check handles that, and would have already lowered the PMA_V.
if [ "`version_cmp ${PHP1_RELEASE_OPT} 7.2 'pma5.2 php check'`" -lt 0 ]; then
echo "${boldon}phpMyAdmin ${PHPMYADMIN_VER} requires PHP 7.2+, but ${PHP1_RELEASE_OPT} is installed${boldoff}"
echo "${boldon}Dropping phpMyAdmin version down to ${PMA_52_PHP_71_DROP}${boldoff}"
PHPMYADMIN_VER=${PMA_52_PHP_71_DROP}
PHPMYADMIN_VER_OPT=old
PHPMYADMIN_REMOTE_PATCH=pma_auth_logging.patch
fi
fi
if [ "`version_cmp ${PHPMYADMIN_VER} 5.0.0 'pma5.0 ver check'`" -ge 0 ]; then
#also requires mYSQL 5.5, but the above check handles that, and would have already lowered the PMA_V.
if [ "`version_cmp ${PHP1_RELEASE_OPT} 7.1 'pma5.0 php check'`" -lt 0 ]; then
echo "${boldon}phpMyAdmin ${PHPMYADMIN_VER} requires PHP 7.1+, but ${PHP1_RELEASE_OPT} is installed${boldoff}"
PHPMYADMIN_VER=`getVer phpmyadmin4`
echo "${boldon}Dropping phpMyAdmin version down to ${PHPMYADMIN_VER}${boldoff}"
PHPMYADMIN_VER_OPT=old
PHPMYADMIN_REMOTE_PATCH=pma_auth_logging.patch
fi
fi
TARFILE=${WORKDIR}/phpMyAdmin-${PHPMYADMIN_VER}.tar.gz
REALPATH=${WWWDIR}/phpMyAdmin-${PHPMYADMIN_VER}
ALIASPATH=${WWWDIR}/phpMyAdmin
CONFIG=${REALPATH}/config.inc.php
WEBFILE=${WEBPATH_SERVICES}/all/phpMyAdmin/phpMyAdmin-${PHPMYADMIN_VER}.tar.gz
PMA_NAME="phpmyadmin${PHPMYADMIN_VER_OPT}"
getFile phpMyAdmin/phpMyAdmin-${PHPMYADMIN_VER}.tar.gz ${PMA_NAME} phpMyAdmin-${PHPMYADMIN_VER}.tar.gz
if [ ! -s ${TARFILE} ]; then
echo "The phpMyAdmin package cannot be found. Please ensure that the paths are correct"
do_exit 0
fi
tar xzf ${TARFILE} --no-same-owner -C ${WWWDIR}
PHPMYADMIN_AUTOLOGIN=0
#SSO plugin
if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then
if ${DA_BIN} c | grep -m1 -q '^one_click_pma_login=1$'; then
PMA_DIRECT_LOGIN_VER=`getVer pma_direct_login`
PMA_DIRECT_LOGIN="phpMyAdmin_direct_login-${PMA_DIRECT_LOGIN_VER}.tar.gz"
cd ${REALPATH}
safeDownloadWithMove "${REALPATH}/${PMA_DIRECT_LOGIN}" "${WEBPATH_SERVICES}/all/auto_login/phpMyAdmin/${PMA_DIRECT_LOGIN}"
tar xzf ${PMA_DIRECT_LOGIN}
chown -R webapps:webapps direct_login
chmod 711 direct_login
chmod 700 direct_login/tokens
if [ "${MYSQLHOST}" != "localhost" ]; then
perl -pi -e "s#host = 'localhost'#host = '${MYSQLHOST}'#" direct_login/index.php
fi
cd ${CWD}
PHPMYADMIN_AUTOLOGIN=1
elif [ -d ${REALPATH}/direct_login ]; then
rm -rf ${REALPATH}/direct_login
fi
fi
if [ -s ${PMA_MAIN_CONFIG} ]; then
PMA_CONF_MD5=`/usr/bin/md5sum ${PMA_MAIN_CONFIG} | cut -d\ -f1`
if [ "${PMA_CONF_MD5}" = "1289b44793c91dfa7f6b6512ec94d600" ]; then
echo "Deleting ${PMA_MAIN_CONFIG}";
rm -f ${PMA_MAIN_CONFIG}
fi
fi
if [ "${PMA_CUSTOM_CONFIG}" != "" ] && [ -e ${PMA_CUSTOM_CONFIG} ]; then
echo "Installing custom PhpMyAdmin Config: ${PMA_CUSTOM_CONFIG}"
cp -f ${PMA_CUSTOM_CONFIG} ${REALPATH}/config.inc.php
else
cp -f ${PMA_MAIN_CONFIG} ${REALPATH}/config.inc.php
BLOWFISH_SECRET="`tr -cd 'a-zA-Z0-9' < /dev/urandom 2>/dev/null | head -c32`"
perl -pi -e "s|^\\\$cfg\['blowfish_secret'\] \= ''|\\\$cfg['blowfish_secret'] = '${BLOWFISH_SECRET}'|g" ${REALPATH}/config.inc.php
if [ "${PHPMYADMIN_AUTOLOGIN}" = "0" ]; then
perl -pi -e "s#\['auth_type'\] = 'cookie'#\['auth_type'\] = 'http'#" ${REALPATH}/config.inc.php
else
if [ "${PHPMYADMIN_PUBLIC_OPT}" = "no" ]; then
if [ "${PHP1_RELEASE_OPT}" = "5.3" ]; then
APPEND=""
else
APPEND="http_response_code\(403\)\;\n\t"
fi
perl -pi -e "s#\\\$cfg\['Servers'\]\[\\\$i\]\['auth_type'\] = 'cookie'#${APPEND}die(\"Access to phpMyAdmin is only allowed from control panel.\"\)#" ${REALPATH}/config.inc.php
fi
fi
perl -pi -e "s#\['extension'\] = 'mysql'#\['extension'\] = 'mysqli'#" ${REALPATH}/config.inc.php
fi
perl -pi -e "s#\['host'\] = 'localhost'#\['host'\] = '${MYSQLHOST}'#" ${REALPATH}/config.inc.php
perl -pi -e "s#\['host'\] = ''#\['host'\] = '${MYSQLHOST}'#" ${REALPATH}/config.inc.php
if [ "`version_cmp ${PHPMYADMIN_VER} 4.8.0 'pma4.8 ver check'`" -ge 0 ]; then
C=`grep -c AuthLog ${REALPATH}/config.inc.php`
if [ "${C}" = "0" ]; then
#add AuthLog to the config.
echo "Adding AuthLog to ${REALPATH}/config.inc.php"
echo "\$cfg['AuthLog'] = '/var/www/html/phpMyAdmin/log/auth.log';" >> ${REALPATH}/config.inc.php
fi
#and check the brute_filter.list for phpmyadmin3. pma4 comes with DA 1.53.1, so no need to add it.
BFL=/usr/local/directadmin/data/templates/brute_filter.list
C=`grep -c ^phpmyadmin3= ${BFL}`
if [ "${C}" = "0" ]; then
echo "Adding phpmyadmin3 to ${BFL}"
echo "phpmyadmin3=ip_after=%20from%20'&ip_until='&text=phpmyadmin:%20user%20denied:%20&user_after=user%20denied:%20'&user_until='%20(mysql-denied)" >> ${BFL}
fi
if ! grep -m1 -q 'PmaNoRelation_DisableWarning' ${REALPATH}/config.inc.php; then
#add PmaNoRelation_DisableWarning to the config.
echo "Adding PmaNoRelation_DisableWarning to ${REALPATH}/config.inc.php"
echo "\$cfg['PmaNoRelation_DisableWarning'] = true;" >> ${REALPATH}/config.inc.php
fi
fi
if [ -e ${PMA_HTACCESS} ]; then
echo "Installing custom PhpMyAdmin .htaccess: ${PMA_HTACCESS}"
cp -f ${PMA_HTACCESS} ${REALPATH}/.htaccess
fi
if [ -e ${PMA_USER_INI} ]; then
echo "Installing custom PhpMyAdmin .user.ini: ${PMA_USER_INI}"
cp -f ${PMA_USER_INI} ${REALPATH}/.user.ini
fi
if [ -d ${PMA_THEMES} ]; then
echo "Installing custom PhpMyAdmin themes: ${PMA_THEMES}"
cp -Rf ${PMA_THEMES} ${REALPATH}
fi
rm -f ${ALIASPATH} >/dev/null 2>&1
ln -s ${REALPATH} ${ALIASPATH}
if [ ! -d ${REALPATH}/log ]; then
mkdir -p ${REALPATH}/log
fi
chown -f -R ${APPUSER}:${APPUSER} ${REALPATH}
chown -h ${APPUSER}:${APPUSER} ${ALIASPATH}
chmod -f 755 ${REALPATH}
if [ -d ${REALPATH}/log ]; then
chmod 710 ${REALPATH}/log
fi
if [ -d ${REALPATH}/scripts ]; then
chmod 000 ${REALPATH}/scripts
fi
if [ -d ${REALPATH}/setup ]; then
chmod 000 ${REALPATH}/setup
fi
#secure configuration file
if [ -s ${REALPATH}/config.inc.php ]; then
chmod 440 ${REALPATH}/config.inc.php
chown ${APPUSER}:${APPGROUP} ${REALPATH}/config.inc.php
fi
if [ "`version_cmp ${PHPMYADMIN_VER} 4.9.3 'pma9.3 ver check'`" -lt 0 ]; then
getFile patches/${PHPMYADMIN_REMOTE_PATCH} ${PHPMYADMIN_REMOTE_PATCH} patches/${PHPMYADMIN_REMOTE_PATCH} hexan
if [ -e patches/${PHPMYADMIN_REMOTE_PATCH} ]; then
echo "Patching phpMyAdmin to log failed authentications for BFM..."
cd ${REALPATH}
patch -p0 < ${WORKDIR}/patches/${PHPMYADMIN_REMOTE_PATCH}
fi
fi
PMAHTA=${REALPATH}/log/.htaccess
if [ ! -s ${PMAHTA} ]; then
echo '<ifModule mod_authz_core.c>' > ${PMAHTA}
echo ' Require all denied' >> ${PMAHTA}
echo '</ifModule>' >> ${PMAHTA}
echo '<ifModule !mod_authz_core.c>' >> ${PMAHTA}
echo ' Deny from all' >> ${PMAHTA}
echo '</ifModule>' >> ${PMAHTA}
fi
if [ -d ${REALPATH}/log ]; then
if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${MOD_RUID2_OPT}" = "no" ]; then
chown -R apache:apache ${REALPATH}/log
fi
fi
ensure_webapps_tmp
echo "phpMyAdmin ${PHPMYADMIN_VER} installation is done."
writeLog "dophpMyAdmin: installed version ${PHPMYADMIN_VER}"
cd ${CWD}
}
####################################################
doRemovephpMyAdmin() {
if [ "${PHPMYADMIN_OPT}" != "no" ]; then
do_exit 1 "Cannot remove phpMyAdmin, because it is enabled in options.conf file."
fi
remove_file /var/www/html/phpmyadmin
remove_file /var/www/html/phpMyAdmin
echo "Removing all phpMyAdmin directories from /var/www/html..."
find /var/www/html -maxdepth 1 -name 'phpMyAdmin-*' -print -exec rm -rf {} \;
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "phpMyAdmin has been successfully removed."
writeLog "doRemovephpMyAdmin: phpMyAdmin removed"
}
####################################################
doSquirrelmail() {
if [ "${SQUIRRELMAIL_OPT}" != "yes" ]; then
do_exit 1 "You cannot install Squirrelmail, because you do not have it set in options.conf file."
fi
ensure_webapps_logrotate
cd ${CWD}
if [ ! -d ${WWWDIR} ]; then
echo "${WWWDIR} does not exist."
do_exit 0
fi
TARFILE=${WORKDIR}/squirrelmail-${SQUIRRELMAIL_VER}.tar.gz
LOCALEFILE=${WORKDIR}/all_locales-${SQUIRRELMAIL_LOCALE_VER}.tar.gz
LOGGERFILE=${WORKDIR}/squirrel_logger-${SQUIRRELMAIL_LOGGER_VER}.tar.gz
REALPATH=${WWWDIR}/squirrelmail-${SQUIRRELMAIL_VER}
ALIASPATH=${WWWDIR}/squirrelmail
CONFIG=${REALPATH}/config/config.php
if [ ! -s ${TARFILE} ]; then
safeDownloadWithMove "${TARFILE}" "${WEBPATH_SERVICES}/all/squirrelmail-${SQUIRRELMAIL_VER}.tar.gz"
fi
if [ ! -s ${TARFILE} ]; then
echo "The squirrelmail package cannot be found. Please ensure that the paths are correct"
do_exit 0
fi
if [ ! -s ${LOCALEFILE} ]; then
safeDownloadWithMove "${LOCALEFILE}" "${WEBPATH_SERVICES}/all/squirrelmail/locales/all_locales-${SQUIRRELMAIL_LOCALE_VER}.tar.gz"
fi
if [ ! -s ${LOGGERFILE} ]; then
safeDownloadWithMove "${LOGGERFILE}" "${WEBPATH_SERVICES}/all/squirrelmail/squirrel_logger/squirrel_logger-${SQUIRRELMAIL_LOGGER_VER}.tar.gz"
fi
#Extract the file
tar xzf ${TARFILE} --no-same-owner -C ${WWWDIR}
#install locales
tar xzf ${LOCALEFILE} --no-same-owner -C ${REALPATH}
#install logger
tar xzf ${LOGGERFILE} --no-same-owner -C ${REALPATH}/plugins
#this bit is to copy all of the preious setup to the new setup
if [ -e ${ALIASPATH} ]; then
cp -fR ${ALIASPATH}/data ${REALPATH}
fi
#link it from a fake path:
/bin/rm -f ${ALIASPATH}
/bin/ln -sf squirrelmail-${SQUIRRELMAIL_VER} ${ALIASPATH}
chown -h ${APPUSER}:${APPUSER} ${ALIASPATH}
if [ -d ${REALPATH}/plugins/squirrel_logger ]; then
if [ ! -e ${REALPATH}/plugins/squirrel_logger/config.php ] && [ -e ${REALPATH}/plugins/squirrel_logger/config_example.php ]; then
echo "Setting up SquirrelMail logger configuration file"
cp -fp ${REALPATH}/plugins/squirrel_logger/config_example.php ${REALPATH}/plugins/squirrel_logger/config.php
fi
fi
#install the proper config:
if [ -e ${SQUIRREL_CONFIG} ]; then
echo "Installing custom SquirrelMail Config: ${SQUIRREL_CONFIG}"
/bin/cp -f ${SQUIRREL_CONFIG} ${CONFIG}
else
echo "Setting up SquirrelMail Config"
/bin/cp -f ${REALPATH}/config/config_default.php ${CONFIG}
#IMAP folders
if [ "${WEBAPPS_INBOX_PREFIX_OPT}" = "no" ]; then
/usr/bin/perl -pi -e "s/\$trash_folder = 'INBOX.Trash'/\$trash_folder = 'Trash'/" ${CONFIG}
/usr/bin/perl -pi -e "s/\$sent_folder = 'INBOX.Sent'/\$sent_folder = 'Sent'/" ${CONFIG}
/usr/bin/perl -pi -e "s/\$draft_folder = 'INBOX.Drafts'/\$draft_folder = 'Drafts'/" ${CONFIG}
fi
/usr/bin/perl -pi -e 's/\$force_username_lowercase = false/\$force_username_lowercase = true/' ${CONFIG}
/usr/bin/perl -pi -e "s/\'example.com\';/\\$\_SERVER\[\'HTTP_HOST\'\];\nwhile \(sizeof\(explode\(\'\.\', \\$\domain\)\) \> 2) {\n\t\\$\domain = substr(\\$\domain, strpos\(\\$\domain, \'\.\'\) \+ 1\);\n\}/" ${CONFIG}
/usr/bin/perl -pi -e 's/\$show_contain_subfolders_option = false/\$show_contain_subfolders_option = true/' ${CONFIG}
/usr/bin/perl -pi -e 's/\$allow_thread_sort = false/\$allow_thread_sort = true/' ${CONFIG}
/usr/bin/perl -pi -e 's/\$allow_server_sort = false/\$allow_server_sort = true/' ${CONFIG}
/usr/bin/perl -pi -e 's#/var/local/squirrelmail/data/#/var/www/html/squirrelmail/data/#' ${CONFIG}
/usr/bin/perl -pi -e 's#/var/local/squirrelmail/attach/#/var/www/html/squirrelmail/data/#' ${CONFIG}
#we want it to use port 587 and use smtp auth.
/usr/bin/perl -pi -e 's/\$smtpPort = 25/\$smtpPort = 587/' ${CONFIG}
/usr/bin/perl -pi -e "s#\$smtp_auth_mech = \'none\'#\$smtp_auth_mech = \'login\'#" ${CONFIG}
#enable the plugins
/usr/bin/perl -pi -e "s/Add list of enabled plugins here/Add list of enabled plugins here\n\\$\plugins\[0\] = \'spamcop\';\n\\$\plugins\[1\] = \'filters\';\n\\$\plugins\[2\] = \'squirrel_logger\';\n\\$\plugins\[3\] = \'squirrelspell\';/" ${CONFIG}
fi
/usr/bin/perl -pi -e 's/\$allow_charset_search = true;/\$allow_charset_search = false;/' ${CONFIG}
#set the permissions:
/bin/chmod -R 755 ${REALPATH}
chown -R ${APPUSER}:${APPUSER} ${REALPATH}
/bin/chmod -R 770 ${REALPATH}/data
if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${MOD_RUID2_OPT}" = "no" ]; then
chown -R apache:${APPUSER} ${REALPATH}/data
fi
ensure_webapps_tmp
echo "SquirrelMail ${SQUIRRELMAIL_VER} installation is done."
writeLog "squirrelmail ${SQUIRRELMAIL_VER} installed"
}
####################################################
doRemoveSquirrelmail() {
if [ "${SQUIRRELMAIL_OPT}" != "no" ]; then
do_exit 1 "Cannot remove SquirrelMail webmail, because it is enabled in options.conf file."
fi
remove_file /var/www/html/squirrelmail
echo "Removing all squirrelmail directories from /var/www/html..."
find /var/www/html -maxdepth 1 -name 'squirrelmail-*' -print -exec rm -rf {} \;
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "SquirrelMail has been successfully removed."
writeLog "squirrelmail removed"
}
####################################################
have_sql_user() {
SQL_USER=$1
SQL_HOST=$2
mysql --defaults-extra-file=${DA_MY_CNF} -sse "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '$SQL_USER' AND host = '$SQL_HOST');" --host=${MYSQLHOST} 2>&1
}
ensure_sql_user() {
SQL_USER=$1
SQL_HOST=$2
SQL_PASS=$3
SQL_DB=$4
HAVE_SQL_USER=`have_sql_user "$SQL_USER" "$SQL_HOST"`
MYSQLV=`mysql_main`
echo "Found MySQL version $MYSQLV"
USE_NEW_SET_PASSWORD=1
INDENTIFIED_WITH_STRING="IDENTIFIED"
#for MySQL 8.0, SET PASSWORD doesn't specify PASSWORD()
if [ "${MYSQLV}" = "5.5" ] || [ "${MYSQLV}" = "5.6" ]; then
USE_NEW_SET_PASSWORD=0
INDENTIFIED_WITH_STRING="IDENTIFIED"
elif [ "${MYSQLV}" = "5.7" ]; then
INDENTIFIED_WITH_STRING="IDENTIFIED"
elif [ "`has_mariadb`" = "1" ]; then
if [ "${MYSQLV}" != "10.3" ] && [ "${MYSQLV}" != "10.4" ] && [ "${MYSQLV}" != "10.5" ] && [ "${MYSQLV}" != "10.6" ]; then
USE_NEW_SET_PASSWORD=0
fi
INDENTIFIED_WITH_STRING="IDENTIFIED"
else
INDENTIFIED_WITH_STRING="IDENTIFIED WITH mysql_native_password"
fi
if [ "${HAVE_SQL_USER}" != "1" ]; then
echo "Creating User: CREATE USER '${SQL_USER}'@'${SQL_HOST}' ${INDENTIFIED_WITH_STRING} BY '${SQL_PASS}';"
mysql --defaults-extra-file=${DA_MY_CNF} -e "CREATE USER '${SQL_USER}'@'${SQL_HOST}' ${INDENTIFIED_WITH_STRING} BY '${SQL_PASS}';" --host=${MYSQLHOST} 2>&1
fi
echo "Granting access: GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOCK TABLES,INDEX,REFERENCES ON ${SQL_DB}.* TO '${SQL_USER}'@'${SQL_HOST}';"
mysql --defaults-extra-file=${DA_MY_CNF} -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOCK TABLES,INDEX,REFERENCES ON ${SQL_DB}.* TO '${SQL_USER}'@'${SQL_HOST}';" --host=${MYSQLHOST} 2>&1
if [ "${USE_NEW_SET_PASSWORD}" = "1" ]; then
echo "Setting password: ALTER USER '${SQL_USER}'@'${SQL_HOST}' ${INDENTIFIED_WITH_STRING} BY '${SQL_PASS}';"
mysql --defaults-extra-file=${DA_MY_CNF} -e "ALTER USER '${SQL_USER}'@'${SQL_HOST}' ${INDENTIFIED_WITH_STRING} BY '${SQL_PASS}';" --host=${MYSQLHOST} 2>&1
else
echo "Setting password: SET PASSWORD FOR '${SQL_USER}'@'${SQL_HOST}' = PASSWORD('${SQL_PASS}');"
mysql --defaults-extra-file=${DA_MY_CNF} -e "SET PASSWORD FOR '${SQL_USER}'@'${SQL_HOST}' = PASSWORD('${SQL_PASS}');" --host=${MYSQLHOST} 2>&1
fi
}
doCustombuildPlugin() {
if [ "${CUSTOMBUILD_PLUGIN_OPT}" != "yes" ]; then
do_exit 1 "You cannot install CustomBuild plugin, because you do not have it set in options.conf file."
fi
cd ${CWD}
mkdir -p /usr/local/directadmin/plugins/custombuild
chown diradmin:diradmin /usr/local/directadmin/plugins
chmod 711 /usr/local/directadmin/plugins
chown diradmin:diradmin /usr/local/directadmin/plugins/custombuild
safeDownloadWithMove "${CWD}/custombuild_plugin.tar.gz" "${WEBPATH}/plugin/custombuild.tar.gz"
tar xzf custombuild_plugin.tar.gz -C /usr/local/directadmin/plugins/custombuild
/usr/local/directadmin/plugins/custombuild/scripts/install.sh
rm -f custombuild_plugin.tar.gz
}
doroundcube() {
if [ "${ROUNDCUBE_OPT}" != "yes" ]; then
do_exit 1 "You cannot install RoundCube webmail, because you do not have it set in options.conf file."
fi
MYSQLV="`mysql_main`"
OLD_MYSQL=false
if [ "`version_cmp ${ROUNDCUBE_VER} 1.5.0 'RC 1.5.0 MySQL cersion check'`" -ge 0 ]; then
if [ "`has_mariadb`" = "1" ]; then
if [ "${MYSQLV}" = "5.5" ] || [ "${MYSQLV}" = "10.0" ] || [ "${MYSQLV}" = "10.1" ]; then
OLD_MYSQL=true
fi
elif [ "${MYSQLV}" = "5.5" ] || [ "${MYSQLV}" = "5.6" ]; then
OLD_MYSQL=true
fi
fi
if ${OLD_MYSQL}; then
if ! grep -m1 -q 'innodb_file_format=Barracuda' /etc/my.cnf 2>/dev/null; then
echo "${boldon}RoundCube ${ROUNDCUBE_VER} requires newer version of ${MYSQLNAME} than ${MYSQLV}, alternatively, the following my.cnf configuration can be set:${boldoff}"
echo "innodb_large_prefix=1"
echo "innodb_file_per_table=1"
echo "innodb_file_format=Barracuda"
exit 1
fi
fi
ensure_webapps_logrotate
initMySQL
if [ "`version_cmp ${ROUNDCUBE_VER} 1.3.0 'RC 1.3.0 php 5.3 check'`" -ge 0 ]; then
#RC 1.3.0+ will not run on php 5.3 or older.
if [ "${PHP1_RELEASE_OPT}" = "5.3" ]; then
echo "${boldon}RoundCube ${ROUNDCUBE_VER} cannot run on php 5.3 or older. Downgrading RC to 1.2.5${boldoff}";
ROUNDCUBE_VER=1.2.5
fi
fi
if [ "`version_cmp ${ROUNDCUBE_VER} 1.5.3 'RC 1.5.3 php 5.6 check'`" -ge 0 ]; then
#RC 1.5.3+ will not run on php 5.5 or older.
if [ "${PHP1_RELEASE_OPT}" = "5.4" ] || [ "${PHP1_RELEASE_OPT}" = "5.5" ]; then
echo "${boldon}RoundCube ${ROUNDCUBE_VER} cannot run on php 5.5 or older. Downgrading RC to 1.5.2${boldoff}";
ROUNDCUBE_VER=1.5.2
fi
fi
if [ "`version_cmp ${ROUNDCUBE_VER} 1.6.0 'RC 1.6.0 php 7.3 check'`" -ge 0 ]; then
#RC 1.6.0+ will not run on php 7.3 or older.
if [ "${PHP1_RELEASE_OPT}" = "5.6" ] || [ "${PHP1_RELEASE_OPT}" = "7.0" ] || [ "${PHP1_RELEASE_OPT}" = "7.1" ] || [ "${PHP1_RELEASE_OPT}" = "7.2" ]; then
echo "${boldon}RoundCube ${ROUNDCUBE_VER} cannot run on php 7.3 or older. Downgrading RC to 1.5.3${boldoff}";
ROUNDCUBE_VER=1.5.3
fi
fi
cd ${CWD}
TARFILE=${WORKDIR}/roundcubemail-${ROUNDCUBE_VER}.tar.gz
REALPATH=${WWWDIR}/roundcubemail-${ROUNDCUBE_VER}
ALIASPATH=${WWWDIR}/roundcube
if [ "${ROUNDCUBE_MAJOR_VER}" != "0" ]; then
if [ -s ${ROUNDCUBE_CONFIG_OLD} ] || [ -s ${ROUNDCUBE_CONFIG_DB_OLD} ]; then
echo "Please remove RoundCube 0.x custom configuration files if you would like to upgrade it. The following files should not be used anymore: ${ROUNDCUBE_CONFIG_OLD}, ${ROUNDCUBE_CONFIG_DB_OLD}. Please use config.inc.php as a new custom RoundCube configuration file."
return
fi
fi
HTTPPATH=${WEBPATH_SERVICES}/all/roundcube
# variables for the database:
ROUNDCUBE_DB=da_roundcube
ROUNDCUBE_DB_USER=da_roundcube
ROUNDCUBE_DB_PASS=`random_pass`
ROUNDCUBE_DES_KEY=`random_pass 24`
ROUNDCUBE_MY_CNF=${REALPATH}/config/my.cnf
getFile all/roundcube/roundcubemail-${ROUNDCUBE_VER}.tar.gz "" roundcubemail-${ROUNDCUBE_VER}.tar.gz
if [ ! -s ${TARFILE} ]; then
echo "Cannot download roundcubemail-${ROUNDCUBE_VER}"
do_exit 0
fi
#Extract the file
tar xzf ${TARFILE} --no-same-owner -C ${WWWDIR}
if [ ! -e ${REALPATH} ]; then
do_exit 1 "Directory ${REALPATH} does not exist"
fi
if [ -e ${ALIASPATH} ]; then
if [ -d ${ALIASPATH}/logs ]; then
cp -fR ${ALIASPATH}/logs ${REALPATH} >/dev/null 2>&1
fi
if [ -d ${ALIASPATH}/temp ]; then
cp -fR ${ALIASPATH}/temp ${REALPATH} >/dev/null 2>&1
fi
fi
#link it from a fake path:
/bin/rm -f ${ALIASPATH}
/bin/ln -sf roundcubemail-${ROUNDCUBE_VER} ${ALIASPATH}
chown -h ${APPUSER}:${APPUSER} ${ALIASPATH}
cd ${REALPATH}
if [ -d logs ]; then
chmod 710 logs
fi
if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then
EDIT_CONFIG=main.inc.php
CONFIG_DIST=main.inc.php.dist
EDIT_DB=db.inc.php
DB_DIST=db.inc.php.dist
else
EDIT_CONFIG=config.inc.php
CONFIG_DIST=config.inc.php.sample
EDIT_DB=${EDIT_CONFIG}
DB_DIST=${CONFIG_DIST}
fi
MYSQLSHOW=/usr/bin/mysqlshow
if [ ! -e ${MYSQLSHOW} ]; then
MYSQLSHOW=/usr/local/mysql/bin/mysqlshow
fi
#insert data to mysql and create database/user for roundcube:
if ! ${MYSQLSHOW} --defaults-extra-file=${DA_MY_CNF} --host=${MYSQLHOST} | grep -m1 -q ' da_roundcube '; then
if [ -d SQL ]; then
echo "Inserting data to mysql and creating database/user for roundcube..."
mysql --defaults-extra-file=${DA_MY_CNF} -e "CREATE DATABASE ${ROUNDCUBE_DB};" --host=${MYSQLHOST} 2>&1
ensure_sql_user "${ROUNDCUBE_DB_USER}" "${MYSQL_ACCESS_HOST}" "${ROUNDCUBE_DB_PASS}" "${ROUNDCUBE_DB}"
if [ "${MYSQLHOST}" != "localhost" ]; then
for access_host_ip in `grep '^access_host.*=' ${DA_MYSQL} | cut -d= -f2`; do {
ensure_sql_user "${ROUNDCUBE_DB_USER}" "${access_host_ip}" "${ROUNDCUBE_DB_PASS}" "${ROUNDCUBE_DB}"
}; done
fi
rm -f ${ROUNDCUBE_MY_CNF}
ensure_my_cnf ${ROUNDCUBE_MY_CNF} "${ROUNDCUBE_DB_USER}" "${ROUNDCUBE_DB_PASS}"
mysql --defaults-extra-file=${ROUNDCUBE_MY_CNF} -e "use ${ROUNDCUBE_DB}; source SQL/mysql.initial.sql;" --host=${MYSQLHOST} 2>&1
echo "Database created, ${ROUNDCUBE_DB_USER} password is ${ROUNDCUBE_DB_PASS}"
else
echo "Cannot find SQL directory in roundcubemail-${ROUNDCUBE_VER}"
do_exit 0
fi
else
if [ -e ${ROUNDCUBE_CONFIG_DB} ]; then
COUNT_MYSQL=`grep -m1 -c 'mysql://' ${ROUNDCUBE_CONFIG_DB}`
if [ ${COUNT_MYSQL} -gt 0 ]; then
PART1="`grep -m1 "\$config\['db_dsnw'\]" ${ROUNDCUBE_CONFIG_DB} | awk '{print $3}' | cut -d\@ -f1 | cut -d'/' -f3`"
ROUNDCUBE_DB_USER="`echo ${PART1} | cut -d\: -f1`"
ROUNDCUBE_DB_PASS="`echo ${PART1} | cut -d\: -f2`"
PART2="`grep -m1 "\$config\['db_dsnw'\]" ${ROUNDCUBE_CONFIG_DB} | awk '{print $3}' | cut -d\@ -f2 | cut -d\' -f1`"
MYSQL_ACCESS_HOST="`echo ${PART2} | cut -d'/' -f1`"
ROUNDCUBE_DB="`echo ${PART2} | cut -d'/' -f2`"
fi
fi
ensure_sql_user "${ROUNDCUBE_DB_USER}" "${MYSQL_ACCESS_HOST}" "${ROUNDCUBE_DB_PASS}" "${ROUNDCUBE_DB}"
if [ "${MYSQLHOST}" != "localhost" ]; then
for access_host_ip in `grep '^access_host.*=' ${DA_MYSQL} | cut -d= -f2`; do {
ensure_sql_user "${ROUNDCUBE_DB_USER}" "${access_host_ip}" "${ROUNDCUBE_DB_PASS}" "${ROUNDCUBE_DB}"
}; done
fi
#in case anyone uses it for backups
rm -f ${ROUNDCUBE_MY_CNF}
ensure_my_cnf ${ROUNDCUBE_MY_CNF} "${ROUNDCUBE_DB_USER}" "${ROUNDCUBE_DB_PASS}"
fi
#password plugin pre-configuration
if [ -e ${REALPATH}/plugins/password ]; then
cd ${REALPATH}/plugins/password
if [ ! -e config.inc.php ]; then
cp config.inc.php.dist config.inc.php
fi
/usr/bin/perl -pi -e "s|\['password_driver'] = 'sql'|\['password_driver'] = 'directadmin'|" config.inc.php > /dev/null
if [ -e /usr/local/directadmin/directadmin ]; then
DAPORT=`/usr/local/directadmin/directadmin c | grep -m1 -e '^port=' | cut -d= -f2`
if [ "${DAPORT}" != "" ]; then
/usr/bin/perl -pi -e "s|\['password_directadmin_port'] = .*$|\['password_directadmin_port'] = ${DAPORT};|" config.inc.php > /dev/null
fi
DASSL=`/usr/local/directadmin/directadmin c | grep -m1 -e '^ssl=' | cut -d= -f2`
DAHOST=`/usr/local/directadmin/directadmin c | grep -m1 -e '^force_hostname=' | cut -d= -f2`
if [ -z "${DAHOST}" ]; then
DAHOST="localhost"
fi
if [ "$DASSL" -eq 1 ]; then
/usr/bin/perl -pi -e "s|\['password_directadmin_host'] = 'tcp://localhost'|\['password_directadmin_host'] = 'ssl://${DAHOST}'|" config.inc.php > /dev/null
elif [ "${DAHOST}" != "localhost" ]; then
/usr/bin/perl -pi -e "s|\['password_directadmin_host'] = 'tcp://localhost'|\['password_directadmin_host'] = 'tcp://${DAHOST}'|" config.inc.php > /dev/null
fi
fi
cd ${REALPATH}
fi
#pigeonhole plugin pre-configuration
if [ "${PIGEONHOLE_OPT}" = "yes" ]; then
if [ -d ${REALPATH}/plugins/managesieve ]; then
cd ${REALPATH}/plugins/managesieve
if [ ! -e config.inc.php ]; then
cp config.inc.php.dist config.inc.php
fi
/usr/bin/perl -pi -e "s|\['managesieve_port'] = null|\['managesieve_port'] = 4190|" config.inc.php > /dev/null
/usr/bin/perl -pi -e "s|\['managesieve_vacation'\] = 0|\['managesieve_vacation'\] = 1|g" config.inc.php > /dev/null
cd ${REALPATH}
fi
fi
#Cleanup config
rm -f ${REALPATH}/config/${EDIT_CONFIG}
#install the proper config:
if [ -d ../roundcube ]; then
echo "Editing roundcube configuration..."
cd ${REALPATH}/config
if [ -e ${ROUNDCUBE_CONFIG} ]; then
echo "Installing custom RoundCube Config: ${ROUNDCUBE_CONFIG}"
cp -f ${ROUNDCUBE_CONFIG} ${EDIT_CONFIG}
fi
if [ -e ${ROUNDCUBE_CONFIG_DB} ]; then
if [ ! -e ${EDIT_DB} ]; then
/bin/cp -f ${ROUNDCUBE_CONFIG_DB} ${EDIT_DB}
fi
COUNT_MYSQL=`grep -m1 -c 'mysql://' ${ROUNDCUBE_CONFIG_DB}`
if [ ${COUNT_MYSQL} -eq 0 ]; then
echo "\$config['db_dsnw'] = 'mysql://${ROUNDCUBE_DB_USER}:${ROUNDCUBE_DB_PASS}@${MYSQLHOST}/${ROUNDCUBE_DB}';" >> ${EDIT_DB}
fi
else
if [ ! -e ${EDIT_DB} ]; then
/bin/cp -f ${DB_DIST} ${EDIT_DB}
/usr/bin/perl -pi -e "s|mysql://roundcube:pass\@localhost/roundcubemail|mysql://${ROUNDCUBE_DB_USER}:\\Q${ROUNDCUBE_DB_PASS}\\E\@${MYSQLHOST}/${ROUNDCUBE_DB}|" ${EDIT_DB} > /dev/null
/usr/bin/perl -pi -e "s/\'mdb2\'/\'db\'/" ${EDIT_DB} > /dev/null
fi
fi
SPAM_INBOX_PREFIX_OPT=`getDA_Opt spam_inbox_prefix 1`
SPAM_FOLDER="INBOX.spam"
if [ "${SPAM_INBOX_PREFIX_OPT}" = "0" ]; then
SPAM_FOLDER="Junk"
fi
/usr/bin/perl -pi -e "s|rcmail-\!24ByteDESkey\*Str|\\Q${ROUNDCUBE_DES_KEY}\\E|" ${EDIT_CONFIG}
if [ ! -e ${ROUNDCUBE_CONFIG} ]; then
if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then
/usr/bin/perl -pi -e "s|\['default_host'] = ''|\['default_host'] = 'localhost'|" ${EDIT_CONFIG} > /dev/null
#IMAP folders
if [ "${WEBAPPS_INBOX_PREFIX_OPT}" = "yes" ]; then
/usr/bin/perl -pi -e "s|\['drafts_mbox'] = 'Drafts'|\['drafts_mbox'] = 'INBOX.Drafts'|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['sent_mbox'] = 'Sent'|\['sent_mbox'] = 'INBOX.Sent'|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['trash_mbox'] = 'Trash'|\['trash_mbox'] = 'INBOX.Trash'|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['default_imap_folders'] = array\('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'\)|\['default_imap_folders'] = array\('INBOX', 'INBOX.Drafts', 'INBOX.Sent', '${SPAM_FOLDER}', 'INBOX.Trash'\)|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['default_folders'] = array\('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'\)|\['default_folders'] = array\('INBOX', 'INBOX.Drafts', 'INBOX.Sent', '${SPAM_FOLDER}', 'INBOX.Trash'\)|" ${EDIT_CONFIG} > /dev/null
else
/usr/bin/perl -pi -e "s|\['default_imap_folders'] = array\('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'\)|\['default_imap_folders'] = array\('INBOX', 'Drafts', 'Sent', '${SPAM_FOLDER}', 'Trash'\)|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['default_folders'] = array\('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash'\)|\['default_folders'] = array\('INBOX', 'Drafts', 'Sent', '${SPAM_FOLDER}', 'Trash'\)|" ${EDIT_CONFIG} > /dev/null
fi
if [ "${SPAM_INBOX_PREFIX_OPT}" = "1" ]; then
/usr/bin/perl -pi -e "s|\['junk_mbox'] = 'Junk'|\['junk_mbox'] = 'INBOX.spam'|" ${EDIT_CONFIG} > /dev/null
fi
#smtp stuff
/usr/bin/perl -pi -e "s|\['smtp_port'] = 25|\['smtp_port'] = 587|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['smtp_server'] = ''|\['smtp_server'] = 'localhost'|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['smtp_user'] = ''|\['smtp_user'] = '%u'|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['smtp_pass'] = ''|\['smtp_pass'] = '%p'|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['smtp_auth_type'] = ''|\['smtp_auth_type'] = 'LOGIN'|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['create_default_folders'] = .*;|\['create_default_folders'] = true;|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['login_lc'] = 0;|\['login_lc'] = 2;|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['login_autocomplete'] = 0;|\['login_autocomplete'] = 2;|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['quota_zero_as_unlimited'] = false;|\['quota_zero_as_unlimited'] = true;|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['enable_spellcheck'] = true;|\['enable_spellcheck'] = false;|" ${EDIT_CONFIG} > /dev/null
else
#default_host is set to localhost by default in RC 1.0.0, so we don't echo it to the file
#These ones are already in config.inc.php.sample file, so we just use perl-regex to change them
/usr/bin/perl -pi -e "s|\['smtp_port'] = 25|\['smtp_port'] = 587|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['smtp_server'] = ''|\['smtp_server'] = 'localhost'|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['smtp_user'] = ''|\['smtp_user'] = '%u'|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['smtp_pass'] = ''|\['smtp_pass'] = '%p'|" ${EDIT_CONFIG} > /dev/null
#Changing default options, that are set in defaults.inc.php
#IMAP folders
if [ "${WEBAPPS_INBOX_PREFIX_OPT}" = "yes" ]; then
echo "\$config['drafts_mbox'] = 'INBOX.Drafts';" >> ${EDIT_CONFIG}
echo "\$config['junk_mbox'] = '${SPAM_FOLDER}';" >> ${EDIT_CONFIG}
echo "\$config['sent_mbox'] = 'INBOX.Sent';" >> ${EDIT_CONFIG}
echo "\$config['trash_mbox'] = 'INBOX.Trash';" >> ${EDIT_CONFIG}
echo "\$config['default_folders'] = array('INBOX', 'INBOX.Drafts', 'INBOX.Sent', '${SPAM_FOLDER}', 'INBOX.Trash');" >> ${EDIT_CONFIG}
else
echo "\$config['junk_mbox'] = '${SPAM_FOLDER}';" >> ${EDIT_CONFIG}
echo "\$config['default_folders'] = array('INBOX', 'Drafts', 'Sent', '${SPAM_FOLDER}', 'Trash');" >> ${EDIT_CONFIG}
fi
HN_T=${HOSTNAME}
echo "\$config['smtp_helo_host'] = '${HN_T}';" >> ${EDIT_CONFIG}
echo "\$config['smtp_auth_type'] = 'LOGIN';" >> ${EDIT_CONFIG}
echo "\$config['create_default_folders'] = true;" >> ${EDIT_CONFIG}
echo "\$config['protect_default_folders'] = true;" >> ${EDIT_CONFIG}
echo "\$config['login_autocomplete'] = 2;" >> ${EDIT_CONFIG}
echo "\$config['quota_zero_as_unlimited'] = true;" >> ${EDIT_CONFIG}
echo "\$config['enable_spellcheck'] = false;" >> ${EDIT_CONFIG}
echo "\$config['email_dns_check'] = true;" >> ${EDIT_CONFIG}
if grep -q '^recipients_max' /etc/exim.conf; then
RECIPIENTS_MAX="`grep -m1 '^recipients_max' /etc/exim.conf | cut -d= -f2 | tr -d ' '`"
echo "\$config['max_recipients'] = ${RECIPIENTS_MAX};" >> ${EDIT_CONFIG}
echo "\$config['max_group_members'] = ${RECIPIENTS_MAX};" >> ${EDIT_CONFIG}
fi
if [ ! -s mime.types ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -s /etc/httpd/conf/mime.types ]; then
if grep -m1 -q 'application/java-archive' /etc/httpd/conf/mime.types; then
cp -f /etc/httpd/conf/mime.types ./mime.types
fi
fi
fi
fi
if [ ! -s mime.types ]; then
safeDownloadWithMove "${ALIASPATH}/config/mime.types" "https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types"
fi
echo "\$config['mime_types'] = '${ALIASPATH}/config/mime.types';" >> ${EDIT_CONFIG}
fi
#password plugin
if [ -e ${REALPATH}/plugins/password ]; then
if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then
/usr/bin/perl -pi -e "s|\['plugins'] = array\(\);|\['plugins'] = array\('password'\);|" ${EDIT_CONFIG} > /dev/null
else
/usr/bin/perl -pi -e "s|\['plugins'] = array\(\n|\['plugins'] = array\(\n 'password',\n|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['plugins'] = \[\n|\['plugins'] = \[\n 'password',\n|" ${EDIT_CONFIG} > /dev/null
fi
cd ${REALPATH}/config
fi
#pigeonhole plugin
if [ "${PIGEONHOLE_OPT}" = "yes" ]; then
if [ -d ${REALPATH}/plugins/managesieve ]; then
if [ ${ROUNDCUBE_MAJOR_VER} -eq 0 ]; then
/usr/bin/perl -pi -e "s|\['plugins'] = array\('password'\);|\['plugins'] = array\('password','managesieve'\);|" ${EDIT_CONFIG} > /dev/null
else
if [ `grep -m1 -c "'managesieve'" ${EDIT_CONFIG}` -eq 0 ]; then
/usr/bin/perl -pi -e "s|\['plugins'] = array\(\n|\['plugins'] = array\(\n 'managesieve',\n|" ${EDIT_CONFIG} > /dev/null
/usr/bin/perl -pi -e "s|\['plugins'] = \[\n|\['plugins'] = \[\n 'managesieve',\n|" ${EDIT_CONFIG} > /dev/null
fi
fi
cd ${REALPATH}/config
fi
fi
fi
#SSO plugin
if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then
if ${DA_BIN} c | grep -m1 -q '^one_click_webmail_login=1$'; then
ROUNDCUBE_DIRECT_LOGIN_VER=`getVer rc_direct_login`
ROUNDCUBE_DIRECT_LOGIN="roundcube_direct_login-${ROUNDCUBE_DIRECT_LOGIN_VER}.tar.gz"
cd ${REALPATH}
safeDownloadWithMove "${REALPATH}/${ROUNDCUBE_DIRECT_LOGIN}" "${WEBPATH_SERVICES}/all/auto_login/roundcube/${ROUNDCUBE_DIRECT_LOGIN}"
tar xzf ${ROUNDCUBE_DIRECT_LOGIN}
chown -R webapps:webapps direct_login
chmod 711 direct_login
chmod 700 direct_login/tokens
chmod 644 direct_login/index.php
cd ${REALPATH}/config
elif [ -d ${REALPATH}/direct_login ]; then
rm -rf ${REALPATH}/direct_login
fi
fi
if echo "${PHP1_RELEASE_OPT}" | grep -m1 -q '^7'; then
if grep -m1 -q 'mod_php5' ${REALPATH}/.htaccess && ! grep -m1 -q 'mod_php7' ${REALPATH}/.htaccess; then
echo "Replacing mod_php5 with mod_php7 in .htaccess"
perl -pi -e 's|mod_php5|mod_php7|g' ${REALPATH}/.htaccess
fi
elif echo "${PHP1_RELEASE_OPT}" | grep -m1 -q '^8'; then
if grep -m1 -q 'mod_php5' ${REALPATH}/.htaccess && ! grep -m1 -q 'mod_php8' ${REALPATH}/.htaccess; then
echo "Replacing mod_php5 with mod_php8 in .htaccess"
perl -pi -e 's|mod_php5|mod_php8|g' ${REALPATH}/.htaccess
fi
fi
if [ -d ${ROUNDCUBE_PLUGINS} ]; then
echo "Copying files from ${ROUNDCUBE_PLUGINS} to ${REALPATH}/plugins"
cp -Rpf ${ROUNDCUBE_PLUGINS}/* ${REALPATH}/plugins
fi
if [ -d ${ROUNDCUBE_SKINS} ]; then
echo "Copying files from ${ROUNDCUBE_SKINS} to ${REALPATH}/skins"
cp -Rpf ${ROUNDCUBE_SKINS}/* ${REALPATH}/skins
fi
if [ -d ${ROUNDCUBE_VENDOR} ]; then
echo "Copying files from ${ROUNDCUBE_VENDOR} to ${REALPATH}/vendor"
cp -Rpf ${ROUNDCUBE_VENDOR}/* ${REALPATH}/vendor
fi
if [ -d ${ROUNDCUBE_PROGRAM} ]; then
echo "Copying files from ${ROUNDCUBE_PROGRAM} to ${REALPATH}/program"
cp -Rpf ${ROUNDCUBE_PROGRAM}/* ${REALPATH}/program
fi
if [ -e ${ROUNDCUBE_COMPOSER} ]; then
echo "Copying composer.json file from ${ROUNDCUBE_COMPOSER} to ${REALPATH}/composer.json"
cp -Rpf ${ROUNDCUBE_COMPOSER} ${REALPATH}/composer.json
fi
if [ -e ${ROUNDCUBE_HTACCESS} ]; then
echo "Copying .htaccess file from ${ROUNDCUBE_HTACCESS} to ${REALPATH}/.htaccess"
cp -pf ${ROUNDCUBE_HTACCESS} ${REALPATH}/.htaccess
fi
echo "Roundcube ${ROUNDCUBE_VER} has been installed successfully."
writeLog "RoundCube ${ROUNDCUBE_VER} installed"
fi
#systems with "system()" in disable_functions need to use no php.ini:
if [ "`have_php_system`" = "0" ]; then
perl -pi -e 's#^\#\!/usr/bin/env php#\#\!/usr/local/bin/php \-n#' ${REALPATH}/bin/update.sh
fi
#systems with suhosin cannot have PHP memory_limit set to -1, we need not to load suhosin for RoundCube .sh scripts
if [ "${SUHOSIN_OPT}" = "yes" ]; then
perl -pi -e 's#^\#\!/usr/bin/env php#\#\!/usr/local/bin/php \-n#' ${REALPATH}/bin/msgimport.sh
perl -pi -e 's#^\#\!/usr/bin/env php#\#\!/usr/local/bin/php \-n#' ${REALPATH}/bin/indexcontacts.sh
perl -pi -e 's#^\#\!/usr/bin/env php#\#\!/usr/local/bin/php \-n#' ${REALPATH}/bin/msgexport.sh
fi
#set the permissions:
chown -R ${APPUSER}:${APPUSER} ${REALPATH}
#update if needed
${REALPATH}/bin/update.sh '--version=?'
#drop alias column if it's still there
if mysql --defaults-extra-file=${DA_MY_CNF} da_roundcube -e "SHOW COLUMNS FROM da_roundcube.users LIKE 'alias';" --host=${MYSQLHOST} -sss 2>&1 | grep -m1 -q '^alias'; then
mysql --defaults-extra-file=${DA_MY_CNF} da_roundcube -e "ALTER TABLE da_roundcube.users DROP COLUMN da_roundcube.users.alias;"--host=${MYSQLHOST} -sss 2>&1
fi
#cleanup
rm -rf ${ALIASPATH}/installer
#bugfix for suPHP as RC 1.3.9 has index.php 664 and ${REALPATH} 775
/bin/chmod 755 ${REALPATH}
/bin/chmod 644 ${REALPATH}/index.php
if [ "${APPGROUP}" = "apache" ]; then
chown -R apache ${REALPATH}/temp ${REALPATH}/logs
/bin/chmod -R 770 ${REALPATH}/temp
/bin/chmod -R 770 ${REALPATH}/logs
fi
#secure configuration file
if [ -s ${EDIT_DB} ]; then
chmod 440 ${EDIT_DB}
if [ "${APPGROUP}" = "apache" ]; then
echo "**********************************************************************"
echo "* "
echo "* ${boldon}SECURITY: ${REALPATH}/config/${EDIT_DB} is readable by apache.${boldoff}"
echo "* Recommended: use a php type that runs php scripts as the User, then re-install roundcube."
echo "*"
echo "**********************************************************************"
fi
chown ${APPUSER}:${APPGROUP} ${EDIT_DB}
if [ "${APPGROUP}" = "apache" ]; then
ls -la ${REALPATH}/config/${EDIT_DB}
sleep 5
fi
fi
RC_HTACCESS=${REALPATH}/.htaccess
if [ -s "${RC_HTACCESS}" ]; then
if grep -m1 -q upload_max_filesize ${RC_HTACCESS}; then
perl -pi -e 's/^php_value upload_max_filesize/#php_value upload_max_filesize/' ${RC_HTACCESS}
perl -pi -e 's/^php_value post_max_size/#php_value post_max_size/' ${RC_HTACCESS}
perl -pi -e 's/^php_value memory_limit/#php_value memory_limit/' ${RC_HTACCESS}
fi
perl -pi -e 's/FollowSymLinks/SymLinksIfOwnerMatch/' ${RC_HTACCESS}
fi
ensure_webapps_tmp
if [ "${OPCACHE_OPT}" = "yes" ]; then
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
echo "Reloading php-fpm${PHP1_SHORTRELEASE}."
control_service php-fpm${PHP1_SHORTRELEASE} reload
elif [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "Reloading apache."
control_service httpd reload
elif [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
echo "Reloading litespeed."
control_service litespeed reload
fi
fi
cd ${CWD}
}
####################################################
doRemoveRoundcube() {
if [ "${ROUNDCUBE_OPT}" != "no" ]; then
do_exit 1 "Cannot remove RoundCube webmail, because it is enabled in options.conf file."
fi
initMySQL
# variables for the database:
ROUNDCUBE_DB=da_roundcube
ROUNDCUBE_DB_USER=da_roundcube
#Removing RoundCube database and database user
if [ -d $MYSQL_DATA/${ROUNDCUBE_DB} ]; then
echo "Dropping database ${ROUNDCUBE_DB} and database user ${ROUNDCUBE_DB_USER}..."
mysql --defaults-extra-file=${DA_MY_CNF} -e "DROP DATABASE ${ROUNDCUBE_DB};" --host=${MYSQLHOST} 2>/dev/null
mysql --defaults-extra-file=${DA_MY_CNF} -e "DROP USER '${ROUNDCUBE_DB_USER}'@'${MYSQL_ACCESS_HOST}';" --host=${MYSQLHOST} 2>/dev/null
if [ "${MYSQLHOST}" != "localhost" ]; then
for access_host_ip in `grep '^access_host.*=' ${DA_MYSQL} | cut -d= -f2`; do {
mysql --defaults-extra-file=${DA_MY_CNF} -e "DROP USER '${ROUNDCUBE_DB_USER}'@'${ROUNDCUBE_DB_USER}'@'${access_host_ip}';" --host=${MYSQLHOST} 2>&1
}; done
fi
fi
remove_file /var/www/html/roundcube
echo "Removing all roundcubemail directories from /var/www/html..."
find /var/www/html -maxdepth 1 -name 'roundcubemail-*' -print -exec rm -rf {} \;
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "RoundCube webmail has been successfully removed."
writeLog "RoundCube removed"
}
ensurepopb4smtp(){
#pop before smtp
if [ ! -s /etc/systemd/system/da-popb4smtp.service ]; then
cp -f ${CWD}/configure/systemd/da-popb4smtp.service /etc/systemd/system/da-popb4smtp.service
systemctl daemon-reload
systemctl enable da-popb4smtp.service
systemctl start da-popb4smtp.service
fi
set_service da-popb4smtp ON
}
doLua(){
getFile lua/lua-${LUA_VER}.tar.gz lua lua-${LUA_VER}.tar.gz
getFile patches/liblua_so.patch liblua_so.patch patches/liblua_so.patch hexan
if [ ! -e /usr/include/readline/readline.h ] && [ ! -e /usr/local/include/readline/readline.h ]; then
echo "Cannot find /usr/include/readline/readline.h, installing..."
if [ -e /etc/debian_version ]; then
apt-get -y install libreadline-dev
else
yum -y install readline-devel
fi
fi
quitIfLocked doLua
if [ -d lua-${LUA_VER} ]; then
rm -rf lua-${LUA_VER}
fi
cd ${CWD}
FILE=${CWD}/lua-${LUA_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd lua-${LUA_VER}
#To generate dynamic library of liblua
patch -p0 < ${WORKDIR}/patches/liblua_so.patch
while echo "Installing lua..."; do
make linux install
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "lua ${LUA_VER} Installed."
writeLog "lua ${LUA_VER} installed"
removeLockfile
cd ${CWD}
rm -rf lua-${LUA_VER}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
checkDebianPackage(){
RETURN_CODE=0
if [ -x /usr/bin/dpkg ]; then
/usr/bin/dpkg -s ${1} >/dev/null 2>&1
if [ $? -ne 0 ]; then
RETURN_CODE=1
fi
fi
echo ${RETURN_CODE}
}
checkRPMPackage(){
RETURN_CODE=0
if [ -x /usr/bin/rpm ]; then
/usr/bin/rpm -q ${1} >/dev/null 2>&1
if [ $? -ne 0 ]; then
RETURN_CODE=1
fi
fi
echo ${RETURN_CODE}
}
doSnail(){
set_sendmail_link
getFile s-nail/s-nail-${S_NAIL_VER}.tar.gz s-nail s-nail-${S_NAIL_VER}.tar.gz
quitIfLocked doSnail
cd ${CWD}
FILE=${CWD}/s-nail-${S_NAIL_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd s-nail-${S_NAIL_VER}
OV=`openssl_version`
#OpenSSL 1.1.0 fails with s-nail-14.9.15/src/mx/xtls.c:248:18: error: 'SSL_OP_NO_TLSv1_3' undeclared here (not in a function)
if echo "${OV}" | grep -m1 -q '1\.1\.0'; then
sed -i '/{"TLSv1.3\\0", SSL_OP_NO_TLSv1_3,/d' src/mx/xtls.c
perl -pi -e 's|{"TLSv1.2", SSL_OP_NO_TLSv1_2,|{"TLSv1.2\\0", SSL_OP_NO_TLSv1_2,|g' src/mx/xtls.c
fi
while echo "Making s-nail..."; do
make CONFIG=MAXIMAL all
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
while echo "Installing s-nail..."; do
make install
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
if [ -x /usr/local/bin/s-nail ] && [ ! -e /usr/local/bin/mail ]; then
echo "Symlinking /usr/local/bin/s-nail -> /usr/local/bin/mail."
ln -s /usr/local/bin/s-nail /usr/local/bin/mail
fi
echo "s-nail ${S_NAIL_VER} Installed."
writeLog "s-nail ${S_NAIL_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
doMsmtp(){
getFile msmtp/msmtp-${MSMTP_VER}.tar.xz msmtp msmtp-${MSMTP_VER}.tar.xz
quitIfLocked doMsmtp
cd ${CWD}
FILE=${CWD}/msmtp-${MSMTP_VER}.tar.xz
checkFile ${FILE}
echo "Extracting ..."
tar xJf ${FILE} --no-same-owner
echo "Done."
cd msmtp-${MSMTP_VER}
./configure
while echo "Making msmtp..."; do
make -j${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
while echo "Installing msmtp..."; do
make install
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
/sbin/ldconfig
removeLockfile
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "msmtp installation complete."
writeLog "msmtp ${MSMTP_VER} installed"
}
createEtcVirtual(){
addUserGroup mail mail 12 12
addToAccess mail
VIRTUAL="/etc/virtual"
if [ ! -d ${VIRTUAL} ]; then
mkdir -p ${VIRTUAL}
fi
chown -f mail ${VIRTUAL}
chgrp -f mail ${VIRTUAL}
chmod 711 ${VIRTUAL}
if ! grep -q "^${HOSTNAME}$" ${VIRTUAL}/domains; then
echo "${HOSTNAME}" >> ${VIRTUAL}/domains
fi
if [ ! -s ${VIRTUAL}/limit ]; then
echo "1000" > ${VIRTUAL}/limit
chmod 644 ${VIRTUAL}/limit
chown -f mail:mail ${VIRTUAL}/limit
fi
if [ ! -s ${VIRTUAL}/limit_unknown ]; then
echo "0" > ${VIRTUAL}/limit_unknown
chmod 644 ${VIRTUAL}/limit_unknown
chown -f mail:mail ${VIRTUAL}/limit_unknown
fi
if [ ! -s ${VIRTUAL}/user_limit ]; then
echo "200" > ${VIRTUAL}/user_limit
chmod 644 ${VIRTUAL}/user_limit
chown -f mail:mail ${VIRTUAL}/user_limit
fi
if [ ! -d ${VIRTUAL}/usage ]; then
mkdir -p ${VIRTUAL}/usage
fi
chmod 750 ${VIRTUAL}/usage
chown -f mail:mail ${VIRTUAL}/usage
for i in domains domainowners pophosts blacklist_domains whitelist_from use_rbl_domains bad_sender_hosts bad_sender_hosts_ip blacklist_senders whitelist_domains whitelist_hosts whitelist_hosts_ip whitelist_senders skip_av_domains skip_rbl_domains; do
if [ ! -e ${VIRTUAL}/$i ]; then
touch ${VIRTUAL}/$i
fi
chmod 640 ${VIRTUAL}/$i
chown -f mail:mail ${VIRTUAL}/$i
done
}
doExim() {
if [ "${EXIM_OPT}" != "yes" ]; then
do_exit 1 "You cannot update Exim, because you do not have it set in options.conf file."
fi
if [ ! -e /usr/include/db.h ]; then
echo "Cannot find /usr/include/db.h. Please install db.h"
if [ -e /etc/debian_version ]; then
echo "apt-get install libdb4.8-dev libperl-dev"
else
echo "yum install db4-devel perl-ExtUtils-Embed"
fi
do_exit 0
fi
if [ ! -e /usr/include/pcre2.h ] && [ ! -e /usr/local/include/pcre2.h ]; then
echo "Cannot find pcre2, installing it..."
if [ -e /etc/debian_version ]; then
apt-get -y install libpcre2-dev
else
yum -y install pcre2-devel
fi
fi
createEtcVirtual
V_U_RBL_D=${VIRTUAL}/use_rbl_domains
if [ -f ${V_U_RBL_D} ] && [ ! -s ${V_U_RBL_D} ]; then
rm -f ${V_U_RBL_D}
ln -s domains ${V_U_RBL_D}
chown -h mail:mail ${V_U_RBL_D}
fi
getFile exim-${EXIM_VER}.tar.gz exim
ensurepopb4smtp
killall sendmail 2> /dev/null
if [ -s /etc/inetd.conf ]; then
if grep -m1 -q '^pop' /etc/inetd.conf; then
perl -pi -e 's/^pop/\#pop/' /etc/inetd.conf
killall -HUP inetd
fi
fi
if [ -e /etc/debian_version ]; then
if [ `checkDebianPackage da_exim` -ne 0 ] && [ `checkDebianPackage da-exim` -ne 0 ]; then
if [ `checkDebianPackage equivs` -ne 0 ]; then
apt-get update
apt-get -y install equivs
fi
if [ -x /usr/bin/equivs-build ]; then
echo 'Package: da-exim' > da-exim.equivs
echo 'Maintainer: JBMC Software <no-reply@directadmin.com>' >> da-exim.equivs
echo 'Architecture: any' >> da-exim.equivs
echo 'Provides: mail-transport-agent' >> da-exim.equivs
echo 'Replaces: mail-transport-agent, exim4-base' >> da-exim.equivs
echo 'Description: Dummy package to replace dependencies' >> da-exim.equivs
/usr/bin/equivs-build da-exim.equivs >/dev/null 2>&1
fi
fi
if [ -s da-exim_1.0_amd64.deb ]; then
dpkg -r --force-all exim exim4 exim4-base exim4-config exim4-daemon-light exim4-config-2 exim4-daemon-heavy rmail sendmail-bin sendmail mail-transport-agent postfix ssmtp courier-authdaemon courier-authlib courier-authlib-userdb courier-base courier-imap courier-imap-ssl courier-maildrop courier-pop courier-pop-ssl courier-ssl dovecot-core dovecot-imapd 2> /dev/null
dpkg -P exim exim4 exim4-base exim4-config exim4-daemon-light exim4-config-2 exim4-daemon-heavy rmail sendmail-bin sendmail mail-transport-agent postfix ssmtp courier-authdaemon courier-authlib courier-authlib-userdb courier-base courier-imap courier-imap-ssl courier-maildrop courier-pop courier-pop-ssl courier-ssl dovecot-core dovecot-imapd 2> /dev/null
dpkg -i da-exim_1.0_amd64.deb 2>/dev/null
if [ -s da-exim.equivs ]; then
rm -f da-exim.equivs
fi
rm -f da-exim_1.0_amd64.deb 2> /dev/null
fi
else
rpm -e --nodeps sendmail 2> /dev/null
rpm -e --nodeps postfix 2> /dev/null
rpm -e --nodeps dovecot 2> /dev/null
rpm -e --nodeps courier-imap 2> /dev/null
fi
if [ ! -e /usr/include/spf2/spf.h ]; then
echo "Cannot find /usr/include/spf2/spf.h, installing..."
if [ -e /etc/debian_version ]; then
apt-get -y install libspf2-dev
else
yum -y install libspf2-devel --enablerepo=${EPEL_REPO_NAME}
fi
fi
quitIfLocked doExim
if [ ! -d /var/log/exim ]; then
mkdir /var/log/exim
chmod 700 /var/log/exim
fi
chown mail:mail /var/log/exim
if [ -d /var/spool/exim ] && [ ! -e /usr/sbin/exim ]; then
chown -R mail:mail /var/spool/exim
fi
cd ${CWD}
FILE=${CWD}/exim-${EXIM_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd exim-${EXIM_VER}
if [ -x /usr/sbin/opendmarc ] && [ -s ./src/dmarc.c ]; then
if /usr/sbin/opendmarc -V | head -n1 | grep -q 'v1\.4'; then
perl -pi -e 's| dkim_result, US""\);| sig->selector, dkim_result, US"");|g' ./src/dmarc.c
fi
fi
# libnsl is only used for NIS and NIS+ lookups, compilation fails on CentOS8 due to no libnsl in glibc anymore
perl -pi -e 's/-lnsl//g' ./OS/Makefile-Linux
if [ "${EXIM_MAKEFILE}" != "" ]; then
echo "${boldon}Custom ${EXIM_MAKEFILE} being used${boldoff}"
cp -f ${EXIM_MAKEFILE} Local/Makefile
else
cd ${CWD}
getFile Makefile '' exim-${EXIM_VER}/Local/Makefile
cd exim-${EXIM_VER}
perl -pi -e 's/^CFLAGS=(.*)$/CFLAGS=$1 -std=gnu99/' Local/Makefile
echo "USE_OPENSSL=yes" >> Local/Makefile
if [ -e /usr/include/pcre2.h ] || [ -e /usr/local/include/pcre2.h ]; then
echo "Making Makefile changes for 4.96+"
perl -pi -e 's/^PCRE_LIBS=-lpcre$/PCRE_LIBS=-lpcre2-8/' Local/Makefile
fi
fi
# Solve on CentOS8/9: /usr/bin/ld: acl.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIC
if [ "${OS_CENTOS_VER}" = "8" ] || [ "${OS_CENTOS_VER}" = "9" ]; then
if ! grep -m1 -q CFLAGS.*fPIC Local/Makefile; then
perl -pi -e 's|CFLAGS\=|CFLAGS\=-fPIC |g' Local/Makefile
fi
fi
if [ -e /usr/include/spf2/spf.h ] || [ -e /usr/local/include/spf2/spf.h ]; then
echo "SUPPORT_SPF=yes" >> Local/Makefile
if [ -e /usr/local/include/spf2/spf.h ]; then
echo "CFLAGS += -DSPF -I/usr/local/include" >> Local/Makefile
else
echo "CFLAGS += -DSPF" >> Local/Makefile
fi
echo "LDFLAGS += -lspf2" >> Local/Makefile
fi
#Reported issue in https://forum.directadmin.com/showthread.php?t=55603&page=2&p=285310#post285310
echo "CFLAGS += `getGccOptions`" >> Local/Makefile
if ! grep -q ^SUPPORT_SRS Local/Makefile; then
echo "SUPPORT_SRS=yes " >> Local/Makefile
fi
while echo "Trying to make exim..."; do
C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): "
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make Complete"
while echo "Installing exim..."; do
make install
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Moving exim binary."
EXIM_BINARY=`ls -t /usr/sbin/exim-${EXIM_VER}-* | head -n1`
if [ "${EXIM_BINARY}" = "" ]; then
#4.86.2 shows up as /usr/sbin/exim-4.86_2-2
#assume newest binary is the winner.
echo "Cannot find the ${EXIM_VER} formatted binary. Trying a wildcard instead..."
EXIM_BINARY=`ls -t /usr/sbin/exim-*-* | head -n1`
echo "Found: '$EXIM_BINARY'"
fi
mv -f ${EXIM_BINARY} /usr/sbin/exim
chmod 4755 /usr/sbin/exim
if [ ! -e /etc/exim.cert ] && [ ! -e /etc/exim.key ]; then
getFile da_exim-cert-config
/usr/bin/openssl req -x509 -newkey rsa:2048 -keyout /etc/exim.key -out /etc/exim.cert -days 9999 -nodes -config ${WORKDIR}/da_exim-cert-config
fi
chmod 600 /etc/exim.cert /etc/exim.key
chown mail:mail /etc/exim.cert /etc/exim.key
if [ ! -e /etc/exim.conf ]; then
safeDownloadWithMove "/etc/exim.conf" "${WEBPATH}/exim.conf"
safeDownloadWithMove "/etc/exim.pl" "${WEBPATH}/exim.pl"
chmod 755 /etc/exim.pl
fi
if [ ! -e /etc/system_filter.exim ]; then
if [ -e ${CWD}/custom/exim/system_filter.exim ]; then
cp -f ${CWD}/custom/exim/system_filter.exim /etc/system_filter.exim
else
safeDownloadWithMove "/etc/system_filter.exim" "${WEBPATH}/system_filter.exim"
fi
fi
chmod 644 /etc/system_filter.exim
if [ "${EXIMCONF_OPT}" = "yes" ]; then
doEximConf
fi
if [ "${IPV6}" = "0" ]; then
perl -pi -e 's|disable_ipv6=false|disable_ipv6=true|' /etc/exim.conf
if [ -e /etc/exim.variables.conf.default ]; then
perl -pi -e 's|disable_ipv6=false|disable_ipv6=true|' /etc/exim.variables.conf.default
fi
else
perl -pi -e 's|disable_ipv6=true|disable_ipv6=false|' /etc/exim.conf
if [ -e /etc/exim.variables.conf.default ]; then
perl -pi -e 's|disable_ipv6=true|disable_ipv6=false|' /etc/exim.variables.conf.default
fi
fi
echo "Enabling exim in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/exim.service ]; then
cp -f ${CB_CUST_SYSTEMD}/exim.service ${SYSTEMDDIR}/exim.service
else
cp -f ${CB_SYSTEMD}/exim.service ${SYSTEMDDIR}/exim.service
fi
chmod 644 ${SYSTEMDDIR}/exim.service
systemctl daemon-reload
systemctl enable exim.service
if [ -d /etc/logrotate.d ]; then
EXIM_LOGROTATE=/etc/logrotate.d/exim
if [ -s ${EXIM_LOGROTATE} ]; then
if [ "`/usr/bin/stat -c "%a" ${EXIM_LOGROTATE}`" = "755" ]; then
echo "${EXIM_LOGROTATE} was set to 755. Changed to 644"
chmod 644 ${EXIM_LOGROTATE}
fi
else
echo '/var/log/exim/mainlog /var/log/exim/processlog /var/log/exim/rejectlog /var/log/exim/paniclog {' > ${EXIM_LOGROTATE}
echo 'missingok' >> ${EXIM_LOGROTATE}
echo 'sharedscripts' >> ${EXIM_LOGROTATE}
echo '}' >> ${EXIM_LOGROTATE}
chmod 644 ${EXIM_LOGROTATE}
fi
fi
echo "Exim ${EXIM_VER} Installed."
writeLog "Exim ${EXIM_VER} installed"
if [ "${SPAMD_OPT}" = "no" ]; then
if [ -e ${SYSTEMDDIR}/spamassassin.service ]; then
echo "Disabling spamassassin in systemd..."
systemctl stop spamassassin.service
systemctl disable spamassassin.service
systemctl daemon-reload
rm -f ${SYSTEMDDIR}/spamassassin.service
fi
if [ -e ${SYSTEMDDIR}/rspamd.service ]; then
echo "Disabling rspamd in systemd..."
systemctl stop rspamd.service
systemctl disable rspamd.service
systemctl daemon-reload
rm -f ${SYSTEMDDIR}/rspamd.service
fi
fi
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "Restarting exim."
control_service exim restart
set_service exim ON
if [ -x /usr/sbin/alternatives ]; then
if ! /usr/sbin/alternatives --list | grep -m1 -q '^mta.*/usr/sbin/exim$'; then
/usr/sbin/alternatives --install /usr/sbin/sendmail mta /usr/sbin/exim 100
fi
if [ "`readlink /etc/alternatives/mta`" = "/usr/sbin/exim" ]; then
/usr/sbin/alternatives --set mta /usr/sbin/exim
fi
fi
if [ ! -x /bin/mail ] && [ ! -x /usr/bin/mail ] && [ ! -x /usr/local/bin/mail ]; then
doSnail
fi
if [ -x /usr/sbin/exim ] && [ -d /usr/bin ]; then
if [ ! -e /usr/bin/newaliases ]; then
ln -s /usr/sbin/exim /usr/bin/newaliases
fi
fi
}
####################################################
doBlockCracking() {
if [ "${BLOCKCRACKING_OPT}" != "yes" ] || [ "${EXIMCONF_OPT}" != "yes" ]; then
do_exit 1 "You cannot enable BlockCracking, because you do not have it set in options.conf file (blockcracking/eximconf options)."
fi
if [ ! -d ${WORKDIR}/blockcracking ]; then
mkdir -p ${WORKDIR}/blockcracking
chmod 700 ${WORKDIR}/blockcracking
fi
cd ${WORKDIR}
echo "Enabling BlockCracking..."
getFile blockcracking/exim.blockcracking-${BLOCKCRACKING_VER}.tar.gz blockcracking exim.blockcracking-${BLOCKCRACKING_VER}.tar.gz
mkdir -p /etc/exim.blockcracking
tar xzf exim.blockcracking-${BLOCKCRACKING_VER}.tar.gz -C /etc/exim.blockcracking
BC_DP_SRC=/etc/exim.blockcracking/script.denied_paths.default.txt
if [ -e /etc/exim.blockcracking/script.denied_paths.custom.txt ]; then
echo "Using custom BC script.denied_paths.custom.txt"
BC_DP_SRC=/etc/exim.blockcracking/script.denied_paths.custom.txt
fi
cp -fp ${BC_DP_SRC} /etc/exim.blockcracking/script.denied_paths.txt
if [ "$1" != "norestart" ]; then
echo "Restarting exim."
control_service exim restart
fi
echo "BlockCracking is now enabled."
writeLog "BlockCracking ${BLOCKCRACKING_VER} installed"
}
####################################################
doRemoveBlockCracking() {
if [ "${BLOCKCRACKING_OPT}" != "no" ]; then
do_exit 1 "You cannot remove BlockCracking, because you have enabled in options.conf file."
fi
cd ${WORKDIR}
echo "Removing BlockCracking..."
rm -rf /etc/exim.blockcracking
if [ "$1" != "norestart" ]; then
echo "Restarting exim."
control_service exim restart
fi
echo "BlockCracking is now removed."
writeLog "BlockCracking removed"
}
####################################################
doEasySpamFighter() {
if [ "${EASY_SPAM_FIGHTER_OPT}" != "yes" ] || [ "${EXIMCONF_OPT}" != "yes" ]; then
do_exit 1 "You cannot enable Easy Spam Fighter, because you do not have it set in options.conf file (easy_spam_fighter/eximconf options)."
fi
EXIM_SPF_SUPPORT="`/usr/sbin/exim --version | grep -m1 -c SPF`"
EXIM_SRS_SUPPORT="`/usr/sbin/exim --version | grep -m1 -c SRS`"
if [ "${EXIM_SPF_SUPPORT}" = "0" ]; then
do_exit 1 "Your version of Exim does not support SPF, which is needed for Easy Spam Fighter. Please update exim using the CustomBuild script: ./build exim."
fi
if [ "${EXIM_SRS_SUPPORT}" = "0" ]; then
do_exit 1 "Your version of Exim does not support SRS, which is needed for Easy Spam Fighter. Please update exim using the CustomBuild script: ./build exim."
fi
if [ ! -d ${WORKDIR}/easy_spam_fighter ]; then
mkdir -p ${WORKDIR}/easy_spam_fighter
chmod 700 ${WORKDIR}/easy_spam_fighter
fi
cd ${WORKDIR}
echo "Enabling Easy Spam Fighter..."
getFile easy_spam_fighter/exim.easy_spam_fighter-${EASY_SPAM_FIGHTER_VER}.tar.gz easy_spam_figther exim.easy_spam_fighter-${EASY_SPAM_FIGHTER_VER}.tar.gz
mkdir -p /etc/exim.easy_spam_fighter
tar xzf exim.easy_spam_fighter-${EASY_SPAM_FIGHTER_VER}.tar.gz -C /etc/exim.easy_spam_fighter
if [ -s /etc/virtual/esf_skip_ip ] && [ ! -s /etc/virtual/esf_skip_ips ]; then
mv -f /etc/virtual/esf_skip_ip /etc/virtual/esf_skip_ips
fi
if [ "$1" != "norestart" ]; then
echo "Restarting exim."
control_service exim restart
fi
echo "Easy Spam Fighter is now enabled."
writeLog "EasySpamFighter ${EASY_SPAM_FIGHTER_VER} installed"
}
####################################################
doRemoveEasySpamFighter() {
if [ "${EASY_SPAM_FIGHTER_OPT}" != "no" ]; then
do_exit 1 "You cannot remove Easy Spam Fighter, because you have enabled in options.conf file."
fi
cd ${WORKDIR}
echo "Removing Easy Spam Fighter..."
rm -rf /etc/exim.easy_spam_fighter
if [ "$1" != "norestart" ]; then
echo "Restarting exim."
control_service exim restart
fi
echo "Easy Spam Fighter is now removed."
writeLog "EasySpamFigther removed"
}
####################################################
do_rspamd_conf() {
if [ "${SPAMD_OPT}" != "rspamd" ]; then
do_exit 1 "spamd=rspamd is not set in options.conf."
fi
cd ${WORKDIR}
echo "Enabling Rspamd Config..."
RSDGZ=rspamd_conf-${RSPAMD_CONF_VER}.tar.gz
getFile easy_spam_fighter/rspamd/${RSPAMD_CONF_VER}/${RSDGZ} rspamd_conf ${RSDGZ}
mkdir -p /etc/exim/rspamd
tar xzf ${RSDGZ} -C /etc/exim/rspamd
if [ "$1" != "norestart" ]; then
echo "Restarting exim."
control_service exim restart
fi
echo "Rspamd config is now enabled."
writeLog "rspamd_config ${RSPAMD_CONF_VER} installed"
}
do_remove_rspamd_conf() {
if [ "${SPAMD_OPT}" = "rspamd" ]; then
do_exit 1 "You cannot remove rspamd_config, because you have enabled in options.conf file."
fi
cd ${WORKDIR}
echo "Removing Rspamd Config..."
remove_directory /etc/exim/rspamd
if [ "$1" != "norestart" ]; then
echo "Restarting exim."
control_service exim restart
fi
echo "Rspamd Config is now removed."
writeLog "rspamd_config removed"
}
doGrubConf() {
GRUB_CONF_LOCATIONS=`ls /boot/grub2/grub.cfg /boot/efi/EFI/redhat/grub.cfg /boot/efi/EFI/centos/grub.cfg /boot/efi/EFI/rocky/grub.cfg /boot/grub/grub.cfg 2>/dev/null`
GRUB_CONF_MODIFIED=false
HAS_XFS_ROOT=false
if mount | grep ' / ' | grep -m1 -q ' xfs '; then
HAS_XFS_ROOT=true
fi
if [ -x /usr/sbin/grub2-mkconfig ]; then
GRUB_MKCONFIG=/usr/sbin/grub2-mkconfig
elif [ -x /usr/sbin/grub-mkconfig ]; then
GRUB_MKCONFIG=/usr/sbin/grub-mkconfig
fi
if [ ! -d /sys/fs/cgroup/user.slice ] && [ -s /etc/default/grub ] && [ "${OS_CENTOS_VER}" != "7" ] && [ "${CLOUDLINUX_OPT}" = "no" ]; then
if [ ! -z "${GRUB_MKCONFIG}" ]; then
if [ -d /etc/default/grub.d ]; then
if ! grep -m1 -q 'systemd.unified_cgroup_hierarchy' /etc/default/grub; then
if ! grep -m1 -q 'systemd.unified_cgroup_hierarchy' /etc/default/grub.d/99-directadmin.cfg 2>/dev/null; then
if ! ${HAS_XFS_ROOT}; then
echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} systemd.unified_cgroup_hierarchy=1 psi=1"' > /etc/default/grub.d/99-directadmin.cfg
elif ! grep -m1 -q 'rootflags' /etc/default/grub; then
echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} rootflags=uquota,pquota systemd.unified_cgroup_hierarchy=1 psi=1"' > /etc/default/grub.d/99-directadmin.cfg
else
echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} systemd.unified_cgroup_hierarchy=1 psi=1"' > /etc/default/grub.d/99-directadmin.cfg
fi
GRUB_CONF_MODIFIED=true
fi
fi
if ${GRUB_CONF_MODIFIED}; then
find /boot -name 'grub.cfg' -exec ${GRUB_MKCONFIG} -o {} \;
fi
else
if ! grep -m1 -q 'systemd.unified_cgroup_hierarchy' /etc/default/grub; then
if ! ${HAS_XFS_ROOT}; then
echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} systemd.unified_cgroup_hierarchy=1 psi=1"' >> /etc/default/grub
elif ! grep -m1 -q 'rootflags' /etc/default/grub; then
echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} rootflags=uquota,pquota systemd.unified_cgroup_hierarchy=1 psi=1"' >> /etc/default/grub
else
echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} systemd.unified_cgroup_hierarchy=1 psi=1"' >> /etc/default/grub
fi
GRUB_CONF_MODIFIED=true
fi
if ${GRUB_CONF_MODIFIED}; then
find /boot -name 'grub.cfg' -exec ${GRUB_MKCONFIG} -o {} \;
fi
fi
fi
fi
if [ -s /etc/default/grub ] && ${HAS_XFS_ROOT}; then
if ! grep -m1 -q 'rootflags=uquota,pquota' /etc/default/grub; then
if [ ! -z "${GRUB_MKCONFIG}" ]; then
for grub_config in "${GRUB_CONF_LOCATIONS}"; do {
if ! grep -m1 -q 'rootflags' /etc/default/grub; then
if ${HAS_XFS_ROOT}; then
echo 'GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} rootflags=uquota,pquota"' >> /etc/default/grub
fi
GRUB_CONF_MODIFIED=true
find /boot -name 'grub.cfg' -exec ${GRUB_MKCONFIG} -o {} \;
fi
}
done
fi
fi
fi
if ${GRUB_CONF_MODIFIED}; then
echo "Grub configuration re-generated. Please reboot the box."
else
echo "No grub changes needed."
fi
}
####################################################
doEnsureEximFile() {
if [ "$1" != "" ]; then
if [ ! -e $1 ]; then
echo "Creating file $1..."
touch $1
chown mail:mail $1
chmod 600 $1
fi
fi
}
####################################################
doEximConf() {
if [ "${EXIMCONF_OPT}" != "yes" ]; then
do_exit 1 "You cannot update Exim configuration files, because you do not have it set in options.conf file."
fi
EXIMV=`exim_version`
EXIMV_MINORV=`echo "${EXIMV}" | cut -d'.' -f2`
set_sendmail_link
safeDownloadWithMove "/etc/exim.conf" "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/SpamBlocker/${EXIM_CONF_VER}/exim.conf-SpamBlockerTechnology-v${EXIM_CONF_VER}.txt"
chown root:root /etc/exim.conf
#used to determine if we need to remove some variables from the exim.conf or exim.variables.conf.
EXIMV="`exim_version`"
# Update system_filter.exim
if [ -e ${CWD}/custom/exim/system_filter.exim ]; then
cp -f ${CWD}/custom/exim/system_filter.exim /etc/system_filter.exim
else
safeDownloadWithMove "/etc/system_filter.exim" "${WEBPATH}/system_filter.exim"
fi
chmod 644 /etc/system_filter.exim
#Download additional files for exim.conf
EXIM_CONF_MERGED=/etc/exim.variables.conf.merged
EXIM_CONF_DEFAULT=/etc/exim.variables.conf.default
EXIM_CONF_CUSTOM=/etc/exim.variables.conf.custom
safeDownloadWithMove "/etc/exim.strings.conf" "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/SpamBlocker/${EXIM_CONF_VER}/exim.strings.conf"
safeDownloadWithMove "${EXIM_CONF_DEFAULT}" "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/SpamBlocker/${EXIM_CONF_VER}/exim.variables.conf.default"
chmod 644 /etc/exim.strings.conf
chmod 644 "${EXIM_CONF_DEFAULT}"
if [ -s "${EXIM_CONF_DEFAULT}" ]; then
#Make dovecot listen on port 10025 if dovecot_proxy is enabled
DOVECOT_PROXY=`getDA_Opt dovecot_proxy 0`
if [ ${DOVECOT_PROXY} -ne 0 ]; then
if ! grep -m1 -q '^daemon_smtp_ports.*10025' ${EXIM_CONF_DEFAULT}; then
perl -pi -e 's|^daemon_smtp_ports=25 : 587 : 465|daemon_smtp_ports=25 : 587 : 465 : 10025|g' ${EXIM_CONF_DEFAULT}
fi
fi
fi
if [ -s ${EXIM_CONF_DEFAULT} ]; then
if [ ${CPU_CORES} -gt 5 ]; then
perl -pi -e "s|^queue_run_max=5$|queue_run_max=${CPU_CORES}|g" ${EXIM_CONF_DEFAULT}
fi
if [ "${IPV6}" = "0" ]; then
perl -pi -e 's|disable_ipv6=false|disable_ipv6=true|' ${EXIM_CONF_DEFAULT}
else
perl -pi -e 's|disable_ipv6=true|disable_ipv6=false|' ${EXIM_CONF_DEFAULT}
fi
else
echo "";
echo "${boldon}*** ${EXIM_CONF_DEFAULT} does not exist or is empty ***${boldoff}";
echo "";
fi
doSslConfigurationEmail
if [ ! -s /etc/exim.variables.conf ] && [ -s ${EXIM_CONF_DEFAULT} ]; then
/bin/cp -f ${EXIM_CONF_DEFAULT} /etc/exim.variables.conf
fi
########################################
#need to do a merge here with exim.variables.conf.default and exim.variables.conf.custom, and save to exim.variables.conf
echo '#Do not edit this file directly' > ${EXIM_CONF_MERGED}
echo "#edit ${EXIM_CONF_CUSTOM}" >> ${EXIM_CONF_MERGED}
#because anything from custom, include extras (not in default), will always go in.
if [ -s ${EXIM_CONF_CUSTOM} ]; then
cat ${EXIM_CONF_CUSTOM} >> ${EXIM_CONF_MERGED}
fi
while read line; do
i=`echo $line | cut -d= -f1 | xargs`
if [ -e ${EXIM_CONF_CUSTOM} ]; then
if [ "`grep -m1 -c "^${i}[ ]*=" ${EXIM_CONF_CUSTOM}`" = "1" ]; then
continue
fi
fi
VALUE="`grep -m1 "^${i}[ ]*=" ${EXIM_CONF_DEFAULT} | cut -d= -f2 | xargs`"
if [ ! -z "${i}" ]; then
echo "${i}=${VALUE}" >> ${EXIM_CONF_MERGED}
fi
done < $EXIM_CONF_DEFAULT
mv -f ${EXIM_CONF_MERGED} /etc/exim.variables.conf
MAIL_SNI_OPT=`getDA_Opt mail_sni 1`
if [ "${MAIL_SNI_OPT}" -ge 1 ]; then
REPLACE_EXIM_TLS=false
if grep -m1 -q '^tls_certificate *= */etc/exim.\cert' /etc/exim.variables.conf; then
EXIM_TLS_FILE=/etc/exim.variables.conf
REPLACE_EXIM_TLS=true
elif grep -m1 -q '^tls_certificate *= */etc/exim.\cert' /etc/exim.conf; then
EXIM_TLS_FILE=/etc/exim.conf
REPLACE_EXIM_TLS=true
fi
if ${REPLACE_EXIM_TLS}; then
perl -pi -e 's|^tls_certificate *\= */etc/exim\.cert|tls_certificate=\$\{if exists\{/etc/virtual/snidomains\}\{\$\{lookup\{\$tls_in_sni\}nwildlsearch\{/etc/virtual/snidomains\}\{\$\{if exists\{/usr/local/directadmin/data/users/\$\{extract\{1\}\{:\}\{\$value\}\}/domains/\$\{extract\{2\}\{:\}\{\$value\}\}.cert.combined\}\{/usr/local/directadmin/data/users/\$\{extract\{1\}\{:\}\{\$value\}\}/domains/\$\{extract\{2\}\{:\}\{\$value\}\}.cert.combined\}\{/etc/exim.cert\}\}\}\{/etc/exim.cert\}\}\}\{/etc/exim.cert\}\}|' ${EXIM_TLS_FILE}
perl -pi -e 's|^tls_privatekey *\= */etc/exim\.key|tls_privatekey=\$\{if exists\{/etc/virtual/snidomains\}\{\$\{lookup\{\$tls_in_sni\}nwildlsearch\{/etc/virtual/snidomains\}\{\$\{if exists\{/usr/local/directadmin/data/users/\$\{extract\{1\}\{:\}\{\$value\}\}/domains/\$\{extract\{2\}\{:\}\{\$value\}\}.key\}\{/usr/local/directadmin/data/users/\$\{extract\{1\}\{:\}\{\$value\}\}/domains/\$\{extract\{2\}\{:\}\{\$value\}\}.key\}\{/etc/exim.key\}\}\}\{/etc/exim.key\}\}\}\{/etc/exim.key\}\}|' ${EXIM_TLS_FILE}
fi
fi
if ! grep -m1 -q '^tls_dhparam' /etc/exim.variables.conf; then
if [ ! -s /etc/exim_dh.pem ]; then
ensure_dhparam /etc/exim_dh.pem
chown mail:mail /etc/exim_dh.pem
chmod 400 /etc/exim_dh.pem
fi
if [ -s /etc/exim_dh.pem ]; then
echo 'tls_dhparam = /etc/exim_dh.pem' >> /etc/exim.variables.conf
echo 'tls_dh_max_bits = 4096' >> /etc/exim.variables.conf
fi
fi
EXIM_SRS_CONF=/etc/exim.srs.conf
if ! grep -q '^SRS_SECRET' ${EXIM_SRS_CONF} 2>/dev/null; then
echo -n "SRS_SECRET = " > ${EXIM_SRS_CONF}
/usr/bin/openssl rand -base64 48 >> ${EXIM_SRS_CONF}
fi
safeDownloadWithMove "/etc/exim.pl" "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.pl.${EXIM_PL_VER}"
chmod 755 /etc/exim.pl
if [ ! -e /etc/virtual/limit ]; then
echo "/etc/virtual/limit not found. Creating with a value of 0..."
echo "0" > /etc/virtual/limit
chown mail:mail /etc/virtual/limit
fi
if [ ! -d /etc/virtual/usage ]; then
echo "/etc/virtual/usage not found. Creating..."
mkdir -p /etc/virtual/usage
chown mail:mail /etc/virtual/usage
fi
doEnsureEximFile /etc/virtual/bad_sender_hosts
doEnsureEximFile /etc/virtual/bad_sender_hosts_ip
doEnsureEximFile /etc/virtual/blacklist_domains
doEnsureEximFile /etc/virtual/blacklist_senders
doEnsureEximFile /etc/virtual/whitelist_domains
doEnsureEximFile /etc/virtual/whitelist_hosts
doEnsureEximFile /etc/virtual/whitelist_hosts_ip
doEnsureEximFile /etc/virtual/whitelist_senders
doEnsureEximFile /etc/virtual/use_rbl_domains
doEnsureEximFile /etc/virtual/skip_av_domains
doEnsureEximFile /etc/virtual/skip_rbl_domains
if [ "${PIGEONHOLE_OPT}" = "yes" ]; then
cd ${WORKDIR}
perl -pi -e 's#transport = virtual_localdelivery#transport = dovecot_lmtp_udp#' /etc/exim.conf
fi
if [ "${BLOCKCRACKING_OPT}" = "yes" ]; then
doBlockCracking norestart
else
rm -rf /etc/exim.blockcracking
fi
if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then
doEasySpamFighter norestart
else
rm -rf /etc/exim.easy_spam_fighter
fi
if [ "${CAGEFS_OPT}" = "yes" ]; then
echo "force_command" > /etc/exim.cagefs.pipe.conf
echo 'command = /bin/cagefs_enter $address_pipe' >> /etc/exim.cagefs.pipe.conf
chmod 644 /etc/exim.cagefs.pipe.conf
else
rm -f /etc/exim.cagefs.pipe.conf
fi
if [ "${SPAMD_OPT}" = "no" ]; then
rm -f /etc/exim.spamassassin.conf
rm -f /etc/exim.spamd.conf
rm -f /etc/exim.spamd.load.conf
if [ -d /etc/exim/rspamd ]; then
if [ ! -d /etc/exim/rspamd_disabled ]; then
echo "Renaming /etc/exim/rspamd to /etc/exim/rspamd_disabled..."
mv /etc/exim/rspamd /etc/exim/rspamd_disabled
else
echo "Removing old /etc/exim/rspamd directory..."
rm -rf /etc/exim/rspamd
fi
fi
elif [ "${SPAMD_OPT}" = "rspamd" ]; then
# we don't need the below as the spamd_address is in /etc/exim/rspamd/variables.conf.
# echo "Enabling rspamd in /etc/exim.spamd.load.conf..."
# echo 'spamd_address = 127.0.0.1 11333 retry=20s variant=rspamd' > /etc/exim.spamd.load.conf
# cp -fv ${SPAMD_CONF} /etc/exim.spamd.conf
do_rspamd_conf norestart
elif [ "${SPAMD_OPT}" = "spamassassin" ]; then
if [ "`version_cmp ${EXIMCONF_RELEASE_OPT} 4.6 'exim.conf ver check for ACL spam check'`" -lt 0 ]; then
perl -pi -e 's|#.include_if_exists /etc/exim.spamassassin.conf|.include_if_exists /etc/exim.spamassassin.conf|' /etc/exim.conf
if [ ! -s /etc/exim.spamassassin.conf ]; then
safeDownloadWithMove "/etc/exim.spamassassin.conf" "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.spamassassin.conf"
chmod 644 /etc/exim.spamassassin.conf
fi
rm -f /etc/exim.spamd.conf
else
echo "Enabling SpamAssassin in /etc/exim.spamd.load.conf..."
echo 'spamd_address = 127.0.0.1 783 retry=20s' > /etc/exim.spamd.load.conf
cp -fv ${SPAMD_CONF} /etc/exim.spamd.conf
fi
if [ -d /etc/exim/rspamd ]; then
if [ ! -d /etc/exim/rspamd_disabled ]; then
echo "Renaming /etc/exim/rspamd to /etc/exim/rspamd_disabled..."
mv /etc/exim/rspamd /etc/exim/rspamd_disabled
else
echo "Removing old /etc/exim/rspamd directory..."
rm -rf /etc/exim/rspamd
fi
fi
fi
if [ ! -s ${DACONF_FILE} ]; then
DKIM_ENABLED=true
elif /usr/local/directadmin/directadmin c | grep -m1 -q '^dkim=0$'; then
DKIM_ENABLED=false
else
DKIM_ENABLED=true
fi
if ${DKIM_ENABLED}; then
DKIM_SELECTOR="x"
if /usr/local/directadmin/directadmin c | grep -m1 -q '^dkim_selector='; then
DKIM_SELECTOR="`/usr/local/directadmin/directadmin c | grep -m1 '^dkim_selector=' | cut -d'=' -f2`"
fi
if [ "${DKIM_SELECTOR}" = "" ]; then
DKIM_SELECTOR="x"
fi
GET_EXIM_DKIM_CONF=0
if [ ! -s /etc/exim.dkim.conf ]; then
GET_EXIM_DKIM_CONF=1
else
#older versions of exim do not support ret=key in lsearch
EXIMV=`exim_version`
LATEST_DKIM_VER=`getVer exim_dkim_conf`
LIVE_DKIM_VER=`exim_dkim_conf_version`
#if [ "`version_cmp ${LIVE_DKIM_VER} ${LATEST_DKIM_VER} 'exim.dkim.conf version check'`" -lt 0 ]; then
if [ "${LIVE_DKIM_VER}" != "${LATEST_DKIM_VER}" ]; then
GET_EXIM_DKIM_CONF=1
fi
fi
if [ "$GET_EXIM_DKIM_CONF" = "1" ]; then
CUST_EXIM_DKIM_CONF=${CWD}/custom/exim/exim.dkim.conf
if [ -e ${CUST_EXIM_DKIM_CONF} ]; then
echo "${boldon}Copying custom ${CUST_EXIM_DKIM_CONF} to /etc/exim.dkim.conf${boldoff}"
/bin/cp -f ${CUST_EXIM_DKIM_CONF} /etc/exim.dkim.conf
else
safeDownloadWithMove "/etc/exim.dkim.conf" "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.dkim.conf"
fi
fi
chmod 644 /etc/exim.dkim.conf
perl -pi -e "s|dkim_selector \= .*|dkim_selector = ${DKIM_SELECTOR}|g" /etc/exim.dkim.conf
else
rm -f /etc/exim.dkim.conf
fi
if [ "${CLAMAV_EXIM_OPT}" = "yes" ] && [ "${CLAMAV_OPT}" = "yes" ]; then
perl -pi -e 's|#.include_if_exists /etc/exim.clamav.load.conf|.include_if_exists /etc/exim.clamav.load.conf|' /etc/exim.conf
perl -pi -e 's|#.include_if_exists /etc/exim.clamav.conf|.include_if_exists /etc/exim.clamav.conf|' /etc/exim.conf
if [ "${CLAMAV_EXIM_OPT}" = "yes" ]; then
if [ ! -s /etc/exim.clamav.load.conf ]; then
safeDownloadWithMove "/etc/exim.clamav.load.conf" "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.load.conf"
fi
chmod 644 /etc/exim.clamav.load.conf
if [ ! -s /etc/exim.clamav.conf ]; then
safeDownloadWithMove "/etc/exim.clamav.conf" "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.conf"
fi
chmod 644 /etc/exim.clamav.conf
fi
else
rm -f /etc/exim.clamav.load.conf
rm -f /etc/exim.clamav.conf
fi
#include magicspam
if [ -x /usr/share/magicspam/bin/activate_module ]; then
/usr/share/magicspam/bin/activate_module
fi
if [ "${SPAMD_OPT}" = "spamassassin" ]; then
set_service spamd ON
elif [ "${SPAMD_OPT}" != "spamassassin" ]; then
set_service spamd delete
fi
if [ "${SPAMD_OPT}" = "rspamd" ]; then
set_service rspamd ON
else
set_service rspamd delete
fi
echo "Restarting exim."
control_service exim restart
COUNT_LMTP=0
if [ -e /etc/exim.conf ]; then
COUNT_LMTP=`grep -c 'transport = dovecot_lmtp_udp' /etc/exim.conf`
fi
if [ ! -e /etc/dovecot/conf/lmtp.conf ] && [ "${COUNT_LMTP}" = "1" ] && [ -e /etc/dovecot/dovecot.conf ]; then
if ! grep -q 'protocol lmtp' /etc/dovecot/dovecot.conf; then
echo "${boldon}WARNING:${boldoff} make sure you have LMTP enabled in dovecot.conf, './build dovecot_conf' should fix it."
fi
fi
writeLog "exim.conf installed"
}
####################################################
compile_mysql_binary() {
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
MYSQLURL=${WEBPATH_SERVICES}/all/mariadb/${MARIADB_OPT}/${MARIADB_VER}
MYSQLSRC=mariadb-${MARIADB_VER}
getFile mariadb/${MARIADB_OPT}/${MARIADB_VER}/${MYSQLSRC}.tar.gz mariadb${MARIADB_OPT} ${MYSQLSRC}.tar.gz
else
MYSQLURL=${WEBPATH_SERVICES}/all/mysql/${MYSQL_OPT}/${MYSQL_VER}
MYSQLSRC=mysql-${MYSQL_VER}
getFile mysql/${MYSQL_OPT}/${MYSQL_VER}/${MYSQLSRC}.tar.gz mysql${MYSQL_OPT} ${MYSQLSRC}.tar.gz
fi
if [ -e ${MYSQLSRC} ]; then
echo "Found old ${MYSQLSRC}, removing ..."
rm -rf ${MYSQLSRC}
fi
echo "Extracting ${MYSQLSRC}.tar.gz ... "
tar xzf ${MYSQLSRC}.tar.gz --no-same-owner
if [ $? -ne 0 ]; then
do_exit 1 "Failed to extract: ${MYSQLSRC}.tar.gz. Exiting..."
fi
cd ${MYSQLSRC}
CFLAGS=-DHAVE_BROKEN_REALPATH
if [ ! -e /usr/lib/libaio.so.1 ] && [ ! -e /lib64/libaio.so.1 ] && [ ! -e /lib/libaio.so.1 ] && [ ! -e /lib/x86_64-linux-gnu/libaio.so.1 ] && [ ! -e /usr/lib/aarch64-linux-gnu/libz.so.1 ] && [ ! -e /lib/i386-linux-gnu/libaio.so.1 ]; then
echo "Cannot find libaio.so.1. Please install libaio"
if [ -e /etc/debian_version ]; then
echo "apt-get install libaio1 libaio-dev"
else
echo "yum install libaio"
fi
return
fi
if [ -e /etc/debian_version ]; then
if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ]; then
echo "Cannot find cmake, please install it."
echo "apt-get install cmake"
echo "If your package manager is not working, see: https://help.directadmin.com/item.php?id=494"
return
fi
fi
if [ -e ${WORKDIR}/custom/mysql/cmake.mysql ]; then
${WORKDIR}/custom/mysql/cmake.mysql
else
CMAKE_APPEND=""
if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then
CMAKE_APPEND=" -DDOWNLOAD_BOOST=ON -DWITH_BOOST=/usr/local/boost_mysql -DFORCE_INSOURCE_BUILD=1"
fi
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_SYSTEMD=yes -DWITH_UNIT_TESTS=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,PERFSCHEMA,SPIDER,SPHINX}=NO -DWITH_SAFEMALLOC=OFF -DMYSQL_MAINTAINER_MODE=OFF \
-DWITH_ZLIB=system -DWITH_EXTRA_CHARSETS=all${CMAKE_APPEND} -G Ninja
fi
echo "Done. Making ${MYSQLSRC}..."
while echo "Trying to make ${MYSQLSRC}..."; do
cmake --build . -- -j${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Packaging ${MYSQLSRC}..."
./scripts/make_binary_distribution
echo "Moving ${MYSQLSRC}-*.tar.gz to ${WORKDIR} ..."
mv -f ${MYSQLSRC}-*.tar.gz ..
cd ..
echo "Done."
writeLog "${MYSQLSRC}.tar.gz compiled"
}
all_databases() {
if [ "$MYSQLUSER" = "" ] || [ "$MYSQLPASSWORD" = "" ]; then
do_exit 1 "all_databases: user or password is blank"
fi
if [ -d ${MYSQL_DATA} ]; then
initMySQL
#Assumes that MYSQLUSER and MYSQLPASSWORD are already set.
CMD="echo 'SHOW DATABASES' | $MYSQL_BIN --defaults-extra-file=${DA_MY_CNF}"
eval $CMD | grep -v '^Database$' | grep -v '^information_schema$' | grep -v '^performance_schema$'
fi
}
doMySQLback() {
if [ "${MYSQL_BACKUP_OPT}" = "yes" ] && [ -d ${MYSQL_DATA} ]; then
initMySQL
MYSQLDUMP=/usr/local/mysql/bin/mysqldump
if [ ! -e $MYSQLDUMP ]; then
MYSQLDUMP=/usr/bin/mysqldump
fi
if [ ! -e $MYSQLDUMP ]; then
if [ -d "${MYSQL_DATA}" ]; then
echo "Cannot find $MYSQLDUMP"
fi
return
fi
if [ ! -d ${MYSQL_BACKUP_DIR_OPT} ]; then
mkdir -p ${MYSQL_BACKUP_DIR_OPT}
fi
chmod 700 ${MYSQL_BACKUP_DIR_OPT}
EXTRA_MYSQLDUMP_OPTIONS=""
if /usr/local/directadmin/directadmin c | grep -m1 -q '^extra_mysqldump_options='; then
EXTRA_MYSQLDUMP_OPTIONS="`/usr/local/directadmin/directadmin c | grep -m1 '^extra_mysqldump_options=' | cut -d'=' -f2-`"
fi
# sysbk code
if [ -d ${MYSQL_DATA} ]; then
cd ${MYSQL_DATA}
for i in `all_databases`; do
printf "\tDumping database $i \n"
printf "\tDumping database $i \n" >> ${WORKDIR}/mysql_backups.log
if [ "${MYSQL_BACKUP_GZIP_OPT}" = "yes" ]; then
$MYSQLDUMP --defaults-extra-file=${DA_MY_CNF} --add-drop-database --databases --routines -f ${EXTRA_MYSQLDUMP_OPTIONS} -l $i | gzip > ${MYSQL_BACKUP_DIR_OPT}/$i.sql.gz
if [ $? -ne 0 ]; then
echo "BACKUP OF ${i} FAILED!"
fi
chmod 660 ${MYSQL_BACKUP_DIR_OPT}/$i.sql.gz
else
$MYSQLDUMP --defaults-extra-file=${DA_MY_CNF} --add-drop-database --databases --routines -f ${EXTRA_MYSQLDUMP_OPTIONS} -l $i > ${MYSQL_BACKUP_DIR_OPT}/$i.sql
if [ $? -ne 0 ]; then
echo "BACKUP OF ${i} FAILED!"
fi
chmod 660 ${MYSQL_BACKUP_DIR_OPT}/$i.sql
fi
done
else
echo "${MYSQL_DATA} directory does not exist, nothing to backup"
fi
fi
}
backup_libmysqlclient() {
if [ ! -e /etc/debian_version ]; then
return
fi
LDD=/usr/bin/ldd
LIB_PATH=/usr/local/mysql/lib
if ${LDD} ${DA_BIN} 2>/dev/null | grep -m1 -q libmysqlclient.so; then
LIB_NAME=`${LDD} ${DA_BIN} 2>/dev/null | grep -m1 'libmysqlclient.so' | awk '{ print $1; }'`
CLIENT_LIB=`${LDD} ${DA_BIN} 2>/dev/null | grep -m1 'libmysqlclient.so' | awk '{ print $3; }'`
if [ -s "${CLIENT_LIB}" ]; then
echo "Backing up ${CLIENT_LIB} to ${WORKDIR}/${LIB_NAME}"
cp -fp ${CLIENT_LIB} ${WORKDIR}/${LIB_NAME}
fi
fi
}
restore_libmysqlclient() {
if [ ! -e /etc/debian_version ]; then
return
fi
LDD=/usr/bin/ldd
LIB_PATH=/usr/local/mysql/lib
if ${LDD} ${DA_BIN} 2>/dev/null | grep -m1 -q 'libmysqlclient.so'; then
LIB_NAME=`${LDD} ${DA_BIN} 2>/dev/null | grep -m1 'libmysqlclient.so' | awk '{ print $1; }'`
CLIENT_LIB=${LIB_PATH}/${LIB_NAME}
if [ ! -s "${CLIENT_LIB}" ]; then
if [ ! -s ${WORKDIR}/${LIB_NAME} ]; then
echo "Cannot find ${WORKDIR}/${LIB_NAME} to restore."
echo "DirectAdmin might crash. If needed, see this guide:"
echo "https://help.directadmin.com/item.php?id=236"
return
fi
cp -fp ${WORKDIR}/${LIB_NAME} ${CLIENT_LIB}
fi
fi
}
#To make sure local-infile is disabled
setup_my_cnf() {
echo "Ensuring local-infile is disabled for security reasons in MySQL configuration file..."
MY_CNF_FILE=/etc/my.cnf
if [ -e ${MY_CNF_FILE} ]; then
if grep -m1 -q -F 'includedir /etc/my.cnf.d' ${MY_CNF_FILE}; then
if [ -e /etc/my.cnf.d/server.cnf ]; then
MY_CNF_FILE=/etc/my.cnf.d/server.cnf
fi
fi
if grep -m1 -q '[mysqld]' ${MY_CNF_FILE}; then
if ! grep -m1 -q 'local-infile' ${MY_CNF_FILE}; then
perl -pi -e 's#\[mysqld\]#[mysqld]\nlocal-infile = 0#' ${MY_CNF_FILE}
fi
else
if ! grep -m1 -q 'local-infile' ${MY_CNF_FILE}; then
echo '[mysqld]' >> ${MY_CNF_FILE}
echo 'local-infile = 0' >> ${MY_CNF_FILE}
fi
fi
if ! grep -m1 -q 'max_allowed_packet' ${MY_CNF_FILE}; then
if ! grep -m1 -q 'max-allowed-packet' ${MY_CNF_FILE}; then
perl -pi -e 's#\[mysqld\]#[mysqld]\nmax_allowed_packet=64M#' ${MY_CNF_FILE}
fi
fi
if [ "${OS_CENTOS_VER}" = "9" ]; then
if ! grep -q '\[client\]' ${MY_CNF_FILE}; then
echo "" >> ${MY_CNF_FILE}
echo "[client]" >> ${MY_CNF_FILE}
echo "socket=/var/lib/mysql/mysql.sock" >> ${MY_CNF_FILE}
elif grep -q '\[client\]' ${MY_CNF_FILE}; then
if ! grep -q '^socket=' ${MY_CNF_FILE}; then
perl -pi -e 's#\[client\]#[client]\nsocket=/var/lib/mysql/mysql.sock#' ${MY_CNF_FILE}
fi
fi
fi
fi
}
ensure_cmake() {
if [ -e /etc/debian_version ]; then
CMAKE_NAME="cmake"
elif [ "${OS_CENTOS_VER}" = "7" ]; then
CMAKE_NAME="cmake3"
else
CMAKE_NAME="cmake"
fi
if [ "${CMAKE_NAME}" = "cmake" ]; then
if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ] && [ ! -e /usr/bin/cmake3 ]; then
echo "Cannot find ${CMAKE_NAME}, installing it..."
if [ -e /etc/debian_version ]; then
echo "apt-get -y install ${CMAKE_NAME}"
else
yum -y install ${CMAKE_NAME}
fi
fi
elif [ ! -e /usr/bin/cmake3 ]; then
yum -y install ${CMAKE_NAME} --enablerepo=${EPEL_REPO_NAME}
fi
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage ninja-build` -ne 0 ]; then
if [ "${OS_CENTOS_VER}" = "9" ]; then
yum -y install ninja-build --enablerepo=crb
elif [ "${OS_CENTOS_VER}" = "8" ]; then
yum -y install ninja-build --enablerepo=${POWERTOOLS}
else
yum -y install ninja-build
fi
fi
elif [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage ninja-build` -ne 0 ]; then
apt-get -y install ninja-build
ldconfig
fi
fi
}
ensure_libnuma() {
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage numactl-devel` -ne 0 ]; then
yum -y install numactl-devel
ldconfig
fi
elif [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libnuma-dev` -ne 0 ]; then
apt-get -y install libnuma-dev libnuma1
ldconfig
fi
fi
}
ensure_libtirpc() {
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage libtirpc-devel` -ne 0 ]; then
if [ "${OS_CENTOS_VER}" = "9" ]; then
yum -y install libtirpc-devel --enablerepo=crb
else
yum -y install libtirpc-devel
fi
ldconfig
fi
elif [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libtirpc-dev` -ne 0 ]; then
apt-get -y install libtirpc-dev
ldconfig
fi
fi
}
ensure_rpcgen() {
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage rpcgen` -ne 0 ]; then
if [ "${OS_CENTOS_VER}" = "9" ]; then
yum -y install rpcgen --enablerepo=crb
elif [ "${OS_CENTOS_VER}" = "8" ]; then
yum -y install rpcgen --enablerepo=${POWERTOOLS}
fi
ldconfig
fi
elif [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage rpcsvc-proto` -ne 0 ]; then
apt-get -y install rpcsvc-proto
ldconfig
fi
fi
}
ensure_libpmem() {
if [ ! -e /usr/lib/libpmem.so.1 ] && [ ! -e /usr/lib/i386-linux-gnu/libpmem.so.1 ] && [ ! -e /usr/lib64/libpmem.so.1 ] && [ ! -e /lib64/libpmem.so.1 ] && [ ! -e /lib/libpmem.so.1 ] && [ ! -e /lib/i386-linux-gnu/libpmem.so.1 ] && [ ! -e /usr/lib/x86_64-linux-gnu/libpmem.so.1 ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find libpmem.so.1, installing using apt-get..."
apt-get -y install libpmem-dev libpmem1
else
echo "Cannot find libpmem.so.1, installing using yum..."
yum -y install libpmem
fi
fi
}
setup_mysql_root_user() {
cd ${CWD}
if [ "${MYSQLPASSWORD}" = "nothing" ]; then
MYSQLPASSWORD="`random_pass`"
if [ -s ${DA_MYSQL} ]; then
perl -pi -e "s|\=nothing$|=${MYSQLPASSWORD}|g" ${DA_MYSQL}
perl -pi -e "s|\=\"nothing\"$|=\"${MYSQLPASSWORD}\"|g" ${DA_MYSQL}
else
echo "user=da_admin" > ${DA_MYSQL}
echo "passwd=${MYSQLPASSWORD}" >> ${DA_MYSQL}
chown -f diradmin:diradmin ${DA_MYSQL}
chmod -f 400 ${DA_MYSQL}
fi
if [ -s ${DA_MY_CNF} ]; then
perl -pi -e "s|\=\"nothing\"$|=\"${MYSQLPASSWORD}\"|g" ${DA_MY_CNF}
fi
if [ -s /usr/local/directadmin/scripts/setup.txt ]; then
if grep -q '^mysql\=' /usr/local/directadmin/scripts/setup.txt; then
perl -pi -e "s|^mysql\=.*$|mysql=${MYSQLPASSWORD}|g" /usr/local/directadmin/scripts/setup.txt
else
echo "mysql=${MYSQLPASSWORD}" >> /usr/local/directadmin/scripts/setup.txt
fi
fi
fi
if [ -z "${SQL_PATH_IS_SETUP}" ]; then
if ${SQL_PATH_IS_EMPTY}; then
MYSQL_ROOT_PASS=""
ROOT_PASS_SET=true
if [ ! -d ${MYSQL_DATA}/mysql ]; then
echo "${MYSQL_DATA}/mysql does not exist, running clean mysql data installation..."
# Clean /root/.mysql_secret up
echo -n '' > /root/.mysql_secret
mkdir -p ${MYSQL_DATA}
chown mysql:mysql ${MYSQL_DATA}
chmod 711 ${MYSQL_DATA}
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
FORCE_APPEND="--force"
elif [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "${MYSQL_VER_OPT}" = "5.6" ]; then
FORCE_APPEND="--random-password-file=/root/.mysql_secret"
else
FORCE_APPEND=""
fi
if [ -s /etc/debian_version ] || [ "${MYSQL_FORCE_COMPILE_OPT}" = "yes" ] || [ "${OS_CENTOS_VER}" = "9" ]; then
MYSQL_BASEDIR_PATH="/usr/local/mysql"
else
MYSQL_BASEDIR_PATH="/usr"
fi
if [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "${MYSQL_OPT}" != "5.5" ] && [ "${MYSQL_OPT}" != "5.6" ]; then
if [ -x /usr/sbin/mysqld ]; then
MYSQL_ROOT_PASS=`/usr/sbin/mysqld --initialize --user=mysql --basedir=${MYSQL_BASEDIR_PATH} --datadir=${MYSQL_DATA} 2>&1 | grep 'temporary password' | tail -n1 | grep -o 'root@localhost: .*' | awk '{print $2}'`
else
MYSQL_ROOT_PASS=`/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=${MYSQL_BASEDIR_PATH} --datadir=${MYSQL_DATA} 2>&1 | grep 'temporary password' | tail -n1 | grep -o 'root@localhost: .*' | awk '{print $2}'`
fi
elif [ -x ${MYSQL_BIN}_install_db ]; then
${MYSQL_BIN}_install_db --user=mysql --basedir=${MYSQL_BASEDIR_PATH} --datadir=${MYSQL_DATA} ${FORCE_APPEND}
elif [ -x /usr/local/mysql/scripts/mysql_install_db ]; then
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=${MYSQL_BASEDIR_PATH} --datadir=${MYSQL_DATA} ${FORCE_APPEND}
fi
if [ -s /root/.mysql_secret ]; then
ROOT_PASS_SET=true
elif [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "${MYSQL_OPT}" = "8.0" ]; then
ROOT_PASS_SET=true
elif [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "${MYSQL_OPT}" = "5.7" ]; then
ROOT_PASS_SET=true
else
ROOT_PASS_SET=false
fi
fi
control_service mysqld start
sleep 5
if [ -z "${MYSQL_ROOT_PASS}" ]; then
if ${ROOT_PASS_SET} && [ -s /root/.mysql_secret ] && [ "${MYSQL_OPT}" != "8.0" ]; then
if find /root/.mysql_secret -mmin -5 -type f 2>/dev/null | grep -m1 -q '/root/.mysql_secret'; then
MYSQL_ROOT_PASS="`grep -o ': .*$' /root/.mysql_secret | cut -d ' ' -f2 | tail -n1`"
if [ "${MYSQL_ROOT_PASS}" = "" ]; then
MYSQL_ROOT_PASS="`tail -n1 /root/.mysql_secret`"
fi
fi
fi
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then
if [ -x /bin/journalctl ]; then
MYSQL_ROOT_PASS=`journalctl -xe -u mysqld |grep 'temporary password' | tail -n1 | grep -o 'root@localhost: .*' | awk '{print $2}'`
fi
if [ -s /var/log/mysqld.log ] && [ -z "${MYSQL_ROOT_PASS}" ]; then
MYSQL_ROOT_PASS=`grep 'temporary password' /var/log/mysqld.log | tail -n1 | grep -o 'root@localhost: .*' | awk '{print $2}'`
fi
fi
fi
fi
USE_NEW_SET_PASSWORD=1
MYSQLV=`mysql_main`
INDENTIFIED_WITH_STRING="IDENTIFIED"
#for MySQL 8.0, SET PASSWORD doesn't specify PASSWORD()
if [ "${MYSQLV}" = "5.5" ] || [ "${MYSQLV}" = "5.6" ]; then
USE_NEW_SET_PASSWORD=0
INDENTIFIED_WITH_STRING="IDENTIFIED"
elif [ "${MYSQLV}" = "5.7" ]; then
INDENTIFIED_WITH_STRING="IDENTIFIED"
elif [ "`has_mariadb`" = "1" ]; then
if [ "${MYSQLV}" != "10.3" ] && [ "${MYSQLV}" != "10.4" ] && [ "${MYSQLV}" != "10.5" ] && [ "${MYSQLV}" != "10.6" ]; then
USE_NEW_SET_PASSWORD=0
fi
INDENTIFIED_WITH_STRING="IDENTIFIED"
else
INDENTIFIED_WITH_STRING="IDENTIFIED WITH mysql_native_password"
fi
${MYSQL_BIN}admin --user=root --password="${MYSQL_ROOT_PASS}" password "${MYSQLPASSWORD}" 2>&1 >/dev/null
if [ "$?" != "0" ]; then
echo "Error setting root pass using ${MYSQL_BIN}admin. Trying SET PASSWORD."
if [ "${USE_NEW_SET_PASSWORD}" = "1" ]; then
echo "Setting password: ALTER USER 'root'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';"
${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "ALTER USER 'root'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';" --host=${MYSQLHOST} >/dev/null 2>&1
else
echo "Setting password: SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQLPASSWORD}');"
${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQLPASSWORD}');" --host=${MYSQLHOST} >/dev/null 2>&1
fi
if [ "$?" = "0" ]; then
echo "That worked! Root password should be set."
else
echo "*********************************"
echo ""
echo "We seem to have an error when trying to SET PASSWORD FOR 'root'@'localhost'";
echo ""
do_exit 1 "*********************************"
fi
fi
${MYSQL_BIN} --user=root --password='' -e "quit" >/dev/null 2>&1
if [ "$?" = "0" ]; then
echo "MySQL root password seems to be unset, setting using MySQL queries..."
if [ "${USE_NEW_SET_PASSWORD}" = "1" ]; then
echo "Setting password: ALTER USER 'root'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';"
${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "ALTER USER 'root'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';" --host=${MYSQLHOST} >/dev/null 2>&1
else
echo "Setting password: SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQLPASSWORD}');"
${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQLPASSWORD}');" --host=${MYSQLHOST} 2>&1 >/dev/null
fi
fi
${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "quit" >/dev/null 2>&1
if [ "$?" != "0" ]; then
do_exit 1 "Unable to login using root MySQL credentials. Aborting installation..."
fi
#Creating da_admin user
${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "CREATE USER 'da_admin'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';" 2>&1 >/dev/null
if [ "${USE_NEW_SET_PASSWORD}" = "1" ]; then
${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "ALTER USER 'root'@'localhost' ${INDENTIFIED_WITH_STRING} BY '${MYSQLPASSWORD}';" --host=${MYSQLHOST} >/dev/null 2>&1
else
${MYSQL_BIN} --user=root --password="${MYSQL_ROOT_PASS}" -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQLPASSWORD}');" --host=${MYSQLHOST} >/dev/null 2>&1
fi
${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "GRANT ALL PRIVILEGES ON *.* TO 'da_admin'@'localhost' WITH GRANT OPTION;" 2>&1 >/dev/null
#Dropping MySQL test databases
${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "DROP DATABASE IF EXISTS test;" 2>&1 >/dev/null
${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';" 2>&1 >/dev/null
if [ "${MARIADB_OPT}" != "10.4" ] && [ "${MARIADB_OPT}" != "10.5" ] && [ "${MARIADB_OPT}" != "10.6" ] && [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "DELETE FROM mysql.user WHERE User='';" 2>&1 >/dev/null
${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';" 2>&1 >/dev/null
${MYSQL_BIN} --user=root --password="${MYSQLPASSWORD}" -e "FLUSH PRIVILEGES;" 2>&1 >/dev/null
fi
SQL_PATH_IS_SETUP="yes"
initMySQL
fi
fi
}
doMySQL() {
if [ "${MYSQL_INST_OPT}" != "yes" ] && [ "${MYSQL_INST_OPT}" != "mariadb" ] && [ "${MYSQL_INST_OPT}" != "mysql" ]; then
do_exit 1 "You cannot install ${MYSQLNAME}, because you do not have it set in options.conf file."
fi
if [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "`has_mariadb`" = "1" ] && [ -e ${MYSQL_BIN} ] && [ -d ${MYSQL_DATA}/mysql ]; then
MYSQL_MAIN="`mysql_main`"
if [ "${MYSQL_MAIN}" != "5.5" ] && [ "${MYSQL_OPT}" != "5.5" ]; then
echo "mysql_inst=mysql is set in the options.conf, but MariaDB is currently installed"
do_exit 1 "If you wish to use MySQL, please install MySQL 5.5 first, and then you'd be able to upgrade to a newer version of it. Please note that MariaDB 10.x migration to MySQL is considered a downgrade and might not work."
fi
fi
if [ "${MYSQL_INST_OPT}" = "mysql" ] && [ -e ${MYSQL_BIN} ] && [ -d ${MYSQL_DATA}/mysql ]; then
MYSQL_MAIN="`mysql_main`"
if [ "${MYSQL_MAIN}" != "${MYSQL_OPT}" ]; then
if ! echo "5.1 ${MYSQL_SET}" | grep -m1 -q "${MYSQL_MAIN} ${MYSQL_OPT}"; then
echo "MySQL ${MYSQL_MAIN} cannot be directly upgraded to ${MYSQL_OPT}"
do_exit 1 "If you wish to upgrade MySQL to ${MYSQL_OPT}, do it in increments, upgrading ${MYSQL_MAIN} to the next version released, and going up until you reach ${MYSQL_OPT}."
fi
fi
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ] && [ -e ${MYSQL_BIN} ] && [ -d ${MYSQL_DATA}/mysql ]; then
MYSQL_MAIN="`mysql_main`"
UPGRADE_TEXT="MySQL ${MYSQL_MAIN} cannot be directly upgraded to MariaDB ${MARIADB_OPT}, as this is considered a downgrade. More info: https://help.directadmin.com/item.php?id=563"
if [ "${MYSQL_MAIN}" = "8.0" ]; then
do_exit 1 "${UPGRADE_TEXT}"
elif [ "${MYSQL_MAIN}" = "5.7" ] && [ "${MYSQL_OPT}" = "5.5" ]; then
do_exit 1 "${UPGRADE_TEXT}"
elif [ "${MYSQL_MAIN}" = "5.7" ] && [ "${MYSQL_OPT}" = "10.0" ]; then
do_exit 1 "${UPGRADE_TEXT}"
elif [ "${MYSQL_MAIN}" = "5.7" ] && [ "${MYSQL_OPT}" = "10.1" ]; then
do_exit 1 "${UPGRADE_TEXT}"
fi
fi
if ! grep -m1 -q 'mysql' /etc/group; then
addUserGroup mysql mysql
fi
if [ ! -d /var/run/mysqld ]; then
mkdir -p /var/run/mysqld
chown -R mysql:mysql /var/run/mysqld
chmod 700 /var/run/mysqld
fi
doMySQLback
if [ ! -e /root/.skip_mysql_install ]; then
#setup a basic my.cnf file.
MYCNF=/etc/my.cnf
if [ ! -e $MYCNF ]; then
echo "[mysqld]" > $MYCNF
echo "local-infile=0" >> $MYCNF
echo "innodb_file_per_table" >> $MYCNF
#we don't want conflicts
if [ -e /etc/debian_version ]; then
echo "" >> $MYCNF
echo "[client]" >> $MYCNF
echo "socket=/usr/local/mysql/data/mysql.sock" >> $MYCNF
if [ -d /etc/mysql ]; then
mv /etc/mysql /etc/mysql.moved
fi
fi
if [ "${OS_CENTOS_VER}" = "9" ]; then
echo "" >> $MYCNF
echo "[client]" >> $MYCNF
echo "socket=/var/lib/mysql/mysql.sock" >> $MYCNF
fi
fi
fi
cd ${CWD}
SQL_PATH=${CWD}/mysql
mkdir -p ${SQL_PATH}
set_service mysqld OFF
initMySQL
NEW_MYSQLCHECK_ARGS=false
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then
NEW_MYSQLCHECK_ARGS=true
fi
fi
if ${NEW_MYSQLCHECK_ARGS}; then
MYSQLCHECK_ARGS="-A"
else
MYSQLCHECK_ARGS="--fix-db-names --fix-table-names -A"
fi
MYSQL_DETECT_CORRECT_METHODS=`getDA_Opt mysql_detect_correct_methods 1`
if [ "${MYSQL_DETECT_CORRECT_METHODS}" = "0" ]; then
echo "Setting mysql_detect_correct_methods=1 in directadmin.conf."
setVal mysql_detect_correct_methods 1 ${DACONF_TEMPLATE_FILE}
setVal mysql_detect_correct_methods 1 ${DACONF_FILE}
doRestartDA
fi
if [ -e /etc/debian_version ] || [ "${MYSQL_FORCE_COMPILE_OPT}" = "yes" ] || [ "${OS_CENTOS_VER}" = "9" ]; then
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
#libsystemd-daemon0 and /lib/x86_64-linux-gnu/libsystemd-daemon.so.0
#LINUX_STR=linux-systemd
LINUX_STR=linux-systemd
MACHINE=i686
if [ "${B64}" = "1" ]; then
MACHINE=x86_64
elif [ "${B64}" = "2" ]; then
MACHINE=aarch64
fi
MYSQLURL=${WEBPATH_SERVICES}/all/mariadb/${MARIADB_OPT}/${MARIADB_VER}
MYSQLPACK=mariadb-${MARIADB_VER}-${LINUX_STR}-${MACHINE}
else
LINUX_STR=linux
MACHINE=i686
MYSQLURL=${WEBPATH_SERVICES}/all/mysql/${MYSQL_OPT}/${MYSQL_VER}
LINUX_STR=linux-glibc2.12
if [ "${B64}" = "1" ]; then
MYSQLURL=${MYSQLURL}/64-bit
MACHINE=x86_64
elif [ "${B64}" = "1" ] && [ "${MYSQL_OPT}" = "8.0" ]; then
MYSQLURL=${MYSQLURL}/32-bit
elif [ "${B64}" = "1" ] && [ "${MYSQL_OPT}" = "5.7" ]; then
MYSQLURL=${MYSQLURL}/32-bit
elif [ "${B64}" = "1" ] && [ "${MYSQL_OPT}" = "5.6" ]; then
MYSQLURL=${MYSQLURL}/32-bit
elif [ "${B64}" = "1" ] && [ "${MYSQL_OPT}" = "5.5" ]; then
MYSQLURL=${MYSQLURL}/32-bit
fi
MYSQLPACK=mysql-${MYSQL_VER}-${LINUX_STR}-${MACHINE}
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ] && [ "${MARIADB_OPT}" = "10.6" ]; then
ensure_libpmem
fi
#debian needs libnuma1 now, as well: libnuma-dev libnuma1
ensure_libnuma
ensure_libtirpc
ensure_rpcgen
cd /usr/local
if [ "${MYSQL_OPT}" = "8.0" ] && [ "${MYSQL_INST_OPT}" = "mysql" ]; then
MYSQL_PACK_EXT="tar.xz"
MYSQL_EXTRACT_OPT="xJf"
MYSQL_CONTENT_OPT="tJf"
else
MYSQL_PACK_EXT="tar.gz"
MYSQL_EXTRACT_OPT="xzf"
MYSQL_CONTENT_OPT="tzf"
fi
if [ "${MYSQL_FORCE_COMPILE_OPT}" != "yes" ]; then
if [ ! -s ${MYSQLPACK}.${MYSQL_PACK_EXT} ]; then
safeDownloadWithMove "/usr/local/${MYSQLPACK}.${MYSQL_PACK_EXT}" "${MYSQLURL}/${MYSQLPACK}.${MYSQL_PACK_EXT}"
fi
fi
if [ ! -s "/usr/local/${MYSQLPACK}.${MYSQL_PACK_EXT}" ]; then
MYSQL_FORCE_COMPILE_OPT=yes
fi
if [ "${MYSQL_FORCE_COMPILE_OPT}" = "yes" ]; then
ensure_cmake
if [ ! -e /usr/include/curses.h ] && [ ! -e /usr/local/include/curses.h ]; then
echo "Cannot find ncurses, installing it..."
if [ -e /etc/debian_version ]; then
apt-get -y install libncurses-dev
else
yum -y install ncurses-devel
fi
fi
echo "Attempting to compile a package from source..."
cd ${CWD}
compile_mysql_binary
cd ${CWD}
if [ ! -s ${MYSQLPACK}.${MYSQL_PACK_EXT} ]; then
#sometimes it's linux, sometimes it's linux2.6.. sometimes it's just linux.
#Debian 6 was kernel 2.6, but when 5.6 is compiled, is linux. 5.5 is linux. Consistent? no.
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
PACK_PRE=mariadb-${MARIADB_VER}
else
PACK_PRE=mysql-${MYSQL_VER}
fi
BINPACK=`ls ${PACK_PRE}-*aarch64.${MYSQL_PACK_EXT} ${PACK_PRE}-*i386.${MYSQL_PACK_EXT} ${PACK_PRE}-*i686.${MYSQL_PACK_EXT} ${PACK_PRE}-*i486.${MYSQL_PACK_EXT} ${PACK_PRE}-*x86_64.${MYSQL_PACK_EXT} 2>/dev/null | head -n 1`
if [ "$BINPACK" = "" ]; then
do_exit 1 "Cannot find ${MYSQLPACK} package for installation"
fi
echo "Found created package: $BINPACK"
GLIBC14_BINPACK=`echo $BINPACK | grep -c 'linux-glibc_214'`
if [ ${GLIBC14_BINPACK} -gt 0 ]; then
LINUX_STR=`echo $BINPACK | cut -d- -f3,4`
MACHINE=`echo $BINPACK | cut -d- -f5 | cut -d. -f1`
else
LINUX_STR=`echo $BINPACK | cut -d- -f3`
MACHINE=`echo $BINPACK | cut -d- -f4 | cut -d. -f1`
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
MYSQLPACK=mariadb-${MARIADB_VER}-${LINUX_STR}-${MACHINE}
else
MYSQLPACK=mysql-${MYSQL_VER}-${LINUX_STR}-${MACHINE}
fi
fi
mv -f ${MYSQLPACK}.${MYSQL_PACK_EXT} /usr/local 2>/dev/null
fi
cd /usr/local
#we need the non tar.gz form .. but its not basic, it differs from tar.gz
#since we know the name of the file, we can get its contents which will tell us.
MYSQLPACK_REALNAME=`tar ${MYSQL_CONTENT_OPT} ${MYSQLPACK}.${MYSQL_PACK_EXT} | head -n 1 | cut -d/ -f1`
if [ "${MYSQLPACK_REALNAME}" = "" ]; then
do_exit 1 "MYSQLPACK_REALNAME is invalid: ${MYSQLPACK_REALNAME}. Exiting..."
fi
echo "Stopping mysqld ..."
control_service mysqld stop
if systemctl is-active --quiet mysqld; then
echo "Service didn't get stopped, sleeping for 20 secs and re-trying ..."
sleep 20
echo "Stopping mysqld ..."
control_service mysqld stop
fi
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
if [ "${MYSQL_OPT}" = "5.7" ]; then
MYSQL_SYSTEMD=${CB_SYSTEMD}/mysqld57.service.binary
if [ -e ${CB_CUST_SYSTEMD}/mysqld57.service.binary ]; then
MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mysqld57.service.binary
fi
else
MYSQL_SYSTEMD=${CB_SYSTEMD}/mysqld.service.binary
if [ -e ${CB_CUST_SYSTEMD}/mysqld.service.binary ]; then
MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mysqld.service.binary
fi
fi
if [ -e /etc/debian_version ] && [ -e ${CB_CUST_SYSTEMD}/mysqld.service.debian ]; then
MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mysqld.service.debian
fi
else
MYSQL_SYSTEMD=${CB_SYSTEMD}/mariadb.service.binary
if [ -e ${CB_CUST_SYSTEMD}/mariadb.service.binary ]; then
MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mariadb.service.binary
fi
fi
cp -pf ${MYSQL_SYSTEMD} ${SYSTEMDDIR}/mysqld.service
if [ -L ${SYSTEMDDIR}/mariadb.service ]; then
rm -f ${SYSTEMDDIR}/mariadb.service
fi
DISABLE_PRIVATETMP=false
if [ -e /proc/1/environ ]; then
if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then
DISABLE_PRIVATETMP=true
fi
fi
if ${DISABLE_PRIVATETMP}; then
echo "LXC detected. Disabling PrivateTmp feature in mysqld.service for MySQL."
perl -pi -e 's#PrivateTmp\=true#PrivateTmp=false#' ${SYSTEMDDIR}/mysqld.service
fi
if [ "${MYSQL_DATA}" != "/var/lib/mysql" ] && [ ! -e /var/lib/mysql ]; then
ln -s "${MYSQL_DATA}" /var/lib/mysql
fi
if [ -d "/home/mysql" ]; then
perl -pi -e 's#ProtectHome\=true#ProtectHome=false#' ${SYSTEMDDIR}/mysqld.service
fi
if [ -e ${SYSTEMDDIR}/mysql.service ]; then
systemctl disable mysql.service
mv -f ${SYSTEMDDIR}/mysql.service ${SYSTEMDDIR}/mysqld.service
systemctl daemon-reload
systemctl enable mysqld.service
fi
systemctl daemon-reload
systemctl enable mysqld.service
backup_libmysqlclient
tar ${MYSQL_EXTRACT_OPT} ${MYSQLPACK}.${MYSQL_PACK_EXT} --no-same-owner --exclude="${MYSQLPACK}/data"
if [ $? -ne 0 ]; then
do_exit 1 "Failed to extract: ${MYSQLPACK}.${MYSQL_PACK_EXT}. Exiting..."
fi
rm -f mysql ${MYSQLPACK}.${MYSQL_PACK_EXT}
ln -s ${MYSQLPACK_REALNAME} mysql
cd mysql
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/${MYSQLPACK_REALNAME}
if [ -e my.cnf ]; then
mv -f my.cnf my.cnf.orig
fi
if [ -d data ]; then
rm -rf data
fi
ln -s ${MYSQL_DATA} ./data 2>/dev/null
for i in `ls /usr/local/mysql/bin`; do {
if [ ! -e /usr/local/bin/${i} ]; then
echo "Linking /usr/local/mysql/bin/${i} -> /usr/local/bin/${i}..."
ln -s /usr/local/mysql/bin/${i} /usr/local/bin/${i}
chown -h mysql. /usr/local/bin/${i}
fi
};
done
if [ -d ${MYSQL_DATA} ]; then
chown -R mysql:mysql ${MYSQL_DATA}
fi
MYSQLPATH="`echo ${PATH} | grep /usr/local/mysql/bin | wc -l`"
if [ "${MYSQLPATH}" -eq 0 ]; then
export PATH=${PATH}:/usr/local/mysql/bin
fi
if [ -d /etc/mysql ]; then
if [ ! -L /etc/mysql/my.cnf ]; then
mv -f /etc/mysql/my.cnf /etc/mysql/my.cnf.back
ln -s /etc/my.cnf /etc/mysql/my.cnf
fi
fi
if [ "${OS_CENTOS_VER}" = "9" ]; then
if [ ! -e /usr/lib64/libncurses.so.5 ] && [ -e /usr/lib64/libncurses.so.6 ]; then
#no libncurses-compat-libs there, symlinking .6 to .5 does the trick
ln -sf /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5
fi
if [ ! -e /usr/lib64/libtinfo.so.5 ] && [ -e /usr/lib64/libtinfo.so.6 ]; then
#no libncurses-compat-libs there, symlinking .6 to .5 does the trick
ln -sf /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5
fi
fi
setup_my_cnf
if ! ${SQL_PATH_IS_EMPTY}; then
control_service mysqld start
echo "Giving mysqld a few seconds to start up..."
sleep 5
if ! /usr/local/mysql/bin/mysql --defaults-extra-file=${DA_MY_CNF} -e "select 1" >/dev/null 2>&1; then
echo "Giving mysqld a another few seconds to start up..."
sleep 10
fi
if ! /usr/local/mysql/bin/mysql --defaults-extra-file=${DA_MY_CNF} -e "select 1" >/dev/null 2>&1; then
echo "Giving mysqld last 20 seconds to start up..."
sleep 20
fi
if [ -e /usr/local/mysql/bin/mysql_upgrade ]; then
if ! ${SKIP_MYSQL_UPGRADE}; then
MARIADB_SKIP_VERSION_CHECK=
if [ "`/usr/local/mysql/bin/mysql_upgrade --help | grep -c skip-version-check`" -gt 0 ]; then
MARIADB_SKIP_VERSION_CHECK=--skip-version-check
fi
/usr/local/mysql/bin/mysql_upgrade --defaults-extra-file=${DA_MY_CNF} ${MARIADB_SKIP_VERSION_CHECK}
if [ "$?" -ne 0 ]; then #Ticket 23399
echo "${boldon}Error running '/usr/local/mysql/bin/mysql_upgrade --defaults-extra-file=${DA_MY_CNF} ${MARIADB_SKIP_VERSION_CHECK}'${boldoff}"
sleep 10
fi
fi
elif [ -e /usr/local/mysql/bin/mysql_fix_privilege_tables ]; then
/usr/local/mysql/bin/mysql_fix_privilege_tables --defaults-extra-file=${DA_MY_CNF}
fi
fi
restore_libmysqlclient
#mysql 5.5.11 changed to libmysqlclient.so.18 from libmysqlclient.so.16
if [ "${MYSQL_INST_OPT}" != "mariadb" ]; then
if [ "${MYSQL_OPT}" = "5.5" ] || [ "${MYSQL_OPT}" = "5.6" ]; then
if [ -e /usr/local/directadmin/directadmin ]; then
if ldd /usr/local/directadmin/directadmin | grep -m1 -q 'libmysqlclient.so.16'; then
if [ ! -e /usr/local/mysql/lib/libmysqlclient.so.16 ] && [ -e /usr/local/mysql/lib/libmysqlclient.so.18 ]; then
echo "*** Linking libmysqlclient.so.16 to libmysqlclient.so.18"
ln -s libmysqlclient.so.18 /usr/local/mysql/lib/libmysqlclient.so.16
ldconfig
fi
fi
if ldd /usr/local/directadmin/directadmin | grep -m1 -q 'libmysqlclient.so.18'; then
if [ ! -e /usr/local/mysql/lib/libmysqlclient.so.18 ] && [ -e /usr/local/mysql/lib/libmysqlclient.so.16 ]; then
echo "*** Linking libmysqlclient.so.18 to libmysqlclient.so.16"
ln -s libmysqlclient.so.16 /usr/local/mysql/lib/libmysqlclient.so.18
ldconfig
fi
fi
fi
fi
fi
if ${SQL_PATH_IS_EMPTY}; then
setup_mysql_root_user
fi
set_service mysqld ON
writeLog "${MYSQLPACK} installed"
else
if [ "${MYSQL_OPT}" = "5.5" ] || [ "${MYSQL_OPT}" = "5.6" ] || [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
if [ ! -e /usr/lib/libaio.so.1 ] && [ ! -e /usr/lib64/libaio.so.1 ] && [ ! -e /lib64/libaio.so.1 ] && [ ! -e /lib/libaio.so.1 ] && [ ! -e /lib/i386-linux-gnu/libaio.so.1 ]; then
echo "Cannot find libaio.so.1, installing using yum..."
yum -y install libaio
fi
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ] && [ "${MARIADB_OPT}" = "10.6" ]; then
ensure_libpmem
fi
ensure_libnuma
ensure_libtirpc
ensure_rpcgen
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
MYSQL_NAME=MySQL
if [ "${OS_CENTOS_VER}" = "7" ]; then
MYSQL_EXT_OS=el7
elif [ "${OS_CENTOS_VER}" = "8" ]; then
MYSQL_EXT_OS=el8
fi
MYSQLURL=all/mysql/${MYSQL_OPT}/${MYSQL_VER}/64-bit
MYSQL_EXT=${MYSQL_EXT_OS}.x86_64
if [ "${MYSQL_OPT}" != "5.5" ] && [ "${MYSQL_OPT}" != "5.6" ]; then
MYSQL_NAME=mysql-community
fi
MYSQLCLIENT=${MYSQL_NAME}-client-${MYSQL_VER}-1.$MYSQL_EXT.rpm
MYSQLDEVEL=${MYSQL_NAME}-devel-${MYSQL_VER}-1.$MYSQL_EXT.rpm
MYSQLSERVER=${MYSQL_NAME}-server-${MYSQL_VER}-1.$MYSQL_EXT.rpm
MYSQLSHARED=${MYSQL_NAME}-shared-${MYSQL_VER}-1.$MYSQL_EXT.rpm
if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then
MYSQLLIBS=${MYSQL_NAME}-libs-${MYSQL_VER}-1.$MYSQL_EXT.rpm
if [ "${OS_CENTOS_VER}" = "7" ]; then
MYSQLLIBSCOMPAT=${MYSQL_NAME}-libs-compat-${MYSQL_VER}-1.$MYSQL_EXT.rpm
fi
MYSQLCOMMON=${MYSQL_NAME}-common-${MYSQL_VER}-1.$MYSQL_EXT.rpm
fi
else
MYSQLURL=all/mariadb/${MARIADB_OPT}/${MARIADB_VER}
if [ "${OS_CENTOS_VER}" = "7" ]; then
RPM_FILE_LIST="centos7-64.txt"
else
RPM_FILE_LIST="centos8-64.txt"
fi
if [ ! -s mysql/${RPM_FILE_LIST} ]; then
getFile ${MYSQLURL}/${RPM_FILE_LIST} "" mysql/${RPM_FILE_LIST}
fi
if ! grep -m1 -q "MariaDB-${MARIADB_VER}-" mysql/${RPM_FILE_LIST}; then
rm -f mysql/${RPM_FILE_LIST}
getFile ${MYSQLURL}/${RPM_FILE_LIST} "" mysql/${RPM_FILE_LIST}
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
if [ "${MARIADB_OPT}" != "5.5" ] && [ "${MARIADB_OPT}" != "10.0" ]; then
GALERA_VER=`getVer galera_versions`
if [ "${OS_CENTOS_VER}" = "7" ]; then
LIBJEMALLOC_VER=`getVer jemalloc_versions`
LIBJEMALLOC_FILE=jemalloc-${LIBJEMALLOC_VER}-1.el7.x86_64.rpm
LIBJEMALLOC_DEV_FILE=jemalloc-devel-${LIBJEMALLOC_VER}-1.el7.x86_64.rpm
GALERA_FILE=galera-4-${GALERA_VER}-1.el7.centos.x86_64.rpm
else
GALERA_FILE=galera-4-${GALERA_VER}-1.el8.x86_64.rpm
fi
fi
fi
MYSQLCLIENT=`get_line_from_file "MariaDB-.*client.*.rpm" mysql/${RPM_FILE_LIST}`
MYSQLDEVEL=`get_line_from_file "MariaDB-.*devel.*.rpm" mysql/${RPM_FILE_LIST}`
MYSQLSERVER=`get_line_from_file "MariaDB-.*server.*.rpm" mysql/${RPM_FILE_LIST}`
MYSQLSHARED=`get_line_from_file "MariaDB-.*shared.*.rpm" mysql/${RPM_FILE_LIST}`
MYSQLCOMMON=`get_line_from_file "MariaDB-.*common.*.rpm" mysql/${RPM_FILE_LIST}`
MYSQLBACKUP=`get_line_from_file "MariaDB-.*backup.*.rpm" mysql/${RPM_FILE_LIST}`
if [ "${OS_CENTOS_VER}" = "7" ]; then
MYSQLCOMPAT=`get_line_from_file "MariaDB-.*compat.*.rpm" mysql/${RPM_FILE_LIST}`
HAS_MYSQLCOMPAT=true
else
MYSQLCOMPAT=""
HAS_MYSQLCOMPAT=false
fi
if [ "${MYSQLCLIENT}" = "" ] || [ "${MYSQLCLIENT}" = "" ] || [ "${MYSQLCLIENT}" = "" ] || [ "${MYSQLCLIENT}" = "" ] || [ "${MYSQLCLIENT}" = "" ]; then
do_exit 1 "RPM package set is incomplete. Unable to find names in mysql/${RPM_FILE_LIST}."
fi
fi
cd ${SQL_PATH}
MYSQL57_8x_SET=false
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then
MYSQL57_8x_SET=true
fi
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
if [ "${MARIADB_OPT}" != "5.5" ] && [ "${MARIADB_OPT}" != "10.0" ]; then
if [ "${OS_CENTOS_VER}" = "7" ]; then
if [ ! -s ${SQL_PATH}/${LIBJEMALLOC_FILE} ]; then
getFile all/mariadb/jemalloc/${LIBJEMALLOC_VER}/${LIBJEMALLOC_FILE} "" mysql/${LIBJEMALLOC_FILE}
fi
if [ ! -s ${SQL_PATH}/${LIBJEMALLOC_DEV_FILE} ]; then
getFile all/mariadb/jemalloc/${LIBJEMALLOC_VER}/${LIBJEMALLOC_DEV_FILE} "" mysql/${LIBJEMALLOC_DEV_FILE}
fi
fi
if [ ! -s ${SQL_PATH}/${GALERA_FILE} ]; then
getFile all/mariadb/galera/${GALERA_VER}/${GALERA_FILE} "" mysql/${GALERA_FILE}
fi
if [ ! -s ${SQL_PATH}/${MYSQLBACKUP} ]; then
getFile ${MYSQLURL}/${MYSQLBACKUP} "" mysql/${MYSQLBACKUP}
fi
fi
fi
if [ ! -s ${SQL_PATH}/${MYSQLCLIENT} ]; then
getFile ${MYSQLURL}/${MYSQLCLIENT} "" mysql/${MYSQLCLIENT}
fi
if [ ! -s ${SQL_PATH}/${MYSQLDEVEL} ]; then
getFile ${MYSQLURL}/${MYSQLDEVEL} "" mysql/${MYSQLDEVEL}
fi
if [ ! -s ${SQL_PATH}/${MYSQLSERVER} ]; then
getFile ${MYSQLURL}/${MYSQLSERVER} "" mysql/${MYSQLSERVER}
fi
if [ ! -s ${SQL_PATH}/${MYSQLSHARED} ]; then
if ! ${MYSQL57_8x_SET}; then
getFile ${MYSQLURL}/${MYSQLSHARED} "" mysql/${MYSQLSHARED}
fi
fi
ADD_MYSQL_LIBS=""
if ${MYSQL57_8x_SET}; then
if [ ! -s ${SQL_PATH}/${MYSQLLIBS} ]; then
getFile ${MYSQLURL}/${MYSQLLIBS} "" mysql/${MYSQLLIBS}
fi
if [ ! -s ${SQL_PATH}/${MYSQLCOMMON} ]; then
getFile ${MYSQLURL}/${MYSQLCOMMON} "" mysql/${MYSQLCOMMON}
fi
if [ "${OS_CENTOS_VER}" = "7" ]; then
if [ ! -s ${SQL_PATH}/${MYSQLLIBSCOMPAT} ]; then
getFile ${MYSQLURL}/${MYSQLLIBSCOMPAT} "" mysql/${MYSQLLIBSCOMPAT}
fi
ADD_MYSQL_LIBS="${MYSQLLIBS} ${MYSQLLIBSCOMPAT} ${MYSQLCOMMON}"
else
ADD_MYSQL_LIBS="${MYSQLLIBS} ${MYSQLCOMMON}"
fi
else
ADD_MYSQL_LIBS=${MYSQLSHARED}
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ] || [ "`has_mariadb`" != "0" ]; then
if [ ! -s ${SQL_PATH}/${MYSQLCOMMON} ]; then
getFile ${MYSQLURL}/${MYSQLCOMMON} "" mysql/${MYSQLCOMMON}
fi
if ${HAS_MYSQLCOMPAT}; then
if [ ! -s ${SQL_PATH}/${MYSQLCOMPAT} ]; then
getFile ${MYSQLURL}/${MYSQLCOMPAT} "" mysql/${MYSQLCOMPAT}
fi
fi
fi
cd ${SQL_PATH}
FILE1=${SQL_PATH}/${MYSQLCLIENT}
FILE2=${SQL_PATH}/${MYSQLDEVEL}
FILE3=${SQL_PATH}/${MYSQLSERVER}
FILE4=${SQL_PATH}/${MYSQLSHARED}
if [ "${MYSQL_INST_OPT}" = "mariadb" ] || [ "`has_mariadb`" != "0" ]; then
FILE5=${SQL_PATH}/${MYSQLCOMMON}
if ${HAS_MYSQLCOMPAT}; then
FILE6=${SQL_PATH}/${MYSQLCOMPAT}
fi
if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ]; then
FILE10=${SQL_PATH}/${MYSQLBACKUP}
fi
fi
if ${MYSQL57_8x_SET}; then
FILE7=${SQL_PATH}/${MYSQLLIBS}
if [ "${OS_CENTOS_VER}" = "7" ]; then
FILE8=${SQL_PATH}/${MYSQLLIBSCOMPAT}
fi
FILE9=${SQL_PATH}/${MYSQLCOMMON}
fi
checkFile ${FILE1}
checkFile ${FILE2}
checkFile ${FILE3}
if ! ${MYSQL57_8x_SET}; then
checkFile ${FILE4}
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ] ; then
checkFile ${FILE5}
if ${HAS_MYSQLCOMPAT}; then
checkFile ${FILE6}
fi
if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ]; then
checkFile ${FILE10}
fi
echo "Installing dependencies..."
if [ "${OS_CENTOS_VER}" = "7" ] || [ "${OS_CENTOS_VER}" = "8" ]; then
CENTOS7_DEPS="boost-program-options perl-Compress-Raw-Bzip2 perl-Compress-Raw-Zlib perl-Compress-Raw-Zlib perl-DBI perl-Data-Dumper perl-IO-Compress perl-Net-Daemon perl-PlRPC lsof nmap rsync pcre2 socat"
if ! rpm -q --quiet ${CENTOS7_DEPS}; then
yum -y install ${CENTOS7_DEPS}
fi
fi
fi
if ${MYSQL57_8x_SET}; then
checkFile ${FILE7}
if [ "${OS_CENTOS_VER}" = "7" ]; then
checkFile ${FILE8}
fi
checkFile ${FILE9}
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ]; then
if [ "${OS_CENTOS_VER}" = "7" ]; then
echo "Installing libjemalloc..."
checkFile ${SQL_PATH}/${LIBJEMALLOC_FILE}
checkFile ${SQL_PATH}/${LIBJEMALLOC_DEV_FILE}
rpm -Uhv --nodeps --force ${SQL_PATH}/${LIBJEMALLOC_FILE} ${SQL_PATH}/${LIBJEMALLOC_DEV_FILE}
fi
echo "Installing galera..."
checkFile ${SQL_PATH}/${GALERA_FILE}
rpm -Uhv --nodeps --force ${SQL_PATH}/${GALERA_FILE}
fi
fi
echo "Stopping mysqld ..."
control_service mysqld stop
if systemctl is-active --quiet mysqld; then
echo "Service didn't get stopped, sleeping for 20 secs and re-trying ..."
sleep 20
echo "Stopping mysqld ..."
control_service mysqld stop
fi
#MariaDB renames my.cnf to rpmsave when removing RPMs, if we detect rpmsave before installation, we rename the file: https://mariadb.atlassian.net/browse/MDEV-4954
if [ -e /etc/my.cnf.rpmsave ]; then
mv -f /etc/my.cnf.rpmsave /etc/my.cnf.rpmsave.custombuild
fi
if [ -e /etc/logrotate.d/mysql.rpmsave ]; then
mv -f /etc/logrotate.d/mysql.rpmsave /etc/logrotate.d/mysql.rpmsave.custombuild
fi
if [ -e /etc/logrotate.d/mysql ]; then
mv -f /etc/logrotate.d/mysql /etc/logrotate.d/mysql.rpmsave
fi
if [ -e /etc/my.cnf.d/mysql-clients.cnf.rpmsave ]; then
mv -f /etc/my.cnf.d/mysql-clients.cnf.rpmsave /etc/my.cnf.d/mysql-clients.cnf.rpmsave.custombuild
fi
if [ -e /etc/my.cnf.d/server.cnf.rpmsave ]; then
mv -f /etc/my.cnf.d/server.cnf.rpmsave /etc/my.cnf.d/server.cnf.rpmsave.custombuild
fi
if [ -e /usr/bin/mysql ]; then
MYSQL_MAIN="`mysql_main`"
MYSQL_V="`/usr/bin/mysql --version | grep -m1 -o '[0-9]*\.[0-9]*\.[0-9]*'`"
MYSQL_UPGRADE="`/usr/bin/mysql --version | grep -c MariaDB`"
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
MYSQL_UPGRADE_VER=${MARIADB_OPT}
else
MYSQL_UPGRADE_VER=${MYSQL_OPT}
fi
#Switch from MySQL to MariaDB
if [ "${MYSQL_INST_OPT}" = "mariadb" ] && [ "${MYSQL_UPGRADE}" = "0" ]; then
echo "Upgrading MySQL ${MYSQL_MAIN} to MariaDB ${MARIADB_OPT}"
for i in `rpm -qa | grep -i "^mysql" | grep -v "MySQL-python"`; do
rpm -ev --noscripts $i --nodeps
done
for i in `rpm -qa | grep -i "^mariadb"`; do
rpm -ev --noscripts $i --nodeps
done
if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ]; then
rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} ${MYSQLBACKUP}
else
rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT}
fi
#Switch from MariaDB to MySQL
elif [ "${MYSQL_INST_OPT}" = "mysql" ] && [ "${MYSQL_UPGRADE}" = "1" ]; then
echo "Upgrading MariaDB ${MYSQL_MAIN} to MySQL ${MYSQL_OPT}"
for i in `rpm -qa | grep -i "^mysql" | grep -v "MySQL-python"`; do
rpm -ev --noscripts $i --nodeps
done
for i in `rpm -qa | grep -i "^mariadb"`; do
rpm -ev --noscripts $i --nodeps
done
if ${MYSQL57_8x_SET}; then
rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${ADD_MYSQL_LIBS}
else
rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT}
fi
elif [ "${MYSQL_MAIN}" != "${MYSQL_UPGRADE_VER}" ]; then
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
echo "Upgrading ${MYSQLNAME} ${MYSQL_V} to ${MYSQL_VER}"
for i in `rpm -qa | grep -i "^mysql" | grep -v "MySQL-python"`; do
rpm -ev --noscripts $i --nodeps
done
rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${ADD_MYSQL_LIBS}
else
echo "Upgrading ${MYSQLNAME} ${MYSQL_V} to ${MARIADB_VER}"
for i in `rpm -qa | grep -i "^mysql" | grep -v "MySQL-python"`; do
rpm -ev --noscripts $i --nodeps
done
for i in `rpm -qa | grep -i "^mariadb"`; do
rpm -ev --noscripts $i --nodeps
done
if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ]; then
rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} ${MYSQLBACKUP}
else
rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT}
fi
fi
else
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
echo "Updating ${MYSQLNAME} ${MYSQL_V} to ${MYSQL_VER}"
rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${ADD_MYSQL_LIBS}
else
#In case mysql=5.5 & mariadb=5.5
for i in `rpm -qa | grep -i "^mysql" | grep -v "MySQL-python"`; do
rpm -ev --noscripts $i --nodeps
done
echo "Updating ${MYSQLNAME} ${MYSQL_V} to ${MARIADB_VER}"
if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ]; then
rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} ${MYSQLBACKUP}
else
rpm -Uhv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT}
fi
fi
fi
else
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
echo "Cannot find /usr/bin/mysql, installing MySQL"
rpm -ihv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${ADD_MYSQL_LIBS}
else
echo "Cannot find /usr/bin/mysql, installing MariaDB"
if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ]; then
rpm -ihv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT} ${MYSQLBACKUP}
else
rpm -ihv --nodeps --force ${MYSQLCLIENT} ${MYSQLDEVEL} ${MYSQLSERVER} ${MYSQLSHARED} ${MYSQLCOMMON} ${MYSQLCOMPAT}
fi
fi
fi
#Move rpmsave file back to original one: https://mariadb.atlassian.net/browse/MDEV-4954
if [ -e /etc/my.cnf.rpmsave ]; then
if [ -e /etc/my.cnf ]; then
mv -f /etc/my.cnf /etc/my.cnf.rpmnew
fi
mv -f /etc/my.cnf.rpmsave /etc/my.cnf
fi
if [ -e /etc/my.cnf.d/server.cnf.rpmsave ]; then
if [ -e /etc/my.cnf.d/server.cnf ]; then
mv -f /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf.rpmnew
fi
mv -f /etc/my.cnf.d/server.cnf.rpmsave /etc/my.cnf.d/server.cnf
fi
if [ -e /etc/my.cnf.d/mysql-clients.cnf.rpmsave ]; then
if [ -e /etc/my.cnf.d/mysql-clients.cnf ]; then
mv -f /etc/my.cnf.d/mysql-clients.cnf /etc/my.cnf.d/mysql-clients.cnf.rpmnew
fi
mv -f /etc/my.cnf.d/mysql-clients.cnf.rpmsave /etc/my.cnf.d/mysql-clients.cnf
fi
#Move logrotate file back to original one
if [ -e /etc/logrotate.d/mysql.rpmsave ]; then
if [ -e /etc/logrotate.d/mysql ]; then
mv -f /etc/logrotate.d/mysql /etc/logrotate.d/mysql.rpmnew
fi
mv -f /etc/logrotate.d/mysql.rpmsave /etc/logrotate.d/mysql
fi
MYSQL_SYSTEMD=${CB_SYSTEMD}/mysqld.service
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
MYSQL_SYSTEMD_NAME=mysqld.service
if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then
MYSQL_SYSTEMD=${CB_SYSTEMD}/mysqld57.service
if [ ! -s "${MYSQL_SYSTEMD}" ] && [ -s /usr/lib/systemd/system/mysqld.service ]; then
MYSQL_SYSTEMD=/usr/lib/systemd/system/mysqld.service
echo "Using ${MYSQL_SYSTEMD}"
fi
fi
fi
if [ -e ${CB_CUST_SYSTEMD}/mysqld.service ]; then
MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mysqld.service
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
MYSQL_SYSTEMD_NAME=mariadb.service
if [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ] || [ "${MARIADB_OPT}" = "10.6" ]; then
MYSQL_SYSTEMD=${CB_SYSTEMD}/mariadb.service
if [ -e ${CB_CUST_SYSTEMD}/mariadb.service ]; then
MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mariadb.service
fi
else
MYSQL_SYSTEMD=${CB_SYSTEMD}/mariadb55.service
if [ -e ${CB_CUST_SYSTEMD}/mariadb55.service ]; then
MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mariadb55.service
fi
fi
fi
if [ -e ${SYSTEMDDIR}/mysqld.service ] || [ -L ${SYSTEMDDIR}/mysqld.service ]; then
rm -f ${SYSTEMDDIR}/mysqld.service
fi
if [ -e ${SYSTEMDDIR}/mariadb.service ] || [ -L ${SYSTEMDDIR}/mariadb.service ]; then
rm -f ${SYSTEMDDIR}/mariadb.service
fi
if [ -e ${SYSTEMDDIR}/mysql.service ] || [ -L ${SYSTEMDDIR}/mysql.service ]; then
rm -f ${SYSTEMDDIR}/mysql.service
fi
cp -pf ${MYSQL_SYSTEMD} ${SYSTEMDDIR}/${MYSQL_SYSTEMD_NAME}
MYSQL_SYSTEMD_WAIT=${CB_SYSTEMD}/scripts/mysql-wait-ready
if [ -e ${CB_CUST_SYSTEMD}/scripts/mysql-wait-ready ]; then
MYSQL_SYSTEMD_WAIT=${CB_CUST_SYSTEMD}/scripts/mysql-wait-ready
fi
if [ -d /usr/libexec ]; then
cp -f ${MYSQL_SYSTEMD_WAIT} /usr/libexec/mysql-wait-ready
fi
DISABLE_PRIVATETMP=false
if [ -e /proc/1/environ ]; then
if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then
DISABLE_PRIVATETMP=true
fi
fi
if ${DISABLE_PRIVATETMP}; then
echo "LXC detected. Disabling PrivateTmp feature in mysqld.service for MySQL."
perl -pi -e 's#PrivateTmp \= true#PrivateTmp = false#' ${SYSTEMDDIR}/${MYSQL_SYSTEMD_NAME}
fi
systemctl daemon-reload
systemctl enable ${MYSQL_SYSTEMD_NAME}
setup_my_cnf
if ! ${SQL_PATH_IS_EMPTY}; then
control_service mysqld start
echo "Giving mysqld a few seconds to start up..."
sleep 5
if ! /usr/bin/mysql --defaults-extra-file=${DA_MY_CNF} -e "select 1" >/dev/null 2>&1; then
echo "Giving mysqld a another few seconds to start up..."
sleep 10
fi
if ! /usr/bin/mysql --defaults-extra-file=${DA_MY_CNF} -e "select 1" >/dev/null 2>&1; then
echo "Giving mysqld last 20 seconds to start up..."
sleep 20
fi
if ! ${SKIP_MYSQL_UPGRADE}; then
if [ -e /usr/bin/mysql_upgrade ]; then
/usr/bin/mysql_upgrade --defaults-extra-file=${DA_MY_CNF}
elif [ -e /usr/bin/mysql_fix_privilege_tables ]; then
/usr/bin/mysql_fix_privilege_tables --defaults-extra-file=${DA_MY_CNF}
fi
fi
if [ -e /usr/bin/mysqlcheck ]; then
/usr/bin/mysqlcheck --defaults-extra-file=${DA_MY_CNF} ${MYSQLCHECK_ARGS}
fi
# Fixing "gcc: /usr/lib/mysql/libmysqlclient.so: No such file or directory"
if [ -d /usr/lib/mysql ] && [ -s /usr/lib/libmysqlclient.so ] && [ -d /usr/lib/mysql/ ]; then
cp -f /usr/lib/libmysqlclient.* /usr/lib/mysql/
fi
fi
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
writeLog "${MYSQL_INST_OPT} ${MARIADB_VER} installed"
else
writeLog "${MYSQL_INST_OPT} ${MYSQL_VER} installed"
fi
fi
if [ -e /etc/my.cnf ] && [ ! -h /etc/mysql/my.cnf ] && [ -d /etc/mysql ]; then
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.backup
ln -sf /etc/my.cnf /etc/mysql/my.cnf
fi
if ${SQL_PATH_IS_EMPTY}; then
setup_mysql_root_user
fi
set_service mysqld ON
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "Restarting MySQL."
control_service mysqld restart
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
if [ "${MARIADB_OPT}" = "5.5" ] || [ "${MARIADB_OPT}" = "5.6" ] || [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ]; then
MAX_USERNAME_LENGTH=`${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} -e "select CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_schema = 'mysql' AND table_name = 'user' AND COLUMN_NAME = 'User';" -sss 2>/dev/null`
if [ "${MAX_USERNAME_LENGTH}" = "16" ]; then
echo "Increasing Max Username Length from 16 to 80..."
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.user MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.db MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.tables_priv MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.columns_priv MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.procs_priv MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.proc MODIFY definer CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.event MODIFY definer CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.proxies_priv MODIFY User CHAR(80) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.proxies_priv MODIFY Proxied_user CHAR(80) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.proxies_priv MODIFY Grantor CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.servers MODIFY Username CHAR(80) NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.procs_priv MODIFY Grantor CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "ALTER TABLE mysql.tables_priv MODIFY Grantor CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=${DA_MY_CNF} mysql -e "FLUSH PRIVILEGES;"
fi
fi
fi
echo "Installation completed."
cd ${CWD}
}
####################################################
doPhpIni() {
if [ "${PHP_INI_OPT}" = "no" ]; then
do_exit 1 "Cannot install php.ini because it is not set in options.conf."
fi
getFile php-${PHP1_RELEASE_VER}.tar.gz php${PHP1_SHORTRELEASE}
FILE=${CWD}/php-${PHP1_RELEASE_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
cd php-${PHP1_RELEASE_VER}
if [ $? -ne 0 ]; then
do_exit 1 "Failed to change directory to: php-${PHP1_RELEASE_VER}. Exiting..."
fi
COUNT=`grep -m1 -c '^date.timezone' php.ini-${PHP_INI_TYPE_OPT}`
COUNT2=`grep -m1 -c ';date.timezone' php.ini-${PHP_INI_TYPE_OPT}`
if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then
echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}"
echo "date.timezone = \"${PHP_TIMEZONE_OPT}\"" >> php.ini-${PHP_INI_TYPE_OPT}
elif [ "$COUNT" -eq 0 ]; then
echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}"
perl -pi -e "s#;date.timezone.*#date.timezone = \"${PHP_TIMEZONE_OPT}\"#" php.ini-${PHP_INI_TYPE_OPT}
fi
/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' php.ini-${PHP_INI_TYPE_OPT}
/usr/bin/perl -pi -e 's/post_max_size = 8M/post_max_size = 64M/' php.ini-${PHP_INI_TYPE_OPT}
#short_open_tag: https://help.directadmin.com/item.php?id=438
perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' php.ini-${PHP_INI_TYPE_OPT}
if [ "${X_MAIL_HEADER_OPT}" = "yes" ]; then
echo "Enabling mail.add_x_header option in php.ini"
/usr/bin/perl -pi -e 's/mail.add_x_header = Off/mail.add_x_header = On/' php.ini-${PHP_INI_TYPE_OPT}
/usr/bin/perl -pi -e 's/mail.add_x_header = 0/mail.add_x_header = On/' php.ini-${PHP_INI_TYPE_OPT}
if ! grep -m1 -q '^mail.add_x_header' php.ini-${PHP_INI_TYPE_OPT}; then
echo "mail.add_x_header = On" >> php.ini-${PHP_INI_TYPE_OPT}
fi
else
echo "Disabling mail.add_x_header option in php.ini"
/usr/bin/perl -pi -e 's/^mail.add_x_header =/;mail.add_x_header =/' php.ini-${PHP_INI_TYPE_OPT}
fi
PHP_INI_VAR=PHP_INI_FPM${PHP1_SHORTRELEASE}
cp -f php.ini-${PHP_INI_TYPE_OPT} $(eval_var ${PHP_INI_VAR})
writeLog "$(eval_var ${PHP_INI_VAR}) installed"
echo "Done for php1_release."
cd ${WORKDIR}
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
PHP_VERSION2_EVAL_VAR=PHP${PHP2_SHORTRELEASE}_VER
PHP_VERSION2_VAR=$(eval_var ${PHP_VERSION2_EVAL_VAR})
getFile php-${PHP2_RELEASE_VER}.tar.gz php${PHP2_SHORTRELEASE}
FILE=${CWD}/php-${PHP2_RELEASE_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
cd php-${PHP2_RELEASE_VER}
COUNT=`grep -m1 -c '^date.timezone' php.ini-${PHP_INI_TYPE_OPT}`
COUNT2=`grep -m1 -c ';date.timezone' php.ini-${PHP_INI_TYPE_OPT}`
if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then
echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}"
echo "date.timezone = \"${PHP_TIMEZONE_OPT}\"" >> php.ini-${PHP_INI_TYPE_OPT}
elif [ "$COUNT" -eq 0 ]; then
echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}"
perl -pi -e "s#;date.timezone.*#date.timezone = \"${PHP_TIMEZONE_OPT}\"#" php.ini-${PHP_INI_TYPE_OPT}
fi
/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' php.ini-${PHP_INI_TYPE_OPT}
/usr/bin/perl -pi -e 's/post_max_size = 8M/post_max_size = 64M/' php.ini-${PHP_INI_TYPE_OPT}
#short_open_tag: https://help.directadmin.com/item.php?id=438
/usr/bin/perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' php.ini-${PHP_INI_TYPE_OPT}
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
PHP_INI_VAR=PHP_INI_FPM${PHP2_SHORTRELEASE}
cp -f php.ini-${PHP_INI_TYPE_OPT} $(eval_var ${PHP_INI_VAR})
writeLog "$(eval_var ${PHP_INI_VAR}) installed"
fi
echo "Done for php2_release"
fi
cd ${WORKDIR}
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
PHP_VERSION3_EVAL_VAR=PHP${PHP3_SHORTRELEASE}_VER
PHP_VERSION3_VAR=$(eval_var ${PHP_VERSION3_EVAL_VAR})
getFile php-${PHP3_RELEASE_VER}.tar.gz php${PHP3_SHORTRELEASE}
FILE=${CWD}/php-${PHP3_RELEASE_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
cd php-${PHP3_RELEASE_VER}
COUNT=`grep -m1 -c '^date.timezone' php.ini-${PHP_INI_TYPE_OPT}`
COUNT2=`grep -m1 -c ';date.timezone' php.ini-${PHP_INI_TYPE_OPT}`
if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then
echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}"
echo "date.timezone = \"${PHP_TIMEZONE_OPT}\"" >> php.ini-${PHP_INI_TYPE_OPT}
elif [ "$COUNT" -eq 0 ]; then
echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}"
perl -pi -e "s#;date.timezone.*#date.timezone = \"${PHP_TIMEZONE_OPT}\"#" php.ini-${PHP_INI_TYPE_OPT}
fi
/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' php.ini-${PHP_INI_TYPE_OPT}
/usr/bin/perl -pi -e 's/post_max_size = 8M/post_max_size = 64M/' php.ini-${PHP_INI_TYPE_OPT}
#short_open_tag: https://help.directadmin.com/item.php?id=438
/usr/bin/perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' php.ini-${PHP_INI_TYPE_OPT}
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
PHP_INI_VAR=PHP_INI_FPM${PHP3_SHORTRELEASE}
cp -f php.ini-${PHP_INI_TYPE_OPT} $(eval_var ${PHP_INI_VAR})
writeLog "$(eval_var ${PHP_INI_VAR}) installed"
fi
echo "Done for php3_release"
fi
cd ${WORKDIR}
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
PHP_VERSION4_EVAL_VAR=PHP${PHP4_SHORTRELEASE}_VER
PHP_VERSION4_VAR=$(eval_var ${PHP_VERSION4_EVAL_VAR})
getFile php-${PHP4_RELEASE_VER}.tar.gz php${PHP4_SHORTRELEASE}
FILE=${CWD}/php-${PHP4_RELEASE_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
cd php-${PHP4_RELEASE_VER}
COUNT=`grep -m1 -c '^date.timezone' php.ini-${PHP_INI_TYPE_OPT}`
COUNT2=`grep -m1 -c ';date.timezone' php.ini-${PHP_INI_TYPE_OPT}`
if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then
echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}"
echo "date.timezone = \"${PHP_TIMEZONE_OPT}\"" >> php.ini-${PHP_INI_TYPE_OPT}
elif [ "$COUNT" -eq 0 ]; then
echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to php.ini, please change it by yourself to fit your own needs.${boldoff}"
perl -pi -e "s#;date.timezone.*#date.timezone = \"${PHP_TIMEZONE_OPT}\"#" php.ini-${PHP_INI_TYPE_OPT}
fi
/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' php.ini-${PHP_INI_TYPE_OPT}
/usr/bin/perl -pi -e 's/post_max_size = 8M/post_max_size = 64M/' php.ini-${PHP_INI_TYPE_OPT}
#short_open_tag: https://help.directadmin.com/item.php?id=438
/usr/bin/perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' php.ini-${PHP_INI_TYPE_OPT}
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
PHP_INI_VAR=PHP_INI_FPM${PHP4_SHORTRELEASE}
cp -f php.ini-${PHP_INI_TYPE_OPT} $(eval_var ${PHP_INI_VAR})
writeLog "$(eval_var ${PHP_INI_VAR}) installed"
fi
echo "Done for php4_release"
fi
cd ${WORKDIR}
}
####################################################
disable_asm_atomic() {
# for this error:
# /usr/include/mysql/my_global.h:361:24: error: asm/atomic.h: No such file or directory
MY_GLOBAL=/usr/include/mysql/my_global.h
if [ -e /etc/debian_version ]; then
MY_GLOBAL=/usr/local/mysql/include/my_global.h
fi
if [ "${PHP1_RELEASE_OPT}" = "5.3" ] || [ "${PHP2_RELEASE_OPT}" = "5.3" ] || [ "${PHP3_RELEASE_OPT}" = "5.3" ] || [ "${PHP4_RELEASE_OPT}" = "5.3" ]; then
if [ -e ${MY_GLOBAL} ]; then
echo "Disabling asm/atomic in ${MY_GLOBAL}"
perl -pi -e 's#\#include <asm/atomic.h>#//\#include <asm/atomic.h>#' ${MY_GLOBAL}
fi
fi
}
####################################################
doSuPhp() {
getFile suphp-${SUPHP_VER}.tar.gz suphp_current
getFile patches/suphp_calling_user.patch suphp_calling_user.patch patches/suphp_calling_user.patch hexan
getFile patches/suphp_script_name.patch suphp_script_name.patch patches/suphp_script_name.patch hexan
getFile patches/suphp_attachment.patch suphp_attachment.patch patches/suphp_attachment.patch hexan
quitIfLocked doSuPhp
cd ${CWD}
FILE=${CWD}/suphp-${SUPHP_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
mkdir -p /usr/local/suphp/etc
cd suphp-${SUPHP_VER}
patch -p1 < ../patches/suphp_calling_user.patch
patch -p1 < ../patches/suphp_script_name.patch
patch -p1 < ../patches/suphp_attachment.patch
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
patch -p1 < ../suphp-0.7.2-cagefs.am.patch
fi
if [ "${SUPHP_VER}" != "0.7.1" ]; then
echo "re-configuring suphp configure..."
echo "calling aclocal:"
perl -pi -e 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/' configure.ac
aclocal
echo "calling libtoolize:"
libtoolize --force
echo "calling automake:"
automake --add-missing
echo "calling autoreconf:"
autoreconf
fi
perl -pi -e 's#"\$major_version" = "2.2"#"\$major_version" = "2.4"#' ./configure
echo "Configuring suphp-${SUPHP_VER}..."
CONF_FILE=${CWD}/${SUPHP_CONFIGURE}
${CONF_FILE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure suPHP. Check the ${SUPHP_CONFIGURE} file\n"
do_exit 1
fi
echo "Done Configuration."
while echo "Trying to make suPHP..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): "
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make Complete"
if [ -e /usr/lib/apache/mod_suphp.so ]; then
rm -f /usr/lib/apache/mod_suphp.so
fi
while echo "Installing suPHP..."; do
make install
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
touch /var/log/suphp.log
echo "suPHP ${SUPHP_VER} Installed."
writeLog "suPHP ${SUPHP_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doRemoveSuPhp() {
REMOVED_SUPHP=0
if [ -d /usr/local/suphp ]; then
REMOVED_SUPHP=1
fi
remove_directory /usr/local/suphp
remove_file /var/log/suphp.log
if [ "${REMOVED_SUPHP}" = "1" ]; then
echo "suPHP has been successfully removed."
writeLog "suPHP removed"
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
fi
}
####################################################
set_sendmail_link() {
ln -sfn /usr/sbin/exim /usr/sbin/sendmail
}
####################################################
doExtensions_build() {
EXTENSION_INT_RELEASE=$1
EXTENSION_INT_MODE=$2
EXTENSION_NAME=$3
EXTENSION_SHORT_RELEASE=`echo ${EXTENSION_INT_RELEASE} | tr -d '.'`
if [ "${EXTENSION_NAME}" = "" ]; then
EXTENSION_NAME="all"
fi
OS_EXT=lin
if [ "${EXTENSION_INT_MODE}" = "no" ]; then
do_exit 1 "Cannot build PHP extensions for mode ${EXTENSION_INT_MODE}."
else
SUHOSIN_UPLOADSCAN_FILENAME=/usr/local/php${EXTENSION_SHORT_RELEASE}/bin/php_uploadscan.sh
if [ -d /usr/local/php${EXTENSION_SHORT_RELEASE} ]; then
mkdir -p /usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.conf.d
fi
EXTENSION_INT_EXT_DIR=`/usr/local/php${EXTENSION_SHORT_RELEASE}/bin/php-config --extension-dir`
EXTENSION_INT_PHP_INI=/usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.ini
EXTENSION_INT_EXT_INI=/usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.conf.d/10-directadmin.ini
fi
#Make extensions file empty
echo -n '' > ${EXTENSION_INT_EXT_INI}
#We do comment out ioncube/zend from the old php.ini file only, because old configs cannot exist
if [ -e ${EXTENSION_INT_PHP_INI} ]; then
if [ "${HTSCANNER_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=htscanner.so|;extension=htscanner.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${SUHOSIN_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=suhosin.so|;extension=suhosin.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${PHP_GMP_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=gmp.so|;extension=gmp.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${PHP_IGBINARY_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=igbinary.so|;extension=igbinary.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${IMAGICK_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=imagick.so|;extension=imagick.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${PHP_LDAP_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=ldap.so|;extension=ldap.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${PHP_PHALCON_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=phalcon.so|;extension=phalcon.so|' ${EXTENSION_INT_PHP_INI}
perl -pi -e 's|^extension=psr.so|;extension=psr.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${PHP_READLINE_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=readline.so|;extension=readline.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${PHP_REDIS_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=redis.so|;extension=redis.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=snuffleupagus.so|;extension=snuffleupagus.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${PHP_BZ2_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=bz2.so|;extension=bz2.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${PHP_IMAP_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=imap.so|;extension=imap.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${PHP_XMLRPC_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=xmlrpc.so|;extension=xmlrpc.so|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${OPCACHE_OPT}" = "yes" ]; then
perl -pi -e "s|^zend_extension=${EXTENSION_INT_EXT_DIR}/opcache.so|;zend_extension=${EXTENSION_INT_EXT_DIR}/opcache.so|" ${EXTENSION_INT_PHP_INI}
fi
if [ "${IONCUBE_OPT}" = "yes" ]; then
perl -pi -e 's|^zend_extension=/usr/local/lib/ioncube|;zend_extension=/usr/local/lib/ioncube|' ${EXTENSION_INT_PHP_INI}
fi
if [ "${ZEND_OPT}" = "yes" ]; then
perl -pi -e 's|^zend_extension=/usr/local/lib/ZendGuardLoader.so|;zend_extension=/usr/local/lib/ZendGuardLoader.so|' ${EXTENSION_INT_PHP_INI}
perl -pi -e 's|^zend_extension=/usr/local/lib/ZendOptimizer_|;zend_extension=/usr/local/lib/ZendOptimizer_|' ${EXTENSION_INT_PHP_INI}
fi
#Make extensions file empty
echo -n '' > ${EXTENSION_INT_EXT_INI}
if [ -e ${EXTENSION_INT_EXT_INI} ]; then
echo "extension_dir=${EXTENSION_INT_EXT_DIR}" >> ${EXTENSION_INT_EXT_INI}
if [ "${SUHOSIN_OPT}" = "yes" ] && [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "7.0" ] && [ "${EXTENSION_INT_RELEASE}" != "7.1" ] && [ "${EXTENSION_INT_RELEASE}" != "7.2" ] && [ "${EXTENSION_INT_RELEASE}" != "7.3" ] && [ "${EXTENSION_INT_RELEASE}" != "7.4" ] && [ "${EXTENSION_INT_RELEASE}" != "8.0" ] && [ "${EXTENSION_INT_RELEASE}" != "8.1" ] && [ "${EXTENSION_INT_RELEASE}" != "8.2" ]; then
echo "extension=suhosin.so" >> ${EXTENSION_INT_EXT_INI}
if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] && [ -e /usr/local/bin/clamdscan ]; then
cp -f ${SUHOSIN_PHP_UPLOADSCAN_SCRIPT} ${SUHOSIN_UPLOADSCAN_FILENAME}
chmod 755 ${SUHOSIN_UPLOADSCAN_FILENAME}
echo "suhosin.upload.verification_script=\"${SUHOSIN_UPLOADSCAN_FILENAME}\"" >> ${EXTENSION_INT_EXT_INI}
elif [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] && [ ! -e /usr/local/bin/clamdscan ]; then
if [ "${EXTENSION_NAME}" = "suhosin" ] || [ "${EXTENSION_NAME}" = "all" ]; then
echo "Cannot enable suhosin upload verification script (suhosin_php_uploadscan option), because /usr/local/bin/clamdscan does not exist on the system."
fi
fi
if [ -e ${WORKDIR}/${SUHOSIN_INI} ]; then
cat ${WORKDIR}/${SUHOSIN_INI} >> ${EXTENSION_INT_EXT_INI}
echo "" >> ${EXTENSION_INT_EXT_INI}
fi
if [ "${EXTENSION_NAME}" = "suhosin" ] || [ "${EXTENSION_NAME}" = "all" ]; then
echo "suhosin ${SUHOSIN_VER} is now installed for PHP ${EXTENSION_INT_RELEASE}."
fi
fi
if [ "${HTSCANNER_OPT}" = "yes" ] && [ "${EXTENSION_INT_MODE}" != "mod_php" ] && [ "${EXTENSION_INT_MODE}" != "lsphp" ] && [ "${EXTENSION_INT_RELEASE}" != "8.0" ] && [ "${EXTENSION_INT_RELEASE}" != "8.1" ] && [ "${EXTENSION_INT_RELEASE}" != "8.2" ]; then
if [ "${HAVE_CLI}" = "no" ]; then
echo "extension=htscanner.so" >> ${EXTENSION_INT_EXT_INI}
if [ "${EXTENSION_NAME}" = "htscanner" ] || [ "${EXTENSION_NAME}" = "all" ]; then
echo "htscanner ${HTSCANNER_VER} is now installed for PHP ${EXTENSION_INT_RELEASE}."
fi
fi
fi
if [ "${PHP_IGBINARY_OPT}" = "yes" ]; then
if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then
echo "extension=igbinary.so" >> ${EXTENSION_INT_EXT_INI}
else
echo "There is no igbinary available for PHP ${EXTENSION_INT_RELEASE}."
fi
fi
if [ "${IONCUBE_OPT}" = "yes" ]; then
if [ "${EXTENSION_INT_RELEASE}" != "8.0" ] && [ "${EXTENSION_INT_RELEASE}" != "8.2" ]; then
echo "zend_extension=/usr/local/lib/ioncube/ioncube_loader_${OS_EXT}_${EXTENSION_INT_RELEASE}.so" >> ${EXTENSION_INT_EXT_INI}
if [ "${EXTENSION_NAME}" = "ioncube" ] || [ "${EXTENSION_NAME}" = "all" ]; then
echo "ionCube loader ${IONCUBE_VER} is now installed for PHP ${EXTENSION_INT_RELEASE}."
fi
else
echo "There is no ionCube loader available for PHP ${EXTENSION_INT_RELEASE}."
fi
fi
if [ "${PHP_PHALCON_OPT}" = "yes" ]; then
if [ "${EXTENSION_INT_RELEASE}" = "7.2" ] || [ "${EXTENSION_INT_RELEASE}" = "7.3" ] || [ "${EXTENSION_INT_RELEASE}" = "7.4" ]; then
echo "extension=psr.so" >> ${EXTENSION_INT_EXT_INI}
echo "extension=phalcon.so" >> ${EXTENSION_INT_EXT_INI}
else
echo "There is no phalcon available for PHP ${EXTENSION_INT_RELEASE}."
fi
fi
if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ]; then
if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then
echo "extension=snuffleupagus.so" >> ${EXTENSION_INT_EXT_INI}
echo "sp.configuration_file=/usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.conf.d/snuffleupagus.rules" >> ${EXTENSION_INT_EXT_INI}
if [ ! -e /usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.conf.d/snuffleupagus.rules ]; then
touch /usr/local/php${EXTENSION_SHORT_RELEASE}/lib/php.conf.d/snuffleupagus.rules
fi
else
echo "There is no snuffleupagus available for PHP ${EXTENSION_INT_RELEASE}."
fi
fi
if [ "${PHP_BZ2_OPT}" = "yes" ]; then
echo "extension=bz2.so" >> ${EXTENSION_INT_EXT_INI}
fi
if [ "${PHP_GMP_OPT}" = "yes" ]; then
echo "extension=gmp.so" >> ${EXTENSION_INT_EXT_INI}
fi
if [ "${PHP_READLINE_OPT}" = "yes" ]; then
echo "extension=readline.so" >> ${EXTENSION_INT_EXT_INI}
fi
if [ "${PHP_REDIS_OPT}" = "yes" ]; then
if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then
echo "extension=redis.so" >> ${EXTENSION_INT_EXT_INI}
fi
fi
if [ "${IMAGICK_OPT}" = "yes" ]; then
echo "extension=imagick.so" >> ${EXTENSION_INT_EXT_INI}
fi
if [ "${PHP_IMAP_OPT}" = "yes" ]; then
echo "extension=imap.so" >> ${EXTENSION_INT_EXT_INI}
fi
if [ "${PHP_LDAP_OPT}" = "yes" ]; then
echo "extension=ldap.so" >> ${EXTENSION_INT_EXT_INI}
fi
if [ "${PHP_XMLRPC_OPT}" = "yes" ]; then
echo "extension=xmlrpc.so" >> ${EXTENSION_INT_EXT_INI}
fi
if [ "${ZEND_OPT}" = "yes" ]; then
# Only supported by PHP5
if echo "${EXTENSION_INT_RELEASE}" | grep -m1 -q '^5'; then
echo "zend_extension=/usr/local/lib/ZendGuardLoader${EXTENSION_INT_RELEASE}.so" >> ${EXTENSION_INT_EXT_INI}
if [ "${EXTENSION_NAME}" = "zend" ] || [ "${EXTENSION_NAME}" = "all" ]; then
echo "Zend Guard loader is now installed for PHP ${EXTENSION_INT_RELEASE}."
fi
elif [ "${EXTENSION_NAME}" = "zend" ] || [ "${EXTENSION_NAME}" = "all" ]; then
echo "There is no Zend Guard loader available for PHP ${EXTENSION_INT_RELEASE}."
fi
fi
if [ "${OPCACHE_OPT}" = "yes" ]; then
echo "zend_extension=${EXTENSION_INT_EXT_DIR}/opcache.so" >> ${EXTENSION_INT_EXT_INI}
if [ -e ${WORKDIR}/${OPCACHE_INI} ]; then
cat ${WORKDIR}/${OPCACHE_INI} >> ${EXTENSION_INT_EXT_INI}
echo "" >> ${EXTENSION_INT_EXT_INI}
fi
if [ "${EXTENSION_INT_RELEASE}" = "5.4" ] || [ "${EXTENSION_INT_RELEASE}" = "5.4" ]; then
SHOW_EXT_VERSION=" ${OPCACHE_VER}"
else
SHOW_EXT_VERSION=""
fi
if [ "${EXTENSION_NAME}" = "opcache" ] || [ "${EXTENSION_NAME}" = "all" ]; then
echo "opCache${SHOW_EXT_VERSION} is now installed for PHP ${EXTENSION_INT_RELEASE}."
fi
fi
fi
fi
}
doExtensions() {
DO_EXT_SKIP_RESTART=0
if [ "$1" = "1" ]; then
DO_EXT_SKIP_RESTART=1
fi
PHP_VERSION="${2}"
if [ "${PHP_VERSION}" = "" ]; then
PHP_VERSION="all"
fi
doExtensions_build ${PHP1_RELEASE_OPT} ${PHP1_MODE_OPT} ${PHP_VERSION}
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
doExtensions_build ${PHP2_RELEASE_OPT} ${PHP2_MODE_OPT} ${PHP_VERSION}
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
doExtensions_build ${PHP3_RELEASE_OPT} ${PHP3_MODE_OPT} ${PHP_VERSION}
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
doExtensions_build ${PHP4_RELEASE_OPT} ${PHP4_MODE_OPT} ${PHP_VERSION}
fi
SKIP_WEBSERVER_RESTART=0
if [ "${DO_EXT_SKIP_RESTART}" = "0" ]; then
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
if [ "${PHP2_MODE_OPT}" = "php-fpm" ] || [ "${PHP2_RELEASE_OPT}" = "no" ]; then
SKIP_WEBSERVER_RESTART=1
fi
if [ "${PHP3_MODE_OPT}" = "php-fpm" ] || [ "${PHP3_RELEASE_OPT}" = "no" ]; then
SKIP_WEBSERVER_RESTART=1
fi
if [ "${PHP4_MODE_OPT}" = "php-fpm" ] || [ "${PHP4_RELEASE_OPT}" = "no" ]; then
SKIP_WEBSERVER_RESTART=1
fi
fi
if [ "${SKIP_WEBSERVER_RESTART}" = "0" ]; then
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
control_service nginx stop >/dev/null 2>&1
control_service nginx start
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
control_service httpd restart
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
control_service litespeed reload
fi
fi
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
echo "Restarting php-fpm${PHP1_SHORTRELEASE}."
control_service php-fpm${PHP1_SHORTRELEASE} restart
fi
if [ "${PHP2_MODE_OPT}" = "php-fpm" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
echo "Restarting php-fpm${PHP2_SHORTRELEASE}."
control_service php-fpm${PHP2_SHORTRELEASE} restart
fi
if [ "${PHP3_MODE_OPT}" = "php-fpm" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
echo "Restarting php-fpm${PHP3_SHORTRELEASE}."
control_service php-fpm${PHP3_SHORTRELEASE} restart
fi
if [ "${PHP4_MODE_OPT}" = "php-fpm" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
echo "Restarting php-fpm${PHP4_SHORTRELEASE}."
control_service php-fpm${PHP4_SHORTRELEASE} restart
fi
fi
}
####################################################
doPHPHtscanner() {
if [ "${HAVE_CLI}" = "no" ]; then
HTSCANNER_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
cd ${CWD}
if [ "${HTSCANNER_OPT}" = "no" ]; then
do_exit 1 "Cannot build htscanner, because you do not have it set in php_extensions.conf file."
fi
if [ -z $1 ] || [ "$1" = "no" ]; then
return
fi
if [ -z $2 ]; then
SKIP_RESTART=0
else
SKIP_RESTART=$2
fi
getFile htscanner-${HTSCANNER_VER}.tgz htscanner
FILE=${CWD}/htscanner-${HTSCANNER_VER}.tgz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE}
cd htscanner-${HTSCANNER_VER}
echo "Installing htscanner2-${HTSCANNER_VER} PHP extension for PHP $1..."
/usr/local/php${HTSCANNER_INT_SHORTRELEASE}/bin/phpize
./configure --enable-htscanner --with-php-config=/usr/local/php${HTSCANNER_INT_SHORTRELEASE}/bin/php-config
while echo "Trying to make htscanner2-${HTSCANNER_VER} PHP extension..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 0
fi
else
break
fi
done
echo "Make complete"
echo "Installing htscanner2-${HTSCANNER_VER} PHP extension..."
make install
make clean
doExtensions_build $1 php-fpm htscanner
echo "htscanner2 PHP extension has been installed successfully."
cd ${CWD}
fi
}
####################################################
doZend_build() {
cd ${CWD}
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
do_exit 1 "Missing parameters for doZend call. Exiting..."
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
ZEND_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
if [ "$1" = "5.3" ]; then
ZEND_INT_FILENAME=${ZENDFILE_GUARD53}
ZEND_INT_ZENDNAME=${ZENDNAME_PHP53}
ZEND_INT_LONGVER="$1"
ZEND_TARBALL_FORMAT=1
elif [ "$1" = "5.4" ]; then
ZEND_INT_FILENAME=${ZENDFILE_GUARD54}
ZEND_INT_ZENDNAME=${ZENDNAME_PHP54}
ZEND_INT_LONGVER="$1"
ZEND_TARBALL_FORMAT=1
elif [ "$1" = "5.5" ]; then
ZEND_INT_FILENAME=${ZENDFILE_GUARD55}
ZEND_INT_ZENDNAME=${ZENDNAME_PHP55}
ZEND_INT_LONGVER="$1"
ZEND_TARBALL_FORMAT=0
elif [ "$1" = "5.6" ]; then
ZEND_INT_FILENAME=${ZENDFILE_GUARD56}
ZEND_INT_ZENDNAME=${ZENDNAME_PHP56}
ZEND_INT_LONGVER="$1"
ZEND_TARBALL_FORMAT=0
elif [ ! -z "$1" ]; then
echo "Zend guard loader not supported for PHP version ($1) set in configuration file"
return
fi
getFile ${ZEND_INT_FILENAME} ""
if [ "${ZEND_OPT}" != "yes" ]; then
do_exit 1 "You cannot install Zend Guard Loader, because you do not have it set in the options.conf file."
fi
cd ${CWD}
tar xzf ${ZEND_INT_FILENAME} --no-same-owner
if [ ${ZEND_TARBALL_FORMAT} -eq 1 ]; then
cp -fp ${ZEND_INT_ZENDNAME}/php-${ZEND_INT_LONGVER}.x/ZendGuardLoader.so /usr/local/lib/ZendGuardLoader${ZEND_INT_LONGVER}.so
else
OPCACHE_EXTENSION_DIR_SHORT_RELEASE=`echo ${ZEND_INT_LONGVER} | tr -d '.'`
OPCACHE_EXT_DIR=`/usr/local/php${OPCACHE_EXTENSION_DIR_SHORT_RELEASE}/bin/php-config --extension-dir`
cp -fp ${ZEND_INT_ZENDNAME}/ZendGuardLoader.so /usr/local/lib/ZendGuardLoader${ZEND_INT_LONGVER}.so
fi
chmod 755 /usr/local/lib/ZendGuardLoader${ZEND_INT_LONGVER}.so
chown root:${ROOT_GRP} /usr/local/lib/ZendGuardLoader${ZEND_INT_LONGVER}.so
doExtensions_build ${ZEND_INT_LONGVER} ${2} zend
}
####################################################
doZend() {
cd ${CWD}
doZend_build ${PHP1_RELEASE_OPT} ${PHP1_MODE_OPT} 1
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
doZend_build ${PHP2_RELEASE_OPT} ${PHP2_MODE_OPT} 1
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
doZend_build ${PHP3_RELEASE_OPT} ${PHP3_MODE_OPT} 1
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
doZend_build ${PHP4_RELEASE_OPT} ${PHP4_MODE_OPT} 1
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
SKIP_WEBSERVER_RESTART=0
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
if [ "${PHP2_MODE_OPT}" = "php-fpm" ] || [ "${PHP2_RELEASE_OPT}" = "no" ]; then
SKIP_WEBSERVER_RESTART=1
fi
if [ "${PHP3_MODE_OPT}" = "php-fpm" ] || [ "${PHP3_RELEASE_OPT}" = "no" ]; then
SKIP_WEBSERVER_RESTART=1
fi
if [ "${PHP4_MODE_OPT}" = "php-fpm" ] || [ "${PHP4_RELEASE_OPT}" = "no" ]; then
SKIP_WEBSERVER_RESTART=1
fi
fi
if [ "${SKIP_WEBSERVER_RESTART}" = "0" ]; then
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
control_service nginx stop >/dev/null 2>&1
control_service nginx start
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
control_service httpd restart
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
control_service litespeed reload
fi
fi
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
echo "Restarting php-fpm${PHP1_SHORTRELEASE}."
control_service php-fpm${PHP1_SHORTRELEASE} restart
fi
if [ "${PHP2_MODE_OPT}" = "php-fpm" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
echo "Restarting php-fpm${PHP2_SHORTRELEASE}."
control_service php-fpm${PHP2_SHORTRELEASE} restart
fi
if [ "${PHP3_MODE_OPT}" = "php-fpm" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
echo "Restarting php-fpm${PHP3_SHORTRELEASE}."
control_service php-fpm${PHP3_SHORTRELEASE} restart
fi
if [ "${PHP4_MODE_OPT}" = "php-fpm" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
echo "Restarting php-fpm${PHP4_SHORTRELEASE}."
control_service php-fpm${PHP4_SHORTRELEASE} restart
fi
writeLog "zend installed"
}
####################################################
doIoncube() {
cd ${CWD}
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
IONCUBE_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
rm -f ${IONCUBEFILE}
getFile ioncube_${IONCUBE_VER}/${IONCUBEFILE} ${IONCUBENAME} ${IONCUBEFILE}
if [ "${IONCUBE_OPT}" != "yes" ]; then
do_exit 1 "You cannot install ionCube loader, because you do not have it set in php_extensions.conf file."
fi
tar xzf ${IONCUBEFILE} --no-same-owner
if [ -d ioncube ]; then
chown -R root:${ROOT_GRP} ioncube
fi
if [ -d /usr/local/lib/ioncube ]; then
rm -rf /usr/local/lib/ioncube
fi
mv -f ioncube /usr/local/lib/
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ioncube
else
doExtensions_build ${1} ${2} ioncube
fi
writeLog "Ioncube ${IONCUBE_VER} installed"
}
####################################################
installSuhosin() {
if [ -z $1 ] || [ "$1" = "no" ]; then
return
fi
echo "Installing suhosin-${SUHOSIN_VER} PHP extension for PHP $1..."
/usr/local/php$1/bin/phpize
./configure --with-php-config=/usr/local/php$1/bin/php-config
while echo "Trying to make suhosin-${SUHOSIN_VER} PHP extension..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
make install
make clean
}
doSuhosin() {
cd ${CWD}
if [ "${SUHOSIN_OPT}" = "no" ]; then
do_exit 1 "Cannot build suhosin, because you do not have it set in php_extensions.conf file."
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
SUHOSIN_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
getFile suhosin-${SUHOSIN_VER}.tar.gz suhosin
FILE=${CWD}/suhosin-${SUHOSIN_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE}
cd suhosin-${SUHOSIN_VER}
if [ "${FOR_ALL}" = "no" ]; then
if [ "${SUHOSIN_INT_SHORTRELEASE}" != "53" ] && [ "${SUHOSIN_INT_SHORTRELEASE}" != "70" ] && [ "${SUHOSIN_INT_SHORTRELEASE}" != "71" ] && [ "${SUHOSIN_INT_SHORTRELEASE}" != "72" ] && [ "${SUHOSIN_INT_SHORTRELEASE}" != "73" ] && [ "${SUHOSIN_INT_SHORTRELEASE}" != "74" ]; then
installSuhosin ${SUHOSIN_INT_SHORTRELEASE} $2
fi
else
if [ "${PHP1_SHORTRELEASE}" != "53" ] && [ "${PHP1_SHORTRELEASE}" != "70" ] && [ "${PHP1_SHORTRELEASE}" != "71" ] && [ "${PHP1_SHORTRELEASE}" != "72" ] && [ "${PHP1_SHORTRELEASE}" != "73" ] && [ "${PHP1_SHORTRELEASE}" != "74" ]; then
installSuhosin ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT}
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ "${PHP2_SHORTRELEASE}" != "53" ] && [ "${PHP2_SHORTRELEASE}" != "70" ] && [ "${PHP2_SHORTRELEASE}" != "71" ] && [ "${PHP2_SHORTRELEASE}" != "72" ] && [ "${PHP2_SHORTRELEASE}" != "73" ] && [ "${PHP2_SHORTRELEASE}" != "74" ]; then
installSuhosin ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT}
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ] && [ "${PHP3_SHORTRELEASE}" != "53" ] && [ "${PHP3_SHORTRELEASE}" != "70" ] && [ "${PHP3_SHORTRELEASE}" != "71" ] && [ "${PHP3_SHORTRELEASE}" != "72" ] && [ "${PHP3_SHORTRELEASE}" != "73" ] && [ "${PHP3_SHORTRELEASE}" != "74" ]; then
installSuhosin ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT}
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ "${PHP4_SHORTRELEASE}" != "53" ] && [ "${PHP4_SHORTRELEASE}" != "70" ] && [ "${PHP4_SHORTRELEASE}" != "71" ] && [ "${PHP4_SHORTRELEASE}" != "72" ] && [ "${PHP4_SHORTRELEASE}" != "73" ] && [ "${PHP4_SHORTRELEASE}" != "74" ]; then
installSuhosin ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT}
fi
fi
if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] && [ ! -e /usr/local/bin/clamdscan ]; then
if [ "${CLAMAV_OPT}" = "no" ]; then
do_exit 1 "Cannot install suhosin with PHP upload scan using ClamAV, because /usr/local/bin/clamdscan does not exist on the system and clamav=no is set in the options.conf file."
fi
removeLockfile
doclamav
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} suhosin
else
doExtensions_build ${1} ${2} suhosin
fi
echo "suhosin ${SUHOSIN_VER} PHP extension has been installed successfully."
writeLog "suhosin ${SUHOSIN_VER} installed"
cd ${CWD}
}
installOpcache() {
if [ -z $1 ] || [ "$1" = "no" ]; then
return
fi
echo "Installing zendopcache-${OPCACHE_VER} PHP extension for PHP $1..."
if [ "$1" = "53" ] || [ "$1" = "54" ]; then
/usr/local/php$1/bin/phpize
./configure --with-php-config=/usr/local/php$1/bin/php-config
while echo "Trying to make zendopcache-${OPCACHE_VER} PHP extension..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 0
fi
else
break
fi
done
echo "Make complete"
make install
make clean
echo "opCache ${OPCACHE_VER} PHP extension has been installed successfully for PHP$1."
writeLog "opCache ${OPCACHE_VER} installed for PHP$1"
fi
}
doOpcache() {
cd ${CWD}
if [ "${OPCACHE_OPT}" = "no" ]; then
do_exit 1 "Cannot build opCache, because you do not have it set in php_extensions.conf file."
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
OPCACHE_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
fi
SKIP_RESTART=1
if [ "$1" != "1" ]; then
SKIP_RESTART=0
fi
if [ "${PHP1_RELEASE_OPT}" = "5.3" ] || [ "${PHP1_RELEASE_OPT}" = "5.4" ] || [ "${PHP2_RELEASE_OPT}" = "5.3" ] || [ "${PHP2_RELEASE_OPT}" = "5.4" ] || [ "${PHP3_RELEASE_OPT}" = "5.3" ] || [ "${PHP3_RELEASE_OPT}" = "5.4" ] || [ "${PHP4_RELEASE_OPT}" = "5.3" ] || [ "${PHP4_RELEASE_OPT}" = "5.4" ]; then
getFile zendopcache-${OPCACHE_VER}.tgz zendopcache
FILE=${CWD}/zendopcache-${OPCACHE_VER}.tgz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE}
cd zendopcache-${OPCACHE_VER}
if [ "${FOR_ALL}" = "no" ]; then
installOpcache ${OPCACHE_INT_SHORTRELEASE} $2
else
installOpcache ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT}
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
installOpcache ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT}
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
installOpcache ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT}
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
installOpcache ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT}
fi
fi
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} opcache
else
doExtensions_build ${1} ${2} opcache
fi
cd ${CWD}
}
####################################################
doModLsapi() {
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${PHP1_MODE_OPT}" = "lsphp" ] && [ $(is_cloudlinux_solo) -eq 1 ]; then
do_exit 1 "lsphp PHP1_MODE is not supported on CloudLinux Solo Edition."
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${PHP1_MODE_OPT}" = "lsphp" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if ! grep -m1 -q 'exclude=.*liblsapi' /etc/yum.conf; then
perl -pi -e 's|exclude\=|exclude=liblsapi* |g' /etc/yum.conf
fi
if [ -e /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp ]; then
cp -pf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp /usr/local/bin/lsphp
elif [ -e /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp${PHP1_SHORTRELEASE} ]; then
cp -pf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp${PHP1_SHORTRELEASE} /usr/local/bin/lsphp
fi
if rpm -q --quiet mod_lsapi; then
rpm -e mod_lsapi >/dev/null 2>&1
fi
cd ${CWD}
getFileCL mod_lsapi-${MOD_LSAPI_VER}.tar.gz mod_lsapi
LSAPI_MODDIR="`tar tzf mod_lsapi-${MOD_LSAPI_VER}.tar.gz | head -n 1 | cut -d/ -f1`"
LSAPI_RELEASE="stable"
if [ "${CLOUDLINUX_BETA_OPT}" = "yes" ]; then
LSAPI_RELEASE="beta"
fi
tar xzf mod_lsapi-${MOD_LSAPI_VER}.tar.gz
cd ${LSAPI_MODDIR}
sh ./install/da_cb_install ${LSAPI_RELEASE} ${MOD_LSAPI_VER}
if [ -e /usr/include/criu/criu.h ];then
cmake -DWITH_CRIU:BOOLEAN=TRUE CMakeLists.txt
else
cmake CMakeLists.txt
fi
make install
if [ ! -e /etc/httpd/conf/extra/mod_lsapi.conf ]; then
cd conf
cat mod_lsapi.conf | sed 's/#AddType application\/x-httpd-lsphp/AddType application\/x-httpd-lsphp/g' > mod_lsapi.conf.tmp
cp -f mod_lsapi.conf.tmp /etc/httpd/conf/extra/mod_lsapi.conf
perl -pi -e 's#/etc/httpd/modules/mod_lsapi.so#/usr/lib/apache/mod_lsapi.so#' /etc/httpd/conf/extra/mod_lsapi.conf
fi
#Inserting mod_lsapi to apache config
if ! grep -m1 -q -e "mod_lsapi.conf" /etc/httpd/conf/extra/httpd-includes.conf; then
echo "Adding mod_lsapi to apache configuration (extra/httpd-includes.conf)."
#if file is missing new line and the end of the file - add it
if [ ! -z "`tail -c 1 /etc/httpd/conf/extra/httpd-includes.conf`" ]; then
echo "" >> /etc/httpd/conf/extra/httpd-includes.conf
fi
echo "#For mod_lsphp settings" >> /etc/httpd/conf/extra/httpd-includes.conf
echo "Include /etc/httpd/conf/extra/mod_lsapi.conf" >> /etc/httpd/conf/extra/httpd-includes.conf
else
perl -pi -e 's|^#Include /etc/httpd/conf/extra/mod_lsapi.conf|Include /etc/httpd/conf/extra/mod_lsapi.conf|' /etc/httpd/conf/extra/httpd-includes.conf
fi
cd ${CWD}
rm -rf ${LSAPI_MODDIR}
if [ "$1" != "0" ]; then
control_service httpd restart
fi
fi
else
if [ -e /etc/httpd/conf/extra/httpd-includes.conf ]; then
#Removing mod_lsapi from apache config
if grep -m1 -q -e '^Include /etc/httpd/conf/extra/mod_lsapi.conf' /etc/httpd/conf/extra/httpd-includes.conf; then
echo "Removing mod_lsapi from apache configuration (extra/httpd-includes.conf)."
perl -pi -e 's|^Include /etc/httpd/conf/extra/mod_lsapi.conf|#Include /etc/httpd/conf/extra/mod_lsapi.conf|' /etc/httpd/conf/extra/httpd-includes.conf
if [ "$1" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
control_service httpd restart
fi
fi
fi
fi
fi
}
####################################################
doModHostingLimits() {
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ $(is_cloudlinux_solo) -eq 0 ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ ! -e /usr/bin/cmake ]; then
yum -y install cmake
fi
if [ ! -e /usr/include/lve/lve-ctl.h ]; then
yum -y install liblve-devel
fi
cd ${CWD}
getFileCL mod_hostinglimits-${MOD_HOSTINGLIMITS_VER}.tar.gz mod_hostinglimits
CL_MODDIR="mod_hostinglimits-${MOD_HOSTINGLIMITS_VER}"
tar xzf mod_hostinglimits-${MOD_HOSTINGLIMITS_VER}.tar.gz
cd ${CL_MODDIR}
if [ -e ./install/da_cb_install ]; then
sh ./install/da_cb_install ${MOD_HOSTINGLIMITS_VER}
fi
cmake CMakeLists.txt
make install
if [ ! -s /etc/httpd/conf/extra/modhostinglimits.conf ]; then
safeDownloadWithMove "/etc/httpd/conf/extra/modhostinglimits.conf" "https://repo.cloudlinux.com/cloudlinux/confs/modhostinglimits.conf"
perl -pi -e 's#/etc/httpd/modules/mod_hostinglimits.so#/usr/lib/apache/mod_hostinglimits.so#' /etc/httpd/conf/extra/modhostinglimits.conf
fi
#Inserting mod_hostinglimits to apache config
if ! grep -m1 -q -e "modhostinglimits.conf" /etc/httpd/conf/extra/httpd-includes.conf; then
echo "Adding mod_hostinglimits to apache configuration (extra/httpd-includes.conf)."
if [ ! -z "`tail -c 1 /etc/httpd/conf/extra/httpd-includes.conf`" ]; then
echo "" >> /etc/httpd/conf/extra/httpd-includes.conf
fi
echo "#For LVE settings" >> /etc/httpd/conf/extra/httpd-includes.conf
echo "Include /etc/httpd/conf/extra/modhostinglimits.conf" >> /etc/httpd/conf/extra/httpd-includes.conf
else
perl -pi -e 's|^#Include /etc/httpd/conf/extra/modhostinglimits.conf|Include /etc/httpd/conf/extra/modhostinglimits.conf|' /etc/httpd/conf/extra/httpd-includes.conf
fi
cd ${CWD}
rm -rf ${CL_MODDIR}
if [ "$1" != "0" ]; then
control_service httpd restart
fi
fi
else
#Removing mod_hostinglimits from apache config
if grep -m1 -q -e '^Include /etc/httpd/conf/extra/modhostinglimits.conf' /etc/httpd/conf/extra/httpd-includes.conf; then
echo "Removing mod_hostinglimits from apache configuration (extra/httpd-includes.conf)."
perl -pi -e 's|^Include /etc/httpd/conf/extra/modhostinglimits.conf|#Include /etc/httpd/conf/extra/modhostinglimits.conf|' /etc/httpd/conf/extra/httpd-includes.conf
if [ "$1" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
control_service httpd restart
fi
fi
fi
fi
}
####################################################
doModProctitle() {
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ ! -e /usr/bin/cmake ]; then
yum -y install cmake
fi
cd ${CWD}
getFileCL mod_proctitle-${MOD_PROCTITLE_VER}.tar.gz mod_proctitle
CL_MODDIR="mod_proctitle-${MOD_PROCTITLE_VER}"
tar xzf mod_proctitle-${MOD_PROCTITLE_VER}.tar.gz
cd ${CL_MODDIR}
cmake CMakeLists.txt
make install
if [ ! -s /etc/httpd/conf/extra/modproctitle.conf ]; then
cp -f conf/modproctitle.conf /etc/httpd/conf/extra/modproctitle.conf
fi
#Inserting mod_proctitle to apache config
if ! grep -m1 -q -e "modproctitle.conf" /etc/httpd/conf/extra/httpd-includes.conf; then
echo "Adding mod_proctitle to apache configuration (extra/httpd-includes.conf)."
if [ ! -z "`tail -c 1 /etc/httpd/conf/extra/httpd-includes.conf`" ]; then
echo "" >> /etc/httpd/conf/extra/httpd-includes.conf
fi
echo "#For mod_proctitle settings" >> /etc/httpd/conf/extra/httpd-includes.conf
echo "Include /etc/httpd/conf/extra/modproctitle.conf" >> /etc/httpd/conf/extra/httpd-includes.conf
else
perl -pi -e 's|^#Include /etc/httpd/conf/extra/modproctitle.conf|Include /etc/httpd/conf/extra/modproctitle.conf|' /etc/httpd/conf/extra/httpd-includes.conf
fi
cd ${CWD}
rm -rf ${CL_MODDIR}
if [ "$1" != "0" ]; then
control_service httpd restart
fi
fi
else
#Removing mod_proctitle from apache config
if grep -m1 -q -e '^Include /etc/httpd/conf/extra/modproctitle.conf' /etc/httpd/conf/extra/httpd-includes.conf; then
echo "Removing mod_proctitle from apache configuration (extra/httpd-includes.conf)."
perl -pi -e 's|^Include /etc/httpd/conf/extra/modproctitle.conf|#Include /etc/httpd/conf/extra/modproctitle.conf|' /etc/httpd/conf/extra/httpd-includes.conf
if [ "$1" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
control_service httpd restart
fi
fi
fi
fi
}
####################################################
doSetupFcgidSh() {
if [ ! -d /usr/local/safe-bin ]; then
mkdir -p /usr/local/safe-bin
chmod 511 /usr/local/safe-bin
chown apache:apache /usr/local/safe-bin
fi
FCGID_SCRIPT_NAME="fcgid"
cp -f ${CWD}/configure/fastcgi/${FCGID_SCRIPT_NAME}.sh /usr/local/safe-bin/fcgid${1}.sh
if [ -e ${CWD}/custom/fastcgi/fcgid${1}.sh ]; then
cp -f ${CWD}/custom/fastcgi/fcgid${1}.sh /usr/local/safe-bin/fcgid${1}.sh
elif [ -e ${CWD}/custom/fastcgi/${FCGID_SCRIPT_NAME}.sh ]; then
cp -f ${CWD}/custom/fastcgi/${FCGID_SCRIPT_NAME}.sh /usr/local/safe-bin/fcgid${1}.sh
fi
chown apache:apache /usr/local/safe-bin/fcgid${1}.sh
chmod 555 /usr/local/safe-bin/fcgid${1}.sh
}
doPhp_build() {
#We want pkg-config to report
export PKG_CONFIG_PATH=/usr/local/icu/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig
#$1 is PHP release
#$2 is PHP mode
INT_RELEASE=$1
INT_MODE=$2
SHORT_RELEASE=`echo ${INT_RELEASE} | tr -d '.'`
PHP_VERSION_EVAL_VAR=PHP${SHORT_RELEASE}_VER
PHP_VER=$(eval_var ${PHP_VERSION_EVAL_VAR})
if [ -d /usr/local/lib/php.conf.d ] && [ ! -d /usr/local/php${SHORT_RELEASE}/lib/php.conf.d ] && [ ! -L /usr/local/lib/php.conf.d ]; then
mkdir -p /usr/local/php${SHORT_RELEASE}/lib
mv -v /usr/local/lib/php.conf.d /usr/local/php${SHORT_RELEASE}/lib/php.conf.d
ln -sf /usr/local/php${SHORT_RELEASE}/lib/php.conf.d /usr/local/lib/php.conf.d
fi
if [ -d /usr/local/lib/php ] && [ ! -d /usr/local/php${SHORT_RELEASE}/lib/php ] && [ ! -L /usr/local/lib/php ]; then
mkdir -p /usr/local/php${SHORT_RELEASE}/lib
mv -v /usr/local/lib/php /usr/local/php${SHORT_RELEASE}/lib/php
ln -sf /usr/local/php${SHORT_RELEASE}/lib/php /usr/local/lib/php
fi
if [ -s /usr/local/lib/php.ini ] && [ ! -s /usr/local/php${SHORT_RELEASE}/lib/php.ini ] && [ ! -L /usr/local/lib/php.ini ]; then
mkdir -p /usr/local/php${SHORT_RELEASE}/lib
mv -v /usr/local/lib/php.ini /usr/local/php${SHORT_RELEASE}/lib/php.ini
ln -sf /usr/local/php${SHORT_RELEASE}/lib/php.ini /usr/local/lib/php.ini
fi
INT_MAIN_VERSION=false
if [ "${PHP1_RELEASE_OPT}" = "${INT_RELEASE}" ] && [ "${PHP1_MODE_OPT}" = "${INT_MODE}" ]; then
INT_MAIN_VERSION=true
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ ! -d /etc/httpd/conf/extra ]; then
doApache2
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ ! -d ${NGINXCONF} ]; then
doNginx
fi
fi
YUM_PKG_INSTALL_LIST=""
APT_PKG_INSTALL_LIST=""
#sqlite, libzip and oniguruma are needed by PHP >=8
if [ ! -e /usr/include/png.h ] && [ ! -e /usr/local/include/png.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find libpng, installing using apt-get..."
APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libpng-dev "
else
echo "Cannot find libpng, installing using yum..."
YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libpng-devel "
fi
fi
if [ ! -e /usr/local/include/freetype2/ft2build.h ] && [ ! -e /usr/include/freetype2/ft2build.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find freetype, installing using apt-get..."
APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libfreetype6-dev "
else
echo "Cannot find freetype, installing using yum..."
YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}freetype-devel "
fi
fi
#needed for PHP <7.4
if [ -e /etc/debian_version ] && [ ! -e /usr/local/include/freetype2/ft2build.h ] && [ ! -s /usr/bin/freetype-config ]; then
if [ "${OS_DEBIAN_VER}" != "9" ]; then
safeDownloadWithMove "/usr/bin/freetype-config" "${WEBPATH}/freetype-config"
chmod +x /usr/bin/freetype-config
fi
fi
#libwebp is compiled-in as of PHP 7.0
if [ ! -e /usr/local/include/webp/types.h ] && [ ! -e /usr/include/webp/types.h ]; then
if [ "${INT_RELEASE}" != "5.3" ] && [ "${INT_RELEASE}" != "5.4" ] && [ "${INT_RELEASE}" != "5.5" ] && [ "${INT_RELEASE}" != "5.6" ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find libwebp, installing using apt-get..."
APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libwebp-dev "
else
echo "Cannot find libwebp, installing using yum..."
YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libwebp-devel "
fi
fi
fi
if [ ! -e /usr/include/jpeglib.h ] && [ ! -e /usr/local/include/jpeglib.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find libjpeg, installing using apt-get..."
APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libjpeg-dev "
else
echo "Cannot find libjpeg, installing using yum..."
YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libjpeg-devel "
fi
fi
if [ ! -e /usr/include/libxslt/xslt.h ] && [ ! -e /usr/local/include/libxslt/xslt.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find libxslt, installing using apt-get..."
APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libxslt-dev "
else
echo "Cannot find libxslt, installing using yum..."
YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libxslt-devel "
fi
fi
if [ ! -e /usr/include/x86_64-linux-gnu/sodium.h ] && [ ! -e /usr/include/aarch64-linux-gnu/sodium.h ] && [ ! -e /usr/local/include/sodium.h ] && [ ! -e /usr/include/sodium.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find libsodium, installing using apt-get..."
apt-get -y install libsodium-dev
else
yum -y install libsodium-devel --enablerepo=${EPEL_REPO_NAME}
fi
fi
if [ ! -e /usr/include/x86_64-linux-gnu/unicode/icudataver.h ] && [ ! -e /usr/include/aarch64-linux-gnu/unicode/icudataver.h ] && [ ! -e /usr/local/icu/include/unicode/icudataver.h ] && [ ! -e /usr/include/unicode/icudataver.h ] && [ ! -e /usr/local/include/unicode/icudataver.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find libicu, installing using apt-get..."
APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libicu-dev "
else
echo "Cannot find libicu, installing using yum..."
YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libicu-devel "
fi
fi
if [ -e /etc/debian_version ] && [ ! -d /usr/local/icu ]; then
if [ "${OS_DEBIAN_VER}" != "9" ]; then
safeDownloadWithMove "/usr/bin/icu-config" "${WEBPATH}/icu-config"
chmod +x /usr/bin/icu-config
fi
fi
if [ "${INT_RELEASE}" = "5.3" ] || [ "${INT_RELEASE}" = "5.4" ] || [ "${INT_RELEASE}" = "5.5" ] || [ "${INT_RELEASE}" = "5.6" ] || [ "${INT_RELEASE}" = "7.0" ] || [ "${INT_RELEASE}" = "7.1" ]; then
if [ ! -e /usr/include/mcrypt.h ] && [ ! -e /usr/local/include/mcrypt.h ]; then
if [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install libmcrypt-dev
else
yum -y install libmcrypt-devel --enablerepo=${EPEL_REPO_NAME}
fi
fi
fi
if [ "${INT_RELEASE}" != "5.3" ] && [ "${INT_RELEASE}" != "5.4" ] && [ "${INT_RELEASE}" != "5.5" ] && [ "${INT_RELEASE}" != "5.6" ] && [ "${INT_RELEASE}" != "7.0" ] && [ "${INT_RELEASE}" != "7.1" ] && [ "${INT_RELEASE}" != "7.2" ] && [ "${INT_RELEASE}" != "7.3" ]; then
COMPILE_LIBZIP=false
if [ -e /etc/debian_version ]; then
COMPILE_LIBZIP=false
elif [ "${OS_CENTOS_VER}" = "7" ]; then
COMPILE_LIBZIP=true
fi
if [ ! -e /usr/local/lib/libzip.so ] && [ ! -e /usr/local/lib64/libzip.so ] && [ "${LIBZIP_VER}" != "0" ] && ${COMPILE_LIBZIP}; then
doLibzip
fi
if ! ${COMPILE_LIBZIP} && [ ! -e /usr/lib/libzip.so ] && [ ! -e /usr/lib64/libzip.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libzip.so ] && [ ! -e /usr/lib/aarch64-linux-gnu/libzip.so ] && [ ! -e /usr/local/lib/libzip.so ] && [ ! -e /usr/local/lib64/libzip.so ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find libzip, installing using apt-get..."
APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libzip-dev "
else
echo "Cannot find libzip, installing using yum..."
YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}libzip-devel "
fi
fi
if [ ! -e /usr/include/sqlite3.h ] && [ ! -e /usr/local/include/sqlite3.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find /usr/include/sqlite3.h, installing using apt-get..."
APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libsqlite3-dev "
else
echo "Cannot find /usr/include/sqlite3.h, installing using yum..."
YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}sqlite-devel "
fi
fi
if [ ! -e /usr/include/oniguruma.h ] && [ ! -e /usr/local/include/oniguruma.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find /usr/include/oniguruma.h, installing using apt-get..."
APT_PKG_INSTALL_LIST="${APT_PKG_INSTALL_LIST}libonig-dev "
else
echo "Cannot find /usr/include/oniguruma.h, installing using yum..."
if [ "${OS_CENTOS_VER}" = "8" ]; then
yum -y install oniguruma-devel --enablerepo=${POWERTOOLS}
elif [ "${OS_CENTOS_VER}" = "9" ]; then
yum -y install oniguruma-devel --enablerepo=crb
else
YUM_PKG_INSTALL_LIST="${YUM_PKG_INSTALL_LIST}oniguruma-devel "
fi
fi
fi
fi
if [ -e /etc/debian_version ] && [ ! -z "${APT_PKG_INSTALL_LIST}" ]; then
apt-get -y install ${APT_PKG_INSTALL_LIST}
elif [ ! -z "${YUM_PKG_INSTALL_LIST}" ]; then
if [ "${OS_CENTOS_VER}" = "9" ]; then
yum -y install ${YUM_PKG_INSTALL_LIST} --enablerepo=crb
else
yum -y install ${YUM_PKG_INSTALL_LIST}
fi
fi
if ${INT_MAIN_VERSION}; then
doRewriteCLPhpHandler
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] && [ "${MODSECURITY_OPT}" = "yes" ] && [ ! -e /usr/lib/apache/mod_security2.so ]; then
doModSecurity
fi
if [ "${MOD_RUID2_OPT}" = "yes" ] && [ ! -e /usr/lib/apache/mod_ruid2.so ] && [ "${WEBSERVER_OPT}" != "litespeed" ]; then
doModRuid2
fi
if [ "${HAVE_FCGID}" = "yes" ]; then
if [ ! -s /usr/lib/apache/mod_fcgid.so ]; then
doModFCGID
fi
fi
if [ "${HAVE_FCGID}" = "yes" ] || [ "${HAVE_FPM_CGI}" = "yes" ] || [ "${HAVE_SUPHP_CGI}" = "yes" ]; then
if [ "${HTSCANNER_OPT}" = "yes" ] && [ ! -e /usr/lib/apache/mod_htscanner2.so ]; then
doModHtscanner
fi
fi
if [ "${NEWCONFIGS}" = "1" ] && ${INT_MAIN_VERSION}; then
if grep -m1 -q '^LoadModule mod_php' /etc/httpd/conf/httpd.conf; then
perl -pi -e 's/^LoadModule mod_php/\#LoadModule mod_php/' /etc/httpd/conf/httpd.conf
fi
if grep -m1 -q '^LoadModule php' /etc/httpd/conf/httpd.conf; then
perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf
fi
fi
fi
if [ "${HAVE_FPM_CGI}" = "yes" ] && [ ! -s /etc/logrotate.d/php-fpm ]; then
safeDownloadWithMove "/etc/logrotate.d/php-fpm" "${WEBPATH}/php-fpm.logrotate"
fi
if [ "${INT_MODE}" = "suphp" ]; then
mkdir -p /usr/local/php${SHORT_RELEASE}/lib
if [ ! -s ${SUPHP_SO} ]; then
doSuPhp
fi
fi
#just double check the location of libmysqlclient.so
if [ -e /usr/lib64 ]; then
if [ ! -e /usr/lib64/mysql/libmysqlclient.so ] && [ -e /usr/lib64/libmysqlclient.so ]; then
ln -s ../libmysqlclient.so /usr/lib64/mysql/libmysqlclient.so
fi
fi
if [ -e /usr/lib/libmysqlclient.so ] && [ ! -e /usr/lib/mysql/libmysqlclient.so ] && [ -d /usr/lib/mysql ]; then
ln -s /usr/lib/libmysqlclient.so /usr/lib/mysql/libmysqlclient.so
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
doApacheCheck
fi
if [ "${HAVE_CLI}" = "yes" ] && [ -e ${PHPMODULES} ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if grep -m1 -q 'LoadModule mpm_event_module /usr/lib/apache/mod_mpm_event.so' ${PHPMODULES}; then
echo "Switching Apache Event MPM to Prefork, because of mod_php used..."
perl -pi -e 's#LoadModule mpm_event_module /usr/lib/apache/mod_mpm_event.so#LoadModule mpm_prefork_module /usr/lib/apache/mod_mpm_prefork.so#' ${PHPMODULES}
control_service httpd restart
fi
if grep -m1 -q 'LoadModule mpm_worker_module /usr/lib/apache/mod_mpm_worker.so' ${PHPMODULES}; then
echo "Switching Apache Worker MPM to Prefork, because of mod_php used..."
perl -pi -e 's#LoadModule mpm_worker_module /usr/lib/apache/mod_mpm_worker.so#LoadModule mpm_prefork_module /usr/lib/apache/mod_mpm_prefork.so#' ${PHPMODULES}
control_service httpd restart
fi
fi
fi
cd ${CWD}
ldconfig
INT_EXT_DIR="no"
if [ -e /usr/local/php${SHORT_RELEASE}/bin/php-config ]; then
INT_EXT_DIR=`/usr/local/php${SHORT_RELEASE}/bin/php-config --extension-dir`
fi
getFile php-${PHP_VER}.tar.gz php${SHORT_RELEASE}
quitIfLocked doPhp
cd ${CWD}
FILE=${CWD}/php-${PHP_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
disable_asm_atomic
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
getFileCL cl-apache-patches.tar.gz cl-apache-patches
tar xzf cl-apache-patches.tar.gz --no-same-owner
fi
if [ "${INT_RELEASE}" = "5.3" ]; then
getFile patches/php-5.3.28_apache-2.4.10-fpm.patch php-5.3.28_apache-2.4.10-fpm.patch patches/php-5.3.28_apache-2.4.10-fpm.patch hexan
getFile patches/multi-sapi-5.3.29.patch multi-sapi-5.3.29.patch patches/multi-sapi-5.3.29.patch hexan
fi
if [ "${INT_RELEASE}" = "5.3" ] || [ "${INT_RELEASE}" = "5.4" ]; then
getFile patches/Another_fix_for_mod_proxy_fcgi_v2.patch Another_fix_for_mod_proxy_fcgi_v2.patch patches/Another_fix_for_mod_proxy_fcgi_v2.patch hexan
if [ -e /lib/x86_64-linux-gnu/libsystemd-daemon.so.0 ] && [ ! -e /lib/x86_64-linux-gnu/libsystemd-daemon.so ]; then
ln -s /lib/x86_64-linux-gnu/libsystemd-daemon.so.0 /lib/x86_64-linux-gnu/libsystemd-daemon.so
ldconfig
fi
fi
if [ "${INT_RELEASE}" = "7.1" ] || [ "${INT_RELEASE}" = "7.2" ]; then
getFile patches/fpm_scoreboard_proc_oob_fix_v4.patch fpm_scoreboard_proc_oob_fix_v4.patch patches/fpm_scoreboard_proc_oob_fix_v4.patch hexan
fi
if [ "${INT_RELEASE}" = "7.0" ]; then
getFile patches/fpm_scoreboard_proc_oob_fix_v4_7.0.patch fpm_scoreboard_proc_oob_fix_v4_7.0.patch patches/fpm_scoreboard_proc_oob_fix_v4_7.0.patch hexan
fi
if [ "${INT_RELEASE}" = "5.6" ]; then
getFile patches/fpm_scoreboard_proc_oob_fix_v4_5.6.patch fpm_scoreboard_proc_oob_fix_v4_5.6.patch patches/fpm_scoreboard_proc_oob_fix_v4_5.6.patch hexan
fi
if [ "${INT_RELEASE}" = "7.3" ]; then
getFile patches/php_mysqlnd_sha2_auth.patch php_mysqlnd_sha2_auth.patch patches/php_mysqlnd_sha2_auth.patch hexan
fi
if [ "${HAVE_FPM_CGI}" = "yes" ]; then
getFile patches/fpm-quota-chown.patch fpm-quota-chown.patch patches/fpm-quota-chown.patch hexan
fi
getFile patches/fpm_children_cgroup.patch fpm_children_cgroup.patch patches/fpm_children_cgroup.patch hexan
OV=`openssl_version | cut -d. -f1,2`
OPENSSL_11_OR_HIGHER=false
if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.1 'php 5.x vs openssl 1.1.0 ver check'`" -ge 0 ]; then
OPENSSL_11_OR_HIGHER=true
fi
if ${OPENSSL_11_OR_HIGHER}; then
if [ "${INT_RELEASE}" = "5.6" ]; then
getFile patches/php-5.6-libssl-1.1.patch php-5.6-libssl-1.1.patch patches/php-5.6-libssl-1.1.patch hexan
fi
fi
cd php-${PHP_VER}
#Don't build ZTS version of PHP, we load MPM dynamically, always default to prefork if mod_php is there
if [ -s sapi/apache2handler/config.m4 ]; then
perl -pi -e 's|PHP_BUILD_THREAD_SAFE|PHP_BUILD_NOT_THREAD_SAFE|g' sapi/apache2handler/config.m4
fi
if [ -s sapi/apache2filter/config.m4 ]; then
perl -pi -e 's|PHP_BUILD_THREAD_SAFE|PHP_BUILD_NOT_THREAD_SAFE|g' sapi/apache2filter/config.m4
fi
#To be fail-proof with non-ZTS version (as the check in sapi/apache2handler/config.m4 is for loaded MPM), we switch MPM to prefork temporarily
if [ -s ${PHPMODULES} ]; then
if [ "${PHP1_RELEASE_OPT}" = "${INT_RELEASE}" ] && [ "${PHP1_MODE_OPT}" = "mod_php" ]; then
if ! grep -m1 -q 'mpm_prefork_module' ${PHPMODULES}; then
if grep -m1 -q 'LoadModule mpm_[a-z]*_module /usr/lib/apache/mod_mpm_[a-z]*.so' ${PHPMODULES}; then
perl -pi -e 's#LoadModule mpm_[a-z]*_module /usr/lib/apache/mod_mpm_[a-z]*.so#LoadModule mpm_prefork_module /usr/lib/apache/mod_mpm_prefork.so#' ${PHPMODULES}
fi
fi
fi
fi
perl -pi -e 's|\(\(_libiconv_version >> 8\) & 0x0f\), \(_libiconv_version & 0x0f\)\)|_libiconv_version >> 8, _libiconv_version & 0xff\)|' ext/iconv/iconv.c
perl -pi -e 's|"html_errors=0\\n"|"html_errors=0\\n"\n\t"disable_functions=\\n"|g' ./sapi/cli/php_cli.c
if [ "${INT_MODE}" = "lsphp" ] && [ "${WEBSERVER_OPT}" != "apache" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ]; then
PHP_LSAPI_VER="`curl -k -L --silent --fail https://update.litespeedtech.com/ws/latest.php | grep 'PHP-LSAPI' | cut -d= -f2`"
# If we were unable to get the version from external source - set some default one
if ! echo "${PHP_LSAPI_VER}" | grep -m1 -q '^[0-9]*\.[0-9]*'; then
PHP_LSAPI_VER=8.0
elif [ "${PHP_LSAPI_VER}" = "7.9" ]; then
#PHP 8.1 is not compatible with 7.9, and 8.0 is not yet in latest.php on update.litespeedtech.com
PHP_LSAPI_VER=8.0
fi
safeDownloadWithMove "${CWD}/php-${PHP_VER}/php-litespeed-${PHP_LSAPI_VER}.tgz" "https://www.litespeedtech.com/packages/lsapi/php-litespeed-${PHP_LSAPI_VER}.tgz"
cd sapi
mv litespeed litespeed_orig
tar xzf ../php-litespeed-${PHP_LSAPI_VER}.tgz --no-same-owner
if [ -d litespeed ]; then
mv -f litespeed/*.h litespeed_orig/
mv -f litespeed/*.c litespeed_orig/
rm -rf litespeed
elif [ -d litespeed-${PHP_LSAPI_VER} ]; then
mv -f litespeed-${PHP_LSAPI_VER}/*.h litespeed_orig/
mv -f litespeed-${PHP_LSAPI_VER}/*.c litespeed_orig/
rm -rf litespeed-${PHP_LSAPI_VER}
fi
mv litespeed_orig litespeed
cd ../
elif [ "${INT_MODE}" = "lsphp" ] && [ "${CLOUDLINUX_OPT}" = "yes" ]; then
safeDownloadWithMove "${CWD}/php-litespeed-${CL_PHP_LSAPI_VER}.tgz" "https://repo.cloudlinux.com/cloudlinux/sources/da/php-litespeed-${CL_PHP_LSAPI_VER}.tgz"
cd sapi
mv litespeed litespeed_orig
tar xzf ../php-litespeed-${CL_PHP_LSAPI_VER}.tgz --no-same-owner
if [ -d litespeed ]; then
mv -f litespeed/*.h litespeed_orig/
mv -f litespeed/*.c litespeed_orig/
rm -rf litespeed
elif [ -d litespeed-${CL_PHP_LSAPI_VER} ]; then
mv -f litespeed-${CL_PHP_LSAPI_VER}/*.h litespeed_orig/
mv -f litespeed-${CL_PHP_LSAPI_VER}/*.c litespeed_orig/
rm -rf litespeed-${CL_PHP_LSAPI_VER}
fi
mv litespeed_orig litespeed
cd ../
fi
#make sure we have the sendmail link
set_sendmail_link
#some reports of missing -lltdl, problem found to be simple missing link
if [ ! -e /usr/lib/libltdl.so ]; then
ln -sf libltdl.so.3 /usr/lib/libltdl.so
fi
echo "Configuring php-${PHP_VER}..."
PHP_INI_INT=${PHP_INI}
PHP_EXT_INT=${PHP_EXT}
AUTOCONF213="/usr/bin/autoconf-2.13"
if [ "${INT_RELEASE}" = "5.3" ]; then
if [ ! -e ${AUTOCONF213} ]; then
if [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install autoconf2.13
else
if [ "${OS_CENTOS_VER}" = "8" ]; then
yum -y install autoconf213 --enablerepo=${POWERTOOLS}
else
yum -y install autoconf213
fi
fi
fi
if [ -e ${AUTOCONF213} ]; then
touch ac*
${AUTOCONF213}
fi
fi
if [ "${INT_RELEASE}" = "7.1" ] || [ "${INT_RELEASE}" = "7.2" ]; then
patch -p1 --fuzz=1 < ../patches/fpm_scoreboard_proc_oob_fix_v4.patch
perl -pi -e 's|php_info_print_table_row\(2, "Configuration File \(php.ini\) Path"|php_info_print_table_row(2, "PHP-FPM security patch", "yes");\n\t\tphp_info_print_table_row(2, "Configuration File (php.ini) Path"|g' ./ext/standard/info.c
fi
if [ "${INT_RELEASE}" = "7.0" ]; then
patch -p1 --fuzz=1 < ../patches/fpm_scoreboard_proc_oob_fix_v4_7.0.patch
perl -pi -e 's|php_info_print_table_row\(2, "Configuration File \(php.ini\) Path"|php_info_print_table_row(2, "PHP-FPM security patch", "yes");\n\t\tphp_info_print_table_row(2, "Configuration File (php.ini) Path"|g' ./ext/standard/info.c
fi
if [ "${INT_RELEASE}" = "5.6" ]; then
patch -p1 --fuzz=1 < ../patches/fpm_scoreboard_proc_oob_fix_v4_5.6.patch
perl -pi -e 's|php_info_print_table_row\(2, "Configuration File \(php.ini\) Path"|php_info_print_table_row(2, "PHP-FPM security patch", "yes");\n\t\tphp_info_print_table_row(2, "Configuration File (php.ini) Path"|g' ./ext/standard/info.c
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
if [ -e ../fpm-lve-php${INT_RELEASE}_autoconf.patch ]; then
patch -p1 --fuzz=1 < ../fpm-lve-php${INT_RELEASE}_autoconf.patch
elif [ -e ../fpm-lve-php7.0_autoconf.dl.v2.patch.patch ] && [ "${INT_RELEASE}" = "7.0" ]; then
patch -p1 --fuzz=1 < ../fpm-lve-php7.0_autoconf.dl.v2.patch.patch
elif [ -e ../php-fpm.7.1.dl.v3.patch ] && [ "${INT_RELEASE}" = "7.1" ]; then
patch -p1 --fuzz=1 < ../php-fpm.7.1.dl.v3.patch
elif [ -e ../php-fpm.7.2.dl.v2.patch ] && [ "${INT_RELEASE}" = "7.2" ]; then
patch -p1 --fuzz=1 < ../php-fpm.7.2.dl.v2.patch
elif [ -e ../php-fpm.7.3.dl.v1.patch ] && [ "${INT_RELEASE}" = "7.3" ]; then
patch -p1 --fuzz=1 < ../php-fpm.7.3.dl.v1.patch
elif [ -e ../php-fpm.7.4.dl.v1.patch ] && [ "${INT_RELEASE}" = "7.4" ]; then
patch -p1 --fuzz=1 < ../php-fpm.7.4.dl.v1.patch
elif [ -e php-fpm.8.0.dl.v1.patch ]; then
patch -p1 --fuzz=1 < ../php-fpm.8.0.dl.v1.patch
elif [ -e php-fpm.8.1.dl.v1.patch ]; then
patch -p1 --fuzz=1 < ../php-fpm.8.1.dl.v1.patch
elif [ -e php-fpm.8.2.dl.v1.patch ]; then
patch -p1 --fuzz=1 < ../php-fpm.8.2.dl.v1.patch
fi
if [ "${INT_RELEASE}" = "5.3" ] && [ -e ${AUTOCONF213} ]; then
touch ac*
${AUTOCONF213}
else
touch ac*
autoconf
fi
fi
if [ "${INT_RELEASE}" = "5.3" ] && [ "${PHP53_VER}" != "5.2.17" ]; then
echo "Patching PHP to fix bug #67541."
patch -p1 < ../patches/php-5.3.28_apache-2.4.10-fpm.patch
echo "Patching PHP to fix bug #52419."
patch -p1 < ../patches/multi-sapi-5.3.29.patch
if [ -e ${AUTOCONF213} ]; then
touch ac*
${AUTOCONF213} >/dev/null 2>&1
else
touch ac*
autoconf >/dev/null
fi
fi
if ${OPENSSL_11_OR_HIGHER}; then
if [ "${INT_RELEASE}" = "5.6" ]; then
echo "Patching PHP to fix OpenSSL >=1.1 compatibility."
patch -p1 < ../patches/php-5.6-libssl-1.1.patch
fi
fi
if [ "${INT_RELEASE}" = "5.3" ] || [ "${INT_RELEASE}" = "5.4" ]; then
if [ "${PHP53_VER}" != "5.2.17" ]; then
#Still pathcing for #67541
patch -p0 < ../patches/Another_fix_for_mod_proxy_fcgi_v2.patch
echo "Patching is done."
fi
fi
if [ "${INT_RELEASE}" = "7.3" ]; then
patch -p1 < ../patches/php_mysqlnd_sha2_auth.patch
echo "Patching MySQLnd to support SHA2 auth is done."
fi
if [ -s sapi/fpm/fpm/fpm_children.c ]; then
echo "Patching php-fpm for per-user process grouping"
if [ ! -s ../patches/fpm_children_cgroup.patch ]; then
echo "${boldon}ERROR downloading patches/fpm_children_cgroup.patch${boldoff}"
else
patch -p0 < ../patches/fpm_children_cgroup.patch
fi
fi
if [ -s sapi/fpm/fpm/fpm_unix.c ]; then
#Ticket 21336: [pool user] failed to chown() the socket '/usr/local/php56/sockets/user.sock': Disk quota exceeded (122)
echo "Patching php-fpm to not fail on startup if User quota maxed out on socket chown"
if [ ! -s ../patches/fpm-quota-chown.patch ]; then
echo "${boldon}ERROR downloading patches/fpm-quota-chown.patch${boldoff}"
else
patch -p0 < ../patches/fpm-quota-chown.patch
fi
fi
CONFIGURE_FILE_VAR=PHP${SHORT_RELEASE}_CONFIGURE
PHP_INI_INT_VAR=PHP_INI_FPM${SHORT_RELEASE}
PHP_INI_INT=$(eval_var ${PHP_INI_INT_VAR})
PHP_EXT_INT_VAR=PHP_EXT_FPM${SHORT_RELEASE}
PHP_EXT_INT=$(eval_var ${PHP_EXT_INT_VAR})
if [ "${INT_MODE}" = "php-fpm" ]; then
CONFIGURE_FILE_VAR=PHP${SHORT_RELEASE}_CONFIGURE_FPM
elif [ "${INT_MODE}" = "suphp" ]; then
CONFIGURE_FILE_VAR=PHP${SHORT_RELEASE}_CONFIGURE_SUPHP
elif [ "${INT_MODE}" = "fastcgi" ]; then
CONFIGURE_FILE_VAR=PHP${SHORT_RELEASE}_CONFIGURE_FCGI
elif [ "${INT_MODE}" = "lsphp" ]; then
CONFIGURE_FILE_VAR=PHP${SHORT_RELEASE}_CONFIGURE_LSPHP
fi
CONF_FILE=${CWD}/$(eval_var ${CONFIGURE_FILE_VAR})
# Compile mod_phpX.so only if that's php1_release and mode is mod_php
if [ "${PHP1_RELEASE_OPT}" = "${INT_RELEASE}" ] && [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${UNIT_OPT}" = "no" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if ! grep -q -m1 'with-apxs2' ${CONF_FILE}; then
perl -pi -e 's#./configure --enable-embed #./configure --with-apxs2 #' ${CONF_FILE}
if ! grep -q -m1 'with-apxs2' ${CONF_FILE}; then
perl -pi -e 's#./configure #./configure --with-apxs2 #' ${CONF_FILE}
fi
fi
elif grep -q -m1 'with-apxs2' ${CONF_FILE}; then
perl -pi -e 's#./configure --with-apxs2 #./configure --enable-embed #' ${CONF_FILE}
elif ! grep -q -m1 'enable-embed' ${CONF_FILE}; then
perl -pi -e 's#./configure #./configure --enable-embed #' ${CONF_FILE}
fi
elif grep -q -m1 'with-apxs2' ${CONF_FILE}; then
perl -pi -e 's#./configure --with-apxs2 #./configure --enable-embed #' ${CONF_FILE}
elif ! grep -q -m1 'enable-embed' ${CONF_FILE}; then
perl -pi -e 's#./configure #./configure --enable-embed #' ${CONF_FILE}
fi
#we need to make sure that the mysql path is set.
MYSQL_H=""
if [ -d /usr/local/mysql/include ]; then
MYSQL_H=/usr/local/mysql
fi
if [ "${MYSQL_H}" = "" ]; then
if [ -e /usr/include/mysql/mysql.h ]; then
MYSQL_H=/usr
fi
fi
if [ "${MYSQL_H}" != "" ]; then
STR="perl -pi -e 's#with-mysql\s#with-mysql=${MYSQL_H} #' ${CONF_FILE}"
eval ${STR}
STR="perl -pi -e 's#with-mysql\"#with-mysql=${MYSQL_H}\"#' ${CONF_FILE}"
eval ${STR}
STR="perl -pi -e 's#with-pdo-mysql\"#with-pdo-mysql=${MYSQL_H}\"#' ${CONF_FILE}"
eval ${STR}
STR="perl -pi -e 's#with-pdo-mysql\s#with-pdo-mysql=${MYSQL_H} #' ${CONF_FILE}"
eval ${STR}
fi
if [ "${INT_RELEASE}" != "5.3" ] && [ "${INT_RELEASE}" != "5.4" ] && [ "${INT_RELEASE}" != "5.5" ] && [ "${INT_RELEASE}" != "5.6" ] && [ "${INT_RELEASE}" != "7.0" ] && [ "${INT_RELEASE}" != "7.1" ] && [ "${INT_RELEASE}" != "7.2" ]; then
if [ ! -e /usr/local/bin/pcre2-config ] && [ -e /usr/bin/pcre2-config ]; then
if grep -m1 -q 'with-pcre-regex=/usr/local' ${CONF_FILE}; then
perl -pi -e 's#with-pcre-regex=/usr/local#with-pcre-regex=/usr#g' ${CONF_FILE}
fi
fi
fi
if [ ! -e /usr/local/bin/pcre-config ] && [ -e /usr/bin/pcre-config ]; then
if grep -m1 -q 'with-pcre-regex=/usr/local' ${CONF_FILE}; then
perl -pi -e 's#with-pcre-regex=/usr/local#with-pcre-regex=/usr#g' ${CONF_FILE}
if [ -e /usr/lib64/libpcre.so ] && [ ! -e /usr/lib/libpcre.so ]; then
ln -s /usr/lib64/libpcre.so /usr/lib/libpcre.so
fi
if [ -e /usr/lib/x86_64-linux-gnu/libpcre.so ] && [ ! -e /usr/lib/libpcre.so ]; then
ln -s /usr/lib/x86_64-linux-gnu/libpcre.so /usr/lib/libpcre.so
fi
if [ -e /usr/lib/aarch64-linux-gnu/libpcre.so ] && [ ! -e /usr/lib/libpcre.so ]; then
ln -s /usr/lib/aarch64-linux-gnu/libpcre.so /usr/lib/libpcre.so
fi
if [ -e /usr/lib/x86_64-linux-gnu/libpcre.a ] && [ ! -e /usr/lib/libpcre.a ]; then
ln -s /usr/lib/x86_64-linux-gnu/libpcre.a /usr/lib/libpcre.a
fi
if [ -e /usr/lib/aarch64-linux-gnu/libpcre.a ] && [ ! -e /usr/lib/libpcre.a ]; then
ln -s /usr/lib/aarch64-linux-gnu/libpcre.a /usr/lib/libpcre.a
fi
fi
fi
#needed for PHP-versions <7.3
if [ -e /usr/include/x86_64-linux-gnu/curl/easy.h ] && [ ! -e /usr/include/curl/easy.h ] && [ ! -d /usr/local/include/curl/easy.h ]; then
ln -sf /usr/include/x86_64-linux-gnu/curl /usr/include/curl
fi
if [ ! -e /usr/local/lib/libpng.so ]; then
if [ -e /usr/lib64/libpng.so ]; then
LIBPNG_DIR="/usr/lib64"
elif [ -e /usr/lib/x86_64-linux-gnu/libpng.so ]; then
LIBPNG_DIR="/usr/lib/x86_64-linux-gnu"
elif [ -e /usr/lib/aarch64-linux-gnu/libpng.so ]; then
LIBPNG_DIR="/usr/lib/aarch64-linux-gnu"
else
LIBPNG_DIR="/usr/lib"
fi
if grep -m1 -q 'with-png-dir=/usr/local/lib' ${CONF_FILE}; then
perl -pi -e "s#with-png-dir=/usr/local/lib#with-png-dir=${LIBPNG_DIR}#g" ${CONF_FILE}
fi
fi
if [ ! -e /usr/local/lib/libjpeg.so ]; then
if [ -e /usr/lib64/libjpeg.so ]; then
LIBJPEG_DIR="/usr/lib64"
elif [ -e /usr/lib/x86_64-linux-gnu/libjpeg.so ]; then
LIBJPEG_DIR="/usr/lib/x86_64-linux-gnu"
elif [ -e /usr/lib/aarch64-linux-gnu/libjpeg.so ]; then
LIBJPEG_DIR="/usr/lib/aarch64-linux-gnu"
else
LIBJPEG_DIR="/usr/lib"
fi
if grep -m1 -q 'with-jpeg-dir=/usr/local/lib' ${CONF_FILE}; then
perl -pi -e "s#with-jpeg-dir=/usr/local/lib#with-jpeg-dir=${LIBJPEG_DIR}#g" ${CONF_FILE}
fi
fi
if [ ! -e /usr/local/lib/libwebp.so ]; then
if [ -e /usr/lib64/libwebp.so ]; then
LIBWEBP_DIR="/usr/lib64"
elif [ -e /usr/lib/x86_64-linux-gnu/libwebp.so ]; then
LIBWEBP_DIR="/usr/lib/x86_64-linux-gnu"
elif [ -e /usr/lib/aarch64-linux-gnu/libwebp.so ]; then
LIBWEBP_DIR="/usr/lib/x86_64-linux-gnu"
else
LIBWEBP_DIR="/usr/lib"
fi
if grep -m1 -q 'with-webp-dir=/usr/local/lib' ${CONF_FILE}; then
perl -pi -e "s#with-webp-dir=/usr/local/lib#with-webp-dir=${LIBWEBP_DIR}#g" ${CONF_FILE}
fi
fi
if [ ! -e /usr/local/lib/libfreetype.so ]; then
if [ -e /usr/lib64/libfreetype.so ]; then
LIBFREETYPE_DIR="/usr/lib64"
elif [ -e /usr/lib/x86_64-linux-gnu/libfreetype.so ]; then
LIBFREETYPE_DIR="/usr/lib/x86_64-linux-gnu"
elif [ -e /usr/lib/aarch64-linux-gnu/libfreetype.so ]; then
LIBFREETYPE_DIR="/usr/lib/aarch64-linux-gnu"
else
LIBFREETYPE_DIR="/usr/lib"
fi
if grep -m1 -q 'with-freetype-dir=/usr/local/lib' ${CONF_FILE}; then
perl -pi -e "s#with-freetype-dir=/usr/local/lib#with-freetype-dir=${LIBFREETYPE_DIR}#g" ${CONF_FILE}
fi
fi
if [ ! -e /usr/local/bin/iconv ]; then
LIBICONV_DIR="/usr"
if grep -m1 -q 'with-iconv=/usr/local' ${CONF_FILE}; then
perl -pi -e "s#with-iconv=/usr/local#with-iconv-dir=${LIBICONV_DIR}#g" ${CONF_FILE}
fi
elif [ "${INT_RELEASE}" = "8.0" ] || [ "${INT_RELEASE}" = "8.1" ] || [ "${INT_RELEASE}" = "8.2" ]; then
if ! grep -m1 -q 'with-iconv' ${CONF_FILE}; then
perl -pi -e 's#./configure #./configure --with-iconv=/usr/local #' ${CONF_FILE}
fi
fi
if [ ! -e /usr/local/icu/lib/libicudata.so ]; then
LIBICU_DIR="/usr"
if grep -m1 -q 'with-icu-dir=/usr/local/icu' ${CONF_FILE}; then
perl -pi -e "s#with-icu-dir=/usr/local/icu#with-icu-dir=${LIBICU_DIR}#g" ${CONF_FILE}
fi
fi
#we need to make sure that the mysqli path is set.
MYSQLI_BIN=""
if [ -e /usr/local/bin/mysql_config ]; then
MYSQLI_BIN=/usr/local/bin/mysql_config
fi
if [ "${MYSQLI_BIN}" = "" ]; then
if [ -e /usr/mysql/bin/mysql_config ]; then
MYSQLI_BIN=/usr/mysql/bin/mysql_config
fi
fi
if [ "${MYSQLI_BIN}" = "" ]; then
if [ -e /usr/local/mysql/bin/mysql_config ]; then
MYSQLI_BIN=/usr/local/mysql/bin/mysql_config
fi
fi
if [ "${MYSQLI_BIN}" = "" ]; then
if [ -e /usr/bin/mysql_config ]; then
MYSQLI_BIN=/usr/bin/mysql_config
fi
fi
if [ "${MYSQLI_BIN}" != "" ]; then
STR="perl -pi -e 's#with-mysqli\s#with-mysqli=${MYSQLI_BIN} #' ${CONF_FILE}"
eval ${STR}
STR="perl -pi -e 's#with-mysqli\"#with-mysqli=${MYSQLI_BIN}\"#' ${CONF_FILE}"
eval ${STR}
fi
MYSQL_SOCK='/var/lib/mysql/mysql.sock'
if [ ! -e ${MYSQL_SOCK} ]; then
if [ -x "${MYSQLI_BIN}" ]; then
MYSQL_SOCK_NEW="`${MYSQLI_BIN} --socket`"
fi
if [ "${MYSQL_SOCK_NEW}" != "" ]; then
MYSQL_SOCK="${MYSQL_SOCK_NEW}"
fi
fi
if [ "${MYSQL_SOCK}" = "/tmp/mysql.sock" ] && [ -e ${DEBIAN_VERSION} ]; then
MYSQL_SOCK=/usr/local/mysql/data/mysql.sock
fi
perl -pi -e "s#/var/lib/mysql/mysql.sock#${MYSQL_SOCK}#" ${CONF_FILE}
#if this is a 64bit system,make sure libmysqlclient is correct.
if [ -e /usr/lib64/libmysqlclient.so ] && [ ! -e /usr/lib/libmysqlclient.so ]; then
if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then
ln -s /usr/lib64/mysql/libmysqlclient.so /usr/lib/libmysqlclient.so
else
ln -s /usr/lib64/libmysqlclient.so /usr/lib/libmysqlclient.so
fi
fi
#Reported a problem in ticket ID 9605
#CFLAGS="`getGccOptions`" ${CONF_FILE}
# ICU 61+ compatibility with PHP 5.x
if [ "${INT_RELEASE}" = "5.3" ] || [ "${INT_RELEASE}" = "5.4" ] || [ "${INT_RELEASE}" = "5.5" ] || [ "${INT_RELEASE}" = "5.6" ] || [ "${INT_RELEASE}" = "7.0" ]; then
CXXFLAGS="-std=c++11 -DU_USING_ICU_NAMESPACE=1" ${CONF_FILE}
else
${CONF_FILE}
fi
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure php. Check the configure file\n"
do_exit 1
fi
echo "Done Configuration."
perl -pi -e 's|$(PHP_RPATHS)|$(NATIVE_RPATHS) $(PHP_RPATHS)|g' Makefile
#A fix for "ext/intl/msgformat/msgformat_helpers.o: undefined reference"
if [ "${INT_RELEASE}" = "5.3" ]; then
sed -i '/EXTRA_LIBS = /s|$| -lstdc++|' Makefile
perl -pi -e 's| \@\$\(INSTALL\)|\t\@\$\(INSTALL\)|g' Makefile
fi
while echo "Trying to make php..."; do
C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): "
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make Complete"
#change the pear settings to remove the -n option.
#the default memory limit was messing this up.
/usr/bin/perl -pi -e 's/PEAR_INSTALL_FLAGS = .*/PEAR_INSTALL_FLAGS = -dshort_open_tag=0 -dsafe_mode=0/' Makefile
#Remove symlink if exists
if [ -h /usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE} ]; then
rm -f /usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE}
fi
if [ -e ${PHP_INI_INT} ]; then
#short_open_tag: https://help.directadmin.com/item.php?id=438
perl -pi -e 's/^short_open_tag = Off/short_open_tag = On/' ${PHP_INI_INT}
if [ "${INT_RELEASE}" != "5.3" ]; then
echo "Making PHP ${INT_RELEASE} installation compatible with php.ini file"
/usr/bin/perl -pi -e 's/^register_long_arrays/;register_long_arrays/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^magic_quotes_gpc/;magic_quotes_gpc/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^safe_mode/;safe_mode/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^register_globals/;register_globals/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^register_long_arrays/;register_long_arrays/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^allow_call_time_pass_reference/;allow_call_time_pass_reference/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^define_syslog_variables/;define_syslog_variables/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^highlight.bg/;highlight.bg/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^session.bug_compat_42/;session.bug_compat_42/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^session.bug_compat_warn/;session.bug_compat_warn/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^y2k_compliance/;y2k_compliance/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^magic_quotes_runtime/;magic_quotes_runtime/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/^magic_quotes_sybase/;magic_quotes_sybase/' ${PHP_INI_INT}
fi
fi
PHP_EXT_INT_OLD="`echo ${PHP_EXT_INT} | perl -p0 -e 's|10-directadmin.ini|directadmin.ini|'`"
if [ -e ${PHP_EXT_INT_OLD} ]; then
rm -f ${PHP_EXT_INT_OLD}
fi
if [ -e ${PHP_EXT_INT} ]; then
echo "Temporary disabling extensions..."
mv -f ${PHP_EXT_INT} ${PHP_EXT_INT}.cb_backup
fi
if [ ! -d /usr/local/php${SHORT_RELEASE}/bin ]; then
mkdir -p /usr/local/php${SHORT_RELEASE}/bin
fi
while echo "Installing php..."; do
make install
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
if [ -e ${PHP_EXT_INT}.cb_backup ]; then
echo "Enabling temporary disabled extensions..."
mv -f ${PHP_EXT_INT}.cb_backup ${PHP_EXT_INT}
fi
#############################################################
#we need to have this piece of code here, because without installation we do not have /usr/local/php53(54)/lib available, so we cannot copy php.ini there
#old note: this was moved here, again for pear (before make install)
echo "Copying php.ini.."
if [ ! -e ${PHP_INI_INT} ]; then
cp php.ini-${PHP_INI_TYPE_OPT} ${PHP_INI_INT}
else
echo "${PHP_INI_INT} already exists, skipping."
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if ${INT_MAIN_VERSION}; then
rewrite_phpmodules
fi
fi
COUNT=`grep -m1 -c '^date.timezone' ${PHP_INI_INT}`
COUNT2=`grep -m1 -c ';date.timezone' ${PHP_INI_INT}`
if [ "$COUNT" -eq 0 ] && [ "$COUNT2" -eq 0 ]; then
echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to ${PHP_INI_INT}, please change it by yourself to fit your own needs.${boldoff}"
echo "date.timezone = \"${PHP_TIMEZONE_OPT}\"" >> ${PHP_INI_INT}
elif [ "$COUNT" -eq 0 ]; then
echo "${boldon}Adding date.timezone = \"${PHP_TIMEZONE_OPT}\" to ${PHP_INI_INT}, please change it by yourself to fit your own needs.${boldoff}"
perl -pi -e "s#;date.timezone.*#date.timezone = \"${PHP_TIMEZONE_OPT}\"#" ${PHP_INI_INT}
fi
/usr/bin/perl -pi -e 's/upload_max_filesize = 2M/upload_max_filesize = 64M/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/post_max_size = 8M/post_max_size = 64M/' ${PHP_INI_INT}
if [ "${X_MAIL_HEADER_OPT}" = "yes" ]; then
echo "Enabling mail.add_x_header option in ${PHP_INI_INT}"
/usr/bin/perl -pi -e 's/mail.add_x_header = Off/mail.add_x_header = On/' ${PHP_INI_INT}
/usr/bin/perl -pi -e 's/mail.add_x_header = 0/mail.add_x_header = On/' ${PHP_INI_INT}
COUNT=`grep -m1 -c '^mail.add_x_header' ${PHP_INI_INT}`
if [ ${COUNT} -eq 0 ]; then
echo "mail.add_x_header = On" >> ${PHP_INI_INT}
fi
else
echo "Disabling mail.add_x_header option in ${PHP_INI_INT}"
/usr/bin/perl -pi -e 's/^mail.add_x_header =/;mail.add_x_header =/' ${PHP_INI_INT}
fi
if [ -e /usr/local/php${SHORT_RELEASE}/bin/php${SHORT_RELEASE} ]; then
echo "Creating symlink for /usr/local/php${SHORT_RELEASE}/bin/php${SHORT_RELEASE}..."
ln -sf /usr/local/php${SHORT_RELEASE}/bin/php${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/bin/php
fi
if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ]; then
echo "Creating symlink for /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE}..."
ln -sf /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/bin/lsphp
fi
if [ -e /usr/local/php${SHORT_RELEASE}/bin/php-cgi${SHORT_RELEASE} ]; then
echo "Creating symlink for /usr/local/php${SHORT_RELEASE}/bin/php-cgi${SHORT_RELEASE}..."
ln -sf /usr/local/php${SHORT_RELEASE}/bin/php-cgi${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/bin/php-cgi
fi
if [ -e /usr/local/php${SHORT_RELEASE}/bin/php-config${SHORT_RELEASE} ]; then
echo "Creating symlink for /usr/local/php${SHORT_RELEASE}/bin/php-config${SHORT_RELEASE}..."
ln -sf /usr/local/php${SHORT_RELEASE}/bin/php-config${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/bin/php-config
fi
if [ -e /usr/local/php${SHORT_RELEASE}/bin/phpize${SHORT_RELEASE} ]; then
echo "Creating symlink for /usr/local/php${SHORT_RELEASE}/bin/phpize${SHORT_RELEASE}..."
ln -sf /usr/local/php${SHORT_RELEASE}/bin/phpize${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/bin/phpize
fi
if ${INT_MAIN_VERSION} && [ -e /usr/local/php${SHORT_RELEASE}/bin/php${SHORT_RELEASE} ]; then
ln -sf /usr/local/php${SHORT_RELEASE}/bin/php${SHORT_RELEASE} /usr/local/bin/php
ln -sf /usr/local/php${SHORT_RELEASE}/bin/pear /usr/local/bin/pear
ln -sf /usr/local/php${SHORT_RELEASE}/bin/pecl /usr/local/bin/pecl
ln -sf /usr/local/php${SHORT_RELEASE}/bin/phar /usr/local/bin/phar
ln -sf /usr/local/php${SHORT_RELEASE}/bin/phpize /usr/local/bin/phpize
ln -sf /usr/local/php${SHORT_RELEASE}/bin/php-config /usr/local/bin/php-config
if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp ]; then
cp -pf /usr/local/php${SHORT_RELEASE}/bin/lsphp /usr/local/bin/lsphp
elif [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ]; then
cp -pf /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} /usr/local/bin/lsphp
fi
fi
doPhpConf
#############################################################
#PHP Extensions
if [ "${PHP_PHALCON_OPT}" = "yes" ]; then
#Phalcon5 will be installable as a composer package, not as an extension anymore
if [ "${EXTENSION_INT_RELEASE}" = "7.2" ] || [ "${EXTENSION_INT_RELEASE}" = "7.3" ] || [ "${EXTENSION_INT_RELEASE}" = "7.4" ]; then
doPhalcon ${INT_RELEASE} ${INT_MODE} 1
fi
fi
if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ]; then
if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then
doSnuffleupagus ${INT_RELEASE} ${INT_MODE} 1
fi
fi
if [ "${PHP_IGBINARY_OPT}" = "yes" ]; then
if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then
doIgbinary ${INT_RELEASE} ${INT_MODE} 1
fi
fi
if [ "${PHP_REDIS_OPT}" = "yes" ]; then
if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ]; then
doPHPRedis ${INT_RELEASE} ${INT_MODE} 1
fi
fi
if [ "${PHP_GMP_OPT}" = "yes" ]; then
doPHPGmp ${INT_RELEASE} ${INT_MODE} 1
fi
if [ "${PHP_READLINE_OPT}" = "yes" ]; then
doPHPReadline ${INT_RELEASE} ${INT_MODE} 1
fi
if [ "${PHP_XMLRPC_OPT}" = "yes" ]; then
doPHPXmlrpc ${INT_RELEASE} ${INT_MODE} 1
fi
if [ "${PHP_IMAP_OPT}" = "yes" ]; then
doPHPImap ${INT_RELEASE} ${INT_MODE} 1
fi
if [ "${PHP_BZ2_OPT}" = "yes" ]; then
doPHPBz2 ${INT_RELEASE} ${INT_MODE} 1
fi
if [ "${INT_MODE}" != "mod_php" ] && [ "${INT_RELEASE}" != "8.0" ] && [ "${INT_RELEASE}" != "8.1" ] && [ "${INT_RELEASE}" != "8.2" ]; then
if [ "${HTSCANNER_OPT}" = "yes" ]; then
doPHPHtscanner ${INT_RELEASE} 1
fi
fi
if [ "${PHP_LDAP_OPT}" = "yes" ]; then
doPHPLDAP ${INT_RELEASE} ${INT_MODE} 1
fi
if [ "${OPCACHE_OPT}" = "yes" ]; then
doOpcache ${INT_RELEASE} ${INT_MODE} 1
fi
if [ "${SUHOSIN_OPT}" = "yes" ]; then
if [ "${INT_RELEASE}" != "5.3" ] && [ "${INT_RELEASE}" != "7.0" ] && [ "${INT_RELEASE}" != "7.1" ] && [ "${INT_RELEASE}" != "7.2" ] && [ "${INT_RELEASE}" != "7.3" ] && [ "${INT_RELEASE}" != "7.4" ] && [ "${INT_RELEASE}" != "8.0" ] && [ "${INT_RELEASE}" != "8.1" ] && [ "${INT_RELEASE}" != "8.2" ]; then
doSuhosin ${INT_RELEASE} ${INT_MODE} 1
else
echo "This suhosin version does not support PHP ${INT_RELEASE}."
fi
fi
if [ "${IONCUBE_OPT}" = "yes" ]; then
doIoncube ${INT_RELEASE} ${INT_MODE} 1
fi
if [ "${IMAGICK_OPT}" = "yes" ]; then
doIMagick ${INT_RELEASE} ${INT_MODE} 1
fi
#Only supported by PHP5
if echo "${INT_RELEASE}" | grep -m1 -q '^5'; then
if [ "${ZEND_OPT}" = "yes" ]; then
doZend_build ${INT_RELEASE} ${INT_MODE} 1
fi
fi
#Install Nginx Unit extension
if [ -d /usr/lib/unit/modules ] && [ ! -s /usr/lib/unit/modules/php${INT_RELEASE}.unit.so ] && [ "${UNIT_OPT}" != "yes" ]; then
if /usr/local/php${SHORT_RELEASE}/bin/php -i | grep -m1 -q 'enable-embed'; then
doNginxUnit_module php ${INT_RELEASE}
fi
fi
#############################################################
if [ -s /usr/local/bin/php ] && [ ! -e /bin/php ]; then
ln -s /usr/local/bin/php /bin/php
fi
ensure_curl_cacert
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
if [ "${INT_MODE}" = "php-fpm" ]; then
#configuration
mkdir -p /usr/local/php${SHORT_RELEASE}/sockets
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
chown apache:apache /usr/local/php${SHORT_RELEASE}/sockets
elif [ "${WEBSERVER_OPT}" = "nginx" ]; then
chown nginx:nginx /usr/local/php${SHORT_RELEASE}/sockets
fi
FPM_SOCK_CHMOD=700
if [ "${MOD_RUID2_OPT}" = "yes" ]; then
FPM_SOCK_CHMOD=711
fi
chmod ${FPM_SOCK_CHMOD} /usr/local/php${SHORT_RELEASE}/sockets
if [ ! -s /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf ]; then
PHP_FPM_CONF_FILE=${WORKDIR}/configure/fpm/conf/php-fpm.conf.${SHORT_RELEASE}
if [ -e ${WORKDIR}/custom/php-fpm/conf/fpm.conf.${SHORT_RELEASE} ]; then
cp -f ${WORKDIR}/custom/php-fpm/conf/fpm.conf.${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf
elif [ -e ${WORKDIR}/custom/fpm/conf/fpm.conf.${SHORT_RELEASE} ]; then
cp -f ${WORKDIR}/custom/fpm/conf/fpm.conf.${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf
else
cp -f ${PHP_FPM_CONF_FILE} /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf
fi
fi
if [ ! -s /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf ]; then
getFile php-fpm.conf.${SHORT_RELEASE} php-fpm-conf-${SHORT_RELEASE} php-fpm.conf.${SHORT_RELEASE} hexan
cp -f ${CWD}/php-fpm.conf.${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
perl -pi -e 's/nginx/apache/' /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf
elif [ "${WEBSERVER_OPT}" = "nginx" ]; then
perl -pi -e 's/apache/nginx/' /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf
fi
echo "Enabling php-fpm${SHORT_RELEASE} in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/php-fpm${SHORT_RELEASE}.service ]; then
cp -f ${CB_CUST_SYSTEMD}/php-fpm${SHORT_RELEASE}.service ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service
elif [ -e ${CB_CUST_SYSTEMD}/php-fpm.service ]; then
cp -f ${CB_CUST_SYSTEMD}/php-fpm.service ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service
else
cp -f ${CB_SYSTEMD}/php-fpm.service ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service
fi
chmod 644 ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service
perl -pi -e "s#/usr/local/php/sbin/php-fpm#/usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE}#" ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service
perl -pi -e "s#/run/php-fpm.pid#/run/php-fpm${SHORT_RELEASE}.pid#" ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service
if [ "${INT_RELEASE}" = "5.3" ]; then
perl -pi -e 's/Type\=notify/Type=simple/' ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service
fi
DISABLE_PRIVATETMP=false
if [ "${CLAMAV_OPT}" = "yes" ] && [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ]; then
DISABLE_PRIVATETMP=true
fi
if [ -e /proc/1/environ ]; then
if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then
DISABLE_PRIVATETMP=true
fi
fi
if ${DISABLE_PRIVATETMP}; then
echo "Upload scan option detected in options.conf. Disabling PrivateTmp feature in php-fpm${SHORT_RELEASE}.service for ClamAV to be able to scan files in /tmp."
perl -pi -e 's#PrivateTmp\=true#PrivateTmp=false#' ${SYSTEMDDIR}/php-fpm${SHORT_RELEASE}.service
fi
systemctl daemon-reload
systemctl enable php-fpm${SHORT_RELEASE}.service
if [ -e /usr/local/php${SHORT_RELEASE}/sbin/php-fpm ] && [ ! -e /usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE} ]; then
mv /usr/local/php${SHORT_RELEASE}/sbin/php-fpm /usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE}
fi
if [ ! -e /usr/local/php${SHORT_RELEASE}/sbin/php-fpm ]; then
rm -f /usr/local/php${SHORT_RELEASE}/sbin/php-fpm
ln -sf /usr/local/php${SHORT_RELEASE}/sbin/php-fpm${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/sbin/php-fpm
fi
fpmChecks
control_service php-fpm${SHORT_RELEASE} restart
#Make log files available in /var/log
if [ ! -h /var/log/php-fpm${SHORT_RELEASE}.log ]; then
ln -sf /usr/local/php${SHORT_RELEASE}/var/log/php-fpm.log /var/log/php-fpm${SHORT_RELEASE}.log
fi
elif [ "${INT_MODE}" = "fastcgi" ]; then
doSetupFcgidSh ${SHORT_RELEASE}
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp ] || [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ]; then
mkdir -p /usr/local/lsws/fcgi-bin
control_service litespeed stop
sleep 2
killall -9 litespeed >/dev/null 2>&1
if [ -e /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp ]; then
ln -sf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp /usr/local/bin/lsphp
elif [ -e /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp${PHP1_SHORTRELEASE} ]; then
ln -sf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp${PHP1_SHORTRELEASE} /usr/local/bin/lsphp
fi
#Use /usr/local/bin/lsphp as PHP path
perl -pi -e 's|\$SERVER_ROOT/fcgi-bin/lsphp5|/usr/local/bin/lsphp|g' /usr/local/lsws/conf/httpd_config.xml
#Set appropriate path for lsphp
perl -pi -e 's|<path>\$SERVER_ROOT/usr/local/bin/lsphp</path>|<path>/usr/local/bin/lsphp</path>|g' /usr/local/lsws/conf/httpd_config.xml
#Log just errors
perl -pi -e 's|DEBUG|ERROR|g' /usr/local/lsws/conf/httpd_config.xml
if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ]; then
cp -pf /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ${LSWS_HOME}/fcgi-bin/lsphp-${INT_RELEASE}
else
cp -pf /usr/local/php${SHORT_RELEASE}/bin/lsphp ${LSWS_HOME}/fcgi-bin/lsphp-${INT_RELEASE}
fi
if ${INT_MAIN_VERSION}; then
rm -f ${LSWS_HOME}/fcgi-bin/lsphp
ln -s ${LSWS_HOME}/fcgi-bin/lsphp-${INT_RELEASE} ${LSWS_HOME}/fcgi-bin/lsphp
rm -f ${LSWS_HOME}/fcgi-bin/lsphp${SHORT_RELEASE}
ln -s ${LSWS_HOME}/fcgi-bin/lsphp-${INT_RELEASE} ${LSWS_HOME}/fcgi-bin/lsphp${SHORT_RELEASE}
if [ ! -f "${LSWS_HOME}/fcgi-bin/lsphp4" ]; then
ln -sf "${LSWS_HOME}/fcgi-bin/lsphp" "${LSWS_HOME}/fcgi-bin/lsphp4"
fi
if [ ! -f "${LSWS_HOME}/fcgi-bin/lsphp7" ]; then
ln -sf "${LSWS_HOME}/fcgi-bin/lsphp" "${LSWS_HOME}/fcgi-bin/lsphp7"
fi
if [ ! -f "${LSWS_HOME}/fcgi-bin/lsphp8" ]; then
ln -sf "${LSWS_HOME}/fcgi-bin/lsphp" "${LSWS_HOME}/fcgi-bin/lsphp8"
fi
if [ ! -f "${LSWS_HOME}/fcgi-bin/lsphp5" ]; then
ln -sf "${LSWS_HOME}/fcgi-bin/lsphp" "${LSWS_HOME}/fcgi-bin/lsphp5"
fi
if [ ! -f "${LSWS_HOME}/fcgi-bin/lsphp55" ]; then
ln -sf "${LSWS_HOME}/fcgi-bin/lsphp" "${LSWS_HOME}/fcgi-bin/lsphp55"
fi
fi
control_service litespeed start
fi
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp ] || [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp${SHORT_RELEASE} ]; then
mkdir -p /usr/local/lsws/fcgi-bin
control_service litespeed stop
sleep 2
killall -9 litespeed >/dev/null 2>&1
if ${INT_MAIN_VERSION}; then
if [ -e /usr/local/php${SHORT_RELEASE}/bin/lsphp ]; then
ln -sf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp /usr/local/bin/lsphp
else
ln -sf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp${PHP1_SHORTRELEASE} /usr/local/bin/lsphp
fi
fi
control_service litespeed start
fi
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${INT_MODE}" = "lsphp" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ ! -s /usr/lib/apache/mod_lsapi.so ]; then
doModLsapi 0
else
if [ -s ${STRINGS} ]; then
MODLSAPIV="`${STRINGS} /usr/lib/apache/mod_lsapi.so | grep -m1 'version' | awk '{print $3}' | cut -d: -f1 | grep -o '.*[0-9][^a-z]'`"
if [ "${MODLSAPIV}" != "${MOD_LSAPI_VER}" ]; then
doModLsapi 0
fi
fi
fi
fi
fi
if ${INT_MAIN_VERSION}; then
NATIVE_CONF=/etc/cl.selector/native.conf
if [ -e ${NATIVE_CONF} ] && [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${PHP1_MODE_OPT}" != "mod_php" ] && [ -x /usr/sbin/cagefsctl ]; then
/usr/sbin/cagefsctl --setup-cl-selector
fi
fi
#install proactive defence if exists
if [ -x /usr/share/i360-php/easyapache3/native_da.hook ]; then
PHP_BUILD_BIN=/usr/local/php${SHORT_RELEASE}/bin/php
/usr/share/i360-php/easyapache3/native_da.hook --install-i360 ${PHP_BUILD_BIN}
fi
removeLockfile
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
#Revert temporary MPM mode set (to be fail-proof with non-ZTS version)
if [ -s ${PHPMODULES} ]; then
set_apache_mpm
fi
echo "Restarting apache."
control_service httpd restart
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "Restarting nginx."
control_service nginx stop >/dev/null 2>&1
control_service nginx start
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "Rewriting all users httpd.conf files, please wait..."
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
echo "Rewriting all users openlitespeed.conf files, please wait..."
echo "action=rewrite&value=openlitespeed" >> ${TASK_QUEUE}
elif [ "${WEBSERVER_OPT}" = "nginx" ]; then
echo "Rewriting all users nginx.conf files, please wait..."
echo "action=rewrite&value=nginx" >> ${TASK_QUEUE}
fi
run_dataskq d
echo "PHP ${PHP_VER} Installed."
writeLog "PHP ${PHP_VER} installed"
cd ${CWD}
}
####################################################
doModAclr2() {
cd ${CWD}
if [ "${WEBSERVER_OPT}" != "nginx_apache" ]; then
do_exit 1 "Cannot build mod_aclr2, because of the chosen webserver in the options.conf file."
fi
getFile mod_aclr2-${MOD_ACLR2_VER}.tar.gz mod_aclr2
getFile patches/mod_aclr2_userdir.patch mod_aclr2_userdir.patch patches/mod_aclr2_userdir.patch hexan
FILE=${CWD}/mod_aclr2-${MOD_ACLR2_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
#We don't have a directory in a tarball, so we create it here, and extract files to it
mkdir -p mod_aclr2-${MOD_ACLR2_VER}
tar xzf ${FILE} -C ./mod_aclr2-${MOD_ACLR2_VER}
cd mod_aclr2-${MOD_ACLR2_VER}
if [ -e patches/mod_aclr2_userdir.patch ]; then
echo "Patching to support UserDir..."
patch -p0 < patches/mod_aclr2_userdir.patch
fi
echo "Installing mod_aclr2-${MOD_ACLR2_VER}..."
APXS=/usr/sbin/apxs
if [ ! -e $APXS ]; then
echo "cannot find $APXS, trying a different path"
APXS=/usr/bin/apxs
fi
$APXS -c mod_aclr2.c
$APXS -i -a -n aclr mod_aclr2.la
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to install mod_aclr2-${MOD_ACLR2_VER}.\n"
do_exit 1
fi
perl -pi -e 's|^LoadModule aclr_module|#LoadModule aclr_module|' /etc/httpd/conf/httpd.conf
echo "mod_aclr2 has been installed successfully."
writeLog "mod_aclr2 installed"
cd ${CWD}
}
####################################################
doModRuid2() {
cd ${CWD}
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
do_exit 1 "Cannot build mod_ruid2, because nginx webserver is chosen in the options.conf file."
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
echo "Cannot build mod_ruid2, because litespeed webserver is chosen in the options.conf file."
return
fi
getFile mod_ruid2-${MOD_RUID2_VER}.tar.bz2 mod_ruid2
if [ "${MOD_RUID2_OPT}" != "yes" ]; then
do_exit 1 "You cannot install mod_ruid2, because you do not have it set in options.conf file."
fi
if [ ! -e /lib/libcap.so ] && [ ! -e /lib64/libcap.so ] && [ ! -e /usr/lib/libcap.so ] && [ ! -e /usr/lib64/libcap.so ] && [ ! -e /lib/x86_64-linux-gnu/libcap.so ] && [ ! -e /lib/i386-linux-gnu/libcap.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libcap.so ]; then
echo "Cannot find libcap.so for mod_ruid2. Please install libcap"
if [ -e /etc/debian_version ]; then
echo "apt-get install libcap-dev"
else
echo "yum -y install libcap-devel"
fi
return
fi
if [ ! -e /usr/bin/bzip2 ] && [ ! -e /bin/bzip2 ]; then
echo "Cannot find bzip2. Please install it."
if [ -e /etc/debian_version ]; then
echo "apt-get install bzip2"
else
echo "yum -y install bzip2"
fi
return
fi
FILE=${CWD}/mod_ruid2-${MOD_RUID2_VER}.tar.bz2
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xjf ${FILE}
cd mod_ruid2-${MOD_RUID2_VER}
echo "Installing mod_ruid2-${MOD_RUID2_VER}..."
APXS=/usr/sbin/apxs
if [ ! -e $APXS ]; then
echo "cannot find $APXS, trying a different path"
APXS=/usr/bin/apxs
fi
perl -pi -e 's#ap_hook_post_read_request\(ruid_setup, NULL, NULL, APR_HOOK_MIDDLE\);#ap_hook_post_read_request(ruid_setup, NULL, NULL, APR_HOOK_REALLY_FIRST);#' mod_ruid2.c
$APXS -a -i -l cap -c mod_ruid2.c
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to install mod_ruid2-${MOD_RUID2_VER}.\n"
do_exit 1
fi
set_LoadModule ruid2_module mod_ruid2.so
if [ -e ${PHPMODULES} ]; then
if ! grep -m1 -q '^Mutex ' ${PHPMODULES}; then
echo "Mutex posixsem" >> ${PHPMODULES}
fi
fi
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
run_dataskq
echo "mod_ruid2 has been installed successfully."
writeLog "mod_ruid2 installed"
cd ${CWD}
}
####################################################
doModHtscanner() {
cd ${CWD}
if [ "${HTSCANNER_OPT}" = "no" ]; then
do_exit 1 "Cannot build htscanner, because you do not have it set in php_extensions.conf file."
fi
if [ ! -e /usr/sbin/apxs ]; then
echo "/usr/sbin/apxs is not found, skipping htscanner for now."
return
fi
getFile htscanner-${HTSCANNER_VER}.tgz htscanner
FILE=${CWD}/htscanner-${HTSCANNER_VER}.tgz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE}
cd htscanner-${HTSCANNER_VER}
echo "Installing mod_htscanner2-${HTSCANNER_VER}..."
APXS=/usr/sbin/apxs
if [ ! -e $APXS ]; then
echo "cannot find $APXS, trying a different path"
APXS=/usr/bin/apxs
fi
$APXS -a -i -c mod_htscanner2.c
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to install mod_htscanner2-${HTSCANNER_VER}.\n"
do_exit 1
fi
set_LoadModule htscanner_module mod_htscanner2.so
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
run_dataskq
echo "mod_htscanner2 has been installed successfully."
writeLog "mod_htscanner2 installed"
cd ${CWD}
}
####################################################
doModFCGID() {
cd ${CWD}
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
do_exit 1 "Cannot build mod_fcgid, because nginx webserver is chosen in the options.conf file."
fi
getFile mod_fcgid-${MOD_FCGID_VER}.tar.gz mod_fcgid
FILE=${CWD}/mod_fcgid-${MOD_FCGID_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd mod_fcgid-${MOD_FCGID_VER}
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
patch -p1 < ../mod_fcgid_2_3_7.patch
fi
echo "Installing mod_fcgid-${MOD_FCGID_VER}..."
APXS=/usr/sbin/apxs ./configure.apxs
while echo "Trying to make mod_fcgid-${MOD_FCGID_VER}..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Installing mod_fcgid-${MOD_FCGID_VER}..."
make install
set_LoadModule fcgid_module mod_fcgid.so
if [ -e ${PHPMODULES} ]; then
if ! grep -m1 -q 'httpd-fcgid.conf' ${PHPMODULES}; then
echo "Include /etc/httpd/conf/extra/httpd-fcgid.conf" >> ${PHPMODULES}
fi
fi
if [ ! -e ${HTTPDCONF}/extra/httpd-fcgid.conf ] && [ -e ${CWD}/configure/ap2/conf/extra/httpd-fcgid.conf ]; then
cp ${CWD}/configure/ap2/conf/extra/httpd-fcgid.conf ${HTTPDCONF}/extra/httpd-fcgid.conf
fi
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
run_dataskq
echo "mod_fcgid-${MOD_FCGID_VER} has been installed successfully."
writeLog "mod_fcgid ${MOD_FCGID_VER} installed"
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
ensure_curl_cacert() {
if [ "${PHP1_RELEASE_OPT}" != "no" ] && [ "`version_cmp ${PHP1_RELEASE_OPT} 5.6 'curl cacert'`" -ge 0 ]; then
CURL_CACERT_DIR=/usr/ssl
CURL_CACERT_PATH=${CURL_CACERT_DIR}/cert.pem
if [ -x /usr/local/bin/php ]; then
DCF=`/usr/local/bin/php -r "if (function_exists('openssl_get_cert_locations')) echo openssl_get_cert_locations()['default_cert_file'];"`
if [ "${DCF}" != "" ]; then
CURL_CACERT_PATH=${DCF}
CURL_CACERT_DIR=`dirname ${CURL_CACERT_PATH}`
fi
fi
SET_CURL_CACERT=0
if [ "$1" = "1" ]; then
SET_CURL_CACERT=1
fi
if [ ! -s "${CURL_CACERT_PATH}" ]; then
SET_CURL_CACERT=1
else
COUNT=`grep -c 'Bundle of CA Root Certificates' ${CURL_CACERT_PATH}`
if [ "${COUNT}" -gt 0 ]; then
SET_CURL_CACERT=1
fi
fi
if [ "${SET_CURL_CACERT}" -eq 1 ]; then
if [ ! -d ${CURL_CACERT_DIR} ]; then
mkdir -p ${CURL_CACERT_DIR}
chmod 755 ${CURL_CACERT_DIR}
fi
if [ "$M" != "0" ]; then
echo "${boldon}Downloading updated ${CURL_CACERT_PATH}${boldoff}"
getFile all/ssl/cacert.pem curl_cacert cacert.pem
if [ -s cacert.pem ]; then
CACERT_DIRECTORY="`dirname ${CURL_CACERT_PATH}`"
if [ ! -d ${CACERT_DIRECTORY} ]; then
mkdir -p ${CACERT_DIRECTORY}
fi
mv -f ${CURL_CACERT_PATH} ${CURL_CACERT_PATH}.old 2>/dev/null
mv cacert.pem ${CURL_CACERT_PATH}
chmod 644 ${CURL_CACERT_PATH}
fi
fi
fi
fi
}
ensure_server_ca() {
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
SSL_CA=${HTTPDCONF}/ssl.crt/server.ca
SSL_CRT=${HTTPDCONF}/ssl.crt/server.crt
SSL_KEY=${HTTPDCONF}/ssl.key/server.key
mkdir -p ${HTTPDCONF}/ssl.crt
ensure_dhparam ${HTTPDCONF}/ssl.crt/dhparams.pem
elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
SSL_CA=${LSWS_HOME}/ssl.crt/server.ca
SSL_CRT=${LSWS_HOME}/ssl.crt/server.crt
SSL_KEY=${LSWS_HOME}/ssl.key/server.key
mkdir -p ${LSWS_HOME}/ssl.crt
elif [ "${WEBSERVER_OPT}" = "nginx" ]; then
SSL_CA=${NGINXCONF}/ssl.crt/server.ca
SSL_CRT=${NGINXCONF}/ssl.crt/server.crt
mkdir -p ${NGINXCONF}/ssl.crt
ensure_dhparam ${NGINXCONF}/ssl.crt/dhparams.pem
else
echo "Unknown value for webserver=${WEBSERVER_OPT}"
return
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
mkdir -p ${NGINXCONF}/ssl.crt
mkdir -p ${NGINXCONF}/ssl.key
ensure_dhparam ${NGINXCONF}/ssl.crt/dhparams.pem
fi
echo "Checking to ensure ${SSL_CA} is set."
if [ ! -s ${SSL_CA} ]; then
echo "Downloading new generic server.ca ..."
safeDownloadWithMove "${SSL_CA}" "${WEBPATH_SERVICES}/all/ssl/server.ca"
fi
if [ "${WEBSERVER_OPT}" = "apache" ]; then
if [ -s ${SSL_CRT} ] && [ -s ${SSL_CA} ]; then
cat ${SSL_CRT} > ${SSL_CRT}.combined
#Sometimes we don't have a new line in SSL_CRT, so we add one to separate SSL_CRT and SSL_CA
echo >> ${SSL_CRT}.combined
cat ${SSL_CA} >> ${SSL_CRT}.combined
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -s ${SSL_CRT} ] && [ -s ${SSL_CA} ]; then
cat ${SSL_CRT} > ${SSL_CRT}.combined
#Sometimes we don't have a new line in SSL_CRT, so we add one to separate SSL_CRT and SSL_CA
echo >> ${SSL_CRT}.combined
cat ${SSL_CA} >> ${SSL_CRT}.combined
fi
NG_CA=${NGINXCONF}/ssl.crt/server.ca
NG_CRT=${NGINXCONF}/ssl.crt/server.crt
NG_KEY=${NGINXCONF}/ssl.key/server.key
CP_FLAGS="-fu"
if [ ! -L ${SSL_CA} ]; then
cp ${CP_FLAGS} ${SSL_CA} ${NG_CA}
fi
if [ ! -L ${SSL_CRT} ]; then
cp ${CP_FLAGS} ${SSL_CRT} ${NG_CRT}
fi
if [ ! -L ${SSL_KEY} ]; then
cp ${CP_FLAGS} ${SSL_KEY} ${NG_KEY}
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
NG_CA=${NGINXCONF}/ssl.crt/server.ca
NG_CRT=${NGINXCONF}/ssl.crt/server.crt
if [ -s ${NG_CRT} ] && [ -s ${NG_CA} ]; then
cat ${NG_CRT} > ${NG_CRT}.combined
#Sometimes we don't have a new line in SSL_CRT, so we add one to separate SSL_CRT and SSL_CA
echo >> ${SSL_CRT}.combined
cat ${NG_CA} >> ${NG_CRT}.combined
fi
chmod 600 ${NGINXCONF}/ssl.crt/server.ca
chmod 600 ${NGINXCONF}/ssl.crt/server.crt
chmod 600 ${NG_CRT}.combined
fi
}
backupHttp() {
echo "Backing up certificate and key, and turning off httpd for DirectAdmins's check."
if [ -e ${HTTPDCONF}/ssl.crt/server.crt ]; then
cp -fp ${HTTPDCONF}/ssl.crt/server.crt ${HTTPDCONF}/ssl.crt/server.crt.backup
fi
if [ -e ${HTTPDCONF}/ssl.key/server.key ]; then
cp -fp ${HTTPDCONF}/ssl.key/server.key ${HTTPDCONF}/ssl.key/server.key.backup
fi
if [ -e ${HTTPD_CONF} ]; then
cp -fp ${HTTPD_CONF} ${HTTPD_CONF}.backup
fi
#turn off httpd service checking
set_service httpd OFF
}
restoreHttp() {
echo "Restoring certificate and key, and turning on httpd for DirectAdmins's check."
if [ -e ${HTTPDCONF}/ssl.crt/server.crt.backup ]; then
cp -fp ${HTTPDCONF}/ssl.crt/server.crt.backup ${HTTPDCONF}/ssl.crt/server.crt
chmod 600 ${HTTPDCONF}/ssl.crt/server.crt
fi
if [ -e ${HTTPDCONF}/ssl.key/server.key.backup ]; then
cp -fp ${HTTPDCONF}/ssl.key/server.key.backup ${HTTPDCONF}/ssl.key/server.key
chmod 600 ${HTTPDCONF}/ssl.key/server.key
fi
if [ -e ${HTTPDCONF}/httpd.conf.backup ]; then
cp -fp ${HTTPDCONF}/httpd.conf.backup ${HTTPDCONF}/httpd.conf
fi
ensure_server_ca
#turn on httpd service checking
set_service httpd ON
}
####################################################
checkRPMS() {
if [ -e ${DEBIAN_VERSION} ]; then
return
fi
echo "Removing all apache related rpms..."
rpm -e --nodeps mod_auth_pgsql 2> /dev/null
rpm -e --nodeps mod_python 2> /dev/null
rpm -e --nodeps mod_auth_mysql 2> /dev/null
rpm -e --nodeps mod_auth_any 2> /dev/null
rpm -e --nodeps mod_dav 2> /dev/null
rpm -e --nodeps mod_ssl 2> /dev/null
rpm -e --nodeps mod_perl 2> /dev/null
rpm -e --nodeps mod_fpse 2> /dev/null
rpm -e --nodeps apache-fp 2> /dev/null
rpm -e --nodeps apache-fp-devel 2> /dev/null
rpm -e --nodeps apache-manual 2> /dev/null
rpm -e --nodeps apacheconf 2> /dev/null
rpm -e --nodeps apache-devel 2> /dev/null
rpm -e --nodeps apache 2> /dev/null
rpm -e --nodeps httpd 2> /dev/null
rpm -e --nodeps httpd-devel 2> /dev/null
rpm -e --nodeps httpd-tools 2> /dev/null
rpm -e --nodeps httpd-manual 2> /dev/null
rpm -e --nodeps php 2> /dev/null
echo "All apache related rpms have been removed."
}
####################################################
#addUserGroup mail mail 12 12
addUserGroup() {
if [ -e ${DEBIAN_VERSION} ]; then
if ! /usr/bin/id ${1} > /dev/null 2>&1; then
/usr/sbin/adduser --system --group --no-create-home \
--disabled-login --force-badname ${1} > /dev/null
fi
else
if ! /usr/bin/id ${1} > /dev/null 2>&1; then
/usr/sbin/useradd -r -s /bin/false ${1}
fi
fi
}
####################################################
set64() {
if [ ! -d /usr/lib64 ]; then
return
fi
if [ ! -e /usr/lib/libssl.so ]; then
ln -sf /usr/lib64/libssl.so /usr/lib/libssl.so
fi
if [ ! -e /usr/lib/libidn.so ]; then
ln -sf /usr/lib64/libidn.so /usr/lib/libidn.so
fi
}
####################################################
doApacheCheck() {
if [ ! -e ${HTTPDCONF}/extra/httpd-includes.conf ]; then
echo -n "" > ${HTTPDCONF}/extra/httpd-includes.conf
fi
if [ ! -e ${SUPHP_HTTPD} ]; then
echo -n "" > ${SUPHP_HTTPD}
fi
if [ ! -e ${HTTPDCONF}/extra/httpd-php-handlers.conf ]; then
echo -n "" > ${HTTPDCONF}/extra/httpd-php-handlers.conf
fi
if [ ! -e ${HTTPDCONF}/extra/httpd-phpmodules.conf ]; then
echo -n "" > ${HTTPDCONF}/extra/httpd-phpmodules.conf
fi
}
####################################################
setFDSETSIZE() {
#this bit is to increase the socket limit
if [ -e /usr/include/bits/typesizes.h ]; then
perl -pi -e 's/__FD_SETSIZE.*1024/__FD_SETSIZE 32768/' /usr/include/bits/typesizes.h
fi
if [ -e /usr/include/linux/posix_types.h ]; then
perl -pi -e 's/__FD_SETSIZE.*1024/__FD_SETSIZE 32768/' /usr/include/linux/posix_types.h
fi
if [ -e /usr/include/bits/types.h ]; then
perl -pi -e 's/__FD_SETSIZE.*1024/__FD_SETSIZE 32768/' /usr/include/bits/types.h
fi
NUMBER=`cat /proc/sys/fs/file-max`
if [ ${NUMBER} -lt 131072 ]; then
echo "131072" > /proc/sys/fs/file-max
fi
}
####################################################
#tokenize the IP
tokenize_IP() {
TOKENFILE_APACHE=${HTTPDCONF}/extra/httpd-vhosts.conf
TOKENFILE_OPENLITESPEED=${LSWS_HOME}/conf/httpd-vhosts.conf
TOKENFILE_NGINX=${NGINXCONF}/nginx.conf
if [ -e ${TOKENFILE_NGINX} ]; then
if grep -q -m1 'nginx-vhosts\.conf' ${TOKENFILE_NGINX}; then
TOKENFILE_NGINX=${NGINXCONF}/nginx-vhosts.conf
fi
fi
TOKENFILE_NGINX_USERDIR=${NGINXCONF}/nginx-userdir.conf
if [ -d /usr/local/directadmin/data/admin/ips ]; then
IP="`grep -r -l -m1 '^status=server$' /usr/local/directadmin/data/admin/ips | cut -d/ -f8`"
fi
if [ "${IP}" = "" ]; then
IP="`grep -im1 ${HOSTNAME} /etc/hosts | awk '{print $1}'`"
if [ "${IP}" = "" ]; then
echo "Unable to detect your server IP in /etc/hosts. Please enter it: "
read IP
fi
fi
if [ "${IP}" = "" ]; then
echo "Unable to detect your server IP. Exiting..."
do_exit 0
fi
if [ "`echo ${IP} | grep -m1 -c ':'`" -gt 0 ]; then
IP="[${IP}]"
fi
echo "Using $IP for your server IP"
LAN_IP=`getDA_Opt lan_ip ""`
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -e ${TOKENFILE_APACHE} ]; then
if [ "`grep -m1 -c '|IP|' ${TOKENFILE_APACHE}`" -gt "0" ]; then
STR="perl -pi -e 's/\|IP\|/$IP/' ${TOKENFILE_APACHE}"
eval ${STR}
fi
if [ "`grep -m1 -c '|LINKEDIP|' ${TOKENFILE_APACHE}`" -gt "0" ]; then
#|LINKEDIP| and |LINKEDIPSSL|
#set them or clear them.
IP_CF=/usr/local/directadmin/data/admin/ips/${IP}
if [ -s ${IP_CF} ] && [ -s ${DACONF_FILE} ]; then
if [ "`grep -m1 -c '^linked_ips=' ${IP_CF}`" -gt "0" ]; then
#2 will tokenize the httpd-vhosts.conf
/usr/local/directadmin/dataskq --linked-ips=2
fi
fi
#this is a fallback, in case the dataskq did not do it
LINKEDIP="perl -pi -e 's/\|LINKEDIP\|//' ${TOKENFILE_APACHE}"
LINKEDIPSSL="perl -pi -e 's/\|LINKEDIPSSL\|//' ${TOKENFILE_APACHE}"
eval ${LINKEDIP}
eval ${LINKEDIPSSL}
fi
fi
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
if [ -e ${TOKENFILE_OPENLITESPEED} ]; then
if [ "`grep -m1 -c '|IP_LISTENER|' ${TOKENFILE_OPENLITESPEED}`" -gt "0" ]; then
IP_LISTENER=`echo "${IP}" | tr '.:' '-'`
STR="perl -pi -e 's/\|IP_LISTENER\|/$IP_LISTENER/g' ${TOKENFILE_OPENLITESPEED}"
eval ${STR}
fi
if [ "`grep -m1 -c '|HOSTNAME|' ${TOKENFILE_OPENLITESPEED}`" -gt "0" ]; then
STR="perl -pi -e 's/\|HOSTNAME\|/$HOSTNAME/g' ${TOKENFILE_OPENLITESPEED}"
eval ${STR}
fi
if [ "`grep -m1 -c '|LINKEDIP_LISTENERS|' ${TOKENFILE_OPENLITESPEED}`" -gt "0" ]; then
#|LINKEDIP_LISTENERS|
#set them or clear them.
IP_CF=/usr/local/directadmin/data/admin/ips/${IP}
if [ -s ${IP_CF} ] && [ -s ${DACONF_FILE} ]; then
if [ "`grep -m1 -c '^linked_ips=' ${IP_CF}`" -gt "0" ]; then
#4 will tokenize the httpd-vhosts.conf
/usr/local/directadmin/dataskq --linked-ips=4
fi
fi
#this is a fallback, in case the dataskq did not do it
LINKEDIP_LISTENERS="perl -pi -e 's/\|LINKEDIP_LISTENERS\|//' ${TOKENFILE_OPENLITESPEED}"
eval ${LINKEDIP_LISTENERS}
fi
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -e ${TOKENFILE_NGINX} ]; then
if [ "`grep -m1 -c '|IP|' ${TOKENFILE_NGINX}`" -gt "0" ]; then
if [ "${LAN_IP}" != "" ] && [ "${LAN_IP}" != "${IP}" ]; then
echo "Using lan_ip=$LAN_IP as a secondary server IP";
STR="perl -pi -e 's/\|IP\|:\|PORT_80\|;/\|IP\|:\|PORT_80\|;\n\tlisten\t\t$LAN_IP:\|PORT_80\|;/' ${TOKENFILE_NGINX}"
eval ${STR}
STR="perl -pi -e 's/\|IP\|:\|PORT_443\| ssl\|SPACE_HTTP2\|;/\|IP\|:\|PORT_443\| ssl\|SPACE_HTTP2\|;\n\tlisten\t\t$LAN_IP:\|PORT_443\| ssl\|SPACE_HTTP2\|;/' ${TOKENFILE_NGINX}"
eval ${STR}
fi
echo "Using $IP for your server IP"
STR="perl -pi -e 's/\|IP\|/$IP/' ${TOKENFILE_NGINX}"
eval ${STR}
fi
if [ "`grep -m1 -c '|LINKEDIP|' ${TOKENFILE_NGINX}`" -gt "0" ]; then
#|LINKEDIP| and |LINKEDIPSSL|
#set them or clear them.
IP_CF=/usr/local/directadmin/data/admin/ips/${IP}
if [ -s ${IP_CF} ] && [ -s ${DACONF_FILE} ]; then
if [ "`grep -m1 -c '^linked_ips=' ${IP_CF}`" -gt "0" ]; then
#3 will tokenize the nginx-vhosts.conf
/usr/local/directadmin/dataskq --linked-ips=3
fi
fi
#this is a fallback, in case the dataskq did not do it
LINKEDIP="perl -pi -e 's/\|LINKEDIP\|//' ${TOKENFILE_NGINX}"
LINKEDIPSSL="perl -pi -e 's/\|LINKEDIPSSL\|//' ${TOKENFILE_NGINX}"
eval ${LINKEDIP}
eval ${LINKEDIPSSL}
fi
fi
if [ -e ${TOKENFILE_NGINX_USERDIR} ]; then
if [ "`grep -m1 -c '|IP|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then
if [ "${LAN_IP}" != "" ] && [ "${LAN_IP}" != "${IP}" ]; then
STR="perl -pi -e 's/\|IP\|:\|PORT_80\|;/\|IP\|:\|PORT_80\|;\n\tlisten\t\t$LAN_IP:\|PORT_80\|;/' ${TOKENFILE_NGINX_USERDIR}"
eval ${STR}
STR="perl -pi -e 's/\|IP\|:\|PORT_443\| ssl\|SPACE_HTTP2\|;/\|IP\|:\|PORT_443\| ssl\|SPACE_HTTP2\|;\n\tlisten\t\t$LAN_IP:\|PORT_443\| ssl\|SPACE_HTTP2\|;/' ${TOKENFILE_NGINX_USERDIR}"
eval ${STR}
fi
STR="perl -pi -e 's/\|IP\|/$IP/' ${TOKENFILE_NGINX_USERDIR}"
eval ${STR}
fi
fi
fi
}
#tokenize ports
tokenize_ports() {
getWebserverPorts
TOKENFILE_APACHE=${HTTPDCONF}/extra/httpd-vhosts.conf
TOKENFILE_NGINX=${NGINXCONF}/nginx.conf
if [ -e ${TOKENFILE_NGINX} ]; then
if grep -q -m1 'nginx-vhosts\.conf' ${TOKENFILE_NGINX}; then
TOKENFILE_NGINX=${NGINXCONF}/nginx-vhosts.conf
fi
fi
TOKENFILE_NGINX_USERDIR=${NGINXCONF}/nginx-userdir.conf
TOKENFILE_OPENLITESPEED=${LSWS_HOME}/conf/httpd-vhosts.conf
if [ "${WEBSERVER_OPT}" = "openlitespeed" ] && [ -s ${TOKENFILE_OPENLITESPEED} ]; then
if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_OPENLITESPEED}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_OPENLITESPEED}"
eval ${STR}
fi
if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_OPENLITESPEED}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_OPENLITESPEED}"
eval ${STR}
fi
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then
if [ -e ${TOKENFILE_APACHE} ]; then
if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_APACHE}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_APACHE}"
eval ${STR}
else
perl -pi -e "s/:${PORT_8080}\>/:${PORT_80}\>/" ${TOKENFILE_APACHE}
perl -pi -e "s/^Listen ${PORT_8080}$/Listen ${PORT_80}/" ${TOKENFILE_APACHE}
fi
if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_APACHE}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_APACHE}"
eval ${STR}
else
perl -pi -e "s/:${PORT_8081}\>/:${PORT_443}\>/" ${TOKENFILE_APACHE}
perl -pi -e "s/^Listen ${PORT_8081}$/Listen ${PORT_443}/" ${TOKENFILE_APACHE}
fi
SSLFILE=${HTTPDCONF}/extra/httpd-ssl.conf
STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${SSLFILE}"
eval ${STR}
perl -pi -e "s/:${PORT_8081}\>/:${PORT_443}\>/" ${SSLFILE}
perl -pi -e "s/^Listen ${PORT_8081}$/Listen ${PORT_443}/" ${SSLFILE}
STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${HTTPD_CONF}"
eval ${STR}
perl -pi -e "s/:${PORT_8080}\>/:${PORT_80}\>/" ${HTTPD_CONF}
perl -pi -e "s/^Listen ${PORT_8080}$/Listen ${PORT_80}/" ${HTTPD_CONF}
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
SPACE_HTTP2=
initHTTP2var
if [ "$HTTP2" = "1" ]; then
SPACE_HTTP2=" http2"
fi
STR="perl -pi -e \"s/\|SPACE_HTTP2\|/${SPACE_HTTP2}/g\" ${TOKENFILE_NGINX}"
eval ${STR}
fi
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
if [ -e ${TOKENFILE_NGINX} ]; then
if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_NGINX}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_NGINX}"
eval ${STR}
fi
if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_NGINX}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_NGINX}"
eval ${STR}
fi
fi
if [ -e ${TOKENFILE_NGINX_USERDIR} ]; then
if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_NGINX_USERDIR}"
eval ${STR}
fi
if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_NGINX_USERDIR}"
eval ${STR}
fi
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -e ${TOKENFILE_NGINX} ]; then
if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_NGINX}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_NGINX}"
eval ${STR}
fi
if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_NGINX}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_NGINX}"
eval ${STR}
fi
if [ "`grep -m1 -c '|PORT_8080|' ${TOKENFILE_NGINX}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_8080\|/${PORT_8080}/g\" ${TOKENFILE_NGINX}"
eval ${STR}
fi
if [ "`grep -m1 -c '|PORT_8081|' ${TOKENFILE_NGINX}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_8081\|/${PORT_8081}/g\" ${TOKENFILE_NGINX}"
eval ${STR}
fi
fi
if [ -e ${TOKENFILE_NGINX_USERDIR} ]; then
if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_80\|/${PORT_80}/g\" ${TOKENFILE_NGINX_USERDIR}"
eval ${STR}
fi
if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_443\|/${PORT_443}/g\" ${TOKENFILE_NGINX_USERDIR}"
eval ${STR}
fi
if [ "`grep -m1 -c '|PORT_8080|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_8080\|/${PORT_8080}/g\" ${TOKENFILE_NGINX_USERDIR}"
eval ${STR}
fi
if [ "`grep -m1 -c '|PORT_8081|' ${TOKENFILE_NGINX_USERDIR}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_8081\|/${PORT_8081}/g\" ${TOKENFILE_NGINX_USERDIR}"
eval ${STR}
fi
fi
if [ -e ${TOKENFILE_APACHE} ]; then
if [ "`grep -m1 -c '|PORT_80|' ${TOKENFILE_APACHE}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_80\|/${PORT_8080}/g\" ${TOKENFILE_APACHE}"
eval ${STR}
else
perl -pi -e "s/:${PORT_80}\>/:${PORT_8080}\>/" ${TOKENFILE_APACHE}
fi
if [ "`grep -m1 -c '|PORT_443|' ${TOKENFILE_APACHE}`" -gt "0" ]; then
STR="perl -pi -e \"s/\|PORT_443\|/${PORT_8081}/g\" ${TOKENFILE_APACHE}"
eval ${STR}
else
perl -pi -e "s/:${PORT_443}\>/:${PORT_8081}\>/" ${TOKENFILE_APACHE}
fi
if [ "`grep -m1 -c "^Listen ${PORT_80}$" ${HTTPD_CONF}`" -gt 0 ]; then
STR="perl -pi -e \"s/^Listen ${PORT_80}$/Listen ${PORT_8080}/\" ${HTTPD_CONF}"
eval ${STR}
else
perl -pi -e "s/:${PORT_80}\>/:${PORT_8080}\>/" ${HTTPD_CONF}
fi
STR="perl -pi -e \"s/\|PORT_80\|/${PORT_8080}/g\" ${HTTPD_CONF}"
eval ${STR}
perl -pi -e "s/:${PORT_80}\>/:${PORT_8080}\>/" ${HTTPD_CONF}
perl -pi -e "s/^Listen ${PORT_80}$/Listen ${PORT_8080}/" ${HTTPD_CONF}
SSLFILE=${HTTPDCONF}/extra/httpd-ssl.conf
STR="perl -pi -e \"s/\|PORT_443\|/${PORT_8081}/g\" ${SSLFILE}"
eval ${STR}
perl -pi -e "s/:${PORT_443}\>/:${PORT_8081}\>/" ${SSLFILE}
perl -pi -e "s/^Listen ${PORT_443}$/Listen ${PORT_8081}/" ${SSLFILE}
fi
fi
}
doCURL() {
if [ "${CURL_OPT}" != "yes" ]; then
echo "You cannot install curl, because you do not have it set in options.conf file."
return
fi
if [ ! -s /usr/include/nghttp2/nghttp2.h ] && [ ! -s /usr/local/include/nghttp2/nghttp2.h ]; then
echo "Cannot find nghttp2.h. Installing nghttp2.";
if [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install libnghttp2-dev
elif [ "${OS_CENTOS_VER}" = "7" ]; then
if [ -s /etc/yum.repos.d/epel.repo ]; then
yum -y install libnghttp2-devel --enablerepo=${EPEL_REPO_NAME}
else
yum -y install libnghttp2-devel
fi
else
yum -y install libnghttp2-devel --enablerepo=${POWERTOOLS}
fi
fi
getFile curl-${CURL_VER}.tar.gz curl
quitIfLocked doCURL
cd ${CWD}
FILE=${CWD}/curl-${CURL_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
chmod -R 755 curl-${CURL_VER}
cd curl-${CURL_VER}
echo "Configuring curl-${CURL_VER}..."
if [ "${HTTP2}" = "1" ]; then
echo "Enabling http2 support...";
if ! grep -m1 -q "\-\-with-nghttp2" ${CWD}/${CURL_CONFIGURE}; then
perl -pi -e 's|\./configure|./configure --with-nghttp2|' ${CWD}/${CURL_CONFIGURE}
fi
fi
${CWD}/${CURL_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure cURL.\n"
do_exit 1
fi
echo "Done. Making curl-${CURL_VER}..."
while echo "Trying to make cURL..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Installing curl-${CURL_VER}..."
if [ -e /usr/local/lib/libcurl.la ]; then
rm -f /usr/local/lib/libcurl.la
fi
if [ -e /usr/local/lib/libcurl.a ]; then
rm -f /usr/local/lib/libcurl.a
fi
if [ -L /usr/local/lib/libcurl.so ]; then
LIBCURL_SO="`readlink /usr/local/lib/libcurl.so`"
rm -f /usr/local/lib/libcurl.so
rm -f "${LIBCURL_SO}"
fi
make install
ldconfig
echo "Done curl."
writeLog "curl ${CURL_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doRemoveCURL() {
if [ "${CURL_OPT}" = "yes" ]; then
do_exit 1 "Cannot remove cURL, because it is enabled in options.conf file."
fi
quitIfLocked doRemoveCURL
cd ${CWD}
FILE=${CWD}/curl-${CURL_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
chmod -R 755 curl-${CURL_VER}
cd curl-${CURL_VER}
echo "Configuring curl-${CURL_VER}..."
${CWD}/${CURL_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure cURL.\n"
do_exit 1
fi
echo "Done. Removing curl-${CURL_VER}..."
make uninstall
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
writeLog "cURL removed"
}
####################################################
doImageMagick() {
if [ "${IMAGICK_OPT}" != "yes" ]; then
do_exit 1 "You cannot install ImageMagick, because you do not have imagick=yes set in php_extensions.conf file."
fi
getFile imagick/ImageMagick-${IMAGEMAGICK_VER}.tar.gz imagemagick ImageMagick-${IMAGEMAGICK_VER}.tar.gz
removeLockfile
quitIfLocked doImageMagick
cd ${CWD}
FILE=${CWD}/ImageMagick-${IMAGEMAGICK_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd ImageMagick-${IMAGEMAGICK_VER}
echo "Configuring ImageMagick-${IMAGEMAGICK_VER}..."
${CWD}/${IMAGEMAGICK_CONFIGURE}
echo "Done. Making ImageMagick-${IMAGEMAGICK_VER}..."
while echo "Trying to make imagemagick..."; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Installing ImageMagick-${IMAGEMAGICK_VER}..."
make install
echo "Done ImageMagick."
writeLog "ImageMagick ${IMAGEMAGICK_VER} installed"
removeLockfile
cd ${CWD}
if [ "${PHP_IMAGICK_OPT}" = "yes" ]; then
doIMagick
fi
/sbin/ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doRedis() {
if [ "${REDIS_OPT}" != "yes" ]; then
do_exit 1 "You cannot install Redis, because you do not have redis=yes set in options.conf file."
fi
#Add redis user/group if it doesn't exist
addUserGroup redis redis
getFile redis/redis-${REDIS_VER}.tar.gz redis redis-${REDIS_VER}.tar.gz
removeLockfile
quitIfLocked doRedis
cd ${CWD}
FILE=${CWD}/redis-${REDIS_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd redis-${REDIS_VER}
echo "Making redis-${REDIS_VER}..."
while echo "Trying to make redis..."; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Installing redis-${REDIS_VER}..."
make install
echo "Done redis."
writeLog "Redis ${REDIS_VER} installed"
removeLockfile
cd ${CWD}
/sbin/ldconfig
cd ${CWD}
echo "Enabling redis in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/redis@.service ]; then
cp -f ${CB_CUST_SYSTEMD}/redis@.service ${SYSTEMDDIR}/redis@.service
else
cp -f ${CB_SYSTEMD}/redis@.service ${SYSTEMDDIR}/redis@.service
fi
chmod 644 ${SYSTEMDDIR}/redis@.service
systemctl daemon-reload
if [ "${SPAMD_OPT}" = "rspamd" ]; then
echo "Enabling redis-rspamd in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/redis-rspamd.service ]; then
cp -f ${CB_CUST_SYSTEMD}/redis-rspamd.service ${SYSTEMDDIR}/redis-rspamd.service
else
cp -f ${CB_SYSTEMD}/redis-rspamd.service ${SYSTEMDDIR}/redis-rspamd.service
fi
chmod 644 ${SYSTEMDDIR}/redis-rspamd.service
systemctl daemon-reload
systemctl enable --now redis-rspamd
if [ ! -d /etc/rspamd/local.d ]; then
mkdir -p /etc/rspamd/local.d
chmod 755 /etc/rspamd/local.d
fi
echo 'servers = "/var/lib/rspamd/.redis/redis.sock";' > /etc/rspamd/local.d/redis.conf
systemctl reload rspamd
fi
if [ ! -e /etc/logrotate.d/redis ]; then
safeDownloadWithMove /etc/logrotate.d/redis "${WEBPATH}/redis.logrotate"
fi
if [ "${OS}" != "FreBSD" ]; then
if [ `sysctl vm.overcommit_memory | cut -d= -f2 | awk '{print $1}'` -eq 0 ]; then
if [ -d /etc/sysctl.d ]; then
if [ -e /etc/sysctl.d/99-directadmin.conf ]; then
if grep -m1 -q '^overcommit_memory' /etc/sysctl.d/99-directadmin.conf; then
echo 'vm.overcommit_memory=1' >> /etc/sysctl.d/99-directadmin.conf
sysctl -p /etc/sysctl.d/99-directadmin.conf
fi
else
echo 'vm.overcommit_memory=1' > /etc/sysctl.d/99-directadmin.conf
sysctl -p /etc/sysctl.d/99-directadmin.conf
fi
fi
fi
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
installXMLRPC() {
if [ -z $1 ] || [ "$1" = "no" ] || [ ! -x /usr/local/php$1/bin/phpize ]; then
return
fi
getFile php_extensions/xmlrpc/xmlrpc-${XMLRPC_VER}.tgz xmlrpc xmlrpc-${XMLRPC_VER}.tgz
echo "Installing xmlrpc-${XMLRPC_VER} PHP extension for PHP $1..."
FILE=${CWD}/xmlrpc-${XMLRPC_VER}.tgz
checkFile ${FILE}
echo "Extracting ${FILE}..."
#make clean didn't clean everything up
if [ -d xmlrpc-${XMLRPC_VER} ]; then
rm -rf xmlrpc-${XMLRPC_VER}
fi
tar xzf ${FILE}
cd xmlrpc-${XMLRPC_VER}
/usr/local/php$1/bin/phpize
./configure --with-php-config=/usr/local/php$1/bin/php-config
while echo "Trying to make xmlrpc-${XMLRPC_VER} PHP extension..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
make install
make clean
cd ${CWD}
}
####################################################
installIMagick() {
if [ -z $1 ] || [ "$1" = "no" ] || [ ! -x /usr/local/php$1/bin/phpize ]; then
return
fi
getFile imagick/imagick-${IMAGICK_VER}.tgz imagick imagick-${IMAGICK_VER}.tgz
echo "Installing imagick-${IMAGICK_VER} PHP extension for PHP $1..."
FILE=${CWD}/imagick-${IMAGICK_VER}.tgz
checkFile ${FILE}
echo "Extracting ${FILE}..."
#make clean didn't clean everything up
if [ -d imagick-${IMAGICK_VER} ]; then
rm -rf imagick-${IMAGICK_VER}
fi
tar xzf ${FILE}
cd imagick-${IMAGICK_VER}
/usr/local/php$1/bin/phpize
./configure --with-php-config=/usr/local/php$1/bin/php-config
while echo "Trying to make imagick-${IMAGICK_VER} PHP extension..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
make install
make clean
cd ${CWD}
}
doIMagick() {
cd ${CWD}
if [ "${IMAGICK_OPT}" = "no" ]; then
do_exit 1 "Cannot build imagick, because you do not have it set in php_extensions.conf file."
fi
if [ ! -e /usr/local/bin/magick ]; then
doImageMagick
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
IMAGICK_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
if [ "${FOR_ALL}" = "no" ]; then
installIMagick ${IMAGICK_INT_SHORTRELEASE} $2
else
installIMagick ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT}
installIMagick ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT}
installIMagick ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT}
installIMagick ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT}
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} imagick
else
doExtensions_build ${1} ${2} imagick
fi
echo "imagick ${IMAGICK_VER} PHP extension has been installed successfully."
writeLog "imagick ${IMAGICK_VER} installed"
cd ${CWD}
}
installGeneralSrcExt() {
if [ -z $3 ] || [ "$3" = "no" ]; then
return
fi
PHP_EXT_NAME=$1
echo "Installing ${PHP_EXT_NAME} PHP extension for PHP $3..."
PHP_EXT_SHORTRELEASE=`echo $3 | cut -d'.' -f1,2 | tr -d '.'`
getFile php-${3}.tar.gz php${PHP_EXT_SHORTRELEASE}
FILE=${CWD}/php-${3}.tar.gz
if [ ! -d "php-${3}/ext/${PHP_EXT_NAME}" ]; then
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
if [ ! -d "php-${3}/ext/${PHP_EXT_NAME}" ]; then
echo "Unable to found php-${3}/ext/${PHP_EXT_NAME}, skipping..."
return
fi
fi
cd "php-${3}/ext/${PHP_EXT_NAME}"
if [ $? -ne 0 ]; then
do_exit 1 "Failed to change directory to: php-${3}. Exiting..."
fi
/usr/local/php${PHP_EXT_SHORTRELEASE}/bin/phpize
./configure --with-php-config=/usr/local/php${PHP_EXT_SHORTRELEASE}/bin/php-config ${4}
while echo "Trying to make ${PHP_EXT_NAME} PHP extension..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
make install
make clean
cd ${CWD}
}
installGeneralExt() {
if [ -z $3 ] || [ "$3" = "no" ]; then
return
fi
PHP_EXT_NAME=$1
PHP_EXT_VER=$2
if [ "${PHP_EXT_NAME}" = "snuffleupagus" ] || [ "${PHP_EXT_NAME}" = "igbinary" ]; then
FILE_EXT="tar.gz"
else
FILE_EXT="tgz"
fi
if [ "${PHP_EXT_NAME}" = "psr" ] || [ "${PHP_EXT_NAME}" = "phalcon" ]; then
if [ "${3}" = "53" ] || [ "${3}" = "54" ] || [ "${3}" = "55" ] || [ "${3}" = "56" ] || [ "${3}" = "70" ] || [ "${3}" = "71" ]; then
return
fi
elif [ "${PHP_EXT_NAME}" = "snuffleupagus" ] || [ "${PHP_EXT_NAME}" = "igbinary" ]; then
if [ "${3}" = "53" ] || [ "${3}" = "54" ] || [ "${3}" = "55" ] || [ "${3}" = "56" ]; then
return
fi
fi
echo "Installing ${PHP_EXT_NAME}-${PHP_EXT_VER} PHP extension for PHP $3..."
if [ "${PHP_EXT_NAME}" = "redis" ]; then
getFile php_extensions/${PHP_EXT_NAME}/${PHP_EXT_NAME}-${PHP_EXT_VER}.${FILE_EXT} phpredis ${PHP_EXT_NAME}-${PHP_EXT_VER}.${FILE_EXT}
else
getFile php_extensions/${PHP_EXT_NAME}/${PHP_EXT_NAME}-${PHP_EXT_VER}.${FILE_EXT} ${PHP_EXT_NAME} ${PHP_EXT_NAME}-${PHP_EXT_VER}.${FILE_EXT}
fi
FILE=${CWD}/${PHP_EXT_NAME}-${PHP_EXT_VER}.${FILE_EXT}
checkFile ${FILE}
echo "Extracting ${FILE}..."
#make clean didn't clean everything up
if [ -d ${PHP_EXT_NAME}-${PHP_EXT_VER} ]; then
rm -rf ${PHP_EXT_NAME}-${PHP_EXT_VER}
fi
tar xzf ${FILE}
if [ "${PHP_EXT_NAME}" = "snuffleupagus" ]; then
cd ${PHP_EXT_NAME}-${PHP_EXT_VER}/src
else
cd ${PHP_EXT_NAME}-${PHP_EXT_VER}
fi
/usr/local/php$3/bin/phpize
APPEND_CONFIG_FLAG=""
if [ "${PHP_EXT_NAME}" = "redis" ]; then
if /usr/local/php$3/bin/php$3 -i | grep -m1 'igbinary version' | tail -n1 | grep -m1 -q -o '[0-9.]*' 2>/dev/null; then
APPEND_CONFIG_FLAG=" --enable-redis-igbinary"
fi
fi
./configure --with-php-config=/usr/local/php$3/bin/php-config${APPEND_CONFIG_FLAG}
while echo "Trying to make ${PHP_EXT_NAME}-${PHP_EXT_VER} PHP extension..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
make install
make clean
cd ${CWD}
}
doPsr() {
cd ${CWD}
INSTALL_EXT_NAME=psr
INSTALL_EXT_VER=${PSR_VER}
if [ "${PHP_PHALCON_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
SUPPORTED_VERSIONS="73 74"
if [ "${FOR_ALL}" = "no" ]; then
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${GENERAL_EXT_INT_SHORTRELEASE} $2
fi
else
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT}
fi
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT}
fi
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT}
fi
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT}
fi
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build "${1}" "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} installed"
cd ${CWD}
}
doPhalcon() {
cd ${CWD}
if [ "${PHP_PHALCON_OPT}" = "yes" ]; then
doPsr $1 $2 $3
fi
INSTALL_EXT_NAME=phalcon
INSTALL_EXT_VER=${PHALCON_VER}
if [ "${PHP_PHALCON_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
SUPPORTED_VERSIONS="73 74"
if [ "${FOR_ALL}" = "no" ]; then
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${GENERAL_EXT_INT_SHORTRELEASE} $2
fi
else
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT}
fi
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT}
fi
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT}
fi
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT}
fi
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} installed"
cd ${CWD}
}
doPHPRedis() {
cd ${CWD}
INSTALL_EXT_NAME=redis
INSTALL_EXT_VER=${PHPREDIS_VER}
if [ "${PHP_REDIS_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
UNSUPPORTED_VERSIONS="53 54 55 56"
if [ "${FOR_ALL}" = "no" ]; then
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${GENERAL_EXT_INT_SHORTRELEASE} $2
fi
else
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT}
fi
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT}
fi
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT}
fi
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT}
fi
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} installed"
cd ${CWD}
}
doIgbinary() {
cd ${CWD}
INSTALL_EXT_NAME=igbinary
INSTALL_EXT_VER=${IGBINARY_VER}
if [ "${PHP_IGBINARY_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
UNSUPPORTED_VERSIONS="53 54 55 56"
if [ "${FOR_ALL}" = "no" ]; then
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${GENERAL_EXT_INT_SHORTRELEASE} $2
fi
else
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT}
fi
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT}
fi
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT}
fi
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT}
fi
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} installed"
cd ${CWD}
}
doSnuffleupagus() {
cd ${CWD}
INSTALL_EXT_NAME=snuffleupagus
INSTALL_EXT_VER=${SNUFFLEUPAGUS_VER}
if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
UNSUPPORTED_VERSIONS="53 54 55 56"
if [ "${FOR_ALL}" = "no" ]; then
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${GENERAL_EXT_INT_SHORTRELEASE} $2
fi
else
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT}
fi
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP2_SHORTRELEASE} ${PHP2_MODE_OPT}
fi
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP3_SHORTRELEASE} ${PHP3_MODE_OPT}
fi
if ! echo "${UNSUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then
installGeneralExt ${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} ${PHP4_SHORTRELEASE} ${PHP4_MODE_OPT}
fi
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} ${INSTALL_EXT_VER} installed"
cd ${CWD}
}
doImap() {
cd ${CWD}
getFile all/imap/imap-${IMAP_VER}.tar.gz imap imap-${IMAP_VER}.tar.gz
if [ ! -s imap-${IMAP_VER}.tar.gz ]; then
echo "Cannot find imap-${IMAP_VER}.tar.gz for extraction";
exit 1
fi
tar xvzf imap-${IMAP_VER}.tar.gz
cd imap-${IMAP_VER}
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage pam-devel` -ne 0 ]; then
yum -y install pam-devel
ldconfig
fi
elif [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libpam0g-dev` -ne 0 ]; then
apt-get -y install libpam0g-dev
ldconfig
fi
fi
UW_PATCH=1006_openssl1.1_autoverify.patch
safeDownloadWithMove "${CWD}/imap-${IMAP_VER}/${UW_PATCH}" "${DOWNLOADSERVER_OPT}/services/custombuild/patches/${UW_PATCH}"
if [ -s ${UW_PATCH} ]; then
patch -p1 < ${UW_PATCH}
fi
make lr5 EXTRACFLAGS=-fPIC
mkdir -p /usr/local/uw-imap/lib
mkdir -p /usr/local/uw-imap/include
cp -f c-client/*.c /usr/local/uw-imap/lib/
cp -f c-client/*.h /usr/local/uw-imap/include/
cp -f c-client/c-client.a /usr/local/uw-imap/lib/libc-client.a
echo "IMAP ${IMAP_VER} has been installed successfully."
writeLog "IMAP ${IMAP_VER} installed"
cd ${CWD}
}
doPHPGmp() {
cd ${CWD}
INSTALL_EXT_NAME=gmp
if [ "${PHP_GMP_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage gmp-devel` -ne 0 ]; then
yum -y install gmp-devel
ldconfig
fi
elif [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libgmp-dev` -ne 0 ]; then
apt-get -y install libgmp-dev
ldconfig
fi
fi
if [ -e /usr/include/x86_64-linux-gnu/gmp.h ] && [ ! -e /usr/include/gmp.h ]; then
ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h
elif [ -e /usr/include/aarch64-linux-gnu/gmp.h ] && [ ! -e /usr/include/gmp.h ]; then
ln -s /usr/include/aarch64-linux-gnu/gmp.h /usr/include/gmp.h
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
EXTRA_CONFIGURATION_FLAGS=""
if [ "${FOR_ALL}" = "no" ]; then
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}"
else
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} installed"
cd ${CWD}
}
doPHPReadline() {
cd ${CWD}
INSTALL_EXT_NAME=readline
if [ "${PHP_READLINE_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
RPM_TO_INSTALL=""
if [ `checkRPMPackage readline-devel` -ne 0 ]; then
RPM_TO_INSTALL="readline-devel "
fi
if [ `checkRPMPackage libedit-devel` -ne 0 ]; then
RPM_TO_INSTALL="${RPM_TO_INSTALL}libedit-devel"
fi
if [ ! -z "${RPM_TO_INSTALL}" ]; then
if [ "${OS_CENTOS_VER}" = "8" ]; then
yum -y install ${RPM_TO_INSTALL} --enablerepo=${POWERTOOLS}
elif [ "${OS_CENTOS_VER}" = "9" ]; then
yum -y install ${RPM_TO_INSTALL} --enablerepo=crb
else
yum -y install ${RPM_TO_INSTALL}
fi
ldconfig
fi
elif [ -x /usr/bin/dpkg-query ]; then
DPKG_TO_INSTALL=""
if [ `checkDebianPackage libreadline-dev` -ne 0 ]; then
DPKG_TO_INSTALL="libreadline-dev "
fi
if [ `checkDebianPackage libedit-dev` -ne 0 ]; then
DPKG_TO_INSTALL="${DPKG_TO_INSTALL}libedit-dev"
fi
if [ ! -z "${DPKG_TO_INSTALL}" ]; then
apt-get -y install ${DPKG_TO_INSTALL}
ldconfig
fi
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
EXTRA_CONFIGURATION_FLAGS=""
if [ "${FOR_ALL}" = "no" ]; then
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}"
else
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} installed"
cd ${CWD}
}
doPHPLDAP() {
cd ${CWD}
INSTALL_EXT_NAME=ldap
if [ "${PHP_LDAP_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage openldap-devel` -ne 0 ]; then
yum -y install openldap-devel
ldconfig
fi
elif [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libldap2-dev` -ne 0 ]; then
apt-get -y install libldap2-dev
ldconfig
fi
fi
if [ -e /usr/include/x86_64-linux-gnu/ldap.h ] && [ ! -e /usr/include/ldap.h ]; then
ln -s /usr/include/x86_64-linux-gnu/ldap.h /usr/include/ldap.h
fi
if [ -e /usr/include/aarch64-linux-gnu/gmp.h ] && [ ! -e /usr/include/ldap.h ]; then
ln -s /usr/include/aarch64-linux-gnu/gmp.h /usr/include/ldap.h
fi
if [ -e /usr/lib64/libldap.so ] && [ ! -e /usr/lib/libldap.so ]; then
ln -s /usr/lib64/libldap.so /usr/lib/libldap.so
fi
if [ -e /usr/lib64/libldap_r.so ] && [ ! -e /usr/lib/libldap_r.so ]; then
ln -s /usr/lib64/libldap_r.so /usr/lib/libldap_r.so
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
EXTRA_CONFIGURATION_FLAGS=""
if [ "${FOR_ALL}" = "no" ]; then
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}"
else
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} installed"
cd ${CWD}
}
doPHPBz2() {
cd ${CWD}
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage bzip2-devel` -ne 0 ]; then
yum -y install bzip2-devel
ldconfig
fi
elif [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libbz2-dev` -ne 0 ]; then
apt-get -y install libbz2-dev
ldconfig
fi
fi
INSTALL_EXT_NAME=bz2
if [ "${PHP_BZ2_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
EXTRA_CONFIGURATION_FLAGS="--with-imap=/usr/local/uw-imap --with-imap-ssl"
if [ "${FOR_ALL}" = "no" ]; then
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}"
else
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} installed"
cd ${CWD}
}
doPHPXmlrpc() {
cd ${CWD}
INSTALL_EXT_NAME=xmlrpc
if [ "${PHP_XMLRPC_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
EXTRA_CONFIGURATION_FLAGS=""
SUPPORTED_VERSIONS="53 54 55 56 70 71 72 73 74"
if [ "${FOR_ALL}" = "no" ]; then
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${GENERAL_EXT_INT_SHORTRELEASE}"; then
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}"
else
installXMLRPC ${GENERAL_EXT_INT_SHORTRELEASE} $2
fi
else
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP1_SHORTRELEASE}"; then
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
else
installXMLRPC ${PHP1_SHORTRELEASE} ${PHP1_MODE_OPT}
fi
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP2_SHORTRELEASE}"; then
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
else
installXMLRPC ${PHP2_SHORTRELEASE} ${PHP1_MODE_OPT}
fi
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP3_SHORTRELEASE}"; then
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
else
installXMLRPC ${PHP3_SHORTRELEASE} ${PHP1_MODE_OPT}
fi
if echo "${SUPPORTED_VERSIONS}" | grep -m1 -q "${PHP4_SHORTRELEASE}"; then
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
else
installXMLRPC ${PHP4_SHORTRELEASE} ${PHP1_MODE_OPT}
fi
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} installed"
cd ${CWD}
}
doPHPImap() {
cd ${CWD}
if [ ! -s /usr/local/uw-imap/lib/libc-client.a ]; then
doImap
fi
INSTALL_EXT_NAME=imap
if [ "${PHP_IMAP_OPT}" = "no" ]; then
do_exit 1 "Cannot build ${INSTALL_EXT_NAME}, because you do not have it set in php_extensions.conf file."
fi
FOR_ALL="no"
if [ -z $1 ] || [ $1 = "d" ] || [ -z $2 ]; then
FOR_ALL="yes"
fi
if [ "${FOR_ALL}" = "no" ]; then
GENERAL_EXT_INT_SHORTRELEASE="`echo $1 | tr -d '.'`"
GENERAL_EXT_INT_VER_VAR=PHP${GENERAL_EXT_INT_SHORTRELEASE}_VER
GENERAL_EXT_INT_VER=$(eval_var ${GENERAL_EXT_INT_VER_VAR})
fi
SKIP_RESTART=1
if [ "$3" != "1" ]; then
SKIP_RESTART=0
fi
EXTRA_CONFIGURATION_FLAGS="--with-imap=/usr/local/uw-imap --with-imap-ssl"
if [ "${FOR_ALL}" = "no" ]; then
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${GENERAL_EXT_INT_VER} "${EXTRA_CONFIGURATION_FLAGS}"
else
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP1_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP2_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP3_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
installGeneralSrcExt ${INSTALL_EXT_NAME} "" ${PHP4_RELEASE_VER} "${EXTRA_CONFIGURATION_FLAGS}"
fi
if [ "${FOR_ALL}" = "yes" ]; then
doExtensions ${SKIP_RESTART} ${INSTALL_EXT_NAME}
else
doExtensions_build ${GENERAL_EXT_INT_SHORTRELEASE} "${4}" ${INSTALL_EXT_NAME}
fi
echo "${INSTALL_EXT_NAME} PHP extension has been installed successfully."
writeLog "${INSTALL_EXT_NAME} installed"
cd ${CWD}
}
doExtensionsSetup() {
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
#Skip executing CL commands like "cagefsctl --force update" on every component update
EXEC_CL_COMMANDS_ONCE=true
fi
#IONCUBE IMAP OPCACHE HTSCANNER IMAGICK PHALCON PSR SUHOSIN ZEND
for setting in ${PHP_EXT_SETTINGS}; do {
SETTING_NAME=`echo $setting | tr "[A-Z]" "[a-z]"`
SETTING_OPTION_VAR=PHP_${setting}_OPT
if [ "$(eval_var ${SETTING_OPTION_VAR})" = "yes" ]; then
if [ "${setting}" = "IMAP" ]; then
doPHPImap
elif [ "${setting}" = "BZ2" ]; then
doPHPBz2
elif [ "${setting}" = "XMLRPC" ]; then
doPHPXmlrpc
elif [ "${setting}" = "GMP" ]; then
doPHPGmp
elif [ "${setting}" = "LDAP" ]; then
doPHPLDAP
elif [ "${setting}" = "PHALCON" ]; then
doPhalcon
elif [ "${setting}" = "IGBINARY" ]; then
doIgbinary
elif [ "${setting}" = "IMAGICK" ]; then
doIMagick
elif [ "${setting}" = "IONCUBE" ]; then
doIoncube
elif [ "${setting}" = "SNUFFLEUPAGUS" ]; then
doSnuffleupagus
elif [ "${setting}" = "REDIS" ]; then
doPHPRedis
elif [ "${setting}" = "OPCACHE" ]; then
doOpcache
elif [ "${setting}" = "ZEND" ]; then
doZend
fi
fi
}
done
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
cagefsctl_update
fi
}
####################################################
doComposer() {
cd ${WORKDIR}
getFile composer/${COMPOSER_VER}/composer.phar composer composer.phar.${COMPOSER_VER}
if [ -s ${WORKDIR}/composer.phar.${COMPOSER_VER} ]; then
mv -f ${WORKDIR}/composer.phar.${COMPOSER_VER} /usr/local/bin/composer
chmod 755 /usr/local/bin/composer
else
rm -f ${WORKDIR}/composer.phar.${COMPOSER_VER}
fi
if [ -d /etc/cagefs/conf.d ] && [ ! -s /etc/cagefs/conf.d/composer.cfg ]; then
echo '[composer]' > /etc/cagefs/conf.d/composer.cfg
echo 'comment=Composer' >> /etc/cagefs/conf.d/composer.cfg
echo 'paths=/usr/local/bin/composer' >> /etc/cagefs/conf.d/composer.cfg
fi
echo "Composer ${COMPOSER_VER} Installed."
writeLog "composer ${COMPOSER_VER} installed"
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doMajordomo() {
cd ${WORKDIR}
SOURCEPATH="${WORKDIR}/majordomo-1.94.5"
mkdir -p "${SOURCEPATH}"
safeDownloadWithMove "${CWD}/majordomo-1.94.5-patched.tar.gz" "${WEBPATH_SERVICES}/all/majordomo-1.94.5-patched.tar.gz"
tar xzf majordomo-1.94.5-patched.tar.gz
if [ ! -e ${SOURCEPATH}/Makefile ]; then
do_exit 1 "The source path for majordomo does not exist. Make sure the correct path is set in majordomo.sh"
fi
mkdir -p /etc/virtual/majordomo
MDGID=`id -g daemon`
if [ -e /etc/debian_version ]; then
/usr/sbin/groupadd nobody 2>/dev/null
/usr/sbin/useradd -d /etc/virtual/majordomo -g $MDGID -s /bin/false majordomo 2> /dev/null
else
/usr/sbin/useradd -d /etc/virtual/majordomo -g $MDGID majordomo -s /bin/false -n -r 2> /dev/null
fi
addToAccess majordomo
addToAccess nobody
MDUID=`id -u majordomo`
perl -pi -e "s/PERL = .*/PERL = \/usr\/bin\/perl/" ${SOURCEPATH}/Makefile
perl -pi -e "s/W_HOME = .*/W_HOME = \/etc\/virtual\/majordomo/" ${SOURCEPATH}/Makefile
#Perl and Bash weren't getting along. MDUID wasn't showing up so I did it this way.
perl -pi -e "s/W_USER = .*/W_USER = ${MDUID}/" ${SOURCEPATH}/Makefile
perl -pi -e "s/W_GROUP = .*/W_GROUP = ${MDGID}/" ${SOURCEPATH}/Makefile
perl -pi -e "s/TMPDIR = .*/TMPDIR = \/tmp/" ${SOURCEPATH}/Makefile
#fix REALLY-TO value in digests file
perl -pi -e "s/\$ARGV\[0\];/\$ARGV\[0\].\${whereami};/" ${SOURCEPATH}/digest
perl -pi -e "s#/usr/test/majordomo#/etc/virtual/majordomo#" ${SOURCEPATH}/sample.cf
cd "${SOURCEPATH}"
make wrapper
make install
make install-wrapper
perl -pi -e 's#/usr/test/majordomo#/etc/virtual/majordomo#' /etc/virtual/majordomo/majordomo.cf
PATCH1=majordomo.patch
PATCH1_PATH=/etc/virtual/majordomo/${PATCH1}
if [ ! -s "${PATCH1_PATH}" ]; then
safeDownloadWithMove "${PATCH1_PATH}" "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/all/majordomo/${PATCH1}"
fi
if [ -s "${PATCH1_PATH}" ]; then
cd /etc/virtual/majordomo
patch -fp0 < majordomo.patch
else
echo "Cannot find ${PATCH1_PATH} to patch majordomo.";
fi
#just to put up back where we were.. likely not needed.
cd ${WORKDIR}
rm -f "${WORKDIR}/majordomo-1.94.5-patched.tar.gz"
rm -rf "${SOURCEPATH}"
chmod 750 /etc/virtual/majordomo
}
####################################################
doSysbk() {
echo "Installing sysbk..."
cd ${WORKDIR}
safeDownloadWithMove "${WORKDIR}/sysbk.tar.gz" "${WEBPATH_SERVICES}/sysbk.tar.gz"
tar xzf sysbk.tar.gz -C /usr/local
KEY=/root/.ssh/id_dsa
if [ ! -e $KEY ]; then
/usr/bin/ssh-keygen -t rsa -b 2048 -N '' -q -f $KEY
fi
cd ${WORKDIR}
rm -f "${WORKDIR}/sysbk.tar.gz"
}
####################################################
doCSF() {
if [ "${CSF_OPT}" != "yes" ]; then
do_exit 1 "You cannot install CSF, because you do not have it set in options.conf file."
fi
if [ -e /etc/debian_version ]; then
if [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libwww-perl` -ne 0 ]; then
apt-get -y install libwww-perl
fi
fi
else
if [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage perl-libwww-perl` -ne 0 ]; then
yum -y install perl-libwww-perl
fi
fi
fi
CSF_LOG=/var/log/directadmin/csf_install.log
CSF_CONF=/etc/csf/csf.conf
echo "Installing CSF..."
if [ ! -d /var/log/directadmin ]; then
mkdir -p /var/log/directadmin
fi
curl -L --progress-bar -o ${WORKDIR}/csf.tgz https://download.configserver.com/csf.tgz
tar xzf csf.tgz
if ! ${WORKDIR}/csf/csftest.pl | tail -n 1 | grep -q 'RESULT: csf should function on this server'; then
echo "CSF is missing some modules"
return
fi
cd ${WORKDIR}/csf
bash ./install.sh >/dev/null 2>&1
if [ -s ${CSF_CONF} ]; then
USE_IPSET=true
if [ -x /usr/bin/systemd-detect-virt ]; then
if systemd-detect-virt | grep -m1 -q -E 'lxc|openvz'; then
USE_IPSET=false
fi
fi
if ${USE_IPSET} && grep -m1 -q '^LF_IPSET = "0"' ${CSF_CONF}; then
perl -pi -e 's|^LF_IPSET = "0"|LF_IPSET = "1"|g' ${CSF_CONF}
fi
#Add FTP passive port range
if ! grep ^TCP_IN ${CSF_CONF} | grep -q '35000:'; then
perl -pi -e 's|^TCP_IN = "(.*)"$|TCP_IN = "$1,35000:35999"|' ${CSF_CONF}
fi
if ! grep ^TCP6_IN ${CSF_CONF} | grep -q '35000:'; then
perl -pi -e 's|^TCP6_IN = "(.*)"$|TCP6_IN = "$1,35000:35999"|' ${CSF_CONF}
fi
#Add IMAP outbound ports for imapsync
if ! grep -q '^TCP_OUT = .*[,"]143[,"]' ${CSF_CONF}; then
perl -pi -e 's|^TCP_OUT = "|TCP_OUT = "143,|g' ${CSF_CONF}
fi
if ! grep -q '^TCP6_OUT = .*[,"]143[,"]' ${CSF_CONF}; then
perl -pi -e 's|^TCP6_OUT = "|TCP6_OUT = "143,|g' ${CSF_CONF}
fi
#Block SMTP by default, use RESTRICT_SYSLOG=3
perl -pi -e 's|^SMTP_BLOCK = "0"$|SMTP_BLOCK = "1"|' ${CSF_CONF}
perl -pi -e 's|^RESTRICT_SYSLOG = "0"$|RESTRICT_SYSLOG = "3"|' ${CSF_CONF}
#Disable testing mode in CSF
perl -pi -e 's/^TESTING = "1"/TESTING = "0"/' ${CSF_CONF}
#Allow all TCP/UDP outbound connections from root
if [ -e /etc/csf/csf.allow ] && [ -x /usr/sbin/csf ]; then
if ! grep -q 'out|u=0' /etc/csf/csf.allow; then
csf -a "tcp|out|u=0" "Added by DirectAdmin"
csf -a "udp|out|u=0" "Added by DirectAdmin"
fi
fi
csf -r >> /dev/null 2>&1
fi
echo "CSF installation has finished."
cd ${WORKDIR}
rm -f "${WORKDIR}/csf.tar.gz"
rm -rf "${WORKDIR}/csf"
#disable BFM notices if CSF is installed.
C=0
if [ -s ${DACONF_FILE} ]; then
C=`grep -c hide_brute_force_notifications ${DACONF_FILE}`
fi
if [ "$C" = "0" ]; then
setVal hide_brute_force_notifications 1 ${DACONF_FILE}
setVal hide_brute_force_notifications 1 ${DACONF_TEMPLATE_FILE}
echo "Brute Force Monitor messages have been suppressed."
fi
}
####################################################
doNamedConf() {
if [ -e /etc/sysconfig/named ]; then
/usr/bin/perl -pi -e 's/^ROOTDIR=.*/ROOTDIR=/' /etc/sysconfig/named
fi
SERVICE_NAME=named
if [ -s ${DACONF_FILE} ] && [ -x ${DA_BIN} ]; then
NAMED_CONF=`${DA_BIN} c | grep ^namedconfig= | cut -d= -f2`
NAMED_OVERRIDE=`${DA_BIN} c | grep ^named_service_override= | cut -d= -f2`
if [ "${NAMED_OVERRIDE}" != "" ]; then
SERVICE_NAME=${NAMED_OVERRIDE}
fi
fi
if [ ! -s $NAMED_CONF ]; then
echo "Cannot find $NAMED_CONF to check";
return
fi
NAMED_OPTIONS_CONF=$NAMED_CONF
HAVE_OPTIONS_AREA=`grep -c '^options {' ${NAMED_OPTIONS_CONF}`
for i in `grep -E '^[[:space:]]*include ' ${NAMED_CONF} | cut -d\" -f2`; do
{
if [ "$i" = "" ] || [ ! -s "$i" ]; then
continue;
fi
if grep -m1 -q allow-transfer ${i}; then
#echo "Skipping allow-transfer chcek on ${i}. allow-transfer already present.";
return
fi
if [ "${HAVE_OPTIONS_AREA}" -eq 0 ]; then
HAVE_OPTIONS_AREA=`grep -c '^options {' $i`
if [ "${HAVE_OPTIONS_AREA}" -eq 0 ]; then
continue;
fi
NAMED_OPTIONS_CONF=$i
fi
};
done;
if [ "${HAVE_OPTIONS_AREA}" -eq 0 ]; then
echo "Could not find options section in the $NAMED_CONF or any of it's include files";
return
fi
if ! grep -m1 -q allow-transfer ${NAMED_OPTIONS_CONF}; then
perl -pi -e 's|options \{|options \{\n\tallow-transfer \{ none; \};|g' ${NAMED_OPTIONS_CONF}
echo "Added 'allow-transfer { none; };' to ${NAMED_OPTIONS_CONF}"
echo "action=${SERVICE_NAME}&value=reload" >> /usr/local/directadmin/data/task.queue
fi
if grep -m1 -q 'listen-on[[:space:]]*port[[:space:]]*53[[:space:]]*{[[:space:]]*127.0.0.1;[[:space:]]*};' ${NAMED_OPTIONS_CONF}; then
perl -pi -e 's|listen-on[[:space:]]*port[[:space:]]*53[[:space:]]*{[[:space:]]*127.0.0.1;[[:space:]]*};|listen-on port 53 { any; };|g' ${NAMED_OPTIONS_CONF}
echo "action=${SERVICE_NAME}&value=reload" >> /usr/local/directadmin/data/task.queue
fi
if grep -m1 -q 'recursion[[:space:]]*yes;' ${NAMED_OPTIONS_CONF}; then
perl -pi -e 's|recursion[[:space:]]*yes;|recursion no;|g' ${NAMED_OPTIONS_CONF}
echo "action=${SERVICE_NAME}&value=reload" >> /usr/local/directadmin/data/task.queue
fi
if grep -m1 -q 'listen-on-v6[[:space:]]*port[[:space:]]*53[[:space:]]*{[[:space:]]*::1;[[:space:]]*};' ${NAMED_OPTIONS_CONF}; then
perl -pi -e 's|listen-on-v6[[:space:]]*port[[:space:]]*53[[:space:]]*{[[:space:]]*::1;[[:space:]]*};|listen-on-v6 port 53 { any; };|g' ${NAMED_OPTIONS_CONF}
echo "action=${SERVICE_NAME}&value=reload" >> /usr/local/directadmin/data/task.queue
fi
if grep -m1 -q 'allow-query[[:space:]]*{[[:space:]]*localhost;[[:space:]]*};' ${NAMED_OPTIONS_CONF}; then
perl -pi -e 's|allow-query[[:space:]]*{[[:space:]]*localhost;[[:space:]]*};|allow-query { any; };|g' ${NAMED_OPTIONS_CONF}
echo "action=${SERVICE_NAME}&value=reload" >> /usr/local/directadmin/data/task.queue
fi
}
doBind() {
if [ -e /etc/debian_version ]; then
if [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage bind9` -ne 0 ]; then
apt-get -y install bind9
fi
fi
else
if [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage bind` -ne 0 ] || [ `checkRPMPackage bind-libs` -ne 0 ] || [ `checkRPMPackage bind-utils` -ne 0 ]; then
yum -y install bind bind-libs bind-utils
fi
fi
fi
if [ ! -e ${DEBIAN_VERSION} ]; then
NAMED_CONF=/etc/named.conf
if [ ! -s "${NAMED_CONF}" ]; then
curl -L --progress-bar -o ${NAMED_CONF} ${WEBPATH_SERVICES}/all/named/named.conf
fi
if [ ! -s /var/named/named.ca ]; then
mkdir -p /var/named
chown named:named /var/named
curl -L --progress-bar -o /var/named/named.ca ${WEBPATH_SERVICES}/all/named/named.ca
fi
if [ ! -s /var/named/localhost.zone ]; then
curl -L --progress-bar -o /var/named/localhost.zone ${WEBPATH_SERVICES}/all/named/localhost.zone
fi
if [ ! -s /var/named/named.local ]; then
curl -L --progress-bar -o /var/named/named.local ${WEBPATH_SERVICES}/all/named/named.local
fi
if [ ! -s /usr/lib/systemd/system/named-setup-rndc.service ]; then
curl -L --progress-bar -o /usr/lib/systemd/system/named-setup-rndc.service ${WEBPATH_SGIT}/named/named-setup-rndc.service
fi
if [ ! -s /etc/systemd/system/named.service ]; then
if [ -s /usr/lib/systemd/system/named.service ]; then
mv /usr/lib/systemd/system/named.service /etc/systemd/system/named.service
else
curl -L --progress-bar -o /etc/systemd/system/named.service ${WEBPATH_SGIT}/named/named.service
fi
doNamedConf
systemctl daemon-reload
systemctl enable named.service
systemctl start named.service
fi
RNDCKEY=/etc/rndc.key
if [ ! -s $RNDCKEY ]; then
echo "Generating new key: $RNDCKEY ...";
if [ -e /dev/urandom ]; then
/usr/sbin/rndc-confgen -a -r /dev/urandom
else
/usr/sbin/rndc-confgen -a
fi
if grep -q 'key "rndc-key"' $RNDCKEY; then
perl -pi -e 's/key "rndc-key"/key "rndckey"/' $RNDCKEY
fi
echo "Done generating new key"
fi
if [ ! -s $RNDCKEY ]; then
echo "rndc-confgen failed. Using template instead."
curl -L --progress-bar -o $RNDCKEY http://www.directadmin.com/rndc.key
if ! grep -q secret $RNDCKEY; then
SECRET=$(/usr/sbin/rndc-confgen | grep secret | head -n 1)
perl -pi -e 's#hmac-md5;#hmac-md5;\n\t$SECRET#' $RNDCKEY
echo "Template installed."
fi
fi
chown named:named ${RNDCKEY}
else
NAMED_CONF=/etc/bind/named.conf
if [ ! -s "${NAMED_CONF}" ]; then
curl -L --progress-bar -o ${NAMED_CONF} ${WEBPATH_SERVICES}/all/named/named.conf.debian
elif grep 'listen-on' /etc/bind/named.conf | grep -m1 -q '127.0.0.1'; then
curl -L --progress-bar -o ${NAMED_CONF} ${WEBPATH_SERVICES}/all/named/named.conf.debian
else
if [ -s /etc/bind/named.conf.options ]; then
if grep 'listen-on' /etc/bind/named.conf.options | grep -m1 -q '127.0.0.1'; then
curl -L --progress-bar -o ${NAMED_CONF} ${WEBPATH_SERVICES}/all/named/named.conf.debian
fi
fi
fi
if [ ! -s /etc/bind/named.ca ]; then
curl -L --progress-bar -o /etc/bind/named.ca ${WEBPATH_SERVICES}/all/named/named.ca
fi
BIND9=/lib/systemd/system/bind9.service
if [ ! -s ${BIND9} ] && [ -s /etc/systemd/system/multi-user.target.wants/bind9.service ]; then
BIND9=/etc/systemd/system/multi-user.target.wants/bind9.service
fi
if [ ! -s /etc/systemd/system/named.service ]; then
if [ -s ${BIND9} ]; then
systemctl stop bind9.service
systemctl disable bind9.service
mv ${BIND9} /etc/systemd/system/named.service
else
if [ -s /etc/init.d/bind9 ]; then #I guess it's not systemd here.
ln -s bind9 /etc/init.d/named
else
curl -L --progress-bar -o /etc/systemd/system/named.service ${WEBPATH_SGIT}/named/named.service.debian
fi
fi
fi
doNamedConf
if [ -s ${BIND9} ]; then
systemctl stop bind9.service
fi
systemctl daemon-reload
systemctl disable bind9.service
systemctl enable named.service
systemctl start named.service
fi
set_service named ON
}
####################################################
doWP() {
cd ${WORKDIR}
getFile wp/${WP_VER}/wp-cli.phar wp-cli wp-cli.${WP_VER}
if [ -s ${WORKDIR}/wp-cli.${WP_VER} ]; then
mv -f ${WORKDIR}/wp-cli.${WP_VER} /usr/local/bin/wp
chmod 755 /usr/local/bin/wp
else
rm -f ${WORKDIR}/wp-cli.${WP_VER}
fi
if [ -d /etc/cagefs/conf.d ] && [ ! -s /etc/cagefs/conf.d/wp.cfg ]; then
echo '[wp-cli]' > /etc/cagefs/conf.d/wp.cfg
echo 'comment=wp-cli' >> /etc/cagefs/conf.d/wp.cfg
echo 'paths=/usr/local/bin/wp' >> /etc/cagefs/conf.d/wp.cfg
fi
echo "WP-CLI ${WP_VER} Installed."
writeLog "WP_CLI ${WP_VER} installed"
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doImapsync() {
getFile imapsync/imapsync-${IMAPSYNC_VER}.tar.gz imapsync imapsync-${IMAPSYNC_VER}.tar.gz
if [ ! -e ${DEBIAN_VERSION} ]; then
CENTOS7_DEPS="perl-File-Copy-Recursive perl-App-cpanminus perl-Dist-CheckConflicts perl-HTML-Parser perl-libwww-perl perl-Module-Implementation perl-Module-ScanDeps perl-Package-Stash perl-Package-Stash-XS perl-PAR-Packer perl-Regexp-Common perl-Sys-MemInfo perl-Test-Fatal perl-Test-Mock-Guard perl-Test-Requires perl-Test-Deep perl-File-Tail perl-Test-NoWarnings perl-Test-Simple perl-Test-Warn perl-Sub-Uplevel"
if [ "${OS_CENTOS_VER}" = "7" ]; then
CENTOS7_DEPS="${CENTOS7_DEPS} perl-Digest-HMAC"
fi
if ! rpm -q --quiet ${CENTOS7_DEPS}; then
yum -y install ${CENTOS7_DEPS}
fi
if [ "${OS_CENTOS_VER}" = "8" ]; then
APPEND_ENABLEREPO="--enablerepo=${POWERTOOLS}"
elif [ "${OS_CENTOS_VER}" = "9" ]; then
APPEND_ENABLEREPO="--enablerepo=crb"
fi
if ! rpm -q --quiet perl-IO-Tee perl-Mail-IMAPClient perl-Sys-MemInfo perl-Readonly perl-Encode-IMAPUTF7 perl-File-Copy-Recursive perl-Unicode-String perl-Regexp-Common perl-File-Tail perl-IO-Socket-INET6; then
yum -y install perl-IO-Tee perl-Mail-IMAPClient perl-Sys-MemInfo perl-Readonly perl-Encode-IMAPUTF7 perl-File-Copy-Recursive perl-Unicode-String perl-Regexp-Common perl-File-Tail perl-IO-Socket-INET6 --enablerepo=${EPEL_REPO_NAME} ${APPEND_ENABLEREPO}
fi
else
DEBIAN10_DEAPS="libauthen-ntlm-perl libcgi-pm-perl libcrypt-openssl-rsa-perl libdata-uniqid-perl libencode-imaputf7-perl libfile-copy-recursive-perl libfile-tail-perl libio-socket-inet6-perl libio-socket-ssl-perl libio-tee-perl libhtml-parser-perl libjson-webtoken-perl libmail-imapclient-perl libparse-recdescent-perl libmodule-scandeps-perl libreadonly-perl libregexp-common-perl libsys-meminfo-perl libterm-readkey-perl libtest-mockobject-perl libtest-pod-perl libunicode-string-perl liburi-perl libwww-perl libtest-nowarnings-perl libtest-deep-perl libtest-warn-perl libtest-requires-perl libtest-modern-perl libtest-mock-guard-perl libpar-packer-perl libdist-checkconflicts-perl cpanminus"
if ! dpkg -s ${DEBIAN10_DEAPS} >/dev/null 2>&1; then
apt-get -y install ${DEBIAN10_DEAPS}
fi
fi
quitIfLocked doImapsync
cd ${CWD}
FILE=${CWD}/imapsync-${IMAPSYNC_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd imapsync-imapsync-${IMAPSYNC_VER}
echo "Configuring imapsync-${IMAPSYNC_VER}..."
chmod +x imapsync
echo "Installing imapsync-${IMAPSYNC_VER}..."
cp -p imapsync /usr/local/bin/imapsync
if [ -d /etc/cagefs/conf.d ] && [ ! -s /etc/cagefs/conf.d/imapsync.cfg ]; then
echo '[imapsync]' > /etc/cagefs/conf.d/imapsync.cfg
echo 'comment=imapsync' >> /etc/cagefs/conf.d/imapsync.cfg
echo 'paths=/usr/local/bin/imapsync' >> /etc/cagefs/conf.d/imapsync.cfg
fi
#Add IMAP outbound ports for imapsync
CSFRESTART=false
CSF_CONF=/etc/csf/csf.conf
if ! grep -q '^TCP_OUT = .*[,"]143[,"]' ${CSF_CONF}; then
perl -pi -e 's|^TCP_OUT = "|TCP_OUT = "143,|g' ${CSF_CONF}
CSFRESTART=true
fi
if ! grep -q '^TCP6_OUT = .*[,"]143[,"]' ${CSF_CONF}; then
perl -pi -e 's|^TCP6_OUT = "|TCP6_OUT = "143,|g' ${CSF_CONF}
CSFRESTART=true
fi
if ${CSFRESTART} && csf --status 2&>1 >/dev/null; then
echo "Opened UDP ports for QUIC in CSF, restarting CSF..."
/usr/sbin/csf -r 2&>1 >/dev/null
fi
echo "imapsync ${IMAPSYNC_VER} installed"
writeLog "imapsync ${IMAPSYNC_VER} installed"
removeLockfile
cd ${CWD}
/sbin/ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doLego() {
cd ${WORKDIR}
if [ "${B64}" = "2" ]; then
LEGO_FILENAME=lego_v${LEGO_VER}_linux_arm64.tar.gz
getFile lego/${LEGO_FILENAME} lego_arm ${LEGO_FILENAME}
else
LEGO_FILENAME=lego_v${LEGO_VER}_linux_amd64.tar.gz
getFile lego/${LEGO_FILENAME} lego ${LEGO_FILENAME}
fi
tar xzf ${LEGO_FILENAME} -C /usr/local/bin/ --no-same-owner 'lego'
chmod 700 /usr/local/bin/lego
DNSPROVIDERS_JSON=/usr/local/directadmin/data/admin/dnsproviders.json
DNSPROVIDERS_VER=`getVer dnsproviders`
getFile lego/dnsproviders-${DNSPROVIDERS_VER}.json dnsproviders dnsproviders.json
if [ -d /usr/local/directadmin/data/admin ]; then
mv -f dnsproviders.json ${DNSPROVIDERS_JSON}
chmod 600 ${DNSPROVIDERS_JSON}
chown diradmin:diradmin ${DNSPROVIDERS_JSON}
fi
echo "Lego ${LEGO_VER} Installed."
writeLog "Lego ${LEGO_VER} installed"
}
doLibzip() {
getFile libzip-${LIBZIP_VER}.tar.gz libzip
quitIfLocked doLibzip
ensure_cmake
if [ ! -e /usr/include/uv.h ] && [ ! -e /usr/local/include/uv.h ]; then
if [ -e /etc/debian_version ]; then
apt-get -y install libuv-dev
else
yum -y install libuv-devel
fi
fi
if [ -e /usr/bin/cmake3 ] && [ ! -e /usr/bin/cmake ]; then
ln -sf /usr/bin/cmake3 /usr/bin/cmake
fi
cd ${CWD}
FILE=${CWD}/libzip-${LIBZIP_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd libzip-${LIBZIP_VER}
echo "Configuring libzip-${LIBZIP_VER}..."
mkdir -p build
cd build
${CMAKE_NAME} -DENABLE_GNUTLS=OFF ../
echo "Done. Making libzip-${LIBZIP_VER}..."
while echo "Trying to make libzip..."; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Installing libzip-${LIBZIP_VER}..."
make install
echo "Done libzip. It is recommended to reinstall libxslt after update of libzip."
writeLog "libzip ${LIBZIP_VER} installed"
removeLockfile
cd ${CWD}
/sbin/ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doWebalizer() {
quitIfLocked doWebalizer
if [ "${WEBALIZER_OPT}" != "yes" ]; then
setVal webalizer 0 ${DACONF_TEMPLATE_FILE}
setVal webalizer 0 ${DACONF_FILE}
do_exit 1 "You cannot install webalizer, because you do not have it set in options.conf file."
fi
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage gd-devel` -ne 0 ]; then
yum -y install gd-devel
ldconfig
fi
fi
PREFIX=/usr
LIBPATH=/usr/lib
INCPATH=/usr/include
if [ -e ${PREFIX}/bin/webalizer ]; then
echo "The webalizer binary exists, aborting. Delete ${PREFIX}/bin/webalizer if you wish to compile."
removeLockfile
return
fi
cd ${CWD}
getFile ${WEBALIZER_FILE} webalizer
tar xzf ${WEBALIZER_FILE} --no-same-owner
cd ${WEBALIZER}
export LD_LIBRARY_PATH=${LIBPATH}
./configure --prefix=${PREFIX} --with-png=${LIBPATH} --with-gdlib=${LIBPATH} --with-gd=${INCPATH} --enable-dns --with-dblib --with-db --with-z-inc --with-zlib
while echo "Trying to make webalizer..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): "
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
removeLockfile
return
fi
else
break
fi
done
make install
writeLog "webalizer ${WEBALIZER_VER} installed"
removeLockfile
if [ "${AWSTATS_OPT}" = "no" ]; then
setVal awstats 0 ${DACONF_TEMPLATE_FILE}
setVal awstats 0 ${DACONF_FILE}
else
setVal awstats 1 ${DACONF_TEMPLATE_FILE}
setVal awstats 1 ${DACONF_FILE}
fi
doRestartDA
if [ -e /etc/webalizer.conf ]; then
mv -f /etc/webalizer.conf /etc/webalizer.conf.moved 2> /dev/null > /dev/null
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doawstats_process() {
if [ "${AWSTATS_OPT}" != "yes" ]; then
do_exit 1 "You cannot update awstats_process.sh, because you do not have awstats=1 set in options.conf file."
fi
cd ${CWD}
AWSTATS_PROCESS_SH=/usr/local/directadmin/scripts/awstats_process.sh
getFile all/awstats/awstats_process.sh-${AWSTATS_PROCESS_VER} awstats_process awstats_process.sh
if [ -s awstats_process.sh ]; then
mv -f ${CWD}/awstats_process.sh ${AWSTATS_PROCESS_SH}
chmod 700 ${AWSTATS_PROCESS_SH}
echo "awstats_process.sh ${AWSTATS_PROCESS_VER} has been installed."
writeLog "awstats_process.sh updated to ${AWSTATS_PROCESS_VER}"
fi
}
doawstats() {
if [ "${AWSTATS_OPT}" != "yes" ]; then
setVal awstats 0 ${DACONF_TEMPLATE_FILE}
setVal awstats 0 ${DACONF_FILE}
do_exit 1 "You cannot install awstats, because you do not have it set in options.conf file."
fi
TARGZ=awstats-${AWSTATS_VER}.tar.gz
TARFILE=${WORKDIR}/${TARGZ}
USR=/usr/local
REALPATH=${USR}/awstats-${AWSTATS_VER}
ALIASPATH=${USR}/awstats
getFile all/awstats/${TARGZ} awstats ${TARGZ}
#Extract the file
tar xzf ${TARFILE} --no-same-owner -C ${USR}
if [ ! -e ${REALPATH} ]; then
do_exit 1 "Directory ${REALPATH} does not exist"
fi
#link it from a fake path:
/bin/rm -f ${ALIASPATH}
/bin/ln -sf ${REALPATH} ${ALIASPATH}
cd ${REALPATH}
chown -R root:${ROOT_GRP} ${REALPATH}
chmod -R 755 ${REALPATH}
#setup the directadmin.conf
setVal awstats 1 ${DACONF_TEMPLATE_FILE}
setVal awstats 1 ${DACONF_FILE}
if [ "${WEBALIZER_OPT}" = "no" ]; then
setVal webalizer 0 ${DACONF_TEMPLATE_FILE}
setVal webalizer 0 ${DACONF_FILE}
else
setVal webalizer 1 ${DACONF_TEMPLATE_FILE}
setVal webalizer 1 ${DACONF_FILE}
fi
doRestartDA
cd ${CWD}
echo "AWstats ${AWSTATS_VER} installation is done."
writeLog "Awstats ${AWSTATS_VER} installed"
doawstats_process
}
####################################################
doNginxUnit_module() {
if [ ! -d unit-${UNIT_VER} ]; then
getFile unit/unit-${UNIT_VER}.tar.gz unit unit-${UNIT_VER}.tar.gz
cd ${CWD}
FILE=${CWD}/unit-${UNIT_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
fi
cd unit-${UNIT_VER}
if [ ! -s Makefile ]; then
#configure
echo "Configuring unit-${UNIT_VER}"
${CWD}/${UNIT_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure Nginx. Check the ${UNIT_CONFIGURE} file\n"
do_exit 1
fi
echo "Done Configuration."
fi
UNIT_COMPONENT="$1"
UNIT_COMPONENT_VER="$2"
UNIT_COMPONENT_ADDITIONAL_FLAGS=""
if [ "${UNIT_COMPONENT}" = "php" ]; then
UNIT_COMPONENT_VER_SHORT=`echo "${UNIT_COMPONENT_VER}" | tr -d '.'`
UNIT_PHP_CONFIG="/usr/local/php${UNIT_COMPONENT_VER_SHORT}/bin/php-config${UNIT_COMPONENT_VER_SHORT}"
if [ ! -e "${UNIT_PHP_CONFIG}" ]; then
UNIT_PHP_CONFIG="/usr/local/php${UNIT_COMPONENT_VER_SHORT}/bin/php-config"
fi
UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=${UNIT_COMPONENT}${UNIT_COMPONENT_VER} --config=${UNIT_PHP_CONFIG} --lib-path=/usr/local/php${UNIT_COMPONENT_VER_SHORT}/lib"
elif [ "${UNIT_COMPONENT}" = "python" ]; then
UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=python${UNIT_COMPONENT_VER} --config=/usr/bin/python3-config"
elif [ "${UNIT_COMPONENT}" = "perl" ]; then
UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=${UNIT_COMPONENT}5 --${UNIT_COMPONENT}=${UNIT_COMPONENT}"
elif [ "${UNIT_COMPONENT}" = "ruby" ]; then
UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=${UNIT_COMPONENT}${UNIT_COMPONENT_VER} --${UNIT_COMPONENT}=${UNIT_COMPONENT}"
elif [ "${UNIT_COMPONENT}" = "java" ]; then
JAVA_LIB_PATH="${3}/jre/lib"
if [ -d "${JAVA_LIB_PATH}/amd64" ]; then
JAVA_LIB_PATH="${JAVA_LIB_PATH}/amd64"
elif [ ! -d ${JAVA_LIB_PATH} ]; then
JAVA_LIB_PATH="${3}/lib"
fi
UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=${UNIT_COMPONENT}${UNIT_COMPONENT_VER} --home="${3}" --lib-path="${JAVA_LIB_PATH}" --jars=/usr/share/unit-jsc-common/"
fi
./configure ${UNIT_COMPONENT} ${UNIT_COMPONENT_ADDITIONAL_FLAGS}
if [ "${UNIT_COMPONENT}" = "nodejs" ]; then
if [ "${OS_CENTOS_VER}" = "7" ]; then
#C++11 is needed for libmodsecurity
if [ ! -d /opt/rh/devtoolset-9 ]; then
yum -y install centos-release-scl
yum -y install devtoolset-9
fi
scl enable devtoolset-9 "make node-install"
else
make node-install
fi
elif [ "${UNIT_COMPONENT}" = "java" ]; then
make ${UNIT_COMPONENT}${UNIT_COMPONENT_VER}-install
elif [ "${UNIT_COMPONENT}" = "perl" ]; then
make perl5-install
else
make ${UNIT_COMPONENT}${UNIT_COMPONENT_VER}
if [ -s build/${UNIT_COMPONENT}${UNIT_COMPONENT_VER}.unit.so ]; then
MODULES_DIR=`/usr/sbin/unitd --version 2>&1 | grep -o 'modules=[^ ]*'|cut -d= -f2`
cp -pf build/${UNIT_COMPONENT}${UNIT_COMPONENT_VER}.unit.so ${MODULES_DIR}/${UNIT_COMPONENT}${UNIT_COMPONENT_VER}.unit.so
fi
fi
cd ${CWD}
}
doNginxUnit_modules() {
if [ -d /usr/lib/unit/modules ] && [ "${UNIT_OPT}" = "yes" ]; then
#cleanup all the modules
rm -f /usr/lib/unit/modules/*
#Install Nginx Unit extensions for all releases of PHP
if [ -x /usr/local/php${PHP1_SHORTRELEASE}/bin/php ]; then
if /usr/local/php${PHP1_SHORTRELEASE}/bin/php -i | grep -m1 -q 'enable-embed'; then
doNginxUnit_module php ${PHP1_RELEASE_OPT}
fi
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ] && [ -x /usr/local/php${PHP2_SHORTRELEASE}/bin/php ]; then
if /usr/local/php${PHP2_SHORTRELEASE}/bin/php -i | grep -m1 -q 'enable-embed'; then
doNginxUnit_module php ${PHP2_RELEASE_OPT}
fi
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ] && [ -x /usr/local/php${PHP3_SHORTRELEASE}/bin/php ]; then
if /usr/local/php${PHP3_SHORTRELEASE}/bin/php -i | grep -m1 -q 'enable-embed'; then
doNginxUnit_module php ${PHP3_RELEASE_OPT}
fi
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ] && [ -x /usr/local/php${PHP4_SHORTRELEASE}/bin/php ]; then
if /usr/local/php${PHP4_SHORTRELEASE}/bin/php -i | grep -m1 -q 'enable-embed'; then
doNginxUnit_module php ${PHP4_RELEASE_OPT}
fi
fi
#Install missing language files, if any
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
MISSING_PACKAGES=" "
for package in mercurial perl-devel perl-libs${APPENDED_PACKAGES}; do {
PACKAGE_TEST=`checkRPMPackage ${package}`
if [ ${PACKAGE_TEST} -ne 0 ]; then
MISSING_PACKAGES="${package} ${MISSING_PACKAGES}"
fi
}
done
if [ "${MISSING_PACKAGES}" != " " ]; then
yum -y install ${MISSING_PACKAGES}
fi
elif [ -e ${DEBIAN_VERSION} ]; then
if [ -x /usr/bin/dpkg-query ]; then
MISSING_PACKAGES=" "
for package in hg-fast-export libperl-dev python3-dev python3-pip; do {
PACKAGE_TEST=`checkDebianPackage ${package}`
if [ ${PACKAGE_TEST} -ne 0 ]; then
MISSING_PACKAGES="${package} ${MISSING_PACKAGES}"
fi
}
done
if [ "${MISSING_PACKAGES}" != " " ]; then
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
apt-get update
apt-get -y install ${MISSING_PACKAGES}
fi
fi
fi
if [ -x /usr/bin/perl ] || [ -x /usr/local/bin/perl ]; then
doNginxUnit_module perl
fi
if [ -x /usr/bin/which ]; then
JAVA_DIRECTORY=$(dirname $(dirname $(readlink -f $(which javac 2>/dev/null) 2>/dev/null) 2>/dev/null) 2>/dev/null)
if [ -z "${JAVA_DIRECTORY}" ]; then
if [ -e /etc/debian_version ]; then
if [ "${OS_DEBIAN_VER}" = "9" ]; then
apt-get -y install openjdk-8-jdk
else
apt-get -y install openjdk-11-jdk
fi
else
yum -y install java-11-openjdk-devel
fi
fi
if [ -e /usr/lib/jvm/java-11-openjdk ]; then
doNginxUnit_module java "11" "/usr/lib/jvm/java-11-openjdk"
elif [ -e /usr/lib/jvm/java-11-openjdk-amd64 ]; then
doNginxUnit_module java "11" "/usr/lib/jvm/java-11-openjdk-amd64"
fi
if [ -e /usr/lib/jvm/java-1.8.0-openjdk ]; then
doNginxUnit_module java "1.8" "/usr/lib/jvm/java-1.8.0-openjdk"
elif [ -e /usr/lib/jvm/java-1.8.0-openjdk-amd64 ]; then
doNginxUnit_module java "1.8" "/usr/lib/jvm/java-1.8.0-openjdk-amd64"
fi
if [ -e /usr/lib/jvm/java-1.7.0-openjdk-amd64 ]; then
doNginxUnit_module java "7" "/usr/lib/jvm/java-1.7.0-openjdk-amd64"
fi
fi
if [ ! -x /usr/bin/python3-config ] && [ ! -x /usr/local/bin/python3-config ]; then
if [ -e /etc/debian_version ]; then
apt-get -y install python3-dev
else
yum -y install python3-devel
fi
fi
if [ -x /usr/bin/python3-config ]; then
PYTHON_VERSION=`python3 --version | awk '{print $2}' | cut -d. -f1,2`
if [ -z "${PYTHON_VERSION}" ]; then
PYTHON_VERSION=3
fi
doNginxUnit_module python ${PYTHON_VERSION}
fi
if ! ls -ld /usr/include/ruby*/ 2>/dev/null || [ ! -d /usr/lib64/ruby ]; then
if [ -e /etc/debian_version ]; then
apt-get -y install ruby-dev ruby-rack
else
yum -y install ruby-devel rubygem-rack
fi
fi
if ls -ld /usr/include/ruby*/ 2>/dev/null || [ -d /usr/lib64/ruby ]; then
RUBY_VERSION=`ruby -v | awk '{print $2}' | cut -d. -f1,2`
if [ -z "${RUBY_VERSION}" ]; then
RUBY_VERSION=2
fi
doNginxUnit_module ruby ${RUBY_VERSION}
fi
if [ ! -x /usr/bin/npm ] && [ ! -x /usr/local/bin/npm ]; then
curl -sL https://deb.nodesource.com/setup_lts.x | bash -
if [ -e /etc/debian_version ]; then
apt-get install -y nodejs
else
yum install -y nodejs
fi
fi
#If npm is detected - install unit module
if [ -x /usr/bin/npm ] || [ -x /usr/local/bin/npm ]; then
if [ ! -x /usr/bin/node-gyp ] && [ ! -x /usr/local/bin/node-gyp ]; then
npm install -g node-gyp
fi
doNginxUnit_module nodejs
fi
if [ -d /usr/local/lib/node_modules ] && [ ! -d /usr/lib/node_modules ]; then
ln -s /usr/local/lib/node_modules /usr/lib/node_modules 2>/dev/null
fi
echo "Nginx Unit language modules have been installed."
fi
}
doNginxUnit() {
if [ "${UNIT_OPT}" != "yes" ]; then
do_exit 1 "You cannot install Nginx Unit, because you do not have it set in options.conf file."
fi
getFile unit/unit-${UNIT_VER}.tar.gz unit unit-${UNIT_VER}.tar.gz
getFile patches/unit_cgroup.patch unit_cgroup.patch patches/unit_cgroup.patch hexan
#Add nginx_unit user/group if it doesn't exist after installation
addUserGroup nginx_unit nginx_unit
addToAccess nginx_unit
quitIfLocked doNginxUnit
cd ${CWD}
FILE=${CWD}/unit-${UNIT_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd unit-${UNIT_VER}
if [ -s src/nxt_process.c ]; then
echo "Patching unit for per-user process grouping"
if [ ! -s ../patches/unit_cgroup.patch ]; then
echo "${boldon}ERROR downloading patches/unit_cgroup.patch${boldoff}"
else
patch -p0 < ../patches/unit_cgroup.patch
fi
fi
#configure
echo "Configuring unit-${UNIT_VER}"
${CWD}/${UNIT_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure Nginx. Check the ${UNIT_CONFIGURE} file\n"
do_exit 1
fi
echo "Done Configuration."
while echo "Trying to make Nginx Unit..."; do
C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Installing Nginx Unit..."
make install
make libunit-install
cd ${CWD}
#fresh install, add to System Backup
if [ ! -s ${SYSTEMDDIR}/unit.service ]; then
add_to_system_backup dirs /var/lib/unit
fi
echo "Enabling Nginx Unit in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/unit.service ]; then
cp -f ${CB_CUST_SYSTEMD}/unit.service ${SYSTEMDDIR}/unit.service
else
cp -f ${CB_SYSTEMD}/unit.service ${SYSTEMDDIR}/unit.service
fi
chmod 644 ${SYSTEMDDIR}/unit.service
systemctl daemon-reload
systemctl enable unit.service
if [ ! -e /etc/logrotate.d/unit ]; then
safeDownloadWithMove "/etc/logrotate.d/unit" "${WEBPATH}/unit.logrotate"
fi
if [ ! -d /var/log/unit ]; then
mkdir -p /var/log/unit
fi
chmod 700 /var/log/unit
chown root:${ROOT_GRP} /var/log/unit
if [ ! -d /usr/lib/unit/modules ]; then
mkdir -p /usr/lib/unit/modules
fi
set_service unit ON
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "Restarting Nginx Unit."
control_service unit stop >/dev/null 2>&1
removeLockfile
doNginxUnit_modules
control_service unit start
writeLog "Nginx Unit ${UNIT_VER} installed"
}
####################################################
doUpdateScript() {
cd ${CWD}
cp -f options.conf ..
cd ..
#safeDownloadWithMove "${CWD}/../${NAME}.tar.gz" "${WEBPATH}/${CUSTOMBUILD_OPT}/${NAME}.tar.gz"
# Hexan
if [ ! -s "${CWD}/../${NAME}.tar.gz" ]; then
echo "${boldon}Fileserver might be down, using the backup file server..${boldoff}"
# safeDownloadWithMove "${CWD}/${NAME}.tar.gz" ${WEBPATH_BACKUP}/${CUSTOMBUILD_OPT}/${NAME}.tar.gz
# Hexan
fi
if [ -s "${CWD}/../${NAME}.tar.gz" ]; then
echo "Extracting ${NAME}.tar.gz..."
#tar xzf "${CWD}/../${NAME}.tar.gz" --no-same-owner
#if [ $? -ne 0 ]; then
# echo "Unable to extract ${NAME}.tar.gz."
#fi
# Hexan
mv -f options.conf ${WORKDIR}
cd ${CWD}
downloadVersionsTxt
chmod 700 build
else
echo "Unable to extract ${NAME}.tar.gz."
fi
}
####################################################
doUpdate() {
doUpdateScript
cd ${CWD}
./build update_data
if [ "${CRON_OPT}" = "yes" ]; then
./build cron
fi
}
####################################################
doPhpConf() {
# if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
# return
# fi
if [ "${HAVE_FPM_CGI}" = "yes" ]; then
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
set_service php-fpm${php_shortrelease} OFF
done
else
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
set_service php-fpm${php_shortrelease} delete
done
fi
fpmChecks
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
doApacheHostConf
if [ -e ${WORKDIR}/custom/ap2/conf/extra/httpd-php-handlers.conf ]; then
cp -f ${WORKDIR}/custom/ap2/conf/extra/httpd-php-handlers.conf ${PHP_HANDLERS_HTTPD}
else
# Writing data to httpd-php-handlers.conf
echo -n "" > ${PHP_HANDLERS_HTTPD}
echo '<FilesMatch "\.(inc|php[0-9]*|phtml|phps)$">' >> ${PHP_HANDLERS_HTTPD}
if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then
echo "AddHandler application/x-httpd-php .inc .php .php5 .php${PHP1_SHORTRELEASE} .phtml" >> ${PHP_HANDLERS_HTTPD}
echo "AddHandler application/x-httpd-php-source .phps" >> ${PHP_HANDLERS_HTTPD}
fi
if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then
echo "AddHandler application/x-httpd-lsphp .inc .php .php5 .php${PHP1_SHORTRELEASE} .phtml" >> ${PHP_HANDLERS_HTTPD}
fi
if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then
echo "AddHandler application/x-httpd-php-source .phps" >> ${PHP_HANDLERS_HTTPD}
fi
echo '</FilesMatch>' >> ${PHP_HANDLERS_HTTPD}
echo "AddType text/html .php" >> ${PHP_HANDLERS_HTTPD}
fi
fi
if [ "${HAVE_FCGID}" = "yes" ]; then
if [ "${PHP1_MODE_OPT}" = "fastcgi" ]; then
doSetupFcgidSh ${PHP1_SHORTRELEASE}
fi
if [ "${PHP2_MODE_OPT}" = "fastcgi" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
doSetupFcgidSh ${PHP2_SHORTRELEASE}
fi
if [ "${PHP3_MODE_OPT}" = "fastcgi" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
doSetupFcgidSh ${PHP3_SHORTRELEASE}
fi
if [ "${PHP4_MODE_OPT}" = "fastcgi" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
doSetupFcgidSh ${PHP4_SHORTRELEASE}
fi
fi
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
eval `echo "HAVE_FPM${php_shortrelease}=no"`
done
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
systemctl restart php-fpm${PHP1_SHORTRELEASE}.service
systemctl enable php-fpm${PHP1_SHORTRELEASE}.service
set_service php-fpm${PHP1_SHORTRELEASE} ON
eval `echo "HAVE_FPM${PHP1_SHORTRELEASE}=yes"`
fi
if [ "${PHP2_MODE_OPT}" = "php-fpm" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
systemctl restart php-fpm${PHP2_SHORTRELEASE}.service
systemctl enable php-fpm${PHP2_SHORTRELEASE}.service
set_service php-fpm${PHP2_SHORTRELEASE} ON
eval `echo "HAVE_FPM${PHP2_SHORTRELEASE}=yes"`
fi
if [ "${PHP3_MODE_OPT}" = "php-fpm" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
systemctl restart php-fpm${PHP3_SHORTRELEASE}.service
systemctl enable php-fpm${PHP3_SHORTRELEASE}.service
set_service php-fpm${PHP3_SHORTRELEASE} ON
eval `echo "HAVE_FPM${PHP3_SHORTRELEASE}=yes"`
fi
if [ "${PHP4_MODE_OPT}" = "php-fpm" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
systemctl restart php-fpm${PHP4_SHORTRELEASE}.service
systemctl enable php-fpm${PHP4_SHORTRELEASE}.service
set_service php-fpm${PHP4_SHORTRELEASE} ON
eval `echo "HAVE_FPM${PHP4_SHORTRELEASE}=yes"`
fi
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
EVAL_FPM_VAR=HAVE_FPM${php_shortrelease}
HAVE_SHORTRELEASE="$(eval_var ${EVAL_FPM_VAR})"
if [ "${HAVE_SHORTRELEASE}" = "no" ]; then
systemctl stop php-fpm${php_shortrelease}.service 2> /dev/null
systemctl disable php-fpm${php_shortrelease}.service 2> /dev/null
if [ -e ${SYSTEMDDIR}/php-fpm${php_shortrelease}.service ]; then
rm -f ${SYSTEMDDIR}/php-fpm${php_shortrelease}.service
fi
systemctl daemon-reload
set_service php-fpm${php_shortrelease} delete
fi
done
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${HAVE_SUPHP_CGI}" = "yes" ]; then
# Writing data to suphp.conf
echo -n "" > ${SUPHP_CONF_FILE}
echo "[global]" >> ${SUPHP_CONF_FILE}
echo ";Path to logfile" >> ${SUPHP_CONF_FILE}
echo "logfile=/var/log/suphp.log" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo ";Loglevel" >> ${SUPHP_CONF_FILE}
echo "loglevel=warn" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo ";User Apache is running as" >> ${SUPHP_CONF_FILE}
echo "webserver_user=apache" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo ";Path all scripts have to be in" >> ${SUPHP_CONF_FILE}
echo "docroot=/" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo "; Security options" >> ${SUPHP_CONF_FILE}
echo "allow_file_group_writeable=false" >> ${SUPHP_CONF_FILE}
echo "allow_file_others_writeable=false" >> ${SUPHP_CONF_FILE}
echo "allow_directory_group_writeable=false" >> ${SUPHP_CONF_FILE}
echo "allow_directory_others_writeable=false" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo ";Check wheter script is within DOCUMENT_ROOT" >> ${SUPHP_CONF_FILE}
echo "check_vhost_docroot=false" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo ";Send minor error messages to browser" >> ${SUPHP_CONF_FILE}
echo "errors_to_browser=true" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo ";PATH environment variable" >> ${SUPHP_CONF_FILE}
echo "env_path=\"/bin:/usr/bin\"" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo ";Umask to set, specify in octal notation" >> ${SUPHP_CONF_FILE}
echo "umask=0022" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo ";Minimum UID" >> ${SUPHP_CONF_FILE}
echo "min_uid=100" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo ";Minimum GID" >> ${SUPHP_CONF_FILE}
echo "min_gid=100" >> ${SUPHP_CONF_FILE}
echo "" >> ${SUPHP_CONF_FILE}
echo "[handlers]" >> ${SUPHP_CONF_FILE}
echo ";Handler for php-scripts" >> ${SUPHP_CONF_FILE}
if [ "${PHP1_MODE_OPT}" = "suphp" ]; then
echo "x-httpd-php${PHP1_SHORTRELEASE}=\"php:/usr/local/php${PHP1_SHORTRELEASE}/bin/php-cgi${PHP1_SHORTRELEASE}\"" >> ${SUPHP_CONF_FILE}
fi
if [ "${PHP2_MODE_OPT}" = "suphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
echo "x-httpd-php${PHP2_SHORTRELEASE}=\"php:/usr/local/php${PHP2_SHORTRELEASE}/bin/php-cgi${PHP2_SHORTRELEASE}\"" >> ${SUPHP_CONF_FILE}
fi
if [ "${PHP3_MODE_OPT}" = "suphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
echo "x-httpd-php${PHP3_SHORTRELEASE}=\"php:/usr/local/php${PHP3_SHORTRELEASE}/bin/php-cgi${PHP3_SHORTRELEASE}\"" >> ${SUPHP_CONF_FILE}
fi
if [ "${PHP4_MODE_OPT}" = "suphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
echo "x-httpd-php${PHP4_SHORTRELEASE}=\"php:/usr/local/php${PHP4_SHORTRELEASE}/bin/php-cgi${PHP4_SHORTRELEASE}\"" >> ${SUPHP_CONF_FILE}
fi
echo "" >> ${SUPHP_CONF_FILE}
echo ";Handler for CGI-scripts" >> ${SUPHP_CONF_FILE}
echo "x-suphp-cgi=\"execute:!self\"" >> ${SUPHP_CONF_FILE}
# Writing data to /etc/httpd/conf/extra/httpd-suphp.conf
echo "Writing data to ${SUPHP_HTTPD}"
echo -n "" > ${SUPHP_HTTPD}
echo "<IfModule mod_suphp.c>" >> ${SUPHP_HTTPD}
echo '<FilesMatch "\.(inc|php[0-9]*|phtml|phps)$">' >> ${SUPHP_HTTPD}
if [ "${PHP1_MODE_OPT}" = "suphp" ]; then
echo "AddHandler x-httpd-php${PHP1_SHORTRELEASE} .inc .php .php3 .php4 .php5 .php${PHP1_SHORTRELEASE} .phtml" >> ${SUPHP_HTTPD}
fi
echo '</FilesMatch>' >> ${SUPHP_HTTPD}
echo "<Location />" >> ${SUPHP_HTTPD}
echo "suPHP_Engine on" >> ${SUPHP_HTTPD}
if [ -d /usr/local/php${PHP1_SHORTRELEASE}/lib ] && [ "${PHP1_MODE_OPT}" = "suphp" ]; then
echo "suPHP_ConfigPath /usr/local/php${PHP1_SHORTRELEASE}/lib/" >> ${SUPHP_HTTPD}
elif [ -d /usr/local/php${PHP2_SHORTRELEASE}/lib ] && [ "${PHP2_MODE_OPT}" = "suphp" ]; then
echo "suPHP_ConfigPath /usr/local/php${PHP2_SHORTRELEASE}/lib/" >> ${SUPHP_HTTPD}
elif [ -d /usr/local/php${PHP3_SHORTRELEASE}/lib ] && [ "${PHP3_MODE_OPT}" = "suphp" ]; then
echo "suPHP_ConfigPath /usr/local/php${PHP3_SHORTRELEASE}/lib/" >> ${SUPHP_HTTPD}
elif [ -d /usr/local/php${PHP4_SHORTRELEASE}/lib ] && [ "${PHP4_MODE_OPT}" = "suphp" ]; then
echo "suPHP_ConfigPath /usr/local/php${PHP4_SHORTRELEASE}/lib/" >> ${SUPHP_HTTPD}
fi
if [ "${PHP1_MODE_OPT}" = "suphp" ]; then
echo "suPHP_AddHandler x-httpd-php${PHP1_SHORTRELEASE}" >> ${SUPHP_HTTPD}
fi
if [ "${PHP2_MODE_OPT}" = "suphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
echo "suPHP_AddHandler x-httpd-php${PHP2_SHORTRELEASE}" >> ${SUPHP_HTTPD}
fi
if [ "${PHP3_MODE_OPT}" = "suphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
echo "suPHP_AddHandler x-httpd-php${PHP3_SHORTRELEASE}" >> ${SUPHP_HTTPD}
fi
if [ "${PHP4_MODE_OPT}" = "suphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
echo "suPHP_AddHandler x-httpd-php${PHP4_SHORTRELEASE}" >> ${SUPHP_HTTPD}
fi
echo "</Location>" >> ${SUPHP_HTTPD}
echo "</IfModule>" >> ${SUPHP_HTTPD}
echo "Done."
elif [ -e ${SUPHP_HTTPD} ]; then
echo -n "" > ${SUPHP_HTTPD}
fi
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
OPENLITESPEED_EXTPROCESSORS=${LSWS_HOME}/conf/httpd-extprocessors.conf
echo -n '' > ${OPENLITESPEED_EXTPROCESSORS}
if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then
perl -p -e "s#\|PHP_SHORTRELEASE\|#${PHP1_SHORTRELEASE}#g" ${WORKDIR}/${OPENLITESPEED_WEBAPPS_EXTPROCESSOR_TEMPLATE} >> ${OPENLITESPEED_EXTPROCESSORS}
echo '' >> ${OPENLITESPEED_EXTPROCESSORS}
perl -p -e "s#\|PHP_SHORTRELEASE\|#${PHP1_SHORTRELEASE}#g" ${WORKDIR}/${OPENLITESPEED_EXTPROCESSORS_TEMPLATE} >> ${OPENLITESPEED_EXTPROCESSORS}
echo '' >> ${OPENLITESPEED_EXTPROCESSORS}
#CloudLinux PHP selector support needs /usr/local/bin/lsphp as the path
perl -pi -e "s#/usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp#/usr/local/bin/lsphp#g" ${OPENLITESPEED_EXTPROCESSORS}
fi
if [ "${PHP2_MODE_OPT}" = "lsphp" ] && [ "${PHP2_RELEASE_OPT}" != "no" ]; then
perl -p -e "s#\|PHP_SHORTRELEASE\|#${PHP2_SHORTRELEASE}#g" ${WORKDIR}/${OPENLITESPEED_EXTPROCESSORS_TEMPLATE} >> ${OPENLITESPEED_EXTPROCESSORS}
echo '' >> ${OPENLITESPEED_EXTPROCESSORS}
fi
if [ "${PHP3_MODE_OPT}" = "lsphp" ] && [ "${PHP3_RELEASE_OPT}" != "no" ]; then
perl -p -e "s#\|PHP_SHORTRELEASE\|#${PHP3_SHORTRELEASE}#g" ${WORKDIR}/${OPENLITESPEED_EXTPROCESSORS_TEMPLATE} >> ${OPENLITESPEED_EXTPROCESSORS}
echo '' >> ${OPENLITESPEED_EXTPROCESSORS}
fi
if [ "${PHP4_MODE_OPT}" = "lsphp" ] && [ "${PHP4_RELEASE_OPT}" != "no" ]; then
perl -p -e "s#\|PHP_SHORTRELEASE\|#${PHP4_SHORTRELEASE}#g" ${WORKDIR}/${OPENLITESPEED_EXTPROCESSORS_TEMPLATE} >> ${OPENLITESPEED_EXTPROCESSORS}
echo '' >> ${OPENLITESPEED_EXTPROCESSORS}
fi
OPENLITESPEED_SCRIPTHANDLER=${LSWS_HOME}/conf/httpd-scripthandler.conf
echo 'scriptHandler{' > ${OPENLITESPEED_SCRIPTHANDLER}
echo "add lsapi:lsphp${PHP1_SHORTRELEASE} php" >> ${OPENLITESPEED_SCRIPTHANDLER}
echo 'add lsapi:lsphpwebapps lsphpwebapps' >> ${OPENLITESPEED_SCRIPTHANDLER}
echo '}' >> ${OPENLITESPEED_SCRIPTHANDLER}
fi
if [ "${SECURE_PHP_OPT}" = "yes" ]; then
secure_php
fi
}
####################################################
add_alias_redirect() {
AF=$1
A=$2
P=$3
HTTP=http://
if [ "${REDIRECT_HOST_HTTPS_OPT}" = "yes" ]; then
HTTP=https://
fi
HOST_ALIAS=no
if [ "${USE_HOSTNAME_FOR_ALIAS_OPT}" = "yes" ]; then
HOST_ALIAS=yes
fi
IS_WELL_KNOWN=no
if [ "${P}" = ".well-known/acme-challenge" ]; then
IS_WELL_KNOWN=yes
fi
if [ "${HOST_ALIAS}" = "yes" ] && [ "${IS_WELL_KNOWN}" = "no" ]; then
echo "RewriteCond %{HTTP_HOST} !^${REDIRECT_HOST_OPT}\$" >> ${AF}
echo "RewriteCond %{REQUEST_URI} ^/${A}/ [OR]" >> ${AF}
echo "RewriteCond %{REQUEST_URI} ^/${A}\$" >> ${AF}
echo "RewriteRule ^/${A}(.*) ${HTTP}${REDIRECT_HOST_OPT}/${P}\$1" >> ${AF}
echo "" >> ${AF}
fi
#For let's encrypt challenges
if [ "${IS_WELL_KNOWN}" = "yes" ]; then
LETSENCRYPT=`getDA_Opt letsencrypt 1`
if [ "${LETSENCRYPT}" = "1" ]; then
echo "Alias /${A} /var/www/html/${P}" >> ${AF}
fi
return;
fi
# "! -e /var/www/html/${A}" is used to add Alias'es for the RewriteRules that don't have /var/www/html/ALIAS
if [ "${HOST_ALIAS}" = "no" ] || [ ! -e /var/www/html/${A} ]; then
echo "Alias /${A} /var/www/html/${P}" >> ${AF}
fi
}
do_rewrite_httpd_alias() {
if [ -e ${WORKDIR}/custom/ap2/conf/extra/httpd-alias.conf ]; then
cp -pf ${WORKDIR}/custom/ap2/conf/extra/httpd-alias.conf /etc/httpd/conf/extra/httpd-alias.conf
else
HA=/etc/httpd/conf/extra/httpd-alias.conf
echo -n '' > ${HA}
if [ "${USE_HOSTNAME_FOR_ALIAS_OPT}" = "yes" ]; then
echo "RewriteEngine On" >> ${HA}
fi
#For let's encrypt challenges
LETSENCRYPT=`getDA_Opt letsencrypt 1`
if [ "${LETSENCRYPT}" = "1" ]; then
add_alias_redirect ${HA} .well-known/acme-challenge .well-known/acme-challenge
fi
add_alias_redirect ${HA} config redirect.php
if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then
add_alias_redirect ${HA} squirrelmail squirrelmail
fi
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
add_alias_redirect ${HA} roundcube roundcube
fi
WEBMAILLINK=`get_webmail_link`
if [ -e /var/www/html/${WEBMAILLINK} ]; then
add_alias_redirect ${HA} webmail ${WEBMAILLINK}
fi
if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
add_alias_redirect ${HA} phpMyAdmin phpMyAdmin
add_alias_redirect ${HA} phpmyadmin phpMyAdmin
add_alias_redirect ${HA} pma phpMyAdmin
fi
if [ -s "${WEBAPPS_LIST}" ]; then
#https://forum.directadmin.com/showthread.php?t=48203&p=247343#post247343
echo "Adding custom webapps from ${WEBAPPS_LIST}"
cat ${WEBAPPS_LIST} | while read l; do
app=`echo "$l" | cut -d= -f1`
app_path=`echo "$l" | cut -d= -f2`
if [ "${app}" = "" ] || [ "${app_path}" = "" ]; then
echo "${boldon}Check your ${WEBAPPS_LIST}. A name or path is blank.${boldoff}"
echo "name=$app"
echo "path=$app_path"
continue
fi
if [ ! -e /var/www/html/${app_path} ]; then
echo "${boldon}Cannot find path /var/www/html/${app_path} for alias ${app}${boldoff}"
continue
fi
add_alias_redirect ${HA} ${app} ${app_path}
echo "Added ${app} pointing to ${app_path}"
done
fi
fi
}
add_nginx_alias_redirect() {
#A fake P real
F=$1
A=$2
P=$3
#Locations with regex have higher priority for URL-rewrites/aliases
printf "\tlocation ~ ^/${A} {\n" >> ${F}
printf "\t\trewrite ^/* /${P} last;\n" >> ${F}
printf "\t}\n" >> ${F}
}
add_nginx_alias() {
F=$1
A=$2
#Locations with regex (~ ^/alias) have higher priority for URL-rewrites/aliases
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
printf "\tlocation ^~ /${A} {\n" >> ${F}
printf "\t\troot /var/www/html/;\n" >> ${F}
printf "\t\tindex index.php index.html index.htm;\n" >> ${F}
printf "\t\tlocation ~ ^/${A}/(.+\.php)\$ {\n" >> ${F}
printf "\t\t\tinclude /etc/nginx/webapps_settings.conf;\n" >> ${F}
printf "\t\t}\n" >> ${F}
#protect RoundCube folders
if [ "${A}" = "roundcube" ]; then
printf "\t\tlocation ~ /${A}/(bin|SQL|config|logs|temp)/ {\n" >> ${F}
printf "\t\t\tdeny all;\n" >> ${F}
printf "\t\t}\n" >> ${F}
elif [ "${A}" = "phpMyAdmin" ]; then
printf "\t\tlocation ~ /${A}/log/ {\n" >> ${F}
printf "\t\t\tdeny all;\n" >> ${F}
printf "\t\t}\n" >> ${F}
fi
printf "\t\tlocation ~* ^/${A}/(.*(\.htaccess|\.htpasswd|\.user\.ini|\.env|\.git))\$ {\n" >> ${F}
printf "\t\t\tdeny all;\n" >> ${F}
printf "\t\t}\n" >> ${F}
printf "\t\tlocation ~* ^/${A}/(.+\\.(jpg|jpeg|gif|css|png|js|ico|html|webp|xml|txt))\$ {\n" >> ${F}
printf "\t\t\troot /var/www/html/;\n" >> ${F}
printf "\t\t}\n" >> ${F}
printf "\t}\n" >> ${F}
elif [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
getWebserverPorts
printf "\tlocation ^~ /${A} {\n" >> ${F}
printf "\t\troot /var/www/html/;\n" >> ${F}
printf "\t\tindex index.php index.html index.htm;\n" >> ${F}
printf "\t\tlocation ~ ^/${A}/ {\n" >> ${F}
printf "\t\t\taccess_log off;\n" >> ${F}
printf "\t\tset \$my_server_addr \$server_addr;\n" >> ${F}
printf "\t\tif (\$server_addr ~ ^[0-9a-fA-F:]+$) { set \$my_server_addr [\$server_addr]; }\n" >> ${F}
printf "\t\t\tproxy_pass http://\$my_server_addr:${PORT_8080};\n" >> ${F}
printf "\t\t\tproxy_set_header X-Client-IP \$remote_addr;\n" >> ${F}
printf "\t\t\tproxy_set_header X-Accel-Internal /$A/nginx_static_files;\n" >> ${F}
printf "\t\t\tproxy_set_header Host\t \$host;\n" >> ${F}
printf "\t\t\tproxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;\n" >> ${F}
printf "\t\t\tproxy_hide_header Upgrade;\n" >> ${F}
printf "\t\t}\n" >> ${F}
printf "\t\tlocation ~ ^/${A}/nginx_static_files/ {\n" >> ${F}
printf "\t\t\taccess_log /var/log/nginx/access_log_proxy;\n" >> ${F}
printf "\t\t\talias /var/www/html/;\n" >> ${F}
printf "\t\t\tinternal;\n" >> ${F}
printf "\t\t}\n" >> ${F}
printf "\t}\n" >> ${F}
fi
}
do_rewrite_nginx_webapps() {
if [ -e ${WORKDIR}/custom/nginx/conf/webapps.conf ] && [ "${WEBSERVER_OPT}" = "nginx" ]; then
cp -pf ${WORKDIR}/custom/nginx/conf/webapps.conf /etc/nginx/webapps.conf
elif [ -e ${WORKDIR}/custom/nginx_reverse/conf/webapps.conf ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
cp -pf ${WORKDIR}/custom/nginx_reverse/conf/webapps.conf /etc/nginx/webapps.conf
else
NW=/etc/nginx/webapps.conf
: > ${NW}
#block .htaccess and .user.ini
printf '\tlocation ~ /(\\.htaccess|\\.htpasswd|\\.user\\.ini|\\.env|\\.git) {\n' >> ${NW}
printf '\t\tdeny all;\n' >> ${NW}
printf '\t}\n' >> ${NW}
#For let's encrypt challenges
LETSENCRYPT=`getDA_Opt letsencrypt 1`
if [ "${LETSENCRYPT}" = "1" ]; then
add_nginx_alias ${NW} .well-known/acme-challenge
fi
if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then
add_nginx_alias ${NW} squirrelmail
fi
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
add_nginx_alias ${NW} roundcube
fi
if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
add_nginx_alias ${NW} phpMyAdmin
add_nginx_alias_redirect ${NW} phpmyadmin phpMyAdmin
add_nginx_alias_redirect ${NW} pma phpMyAdmin
fi
WEBMAILLINK=`get_webmail_link`
if [ -e /var/www/html/${WEBMAILLINK} ]; then
if [ "${WEBMAILLINK}" = "webmail" ]; then
add_nginx_alias ${NW} webmail
else
add_nginx_alias_redirect ${NW} webmail ${WEBMAILLINK}
fi
fi
if [ "${HTTP_METHODS_OPT}" != "ALL" ]; then
NGINX_HTTP_METHODS="`echo ${HTTP_METHODS_OPT} | tr ':' '|'`"
printf "\tif (\$request_method !~ ^(${NGINX_HTTP_METHODS})\$ ) {\n" >> ${NW}
printf '\t\treturn 444;\n' >> ${NW}
printf '\t}\n' >> ${NW}
fi
fi
WAHC=webapps.hostname.conf
if [ -e ${WORKDIR}/custom/nginx/conf/${WAHC} ] && [ "${WEBSERVER_OPT}" = "nginx" ]; then
cp -pf ${WORKDIR}/custom/nginx/conf/${WAHC} /etc/nginx/${WAHC}
elif [ -e ${WORKDIR}/custom/nginx_reverse/conf/${WAHC} ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
cp -pf ${WORKDIR}/custom/nginx_reverse/conf/${WAHC} /etc/nginx/${WAHC}
else
#In nginx-vhosts.conf we don't need to have "real" alias specified, because they already exist when acessing http://IP or http://hostname
NW_HOSTNAME=/etc/nginx/${WAHC}
: > ${NW_HOSTNAME}
#block .htaccess and .user.ini
printf '\tlocation ~ /(\\.htaccess|\\.htpasswd|\\.user\\.ini|\\.env|\\.git) {\n' >> ${NW_HOSTNAME}
printf '\t\tdeny all;\n' >> ${NW_HOSTNAME}
printf '\t}\n' >> ${NW_HOSTNAME}
#protect other places
printf '\tlocation ~ /(roundcube|webmail)/(bin|SQL|config|logs|temp)/ {\n' >> ${NW_HOSTNAME}
printf '\t\tdeny all;\n' >> ${NW_HOSTNAME}
printf '\t}\n' >> ${NW_HOSTNAME}
printf '\tlocation ~ /phpMyAdmin/log/ {\n' >> ${NW_HOSTNAME}
printf '\t\tdeny all;\n' >> ${NW_HOSTNAME}
printf '\t}\n' >> ${NW_HOSTNAME}
if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
add_nginx_alias_redirect ${NW_HOSTNAME} phpmyadmin phpMyAdmin
add_nginx_alias_redirect ${NW_HOSTNAME} pma phpMyAdmin
fi
WEBMAILLINK=`get_webmail_link`
if [ ! -e /var/www/html/${WEBMAILLINK} ] && [ "${WEBMAILLINK}" != "webmail" ]; then
add_nginx_alias_redirect ${NW_HOSTNAME} webmail ${WEBMAILLINK}
fi
if [ -s "${WEBAPPS_LIST}" ]; then
#https://forum.directadmin.com/showthread.php?t=48203&p=247343#post247343
echo "Adding custom webapps from ${WEBAPPS_LIST}"
cat ${WEBAPPS_LIST} | while read l; do
app=`echo "$l" | cut -d= -f1`
app_path=`echo "$l" | cut -d= -f2`
if [ "${app}" = "" ] || [ "${app_path}" = "" ]; then
echo "${boldon}Check your ${WEBAPPS_LIST}. A name or path is blank.${boldoff}"
echo "name=$app"
echo "path=$app_path"
continue
fi
if [ ! -e /var/www/html/${app_path} ]; then
echo "${boldon}Cannot find path /var/www/html/${app_path} for alias ${app}${boldoff}"
continue
fi
if [ -e /var/www/html/${app} ] && [ "${app}" = "${app_path}" ]; then
add_nginx_alias ${NW} ${app}
else
add_nginx_alias_redirect ${NW} ${app} ${app_path}
fi
echo "Added ${app} pointing to ${app_path}"
done
fi
if [ "${HTTP_METHODS_OPT}" != "ALL" ]; then
NGINX_HTTP_METHODS="`echo ${HTTP_METHODS_OPT} | tr ':' '|'`"
printf "\tif (\$request_method !~ ^(${NGINX_HTTP_METHODS})\$ ) {\n" >> ${NW_HOSTNAME}
printf '\t\treturn 444;\n' >> ${NW_HOSTNAME}
printf '\t}\n' >> ${NW_HOSTNAME}
fi
fi
cp -pf /etc/nginx/webapps.conf /etc/nginx/webapps.ssl.conf
getWebserverPorts
perl -pi -e "s|:${PORT_8080}|:${PORT_8081}|" /etc/nginx/webapps.ssl.conf
perl -pi -e 's|http:|https:|' /etc/nginx/webapps.ssl.conf
if [ "${HAVE_FPM_CGI}" = "yes" ]; then
#update the webapps_settings.conf
#swap "fastcgi_pass unix:/usr/local/php54/sockets/webapps.sock;" if needed
#might be a better way to do this, other checks. Close enough for now.
PHP_REPLACE_STRING="`grep -m1 '^fastcgi_pass unix:/usr/local/php../sockets/webapps.sock;' /etc/nginx/webapps_settings.conf | cut -d/ -f4`"
if [ "${PHP_REPLACE_STRING}" = "" ]; then
PHP_REPLACE_STRING=php54
fi
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
perl -pi -e "s#${PHP_REPLACE_STRING}#php${PHP1_SHORTRELEASE}#" /etc/nginx/webapps_settings.conf
fi
fi
}
####################################################
create_httpd_nginx() {
CONF_FILE=${HTTPDCONF}/extra/httpd-nginx.conf
echo -n '' > ${CONF_FILE}
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ ! -e /usr/lib/apache/mod_aclr2.so ]; then
doModAclr2
elif [ -s ${STRINGS} ]; then
if ! ${STRINGS} /usr/lib/apache/mod_aclr2.so | grep -q -m1 'memmove'; then
doModAclr2
fi
fi
echo 'LoadModule aclr_module /usr/lib/apache/mod_aclr2.so' >> ${CONF_FILE}
echo 'AccelRedirectSet On' >> ${CONF_FILE}
echo 'AccelRedirectSize 1k' >> ${CONF_FILE}
echo 'RemoteIPHeader X-Client-IP' >> ${CONF_FILE}
echo 'RemoteIPInternalProxy 127.0.0.1' >> ${CONF_FILE}
if [ "${IPV6}" = "1" ]; then
echo 'RemoteIPInternalProxy ::1' >> ${CONF_FILE}
fi
echo 'RemoteIPInternalProxyList /usr/local/directadmin/data/admin/ip.list' >> ${CONF_FILE}
fi
}
ensure_dhparam() {
DHF=$1
MD5="6377960551b81b27240486a0e2680ef8"
if [ -s ${DHF} ]; then
FMD5=`$MD5SUM ${DHF} | cut -d\ -f1`
else
FMD5=""
fi
if [ "${MD5}" != "${FMD5}" ]; then
safeDownloadWithMove "${DHF}" "${WEBPATH}/dhe/ffdhe4096.pem"
fi
if [ ! -s ${DHF} ]; then
echo "Creating dhparam in ${DHF}"
/usr/bin/openssl dhparam -out ${DHF} 4096
fi
}
ensure_ecparam() {
ECF=$1
if [ ! -s ${ECF} ]; then
echo "Creating ecparam in ${ECF}";
openssl ecparam -out ${ECF} -name prime256v1 -genkey
fi
}
check_http2_prefork_message() {
initHTTP2var
if [ "${HTTP2}" = "1" ] && [ "${WEBSERVER_OPT}" = "apache" ]; then
echo "**************************************"
echo ""
echo "${boldon}Apache 2.4.27 and higher will not negotiate http2 with mpm_prefork. Please do not use mod_php${boldoff} or disable http2 in the directadmin.conf";
echo "https://www.apache.org/dist/httpd/CHANGES_2.4.27"
echo ""
echo "**************************************"
fi
}
set_apache_mpm() {
if ! grep -m1 -q '/usr/lib/apache/mod_mpm_' ${PHPMODULES}; then
#Use event MPM for php-fpm and prefork for mod_php
if [ "${APACHE_MPM_OPT}" = "auto" ]; then
if [ "${HAVE_CLI}" = "no" ]; then
set_LoadModule mpm_event_module mod_mpm_event.so
else
set_LoadModule mpm_prefork_module mod_mpm_prefork.so
check_http2_prefork_message
fi
elif [ "${APACHE_MPM_OPT}" = "event" ]; then
set_LoadModule mpm_event_module mod_mpm_event.so
elif [ "${APACHE_MPM_OPT}" = "worker" ]; then
set_LoadModule mpm_worker_module mod_mpm_worker.so
else
set_LoadModule mpm_prefork_module mod_mpm_prefork.so
check_http2_prefork_message
fi
else
if [ "${APACHE_MPM_OPT}" = "auto" ]; then
if [ "${HAVE_CLI}" = "no" ]; then
MPM_NAME=event
else
MPM_NAME=prefork
fi
else
MPM_NAME=${APACHE_MPM_OPT}
fi
if ! grep -m1 -q "mpm_${MPM_NAME}_module" ${PHPMODULES}; then
if grep -m1 -q 'LoadModule mpm_[a-z]*_module /usr/lib/apache/mod_mpm_[a-z]*.so' ${PHPMODULES}; then
perl -pi -e "s#LoadModule mpm_[a-z]*_module /usr/lib/apache/mod_mpm_[a-z]*.so#LoadModule mpm_${MPM_NAME}_module /usr/lib/apache/mod_mpm_${MPM_NAME}.so#" ${PHPMODULES}
fi
fi
fi
}
initHTTP2var() {
HTTP2=`getDA_Opt http2 1`
}
set_http2() {
initHTTP2var
HTTP2_DACONF=1
if [ -s ${DACONF_FILE} ]; then
if grep -q -m1 'http2=0' ${DACONF_FILE}; then
HTTP2_DACONF=0
fi
fi
if [ ${HTTP2_DACONF} -ne 0 ] && [ -s ${DACONF_FILE} ]; then
if ! grep -q -m1 'http2=1' ${DACONF_FILE}; then
echo "Enabling http2 in directadmin.conf."
setVal http2 1 ${DACONF_TEMPLATE_FILE}
setVal http2 1 ${DACONF_FILE}
doRestartDA
HTTP2=1
fi
else
HTTP2=1
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${APACHE_VER_OPT}" = "2.4" ] && [ "${HTTP2}" = "1" ] && [ "${APACHE_MPM_OPT}" != "prefork" ] && [ "${PHP1_MODE_OPT}" != "mod_php" ] && [ -d /etc/httpd/conf/extra ]; then
if ! grep -m1 -q 'ProtocolsHonorOrder' ${PHPMODULES}; then
echo 'ProtocolsHonorOrder On' >> ${PHPMODULES}
echo 'Protocols h2 h2c http/1.1' >> ${PHPMODULES}
fi
fi
fi
}
rewrite_phpmodules() {
echo -n "" > ${PHPMODULES}
if [ "${HAVE_SUPHP_CGI}" = "yes" ]; then
set_LoadModule suphp_module mod_suphp.so
fi
set_http2
if [ "${MOD_RUID2_OPT}" = "yes" ]; then
set_LoadModule ruid2_module mod_ruid2.so
if ! grep -m1 -q '^Mutex ' ${PHPMODULES}; then
echo "Mutex posixsem" >> ${PHPMODULES}
fi
fi
if [ "${MOD_RUID2_OPT}" = "no" ] && [ "${PHP1_MODE_OPT}" = "lsphp" ]; then
if ! grep -m1 -q '^Mutex ' ${PHPMODULES}; then
echo "Mutex posixsem" >> ${PHPMODULES}
fi
fi
if [ "${MODSECURITY_OPT}" = "yes" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then
if grep -m1 -q "^LoadModule security2_module" /etc/httpd/conf/httpd.conf; then
perl -pi -e 's|^LoadModule security2_module|#LoadModule security2_module|' /etc/httpd/conf/httpd.conf
fi
echo "Include /etc/httpd/conf/extra/httpd-modsecurity.conf" >> ${PHPMODULES}
cp -pf ${MODSECURITY_APACHE_INCLUDE} /etc/httpd/conf/extra/httpd-modsecurity.conf
if [ -e /usr/lib/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then
perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
elif [ -e /usr/lib64/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then
perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib64/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
elif [ -e /usr/lib/x86_64-linux-gnu/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then
perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib/x86_64-linux-gnu/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
elif [ -e /usr/lib/aarch64-linux-gnu/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then
perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib/aarch64-linux-gnu/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
perl -pi -e 's|^Load|#Load|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
fi
doModSecurityRules norestart
elif [ -s /etc/httpd/conf/extra/httpd-modsecurity.conf ]; then
if grep -m1 -q '^LoadModule security2_module' /etc/httpd/conf/extra/httpd-modsecurity.conf; then
perl -pi -e 's|^Load|#Load|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
fi
fi
elif [ -s /etc/httpd/conf/extra/httpd-modsecurity.conf ]; then
if grep -m1 -q '^LoadModule security2_module' /etc/httpd/conf/extra/httpd-modsecurity.conf; then
perl -pi -e 's|^Load|#Load|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
fi
fi
if [ "${HTSCANNER_OPT}" = "yes" ]; then
if [ "${HAVE_FCGID}" = "yes" ] || [ "${HAVE_FPM_CGI}" = "yes" ] || [ "${HAVE_SUPHP_CGI}" = "yes" ]; then
set_LoadModule htscanner_module mod_htscanner2.so
fi
fi
set_apache_mpm
perl -pi -e 's/^LoadModule php4/\#LoadModule php4/' /etc/httpd/conf/httpd.conf
perl -pi -e 's/^LoadModule php5/\#LoadModule php5/' /etc/httpd/conf/httpd.conf
perl -pi -e 's/^LoadModule php7/\#LoadModule php7/' /etc/httpd/conf/httpd.conf
perl -pi -e 's/^LoadModule php8/\#LoadModule php8/' /etc/httpd/conf/httpd.conf
# Add correct php module to httpd-phpmodules.conf
if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then
if echo "${PHP1_RELEASE_OPT}" | grep -m1 -q '^5'; then
set_LoadModule php5_module libphp5.so
elif echo "${PHP1_RELEASE_OPT}" | grep -m1 -q '^7'; then
set_LoadModule php7_module libphp7.so
else
set_LoadModule php8_module libphp8.so
fi
fi
if [ "${HAVE_FCGID}" = "yes" ]; then
if ! grep -m1 -c 'fcgid_module' ${PHPMODULES}; then
set_LoadModule fcgid_module mod_fcgid.so
fi
if ! grep -m1 -c 'httpd-fcgid.conf' ${PHPMODULES}; then
echo "Include /etc/httpd/conf/extra/httpd-fcgid.conf" >> ${PHPMODULES}
fi
fi
set_http2
}
doImportCipherSuites() {
SSL_CONFIGURATION_OPT_UP="`echo ${SSL_CONFIGURATION_OPT} | tr '[a-z]' '[A-Z]'`"
#older boxes might not support intermediate or modern. Rewriting with either may kill those services.
#must have OpenSSL 1.0.1 or higher for intermedaite+
if [ "${SSL_CONFIGURATION_OPT_UP}" = "INTERMEDIATE" ] || [ "${SSL_CONFIGURATION_OPT_UP}" = "MODERN" ]; then
OV=`openssl_version`
if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.0.1 'doImportCipherSuites check for openssl 1.0.1 ver check'`" -lt 0 ]; then
echo "${boldon}*** ssl_configuration=${SSL_CONFIGURATION_OPT_UP} will try to use TLSv1.2, which your OpenSSL version ${OV} does not support.${boldoff}"
echo "${boldon}Dropping this write down to ssl_configuration=old. You may want to make this permanent: './build set ssl_configuration old' or update your OS${boldoff}"
SSL_CONFIGURATION_OPT_UP=OLD
fi
fi
#MODERN is not there, as it's the default (empty) in service configuration
INTERMEDIATE_CIPHERSUITE="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256"
OLD_CIPHERSUITE="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA"
}
doSslConfigurationWebserver() {
doImportCipherSuites
#Do cleanup of old files in configure/ap2/conf/extra/ direcotry
if [ -e configure/ap2/conf/extra/httpd-ssl-protocol.old.conf ]; then
rm -f configure/ap2/conf/extra/httpd-ssl-protocol.old.conf
fi
if [ -e configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf ]; then
rm -f configure/ap2/conf/extra/httpd-ssl-protocol.intermediate.conf
fi
if [ -e configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf ]; then
rm -f configure/ap2/conf/extra/httpd-ssl-protocol.modern.conf
fi
MODERN_APACHE_SSL_PROTOCOLS="SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2"
MODERN_APACHE_SSL_CIPHERSUITE=""
MODERN_NGINX_SSL_PROTOCOLS="ssl_protocols TLSv1.3;"
MODERN_NGINX_SSL_CIPHERSUITE="ssl_ciphers DEFAULT;"
MODERN_OLS_SSL_PROTOCOLS="sslProtocol 16"
MODERN_OLS_SSL_CIPHERSUITE=""
INTERMEDIATE_APACHE_SSL_PROTOCOLS="SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1"
INTERMEDIATE_APACHE_SSL_CIPHERSUITE="SSLCipherSuite ${INTERMEDIATE_CIPHERSUITE}"
INTERMEDIATE_NGINX_SSL_PROTOCOLS="ssl_protocols TLSv1.2 TLSv1.3;"
INTERMEDIATE_NGINX_SSL_CIPHERSUITE="ssl_ciphers ${INTERMEDIATE_CIPHERSUITE};"
INTERMEDIATE_OLS_SSL_PROTOCOLS="sslProtocol 24"
INTERMEDIATE_OLS_SSL_CIPHERSUITE="ciphers ${INTERMEDIATE_CIPHERSUITE}"
OLD_APACHE_SSL_PROTOCOLS="SSLProtocol all -SSLv3"
OLD_APACHE_SSL_CIPHERSUITE="SSLCipherSuite ${OLD_CIPHERSUITE}"
OLD_NGINX_SSL_PROTOCOLS="ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;"
OLD_NGINX_SSL_CIPHERSUITE="ssl_ciphers ${OLD_CIPHERSUITE};"
OLD_OLS_SSL_PROTOCOLS="sslProtocol 30"
OLD_OLS_SSL_CIPHERSUITE="ciphers ${OLD_CIPHERSUITE}"
APACHE_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_APACHE_SSL_PROTOCOLS)"
APACHE_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_APACHE_SSL_CIPHERSUITE)"
NGINX_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_NGINX_SSL_PROTOCOLS)"
NGINX_SSL_PROXY_PROTOCOLS="proxy_$(eval_var ${SSL_CONFIGURATION_OPT_UP}_NGINX_SSL_PROTOCOLS)"
NGINX_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_NGINX_SSL_CIPHERSUITE)"
NGINX_SSL_PROXY_CIPHERSUITE="proxy_$(eval_var ${SSL_CONFIGURATION_OPT_UP}_NGINX_SSL_CIPHERSUITE)"
OLS_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_OLS_SSL_PROTOCOLS)"
OLS_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_OLS_SSL_CIPHERSUITE)"
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ ! -e ${WORKDIR}/custom/ap2/conf/extra/httpd-ssl.conf ]; then
perl -pi -e "s|^SSLProtocol.*|${APACHE_SSL_PROTOCOLS}|g" /etc/httpd/conf/extra/httpd-ssl.conf
perl -pi -e "s|^SSLCipherSuite.*|${APACHE_SSL_CIPHERSUITE}|g" /etc/httpd/conf/extra/httpd-ssl.conf
if [ -s /etc/httpd/conf/ssl.crt/server.crt.combined ]; then
perl -pi -e 's|/etc/httpd/conf/ssl\.crt/server\.crt$|/etc/httpd/conf/ssl.crt/server.crt.combined|g' /etc/httpd/conf/extra/httpd-ssl.conf
perl -pi -e 's|^SSLCACertificateFile|#SSLCACertificateFile|g' /etc/httpd/conf/extra/httpd-ssl.conf
perl -pi -e 's|/etc/httpd/conf/ssl\.crt/server\.crt$|/etc/httpd/conf/ssl.crt/server.crt.combined|g' /etc/httpd/conf/extra/httpd-vhosts.conf
perl -pi -e 's| SSLCACertificateFile| #SSLCACertificateFile|g' /etc/httpd/conf/extra/httpd-vhosts.conf
fi
if ! grep -m1 -q 'SSLOpenSSLConfCmd' /etc/httpd/conf/extra/httpd-ssl.conf; then
# Needs OpenSSL 1.0.2 or higher
OV=`openssl_version`
if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.0.2 'apache SSLOpenSSLConfCmd support for openssl 1.0.2 ver check'`" -ge 0 ]; then
echo 'SSLOpenSSLConfCmd DHParameters "/etc/httpd/conf/ssl.crt/dhparams.pem"' >> /etc/httpd/conf/extra/httpd-ssl.conf
fi
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ] && [ ! -e ${WORKDIR}/custom/nginx_reverse/conf/nginx-defaults.conf ]; then
perl -pi -e "s|^ssl_protocols.*|${NGINX_SSL_PROTOCOLS}|g" /etc/nginx/nginx-defaults.conf
perl -pi -e "s|^ssl_ciphers.*|${NGINX_SSL_CIPHERSUITE}|g" /etc/nginx/nginx-defaults.conf
perl -pi -e "s|^proxy_ssl_protocols.*|proxy_${NGINX_SSL_PROTOCOLS}|g" /etc/nginx/nginx-defaults.conf
perl -pi -e "s|^proxy_ssl_ciphers.*|proxy_${NGINX_SSL_CIPHERSUITE}|g" /etc/nginx/nginx-defaults.conf
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] && [ ! -e ${WORKDIR}/custom/nginx/conf/nginx-defaults.conf ]; then
perl -pi -e "s|^ssl_protocols.*|${NGINX_SSL_PROTOCOLS}|g" /etc/nginx/nginx-defaults.conf
perl -pi -e "s|^ssl_ciphers.*|${NGINX_SSL_CIPHERSUITE}|g" /etc/nginx/nginx-defaults.conf
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ] && [ ! -e ${WORKDIR}/openlitespeed/conf/httpd-vhosts.conf ]; then
perl -pi -e "s| sslProtocol.*| ${OLS_SSL_PROTOCOLS}|g" /usr/local/lsws/conf/httpd-vhosts.conf
perl -pi -e "s| ciphers.*| ${OLS_SSL_CIPHERSUITE}|g" /usr/local/lsws/conf/httpd-vhosts.conf
fi
}
doSslConfigurationFtp() {
doImportCipherSuites
MODERN_PROFTPD_SSL_PROTOCOLS="TLSProtocol ALL -TLSv1 -TLSv1.1 -TLSv1.2"
MODERN_PROFTPD_SSL_CIPHERSUITE=""
MODERN_PUREFTPD_SSL_CIPHERSUITE=""
INTERMEDIATE_PROFTPD_SSL_PROTOCOLS="TLSProtocol ALL -TLSv1 -TLSv1.1"
IMTERMEDIATE_PROFTPD_SSL_CIPHERSUITE="TLSCipherSuite ${INTERMEDIATE_CIPHERSUITE}"
INTERMEDIATE_PUREFTPD_SSL_CIPHERSUITE="TLSCipherSuite HIGH"
OLD_PROFTPD_SSL_PROTOCOLS="TLSProtocol ALL"
OLD_PROFTPD_SSL_CIPHERSUITE="TLSCipherSuite ${OLD_CIPHERSUITE}"
OLD_PUREFTPD_SSL_CIPHERSUITE="TLSCipherSuite HIGH:MEDIUM:+TLSv1"
PROFTPD_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_PROFTPD_SSL_PROTOCOLS)"
PROFTPD_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_PROFTPD_SSL_CIPHERSUITE)"
PUREFTPD_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_PUREFTPD_SSL_CIPHERSUITE)"
if [ "${FTPD_OPT}" = "proftpd" ] && [ ! -e ${WORKDIR}/custom/proftpd/conf/proftpd.conf ]; then
perl -pi -e "s|TLSCipherSuite .*|${PROFTPD_SSL_CIPHERSUITE}|g" /etc/proftpd.conf
perl -pi -e "s|TLSProtocol .*|${PROFTPD_SSL_PROTOCOLS}|g" /etc/proftpd.conf
if openssl x509 -in /etc/exim.cert -text -noout | grep -i 'Public Key Algorithm' | grep -q 'ecPub'; then
perl -pi -e 's|TLSRSACertificateFile|TLSECCertificateFile|g' /etc/proftpd.conf
perl -pi -e 's|TLSRSACertificateKeyFile|TLSECCertificateKeyFile|g' /etc/proftpd.conf
else
perl -pi -e 's|TLSECCertificateFile|TLSRSACertificateFile|g' /etc/proftpd.conf
perl -pi -e 's|TLSECCertificateKeyFile|TLSRSACertificateKeyFile|g' /etc/proftpd.conf
fi
elif [ "${FTPD_OPT}" = "pureftpd" ] && [ ! -e ${WORKDIR}/custom/pureftpd/pure-ftpd.conf ] && [ -s /etc/pure-ftpd.conf ]; then
perl -pi -e "s|^TLSCipherSuite.*|${PUREFTPD_SSL_CIPHERSUITE}|g" /etc/pure-ftpd.conf
fi
}
doSslConfigurationEmail() {
doImportCipherSuites
MODERN_DOVECOT_SSL_PROTOCOLS="ssl_min_protocol = TLSv1.3"
MODERN_DOVECOT_SSL_CIPHERSUITE=""
MODERN_EXIM_SSL_PROTOCOLS="openssl_options = +no_sslv2 +no_sslv3 +no_tlsv1 +no_tlsv1_1 +no_tlsv1_2 +cipher_server_preference"
MODERN_EXIM_SSL_CIPHERSUITE=""
INTERMEDIATE_DOVECOT_SSL_PROTOCOLS="ssl_min_protocol = TLSv1.2"
INTERMEDIATE_DOVECOT_SSL_CIPHERSUITE="ssl_cipher_list = ${INTERMEDIATE_CIPHERSUITE}"
INTERMEDIATE_EXIM_SSL_PROTOCOLS="openssl_options = +no_sslv2 +no_sslv3 +no_tlsv1 +no_tlsv1_1 +cipher_server_preference"
INTERMEDIATE_EXIM_SSL_CIPHERSUITE="tls_require_ciphers = ${INTERMEDIATE_CIPHERSUITE}"
OLD_DOVECOT_SSL_PROTOCOLS="ssl_min_protocol = TLSv1"
OLD_DOVECOT_SSL_CIPHERSUITE="ssl_cipher_list = ${OLD_CIPHERSUITE}"
OLD_EXIM_SSL_PROTOCOLS="openssl_options = +no_sslv2 +no_sslv3 +cipher_server_preference"
OLD_EXIM_SSL_CIPHERSUITE="tls_require_ciphers = ${OLD_CIPHERSUITE}"
DOVECOT_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_DOVECOT_SSL_PROTOCOLS)"
DOVECOT_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_DOVECOT_SSL_CIPHERSUITE)"
EXIM_SSL_PROTOCOLS="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_EXIM_SSL_PROTOCOLS)"
EXIM_SSL_CIPHERSUITE="$(eval_var ${SSL_CONFIGURATION_OPT_UP}_EXIM_SSL_CIPHERSUITE)"
if [ "${DOVECOT_OPT}" = "yes" ] && [ "${DOVECOT_CONF_OPT}" = "yes" ] && [ ! -e ${WORKDIR}/custom/dovecot/conf/ssl.conf ] && [ -s /etc/dovecot/conf/ssl.conf ]; then
perl -pi -e "s|^ssl_min_protocol.*|${DOVECOT_SSL_PROTOCOLS}|g" /etc/dovecot/conf/ssl.conf
perl -pi -e "s|^ssl_cipher_list.*|${DOVECOT_SSL_CIPHERSUITE}|g" /etc/dovecot/conf/ssl.conf
if [ "${SSL_CONFIGURATION_OPT}" = "old" ] && ! grep -m1 -q 'ssl_prefer_server_ciphers' /etc/dovecot/conf/ssl.conf; then
echo 'ssl_prefer_server_ciphers = yes' >> /etc/dovecot/conf/ssl.conf
fi
fi
if [ "${EXIM_OPT}" = "yes" ] && [ "${EXIMCONF_OPT}" = "yes" ] && [ -s /etc/exim.variables.conf.default ]; then
perl -pi -e "s|^openssl_options.*|${EXIM_SSL_PROTOCOLS}|g" /etc/exim.variables.conf.default
perl -pi -e "s|^tls_require_ciphers.*|${EXIM_SSL_CIPHERSUITE}|g" /etc/exim.variables.conf.default
fi
}
doRewriteCLPhpHandler() {
if [ -d /etc/container ] && [ "${CLOUDLINUX_OPT}" = "yes" ]; then
echo "Configuring /etc/container/php.handler..."
if [ "${PHP1_MODE_OPT}" = "lsphp" ]; then
mkdir -p /opt/alt/php.perdir/php${PHP1_SHORTRELEASE}/bin
ln -sf /usr/local/php${PHP1_SHORTRELEASE}/bin/lsphp /opt/alt/php.perdir/php${PHP1_SHORTRELEASE}/bin/lsphp
if grep -m1 -q "x-httpd-php${PHP1_SHORTRELEASE}" /etc/container/php.handler; then
sed -i "/x-httpd-php${PHP1_SHORTRELEASE}/d" /etc/container/php.handler
fi
echo "application/x-httpd-php${PHP1_SHORTRELEASE} /usr/local/bin/lsphp" >> /etc/container/php.handler
if grep -m1 -q "x-httpd-php " /etc/container/php.handler; then
sed -i "/x-httpd-php /d" /etc/container/php.handler
fi
echo "application/x-httpd-php /usr/local/bin/lsphp" >> /etc/container/php.handler
fi
if [ "${PHP2_MODE_OPT}" = "lsphp" ]; then
mkdir -p /opt/alt/php.perdir/php${PHP2_SHORTRELEASE}/bin
ln -sf /usr/local/php${PHP2_SHORTRELEASE}/bin/lsphp /opt/alt/php.perdir/php${PHP2_SHORTRELEASE}/bin/lsphp
if ! grep -m1 -q "^application/x-httpd-php${PHP2_SHORTRELEASE} " /etc/container/php.handler; then
echo "application/x-httpd-php${PHP2_SHORTRELEASE} /opt/alt/php.perdir/php${PHP2_SHORTRELEASE}/bin/lsphp" >> /etc/container/php.handler
elif grep -m1 -q "^application/x-httpd-php${PHP2_SHORTRELEASE} /usr/local/php${PHP2_SHORTRELEASE}/bin/lsphp" /etc/container/php.handler; then
perl -pi -e "s|^application/x-httpd-php${PHP2_SHORTRELEASE} /usr/local/php${PHP2_SHORTRELEASE}/bin/lsphp|application/x-httpd-php${PHP2_SHORTRELEASE} /usr/local/php${PHP2_SHORTRELEASE}/bin/lsphp|g" /etc/container/php.handler
fi
fi
if [ "${PHP3_MODE_OPT}" = "lsphp" ]; then
mkdir -p /opt/alt/php.perdir/php${PHP3_SHORTRELEASE}/bin
ln -sf /usr/local/php${PHP3_SHORTRELEASE}/bin/lsphp /opt/alt/php.perdir/php${PHP3_SHORTRELEASE}/bin/lsphp
if ! grep -m1 -q "^application/x-httpd-php${PHP3_SHORTRELEASE} " /etc/container/php.handler; then
echo "application/x-httpd-php${PHP3_SHORTRELEASE} /opt/alt/php.perdir/php${PHP3_SHORTRELEASE}/bin/lsphp" >> /etc/container/php.handler
elif grep -m1 -q "^application/x-httpd-php${PHP3_SHORTRELEASE} /usr/local/php${PHP3_SHORTRELEASE}/bin/lsphp" /etc/container/php.handler; then
perl -pi -e "s|^application/x-httpd-php${PHP3_SHORTRELEASE} /usr/local/php${PHP3_SHORTRELEASE}/bin/lsphp|application/x-httpd-php${PHP3_SHORTRELEASE} /usr/local/php${PHP3_SHORTRELEASE}/bin/lsphp|g" /etc/container/php.handler
fi
fi
if [ "${PHP4_MODE_OPT}" = "lsphp" ]; then
mkdir -p /opt/alt/php.perdir/php${PHP4_SHORTRELEASE}/bin
ln -sf /usr/local/php${PHP4_SHORTRELEASE}/bin/lsphp /opt/alt/php.perdir/php${PHP4_SHORTRELEASE}/bin/lsphp
if ! grep -m1 -q "^application/x-httpd-php${PHP4_SHORTRELEASE} " /etc/container/php.handler; then
echo "application/x-httpd-php${PHP4_SHORTRELEASE} /opt/alt/php.perdir/php${PHP4_SHORTRELEASE}/bin/lsphp" >> /etc/container/php.handler
elif grep -m1 -q "^application/x-httpd-php${PHP4_SHORTRELEASE} /usr/local/php${PHP4_SHORTRELEASE}/bin/lsphp" /etc/container/php.handler; then
perl -pi -e "s|^application/x-httpd-php${PHP4_SHORTRELEASE} /usr/local/php${PHP4_SHORTRELEASE}/bin/lsphp|application/x-httpd-php${PHP4_SHORTRELEASE} /usr/local/php${PHP4_SHORTRELEASE}/bin/lsphp|g" /etc/container/php.handler
fi
fi
fi
}
doRewriteConfs() {
quitIfLocked doRewriteConfs
cd ${CWD}
if [ "${UNIT_OPT}" = "yes" ] && [ -e /var/run/unit/control.sock ]; then
echo "action=rewrite&value=nginx_unit" >> ${TASK_QUEUE}
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ ! -e httpd-${APACHE2_VER}.tar.gz ]; then
getFile httpd-${APACHE2_VER}.tar.gz
fi
if [ ! -e httpd-${APACHE2_VER}.tar.gz ]; then
echo "File httpd-${APACHE2_VER}.tar.gz does not exist. Cannot rewrite configs"
else
tar xzf httpd-${APACHE2_VER}.tar.gz --no-same-owner
fi
if [ ! -d httpd-${APACHE2_VER} ]; then
echo "Directory httpd-${APACHE2_VER} does not exist. Cannot rewrite configs"
fi
#copy the new configs
cp -rf ${APCONFDIR} ${HTTPDDIR}
cp -f ${APCONFDIR}/httpd.conf ${HTTPD_CONF}
cp -f ${APCONFDIR}/extra/httpd-mpm.conf ${HTTPDCONF}/extra/httpd-mpm.conf
perl -pi -e 's/^DefaultType/#DefaultType/' ${HTTPD_CONF}
HDC=httpd-directories-old.conf
ln -sf $HDC ${HTTPDCONF}/extra/httpd-directories.conf
doApacheHostConf
doPasswdServerStatus
if [ "${APCUSTOMCONFDIR}" != "0" ]; then
cp -rf ${APCUSTOMCONFDIR} ${HTTPDDIR}
fi
chmod 710 ${HTTPDDIR}/conf
if [ "${HTTP_METHODS_OPT}" != "ALL" ]; then
APACHE_HTTP_METHODS="`echo ${HTTP_METHODS_OPT} | tr ':' ' '`"
else
APACHE_HTTP_METHODS="reset"
fi
perl -pi -e "s#\|HTTP_METHODS\|#${APACHE_HTTP_METHODS}#g" ${HTTPDCONF}/extra/httpd-directories-old.conf
perl -pi -e "s#\|HTTP_METHODS\|#${APACHE_HTTP_METHODS}#g" ${HTTPDCONF}/extra/httpd-directories-new.conf
#swap the |WEBAPPS_PHP_RELEASE| token.
if [ "${PHP1_MODE_OPT}" = "php-fpm" ] || [ "${PHP2_MODE_OPT}" = "php-fpm" ] || [ "${PHP3_MODE_OPT}" = "php-fpm" ] || [ "${PHP4_MODE_OPT}" = "php-fpm" ]; then
PHPV=""
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
PHPV=`perl -e "print ${PHP1_RELEASE_OPT} * 10"`
elif [ "${PHP2_RELEASE_OPT}" != "no" ]; then
PHPV=`perl -e "print ${PHP2_RELEASE_OPT} * 10"`
elif [ "${PHP3_RELEASE_OPT}" != "no" ]; then
PHPV=`perl -e "print ${PHP3_RELEASE_OPT} * 10"`
elif [ "${PHP4_RELEASE_OPT}" != "no" ]; then
PHPV=`perl -e "print ${PHP4_RELEASE_OPT} * 10"`
fi
if [ "${PHPV}" != "" ]; then
perl -pi -e "s/\|WEBAPPS_PHP_RELEASE\|/${PHPV}/" ${HTTPDCONF}/extra/${HDC}
fi
fi
ensure_server_ca
doRewriteCLPhpHandler
#ensure we have the correct apache_ver
setVal apache_ver 2.0 ${DACONF_TEMPLATE_FILE}
setVal apache_ver 2.0 ${DACONF_FILE}
do_rewrite_httpd_alias
#rewrite ips.conf
echo "action=rewrite&value=ips" >> ${TASK_QUEUE}
run_dataskq
#tokenize the IP and ports
tokenize_IP
tokenize_ports
doVhosts
if [ "${MODSECURITY_OPT}" = "yes" ]; then
echo -n '' > /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
echo '<IfModule mod_security3.c>' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
echo 'modsecurity on' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
echo 'modsecurity_rules_file /etc/nginx/nginx-modsecurity.conf' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
create_global_modsecurity_rules
echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
echo '</IfModule>' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
cp -pf ${MODSECURITY_APACHE_INCLUDE} /etc/httpd/conf/extra/httpd-modsecurity.conf
else
echo -n '' > /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
fi
if [ ! -d /etc/httpd/conf/ssl.key ] || [ ! -d /etc/httpd/conf/ssl.crt ]; then
cd ${WORKDIR}
mkdir -p /etc/httpd/conf/ssl.key
mkdir -p /etc/httpd/conf/ssl.crt
#install the cert/key
/usr/bin/openssl req -x509 -newkey rsa:2048 -keyout /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.crt/server.crt -days 9999 -nodes -config ./${APCERTCONF}
chmod 600 ${HTTPDCONF}/ssl.crt/server.crt
chmod 600 ${HTTPDCONF}/ssl.key/server.key
cd ${CWD}
fi
doApacheCheck
rm -rf ${CWD}/httpd-${APACHE2_VER}
cd ${CWD}
echo -n "" > ${HTTPDCONF}/extra/httpd-nginx.conf
rewrite_phpmodules
if [ "${HAVE_FCGID}" = "yes" ]; then
if [ ! -d /usr/local/safe-bin ]; then
mkdir -p /usr/local/safe-bin
chmod 511 /usr/local/safe-bin
chown apache:apache /usr/local/safe-bin
fi
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
EVAL_CHECK_VAR=HAVE_FCGID${php_shortrelease}
if [ "$(eval_var ${EVAL_CHECK_VAR})" = "yes" ]; then
doSetupFcgidSh ${php_shortrelease}
fi
done
fi
if [ "${NEWCONFIGS}" = "1" ]; then
perl -pi -e 's/^LoadModule mod_php/\#LoadModule mod_php/' /etc/httpd/conf/httpd.conf
perl -pi -e 's/^LoadModule php/\#LoadModule php/' /etc/httpd/conf/httpd.conf
perl -pi -e 's/^LoadModule suphp/\#LoadModule suphp/' /etc/httpd/conf/httpd.conf
fi
WEBMAILLINK=`get_webmail_link`
perl -pi -e "s#Alias /webmail \"/var/www/html/roundcube/\"#Alias /webmail \"/var/www/html/${WEBMAILLINK}/\"#" /etc/httpd/conf/extra/httpd-alias.conf
doPhpConf
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
doModLsapi 0
fi
# Disable UserDir access if userdir_access=no is set in the options.conf file
if [ "${USERDIR_ACCESS_OPT}" = "no" ]; then
perl -pi -e 's#UserDir public_html#UserDir disabled#' /etc/httpd/conf/extra/httpd-vhosts.conf
#~username is enabled by default for litespeed, so explicitly turn it off.
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
perl -pi -e 's#^\#Include conf/extra/httpd-userdir.conf#Include conf/extra/httpd-userdir.conf#' ${HTTPD_CONF}
fi
else
perl -pi -e 's#UserDir disabled#UserDir public_html#' /etc/httpd/conf/extra/httpd-vhosts.conf
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
perl -pi -e 's#^Include conf/extra/httpd-userdir.conf#\#Include conf/extra/httpd-userdir.conf#' ${HTTPD_CONF}
fi
fi
create_httpd_nginx
doModSecurityAdj
doSslConfigurationWebserver
#Rewriting httpd configuration
if [ "${WEBSERVER_OPT}" != "nginx_apache" ]; then
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
run_dataskq
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "Restarting apache."
control_service httpd restart
elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then
#Add CloudFlare to allow list
if grep -m1 -q '<allow>ALL</allow>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|<allow>ALL</allow>|<allow>ALL, 173.245.48.0/20T, 103.21.244.0/22T, 103.22.200.0/22T, 103.31.4.0/22T, 141.101.64.0/18T, 108.162.192.0/18T, 190.93.240.0/20T, 188.114.96.0/20T, 197.234.240.0/22T, 198.41.128.0/17T, 162.158.0.0/15T, 104.16.0.0/13T, 104.24.0.0/14T, 172.64.0.0/13T, 131.0.72.0/22T, 2400:cb00::/32T, 2606:4700::/32T, 2803:f800::/32T, 2405:b500::/32T, 2405:8100::/32T, 2a06:98c0::/29T, 2c0f:f248::/32T</allow>|g' /usr/local/lsws/conf/httpd_config.xml
fi
if ! grep -m1 -q '<useIpInProxyHeader>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|<showVersionNumber>0</showVersionNumber>|<showVersionNumber>0</showVersionNumber>\n <useIpInProxyHeader>2</useIpInProxyHeader>|g' /usr/local/lsws/conf/httpd_config.xml
fi
if ! grep -m1 -q '<cgroups>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|</CGIRLimit>| <cgroups>2</cgroups>\n </CGIRLimit>|g' /usr/local/lsws/conf/httpd_config.xml
fi
echo "Restarting litespeed."
control_service litespeed reload
#Reload detached lsphp processes
touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt
fi
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
#copy the new configs
cp -rf ${OPENLITESPEEDCONFDIR}/* ${LSWS_HOME}/conf
do_rewrite_openlitespeed_webapps
ensure_server_ca
#rewrite ips.conf
echo "action=rewrite&value=openlitespeed" >> ${TASK_QUEUE}
echo "action=rewrite&value=ips" >> ${TASK_QUEUE}
run_dataskq
doVhosts
if [ ! -e ${LSWS_HOME}/directadmin-ips.conf ]; then
touch ${LSWS_HOME}/directadmin-ips.conf
fi
if [ ! -e ${LSWS_HOME}/conf/httpd-includes.conf ]; then
touch ${LSWS_HOME}/conf/httpd-includes.conf
fi
if [ "${MODSECURITY_OPT}" = "yes" ]; then
echo -n '' > ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
echo 'module mod_security {' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
echo 'modsecurity on' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
echo 'modsecurity_rules_file /usr/local/lsws/conf/httpd-modsecurity.conf' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
create_global_modsecurity_rules
echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
echo '}' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
cp -pf ${MODSECURITY_OPENLITESPEED_INCLUDE} ${LSWS_HOME}/conf/httpd-modsecurity.conf
else
echo -n '' > ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
fi
if [ "${OPENLITESPEEDCUSTOMCONFDIR}" != "0" ]; then
cp -rf ${OPENLITESPEEDCUSTOMCONFDIR}/* ${LSWS_HOME}/conf
fi
tokenize_IP
tokenize_ports
doPhpConf
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${CAGEFS_OPT}" = "yes" ]; then
OLS_ENABLELVE=2
elif [ "${CLOUDLINUX_OPT}" = "yes" ]; then
OLS_ENABLELVE=1
else
OLS_ENABLELVE=0
fi
if ! grep -m1 -q "^enableLVE.*=${OLS_ENABLELVE}" ${LSWS_HOME}/conf/httpd-defaults.conf; then
perl -pi -e "s|^enableLVE.*|enableLVE ${OLS_ENABLELVE}|g" ${LSWS_HOME}/conf/httpd-defaults.conf
fi
doModSecurityAdj
doSslConfigurationWebserver
echo "Restarting openlitespeed."
control_service litespeed stop >/dev/null 2>&1
control_service litespeed start
#Reload detached lsphp processes
touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
#copy the new configs
cp -rf ${NGINXCONFDIR}/* ${NGINXCONF}
if [ ! -d ${NGINXCONF}/templates ]; then
mkdir -p ${NGINXCONF}/templates
fi
cp -rf ${NGINXTEMPLATESDIR}/* ${NGINXCONF}/templates
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
perl -pi -e "s|/usr/local/php${php_shortrelease}/sockets/webapps.sock|/usr/local/php${PHP1_SHORTRELEASE}/sockets/webapps.sock|" ${NGINXCONF}/nginx.conf
done
do_rewrite_nginx_webapps
ensure_server_ca
if [ "${MODSECURITY_OPT}" = "yes" ]; then
doModSecurityRules norestart
fi
#rewrite ips.conf
echo "action=rewrite&value=ips" >> ${TASK_QUEUE}
run_dataskq
doVhosts
if [ ! -e ${NGINXCONF}/directadmin-settings.conf ]; then
touch ${NGINXCONF}/directadmin-settings.conf
fi
if [ ! -e ${NGINXCONF}/directadmin-ips.conf ]; then
touch ${NGINXCONF}/directadmin-ips.conf
fi
if [ ! -e ${NGINXCONF}/nginx-includes.conf ]; then
touch ${NGINXCONF}/nginx-includes.conf
fi
if [ "${MODSECURITY_OPT}" = "yes" ]; then
echo -n '' > /etc/nginx/nginx-modsecurity-enable.conf
echo 'modsecurity on;' >> /etc/nginx/nginx-modsecurity-enable.conf
echo 'modsecurity_rules_file /etc/nginx/nginx-modsecurity.conf;' >> /etc/nginx/nginx-modsecurity-enable.conf
create_global_modsecurity_rules
echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules;' >> /etc/nginx/nginx-modsecurity-enable.conf
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
cp -pf ${MODSECURITY_NGINX_INCLUDE} /etc/nginx/nginx-modsecurity.conf
elif [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
cp -pf ${MODSECURITY_NGINX_REVERSE_INCLUDE} /etc/nginx/nginx-modsecurity.conf
fi
else
echo -n '' > ${NGINXCONF}/nginx-modsecurity-enable.conf
fi
doSslConfigurationWebserver
if [ "${NGINXCUSTOMCONFDIR}" != "0" ]; then
cp -rf ${NGINXCUSTOMCONFDIR}/* ${NGINXCONF}/
fi
if [ "${NGINXCUSTOMEMPLATESDIR}" != "0" ]; then
cp -rf ${NGINXCUSTOMEMPLATESDIR}/* ${NGINXCONF}/templates/
fi
chmod 710 ${NGINXCONF}
if [ "${IPV6}" = "0" ]; then
perl -pi -e 's| listen \[::1\]:| #listen \[::1\]:|' ${NGINXCONF}/nginx-vhosts.conf
perl -pi -e 's| listen \[::1\]:| #listen \[::1\]:|' ${NGINXCONF}/nginx.conf
else
perl -pi -e 's| #listen \[::1\]:| listen \[::1\]:|' ${NGINXCONF}/nginx-vhosts.conf
perl -pi -e 's| #listen \[::1\]:| listen \[::1\]:|' ${NGINXCONF}/nginx.conf
fi
tokenize_IP
tokenize_ports
# Disable UserDir access if userdir_access=no is set in the options.conf file
if [ "${USERDIR_ACCESS_OPT}" = "no" ]; then
perl -pi -e 's| include /etc/nginx/nginx-userdir.conf;| #include /etc/nginx/nginx-userdir.conf;|' /etc/nginx/nginx-vhosts.conf
else
perl -pi -e 's| #include /etc/nginx/nginx-userdir.conf;| include /etc/nginx/nginx-userdir.conf;|' /etc/nginx/nginx-vhosts.conf
fi
doPhpConf
doModSecurityAdj
echo "action=rewrite&value=nginx" >> ${TASK_QUEUE}
run_dataskq
echo "Restarting nginx."
control_service nginx stop >/dev/null 2>&1
control_service nginx start
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
setVal nginx 0 ${DACONF_TEMPLATE_FILE}
setVal nginx 0 ${DACONF_FILE}
setVal nginx_proxy 1 ${DACONF_TEMPLATE_FILE}
setVal nginx_proxy 1 ${DACONF_FILE}
fi
ensure_webapps_tmp
doRestartDA
removeLockfile
}
####################################################
dospamassassinCron() {
CRONFILE=/etc/cron.${SA_UPDATE_OPT}/sa-update
#remove bits which may exist.
rm -f /etc/cron.daily/sa-update
rm -f /etc/cron.weekly/sa-update
rm -f /etc/cron.monthly/sa-update
if [ "${SA_UPDATE_OPT}" != "no" ]; then
echo "Installing sa-update cronjob..."
getFile sa-update.sh sa-update-sh
if [ ! -d /etc/cron.${SA_UPDATE_OPT} ]; then
do_exit 1 "You cannot run cronjob, because you do not have /etc/cron.${SA_UPDATE_OPT} directory."
fi
mv -f sa-update.sh ${CRONFILE}
chmod 755 ${CRONFILE}
else
echo "${boldon}It's recommended to have sa_update set to daily in the options.conf file to get SpamAssassin rules updated every day.${boldoff}"
fi
}
####################################################
doCron() {
cd ${CWD}
CRONFILE=/etc/cron.${CRON_FREQUENCY_OPT}/custombuild
#remove bits which may exist.
rm -f /etc/cron.daily/custombuild
rm -f /etc/cron.weekly/custombuild
rm -f /etc/cron.monthly/custombuild
if [ "${CRON_OPT}" != "yes" ]; then
rm -f ${CRONFILE}
do_exit 1 "You cannot run cronjob, because you do not have it set in options.conf file."
fi
if [ ! -d /etc/cron.${CRON_FREQUENCY_OPT} ]; then
do_exit 1 "You cannot run cronjob, because you do not have /etc/cron.${CRON_FREQUENCY_OPT} directory."
fi
#ensure mail exists.
if [ "${NOTIFICATIONS_OPT}" = "yes" ]; then
if [ ! -x /bin/mail ] && [ ! -x /usr/bin/mail ] && [ ! -x /usr/local/bin/mail ]; then
echo "Did not find mail command, installing s-nail..."
doSnail
fi
fi
echo -n '' > ${CRONFILE}
echo '#!/bin/sh' >> ${CRONFILE}
echo 'if [ -d /usr/local/directadmin/custombuild/custom/hooks/cron_execute/pre ]; then' >> ${CRONFILE}
echo " find /usr/local/directadmin/custombuild/custom/hooks/cron_execute/pre -type f -name '*.sh' | while read line; do" >> ${CRONFILE}
echo ' . "$line"' >> ${CRONFILE}
echo ' done' >> ${CRONFILE}
echo ' HOOK_ERROR_CODE=$?' >> ${CRONFILE}
echo ' if [ ${HOOK_ERROR_CODE} -ne 0 ]; then' >> ${CRONFILE}
echo ' echo "Hook exited with error code: ${HOOK_ERROR_CODE}."' >> ${CRONFILE}
echo ' fi' >> ${CRONFILE}
echo 'fi' >> ${CRONFILE}
echo 'cd /usr/local/directadmin/custombuild' >> ${CRONFILE}
echo './build update >/dev/null 2>&1' >> ${CRONFILE}
if [ "${NOTIFICATIONS_OPT}" = "yes" ] || [ "${UPDATES_OPT}" = "yes" ] || [ "${WEBAPPS_UPDATES_OPT}" = "yes" ]; then
echo "AVAIL_UPDATES=\"\`./build versions_nobold | grep -c -e 'update is available.'\`\"" >> ${CRONFILE}
echo 'if [ "${AVAIL_UPDATES}" -gt 0 ]; then' >> ${CRONFILE}
if [ "${NOTIFICATIONS_OPT}" = "yes" ] && [ "${UPDATES_OPT}" = "no" ]; then
echo "./build versions_nobold | grep 'update is available.' | mail -s \"\${AVAIL_UPDATES} updates available for \`hostname\`\" ${EMAIL_OPT}" >> ${CRONFILE}
fi
if [ "${NOTIFICATIONS_OPT}" = "yes" ] && [ "${UPDATES_OPT}" = "yes" ]; then
echo "./build versions_nobold | grep 'update is available.' | mail -s \"\${AVAIL_UPDATES} updates running for \`hostname\`\" ${EMAIL_OPT}" >> ${CRONFILE}
fi
if [ "${UPDATES_OPT}" = "yes" ]; then
echo './build update_versions' >> ${CRONFILE}
fi
if [ "${UPDATES_OPT}" = "no" ] && [ "${WEBAPPS_UPDATES_OPT}" = "yes" ]; then
echo './build update_webapps' >> ${CRONFILE}
fi
echo 'fi' >> ${CRONFILE}
fi
echo 'if [ -d /usr/local/directadmin/custombuild/custom/hooks/cron_execute/post ]; then' >> ${CRONFILE}
echo " find /usr/local/directadmin/custombuild/custom/hooks/cron_execute/post -type f -name '*.sh' | while read line; do" >> ${CRONFILE}
echo ' . "$line"' >> ${CRONFILE}
echo ' done' >> ${CRONFILE}
echo ' HOOK_ERROR_CODE=$?' >> ${CRONFILE}
echo ' if [ ${HOOK_ERROR_CODE} -ne 0 ]; then' >> ${CRONFILE}
echo ' echo "Hook exited with error code: ${HOOK_ERROR_CODE}."' >> ${CRONFILE}
echo ' fi' >> ${CRONFILE}
echo 'fi' >> ${CRONFILE}
echo 'exit 0;' >> ${CRONFILE}
chmod 755 ${CRONFILE}
if [ "${NOTIFICATIONS_OPT}" = "yes" ]; then
echo "Cronjob is set for ${EMAIL_OPT}:"
fi
echo "Cronjob frequency: ${CRON_FREQUENCY_OPT}"
echo "Automatic notifications: ${NOTIFICATIONS_OPT}"
echo "Automatic updates: ${UPDATES_OPT}"
if [ "${SPAMD_OPT}" = "spamassassin" ]; then
dospamassassinCron
echo "Automatic SpamAssassin rule updates: ${SA_UPDATE_OPT}"
fi
}
####################################################
updateDovecot() {
cd ${CWD}
if [ "${DOVECOT_VER}" != "0" ]; then
getFile dovecot-${DOVECOT_VER}.tar.gz dovecot
fi
}
####################################################
doUpdateData() {
cd ${CWD}
getFile servers.txt servers
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
getFileCL cl-apache-patches.tar.gz cl-apache-patches
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
getFileCL mod_hostinglimits-${MOD_HOSTINGLIMITS_VER}.tar.gz mod_hostinglimits
getFileCL mod_proctitle-${MOD_PROCTITLE_VER}.tar.gz mod_proctitle
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
getFileCL mod_lsapi-${MOD_LSAPI_VER}.tar.gz mod_lsapi
fi
fi
if [ "${NGINX_VER}" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
getFile nginx-${NGINX_VER}.tar.gz nginx
fi
fi
if [ "${UNIT_VER}" != "0" ] && [ "${UNIT_OPT}" = "yes" ]; then
getFile unit/unit-${UNIT_VER}.tar.gz unit unit-${UNIT_VER}.tar.gz
fi
if [ "${APACHE2_VER}" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
getFile httpd-${APACHE2_VER}.tar.gz apache${APACHE_VER_OPT}
fi
fi
getFile apr-${APR_VER}.tar.gz apr
getFile apr-util-${APR_UTIL_VER}.tar.gz apr-util
if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then
if [ "${LIBSPF2_VER}" != "0" ]; then
getFile libspf2-${LIBSPF2_VER}.tar.gz libspf2
fi
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
getFileLSWS ${LITESPEED_NAME}.tar.gz ${LITESPEED_VER_NAME}
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
if [ "${B64}" = "2" ]; then
getFile openlitespeed/openlitespeed-${OPENLITESPEED_VER}.src.tgz openlitespeed_src openlitespeed-${OPENLITESPEED_VER}.src.tgz
else
getFile openlitespeed/openlitespeed-${OPENLITESPEED_VER}.tgz openlitespeed openlitespeed-${OPENLITESPEED_VER}.tgz
fi
fi
if [ "${HAVE_FCGID}" = "yes" ]; then
if [ "${MOD_FCGID_VER}" != "0" ]; then
getFile mod_fcgid-${MOD_FCGID_VER}.tar.gz mod_fcgid
fi
fi
if [ "${MODSECURITY_VER}" != "0" ] && [ "${MODSECURITY_OPT}" = "yes" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ]; then
getFile ${MODSECURITY_FILENAME}-${MODSECURITY_VER}.tar.gz ${MODSECURITY_FILENAME}
fi
if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
getFileCWAF cwaf_rules_nginx_3-${CWAF_RULES_NGINX_VER}.tgz cwaf_rules_nginx_3
elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then
getFileCWAF cwaf_rules_ls-${CWAF_RULES_LS_VER}.tgz cwaf_rules_ls
elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
getFileCWAF cwaf_rules_nginx_3-${CWAF_RULES_NGINX_VER}.tgz cwaf_rules_nginx_3
else
getFileCWAF cwaf_rules-${CWAF_RULES_VER}.tgz cwaf_rules
fi
elif [ "${MODSECURITY_RULESET_OPT}" = "owasp" ]; then
getFile owasp-modsecurity-crs-${OWASP_RULES_VER}.tar.gz owasp3_rules
fi
fi
if [ "${CURL_VER}" != "0" ] && [ "${CURL_OPT}" = "yes" ]; then
getFile curl-${CURL_VER}.tar.gz curl
fi
if [ "${PHP_IGBINARY_OPT}" = "yes" ]; then
if [ "${IGBINARY_VER}" != "0" ]; then
getFile php_extensions/igbinary/igbinary-${IGBINARY_VER}.tar.gz igbinary igbinary-${IGBINARY_VER}.tar.gz
fi
fi
if [ "${IMAGICK_OPT}" = "yes" ]; then
if [ "${IMAGICK_VER}" != "0" ]; then
getFile imagick/imagick-${IMAGICK_VER}.tgz imagick imagick-${IMAGICK_VER}.tar.gz
fi
if [ "${IMAGEMAGICK_VER}" != "0" ]; then
getFile imagick/ImageMagick-${IMAGEMAGICK_VER}.tar.gz imagemagick ImageMagick-${IMAGEMAGICK_VER}.tar.gz
fi
fi
if [ "${PHP_PHALCON_OPT}" = "yes" ]; then
if [ "${PHALCON_VER}" != "0" ]; then
getFile php_extensions/phalcon/phalcon-${PHALCON_VER}.tgz phalcon phalcon-${PHALCON_VER}.tar.gz
fi
if [ "${PSR_VER}" != "0" ]; then
getFile php_extensions/psr/psr-${PSR_VER}.tgz psr psr-${PSR_VER}.tar.gz
fi
fi
if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ]; then
if [ "${SNUFFLEUPAGUS_VER}" != "0" ]; then
getFile php_extensions/snuffleupagus/snuffleupagus-${SNUFFLEUPAGUS_VER}.tar.gz snuffleupagus snuffleupagus-${SNUFFLEUPAGUS_VER}.tar.gz
fi
fi
if [ "${PHP_REDIS_OPT}" = "yes" ]; then
if [ "${PHPREDIS_VER}" != "0" ]; then
getFile php_extensions/redis/redis-${PHPREDIS_VER}.tgz phpredis redis-${PHPREDIS_VER}.tgz
fi
fi
if [ "${PHP_IMAP_OPT}" = "yes" ]; then
if [ "${IMAP_VER}" != "0" ]; then
getFile all/imap/imap-${IMAP_VER}.tar.gz imap imap-${IMAP_VER}.tar.gz
fi
fi
if [ "${LIBZIP_VER}" != "0" ]; then
getFile libzip-${LIBZIP_VER}.tar.gz libzip
fi
if [ "${SPAMD_OPT}" = "spamassassin" ]; then
if [ "${SPAMASSASSIN_VER}" != "0" ]; then
getFile Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz spamassassin
fi
fi
if [ "${SPAMD_OPT}" = "rspamd" ]; then
if [ "${RSPAMD_VER}" != "0" ]; then
getFile rspamd-${RSPAMD_VER}.tar.gz rspamd
fi
fi
if [ "${CLAMAV_OPT}" = "yes" ]; then
if [ "${CLAMAV_VER}" != "0" ]; then
getFile clamav-${CLAMAV_VER}.tar.gz clamav
fi
fi
if [ "${WEBALIZER_VER}" != "0" ]; then
getFile ${WEBALIZER_FILE} webalizer
fi
if [ "${FTPD_OPT}" = "proftpd" ]; then
if [ "${PROFTPD_VER}" != "0" ]; then
getFile proftpd-${PROFTPD_VER}.tar.gz proftpd
fi
fi
if [ "${SPAMD_OPT}" = "rspamd" ]; then
if [ "${RSPAMD_VER}" != "0" ]; then
getFile rspamd-${RSPAMD_VER}.tar.gz rspamd
fi
fi
if [ "${FTPD_OPT}" = "pureftpd" ]; then
if [ "${PUREFTPD_VER}" != "0" ]; then
getFile pure-ftpd-${PUREFTPD_VER}.tar.gz pureftpd
fi
fi
if [ "${ZEND_OPT}" = "yes" ]; then
if [ "${PHP1_RELEASE_OPT}" = "5.3" ] || [ "${PHP2_RELEASE_OPT}" = "5.3" ] || [ "${PHP3_RELEASE_OPT}" = "5.3" ] || [ "${PHP4_RELEASE_OPT}" = "5.3" ]; then
getFile ${ZENDFILE_GUARD53} ""
fi
if [ "${PHP1_RELEASE_OPT}" = "5.4" ] || [ "${PHP2_RELEASE_OPT}" = "5.4" ] || [ "${PHP3_RELEASE_OPT}" = "5.4" ] || [ "${PHP4_RELEASE_OPT}" = "5.4" ]; then
getFile ${ZENDFILE_GUARD54} ""
fi
fi
if [ "${PHP1_RELEASE_VER}" != "0" ]; then
getFile php-${PHP1_RELEASE_VER}.tar.gz php${PHP1_SHORTRELEASE}
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
if [ "${PHP2_RELEASE_VER}" != "0" ]; then
getFile php-${PHP2_RELEASE_VER}.tar.gz php${PHP2_SHORTRELEASE}
fi
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
if [ "${PHP3_RELEASE_VER}" != "0" ]; then
getFile php-${PHP3_RELEASE_VER}.tar.gz php${PHP3_SHORTRELEASE}
fi
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
if [ "${PHP4_RELEASE_VER}" != "0" ]; then
getFile php-${PHP4_RELEASE_VER}.tar.gz php${PHP4_SHORTRELEASE}
fi
fi
if [ "${EXIM_OPT}" = "yes" ]; then
if [ "${EXIM_VER}" != "0" ]; then
getFile exim-${EXIM_VER}.tar.gz exim
fi
fi
if [ "${DOVECOT_OPT}" = "yes" ]; then
updateDovecot
fi
if [ "${IONCUBE_OPT}" = "yes" ]; then
getFile ${IONCUBEFILE} ${IONCUBENAME}
fi
if [ "${SUHOSIN_OPT}" = "yes" ]; then
if [ "${SUHOSIN_VER}" != "0" ]; then
getFile suhosin-${SUHOSIN_VER}.tar.gz suhosin
fi
fi
}
####################################################
dogeoipupdateCron() {
CRONFILE=/etc/cron.weekly/libmaxminddb-update
echo "Installing libmaxminddb-update cronjob..."
if [ ! -d /etc/cron.weekly ]; then
do_exit 1 "You cannot run cronjob, because you do not have /etc/cron.weekly directory."
fi
echo '#!/bin/bash' > ${CRONFILE}
echo 'if [ -x /usr/local/bin/geoipupdate ]; then' >> ${CRONFILE}
echo ' /usr/local/bin/geoipupdate' >> ${CRONFILE}
echo 'fi' >> ${CRONFILE}
chmod +x ${CRONFILE}
}
####################################################
doGeoipupdate() {
quitIfLocked Geoipupdate
cd ${CWD}
getFile geoipupdate-${GEOIPUPDATE_VER}.tar.gz geoipupdate
tar xzf geoipupdate-${GEOIPUPDATE_VER}.tar.gz --no-same-owner
cd geoipupdate-${GEOIPUPDATE_VER}
./configure --prefix=/usr/local
while echo "Trying to make geoipupdate"; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
make install
writeLog "geoipupdate ${GEOIPUPDATE_VER} installed"
dogeoipupdateCron
writeLog "geoipupdate cronjob setup, to update database every week"
removeLockfile
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
}
####################################################
dolibmaxminddb() {
quitIfLocked dolibmaxminddb
cd ${CWD}
getFile libmaxminddb-${LIBMAXMINDDB_VER}.tar.gz libmaxminddb
tar xzf libmaxminddb-${LIBMAXMINDDB_VER}.tar.gz --no-same-owner
cd libmaxminddb-${LIBMAXMINDDB_VER}
./configure --prefix=/usr/local
while echo "Trying to make libmaxminddb"; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
make install
writeLog "libmaxminddb ${LIBMAXMINDDB_VER} installed"
removeLockfile
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
}
####################################################
doApache2() {
if [ "${WEBSERVER_OPT}" != "apache" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ]; then
do_exit 1 "You cannot install Apache, because you do not have it set in options.conf file."
fi
addUserGroup apache apache
addToAccess apache
#die die die!!
if [ -s /usr/sbin/apache2 ]; then
chmod 0 /usr/sbin/apache2
killall -9 apache2 2> /dev/null
fi
if [ -s /usr/lib/apache2/mpm-prefork/apache2 ]; then
chmod 0 /usr/lib/apache2/mpm-prefork/apache2
killall -9 apache2 2> /dev/null
fi
if [ ! -e /usr/include/systemd/sd-daemon.h ]; then
if [ -e ${DEBIAN_VERSION} ]; then
#This one might be needed for the next release of Debian/Ubuntu with systemd support
apt-get -y install libsystemd-dev
else
yum -y install systemd-devel
fi
fi
if [ ! -s /usr/include/expat.h ] && [ ! -s /usr/local/include/expat.h ]; then
if [ -e /etc/debian_version ]; then
apt-get -y install libexpat1-dev
else
yum -y install expat-devel
fi
fi
getFile httpd-${APACHE2_VER}.tar.gz apache${APACHE_VER_OPT}
set_http2
if [ "${APACHE_VER_OPT}" = "2.4" ]; then
#shouldn't be needed anymore, as we use --with-devrandom for APR now, thus getrandom() syscall should be used
#if [ -e /proc/user_beancounters ]; then
# echo "/proc/user_beancounters detected, downgrading APR."
# APR_VER=1.6.5
#elif [ -x /usr/bin/systemd-detect-virt ]; then
# if systemd-detect-virt | grep -m1 -q -E 'lxc|openvz'; then
# echo "LXC/OpenVZ detected, downgrading APR."
# APR_VER=1.6.5
# fi
#fi
getFile apr-${APR_VER}.tar.gz apr
getFile apr-util-${APR_UTIL_VER}.tar.gz apr-util
getFile patches/mod_suexec_directory.patch mod_suexec_directory.patch patches/mod_suexec_directory.patch hexan
getFile patches/suexec-safe.patch suexec-safe.patch patches/suexec-safe.patch hexan
getFile patches/sdbm_private.patch sdbm_private.patch patches/sdbm_private.patch hexan
getFile patches/fastcgi_children_cgroup.patch fastcgi_children_cgroup.patch patches/fastcgi_children_cgroup.patch hexan
fi
initHTTP2var
if [ ! -s /usr/include/nghttp2/nghttp2.h ] && [ ! -s /usr/local/include/nghttp2/nghttp2.h ]; then
echo "Cannot find nghttp2.h. Installing nghttp2.";
if [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install libnghttp2-dev
elif [ "${OS_CENTOS_VER}" = "7" ]; then
if [ -s /etc/yum.repos.d/epel.repo ]; then
yum -y install libnghttp2-devel --enablerepo=${EPEL_REPO_NAME}
else
yum -y install libnghttp2-devel
fi
elif [ "${OS_CENTOS_VER}" = "8" ]; then
yum -y install libnghttp2-devel --enablerepo=${POWERTOOLS}
else
yum -y install libnghttp2-devel --enablerepo=crb
fi
fi
quitIfLocked doApache2
if [ "${MOD_RUID2_OPT}" = "yes" ]; then
if [ ! -e /lib/libcap.so ] && [ ! -e /lib64/libcap.so ] && [ ! -e /usr/lib/libcap.so ] && [ ! -e /usr/lib64/libcap.so ] && [ ! -e /lib/x86_64-linux-gnu/libcap.so ] && [ ! -e /usr/lib/aarch64-linux-gnu/libcap.so ] && [ ! -e /lib/i386-linux-gnu/libcap.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libcap.so ]; then
echo "Cannot find libcap.so for apache. Please install libcap"
if [ -e /etc/debian_version ]; then
echo "apt-get install libcap-dev"
else
echo "yum -y install libcap-devel"
fi
removeLockfile
return
fi
fi
if [ ! -e /usr/bin/bzip2 ] && [ ! -e /bin/bzip2 ]; then
echo "Cannot find bzip2. Please install it."
if [ -e /etc/debian_version ]; then
echo "apt-get install bzip2"
else
echo "yum -y install bzip2"
fi
return
fi
ADMNHTTP=/usr/local/directadmin/data/users/admin/httpd.conf
if [ ! -e ${ADMNHTTP} ] && [ -d /usr/local/directadmin/data/users/admin ]; then
echo -n "" > ${ADMNHTTP}
chown diradmin:admin ${ADMNHTTP}
chmod 640 ${ADMNHTTP}
fi
set64
if [ ! -e /usr/bin/pcre-config ] && [ ! -e /usr/local/bin/pcre-config ]; then
if [ ! -e /usr/include/pcre.h ] && [ ! -e /usr/local/include/pcre.h ]; then
if [ -e /etc/debian_version ]; then
apt-get -y install libpcre3-dev
else
yum -y install pcre-devel
fi
fi
fi
if grep -m1 -q '^nginx:' /etc/group; then
usermod -a -G nginx apache 2>/dev/null
fi
if [ ! -d /var/log/httpd/domains ]; then
mkdir -p /var/log/httpd/domains
fi
chmod 710 /var/log/httpd
chmod 710 /var/log/httpd/domains
chown apache:${ROOT_GRP} /var/log/httpd
chown apache:${ROOT_GRP} /var/log/httpd/domains
backupHttp
cd ${CWD}
FILE=${CWD}/httpd-${APACHE2_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
if [ "${APACHE_VER_OPT}" = "2.4" ]; then
FILE2=${CWD}/apr-${APR_VER}.tar.gz
checkFile ${FILE2}
echo "Extracting ${FILE2}..."
tar xzf ${FILE2} --no-same-owner -C ${CWD}/httpd-${APACHE2_VER}/srclib
if [ -d ${CWD}/httpd-${APACHE2_VER}/srclib/apr ]; then
rm -rf ${CWD}/httpd-${APACHE2_VER}/srclib/apr
fi
mv -f ${CWD}/httpd-${APACHE2_VER}/srclib/apr-${APR_VER} ${CWD}/httpd-${APACHE2_VER}/srclib/apr
FILE3=${CWD}/apr-util-${APR_UTIL_VER}.tar.gz
checkFile ${FILE3}
echo "Extracting ${FILE3}..."
tar xzf ${FILE3} --no-same-owner -C ${CWD}/httpd-${APACHE2_VER}/srclib
if [ -d ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util ]; then
rm -rf ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util
fi
mv -f ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util-${APR_UTIL_VER} ${CWD}/httpd-${APACHE2_VER}/srclib/apr-util
fi
if [ "$HARDEN_SYMLINKS_PATCH_OPT" = "yes" ]; then
if [ "${APACHE_VER_OPT}" = "2.4" ]; then
PATCH_NAME=harden-symlinks-2.4.patch
getFile ${PATCH_NAME} ${PATCH_NAME}
fi
if [ -s ${PATCH_NAME} ]; then
echo "Patching apache for hardened symlinks patch..."
if [ "${APACHE_VER_OPT}" = "2.4" ]; then
cd httpd-${APACHE2_VER}
patch -p0 < ../${PATCH_NAME}
cd ..
fi
else
echo "Cannot find ${PATCH_NAME} to for hardened symlinks patch."
fi
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
getFileCL cl-apache-patches.tar.gz cl-apache-patches
if [ ! -e /usr/include/lve/lve-ctl.h ]; then
yum -y install liblve-devel
fi
fi
cd httpd-${APACHE2_VER}
# A fix for apache not showing proxied IP address
perl -pi -e 's#RSRC_CONF | EXEC_ON_READ#RSRC_CONF#g' modules/metadata/mod_remoteip.c
if [ "${APACHE_VER_OPT}" = "2.4" ]; then
echo "Enabling mod_systemd..."
if ! grep -m1 -q "\-\-enable-systemd" ${WORKDIR}/${APACHE2_CONFIGURE}; then
perl -pi -e 's|"\./configure" \\\n|"./configure" \\\n\t"--enable-systemd" \\\n|' ${WORKDIR}/${APACHE2_CONFIGURE}
fi
fi
if [ "${HTTP2}" = "1" ]; then
echo "Enabling mod_http2...";
if ! grep -m1 -q "\-\-enable-http2" ${WORKDIR}/${APACHE2_CONFIGURE}; then
perl -pi -e 's|"--enable-rewrite" \\\n|"--enable-http2" \\\n\t"--enable-rewrite" \\\n|' ${WORKDIR}/${APACHE2_CONFIGURE}
fi
fi
#For ModSecurity
if [ -d srclib/apr-util ]; then
echo "Patching srclib/apr-util/dbm/sdbm/sdbm_private.h..."
cd srclib/apr-util
patch -p0 < ${WORKDIR}/patches/sdbm_private.patch
cd ../../
fi
if [ "${CLOUDLINUX_OPT}" = "no" ]; then
echo "Patching apache to suexec safedir path..."
if [ ! -s ../patches/suexec-safe.patch ]; then
echo "Error with patches/suexec-safe.patch. File is missing or empty"
else
patch -p1 < ../patches/suexec-safe.patch
fi
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
patch -p1 < ../apr-2.4-httpd.1.patch
patch -p1 < ../suexec_safe_bin.patch
fi
if [ -s support/suexec.c ]; then
echo "Patching suexec for per-user process grouping"
if [ ! -s ../patches/fastcgi_children_cgroup.patch ]; then
echo "${boldon}ERROR downloading patches/fastcgi_children_cgroup.patch${boldoff}"
else
patch -p0 < ../patches/fastcgi_children_cgroup.patch
fi
fi
echo "Patching apache to allow SuexecUserGroup in Directory context..."
if [ ! -s ../patches/mod_suexec_directory.patch ]; then
echo "Error with patches/mod_suexec_directory.patch. File is missing or empty"
else
patch -p1 < ../patches/mod_suexec_directory.patch
fi
setFDSETSIZE
if [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ ! -e /usr/sbin/httpd ]; then
#configure
echo "Configuring httpd-${APACHE2_VER}"
rm -f configure
autoreconf --force
if ! grep -m1 -q 'apr_configure_args="--with-devrandom ' configure; then
perl -pi -e 's|apr_configure_args="|apr_configure_args="--with-devrandom |g' configure
fi
if [ ! -e /usr/local/include/pcre.h ] && grep -m1 -q 'with-pcre=/usr/local' ${CWD}/${APACHE2_CONFIGURE}; then
perl -pi -e 's|with-pcre=/usr/local|with-pcre=/usr|g' ${CWD}/${APACHE2_CONFIGURE}
fi
CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ${CWD}/${APACHE2_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure Apache 2. Check the ${APACHE2_CONFIGURE} file\n"
do_exit 1
fi
echo "Done Configuration."
fi
fi
echo "increasing FD_SETSIZE in os/tpf/os.h .."
if [ -e ./os/tpf/os.h ]; then
perl -pi -e 's/\#define FD_SETSIZE.*2048/\#ifdef FD_SETSIZE\n\#undef FD_SETSIZE\n\#endif\n\#define FD_SETSIZE 32768/' ./os/tpf/os.h
fi
if [ -e ./srclib/apr/include/apr.hnw ]; then
perl -pi -e 's/FD_SETSIZE.*1024/FD_SETSIZE 32768/' ./srclib/apr/include/apr.hnw
fi
if [ -e ./srclib/apr/poll/unix/select.c ]; then
perl -pi -e 's/FD_SETSIZE.*1024/FD_SETSIZE 32768/' ./srclib/apr/poll/unix/select.c
fi
if [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ ! -e /usr/sbin/httpd ]; then
if [ -d httpd-${APACHE2_VER} ]; then
cd httpd-${APACHE2_VER}
fi
while echo "Trying to make Apache 2..."; do
C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 0
fi
else
break
fi
done
echo "Make complete"
fi
fi
checkRPMS
#setup the directadmin.conf
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
setVal cloud_cache 1 ${DACONF_TEMPLATE_FILE}
setVal cloud_cache 1 ${DACONF_FILE}
echo "action=cache&value=showallusers" >> ${TASK_QUEUE}
run_dataskq d
elif [ "${CLOUDLINUX_OPT}" = "no" ]; then
setVal cloud_cache 0 ${DACONF_TEMPLATE_FILE}
setVal cloud_cache 0 ${DACONF_FILE}
fi
setVal nginx 0 ${DACONF_TEMPLATE_FILE}
setVal nginx 0 ${DACONF_FILE}
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
setVal nginx_proxy 1 ${DACONF_TEMPLATE_FILE}
setVal nginx_proxy 1 ${DACONF_FILE}
setVal litespeed 0 ${DACONF_TEMPLATE_FILE}
setVal litespeed 0 ${DACONF_FILE}
setVal openlitespeed 0 ${DACONF_TEMPLATE_FILE}
setVal openlitespeed 0 ${DACONF_FILE}
set_service litespeed delete
killall litespeed >/dev/null 2>&1
killall -9 litespeed >/dev/null 2>&1
doRestartDA
elif [ "${WEBSERVER_OPT}" = "apache" ]; then
setVal nginx_proxy 0 ${DACONF_TEMPLATE_FILE}
setVal nginx_proxy 0 ${DACONF_FILE}
setVal litespeed 0 ${DACONF_TEMPLATE_FILE}
setVal litespeed 0 ${DACONF_FILE}
setVal openlitespeed 0 ${DACONF_TEMPLATE_FILE}
setVal openlitespeed 0 ${DACONF_FILE}
killall nginx >/dev/null 2>&1
killall litespeed >/dev/null 2>&1
doRestartDA
set_service nginx delete
set_service litespeed delete
killall -9 nginx >/dev/null 2>&1
killall -9 litespeed >/dev/null 2>&1
fi
if [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ ! -e /usr/sbin/httpd ]; then
set_service httpd ON
rm -f /usr/sbin/apxs
echo "Installing Apache..."
make install
fi
else
set_service httpd delete
set_service nginx delete
fi
if [ ! -e /etc/mime.types ]; then
cp docs/conf/mime.types /etc/mime.types
fi
ln -sf /var/www/build /etc/httpd/build
chown webapps:apache /var/www
chmod 551 /var/www
removeLockfile
cd ${CWD}
restoreHttp
#fix for downgrades to let $1$ passwords version of apr-utils (1.4.1) work, if 1.5.1 was installed previously.
if [ "${APACHE_VER_OPT}" = "2.4" ] && [ "${APR_UTIL_VER}" = "1.4.1" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ ! -e /usr/sbin/httpd ]; then
APR_51_LIB=${HTTPDDIR}/lib/libaprutil-1.so.0.5.1
APR_41_LIB=${HTTPDDIR}/lib/libaprutil-1.so.0.4.1
APR_LIB_LINK=${HTTPDDIR}/lib/libaprutil-1.so.0
if [ -e "${APR_51_LIB}" ] && [ -e "${APR_41_LIB}" ]; then
rm -f ${APR_LIB_LINK}
rm -f ${APR_51_LIB}
ln -s libaprutil-1.so.0.4.1 ${APR_LIB_LINK}
fi
fi
fi
if [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ ! -e /usr/sbin/httpd ]; then
#ensure /usr/sbin/apxs
if [ ! -s /usr/sbin/apxs ] && [ -s /usr/bin/apxs ]; then
ln -s /usr/bin/apxs /usr/sbin/apxs
fi
#fresh install, add to System Backup
if [ ! -s ${SYSTEMDDIR}/httpd.service ]; then
add_to_system_backup dirs /etc/httpd
fi
echo "Enabling httpd in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/httpd.service ]; then
cp -f ${CB_CUST_SYSTEMD}/httpd.service ${SYSTEMDDIR}/httpd.service
else
cp -f ${CB_SYSTEMD}/httpd.service ${SYSTEMDDIR}/httpd.service
fi
chmod 644 ${SYSTEMDDIR}/httpd.service
DISABLE_PRIVATETMP=false
if [ "${CLAMAV_OPT}" = "yes" ]; then
if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] || [ "${MODSECURITY_UPLOADSCAN_OPT}" = "yes" ]; then
DISABLE_PRIVATETMP=true
fi
fi
if [ -e /proc/1/environ ]; then
if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then
DISABLE_PRIVATETMP=true
fi
fi
if ${DISABLE_PRIVATETMP}; then
echo "Upload scan option detected in options.conf. Disabling PrivateTmp feature in httpd.service for ClamAV to be able to scan files in /tmp."
perl -pi -e 's#PrivateTmp\=true#PrivateTmp=false#' ${SYSTEMDDIR}/httpd.service
fi
systemctl daemon-reload
systemctl enable httpd.service
fi
fi
#Disable nginx & litespeed when switching to apache
if [ "${WEBSERVER_OPT}" = "apache" ]; then
if [ -e ${SYSTEMDDIR}/nginx.service ]; then
systemctl disable nginx.service 2> /dev/null
rm -f ${SYSTEMDDIR}/nginx.service
systemctl daemon-reload
fi
if [ -e ${SYSTEMDDIR}/litespeed.service ]; then
systemctl disable lshttpd.service 2> /dev/null
systemctl disable litespeed.service 2> /dev/null
systemctl disable lsws.service 2> /dev/null
rm -f ${SYSTEMDDIR}/lshttpd.service
rm -f ${SYSTEMDDIR}/lsws.service
rm -f ${SYSTEMDDIR}/litespeed.service
rm -f ${SYSTEMDDIR}/openlitespeed.service
systemctl daemon-reload
fi
fi
HAVE_DACONF=0
if [ -s ${DACONF_FILE} ]; then
HAVE_DACONF=1
fi
#check directadmin.conf file
if [ "`grep -m1 -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_TEMPLATE_FILE}`" = "1" ]; then
perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_TEMPLATE_FILE}
fi
if [ "${HAVE_DACONF}" = "1" ] && [ "`grep -m1 -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_FILE}`" = "1" ]; then
if [ "`grep -m1 -c 'apacheconf=/etc/httpd/conf/httpd.conf' ${DACONF_FILE}`" = "1" ]; then
perl -pi -e 's#apacheconf=/etc/httpd/conf/httpd.conf#apacheconf=/etc/httpd/conf/extra/directadmin-vhosts.conf#' ${DACONF_FILE}
doRestartDA
fi
mv -f ${HTTPDCONF} ${HTTPDCONF}.${APACHE_VER_OPT}.backup
cp -rf ${APCONFDIR} ${HTTPDDIR}
if [ "${APCUSTOMCONFDIR}" != "0" ]; then
cp -rf ${APCUSTOMCONFDIR} ${HTTPDDIR}
fi
cp -rf ${HTTPDCONF}.${APACHE_VER_OPT}.backup/ssl.key ${HTTPDCONF}
cp -rf ${HTTPDCONF}.${APACHE_VER_OPT}.backup/ssl.crt ${HTTPDCONF}
doRestartDA
fi
#copy the new configs if needed
if [ "`grep -m1 -c 'Include' ${HTTPDCONF}/extra/directadmin-vhosts.conf`" = "0" ] || [ ! -e ${HTTPDCONF}/extra/directadmin-vhosts.conf ]; then
cp -rf ${APCONFDIR} ${HTTPDDIR}
HDC=httpd-directories-old.conf
ln -sf $HDC ${HTTPDCONF}/extra/httpd-directories.conf
doApacheHostConf
fi
doPasswdServerStatus
if [ "${APCUSTOMCONFDIR}" != "0" ]; then
cp -rf ${APCUSTOMCONFDIR} ${HTTPDDIR}
fi
chmod 710 ${HTTPDDIR}/conf
if [ "${HTTP_METHODS_OPT}" != "ALL" ]; then
APACHE_HTTP_METHODS="`echo ${HTTP_METHODS_OPT} | tr ':' ' '`"
else
APACHE_HTTP_METHODS="reset"
fi
perl -pi -e "s#\|HTTP_METHODS\|#${APACHE_HTTP_METHODS}#g" ${HTTPDCONF}/extra/httpd-directories-old.conf
perl -pi -e "s#\|HTTP_METHODS\|#${APACHE_HTTP_METHODS}#g" ${HTTPDCONF}/extra/httpd-directories-new.conf
create_httpd_nginx
doSslConfigurationWebserver
#ensure we have the correct apache_ver
if [ "`grep -m1 -c apache_ver=2.0 ${DACONF_TEMPLATE_FILE}`" -eq "0" ]; then
echo "apache_ver=2.0" >> ${DACONF_TEMPLATE_FILE}
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
doRestartDA
elif [ "`grep -m1 -c apache_ver=2.0 ${DACONF_TEMPLATE_FILE}`" -ne "0" ]; then
perl -pi -e 's/`grep -m1 apache_ver= ${DACONF_TEMPLATE_FILE}`/apache_ver=2.0/' ${DACONF_TEMPLATE_FILE}
fi
if [ "${HAVE_DACONF}" = "1" ]; then
if [ "`grep -m1 -c apache_ver=2.0 ${DACONF_FILE}`" -eq "0" ]; then
echo "apache_ver=2.0" >> ${DACONF_FILE}
doRestartDA
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
elif [ "`grep -m1 -c apache_ver=2.0 ${DACONF_FILE}`" -ne "0" ]; then
perl -pi -e 's/`grep -m1 apache_ver= ${DACONF_FILE}`/apache_ver=2.0/' ${DACONF_FILE}
doRestartDA
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
fi
fi
fpmChecks
dovecotChecks
if [ "${HAVE_FPM_CGI}" = "yes" ]; then
perl -pi -e 's/nginx/apache/' /usr/local/directadmin/data/templates/php-fpm.conf
fi
ensure_server_ca
do_rewrite_httpd_alias
#rewrite ips.conf if needed
echo "action=rewrite&value=ips" >> ${TASK_QUEUE}
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
run_dataskq
#tokenize the IP and ports if needed
tokenize_IP
tokenize_ports
doVhosts
if [ ! -s /etc/httpd/conf/ssl.key/server.key ] || [ ! -s /etc/httpd/conf/ssl.crt/server.crt ]; then
cd ${WORKDIR}
mkdir -p /etc/httpd/conf/ssl.key
mkdir -p /etc/httpd/conf/ssl.crt
#install the cert/key
/usr/bin/openssl req -x509 -newkey rsa:2048 -keyout /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.crt/server.crt -days 9999 -nodes -config ./${APCERTCONF}
chmod 600 ${HTTPDCONF}/ssl.crt/server.crt
chmod 600 ${HTTPDCONF}/ssl.key/server.key
cd ${CWD}
fi
doApacheCheck
mkdir -p ${WWWDIR}
if [ ! -e ${WWWDIR}/index.html ]; then
if [ -e ${WWWDIR}/index.html.en ]; then
cp -f ${WWWDIR}/index.html.en ${WWWDIR}/index.html
else
echo "<html>Apache is functioning normally</html>" > ${WWWDIR}/index.html
fi
fi
perl -pi -e 's/[A-Za-z]* is functioning normally/Apache is functioning normally/' ${WWWDIR}/index.html
if [ ! -e /etc/logrotate.d/apache ]; then
safeDownloadWithMove /etc/logrotate.d/apache "${WEBPATH}/apache.logrotate"
fi
if [ ! -d /usr/local/safe-bin ]; then
mkdir -p /usr/local/safe-bin
chmod 511 /usr/local/safe-bin
chown apache:apache /usr/local/safe-bin
fi
# Make sure apr is linked correctly
if [ -e /usr/bin/apr-1-config ]; then
ln -sf /usr/bin/apr-1-config /usr/bin/apr-config
fi
rewrite_phpmodules
if [ "${MOD_RUID2_OPT}" = "yes" ] && [ ! -e /usr/lib/apache/mod_ruid2.so ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then
doModRuid2
fi
if [ "${MODSECURITY_OPT}" = "yes" ] && [ ! -e /usr/lib/apache/mod_security2.so ] && [ "${WEBSERVER_OPT}" = "apache" ]; then
doModSecurity
fi
if [ "${HTSCANNER_OPT}" = "yes" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${HAVE_FCGID}" = "yes" ] || [ "${HAVE_FPM_CGI}" = "yes" ] || [ "${HAVE_SUPHP_CGI}" = "yes" ]; then
doModHtscanner
fi
fi
fi
if [ "${HAVE_FCGID}" = "yes" ]; then
if [ ! -s /usr/lib/apache/mod_fcgid.so ]; then
doModFCGID
fi
fi
# Make sure there is no SSLMutex in /etc/httpd/conf/extra/httpd-ssl.conf
# Make sure there is no LockFile in /etc/httpd/conf/extra/httpd-mpm.conf
if [ "${APACHE_VER_OPT}" = "2.4" ]; then
perl -pi -e 's/^SSLMutex/#SSLMutex/' /etc/httpd/conf/extra/httpd-ssl.conf
perl -pi -e 's/^LockFile/#LockFile/' /etc/httpd/conf/extra/httpd-mpm.conf
fi
# Disable UserDir access if userdir_access=no is set in the options.conf file
if [ "${USERDIR_ACCESS_OPT}" = "no" ]; then
perl -pi -e 's#UserDir public_html#UserDir disabled#' /etc/httpd/conf/extra/httpd-vhosts.conf
#~username is enabled by default for litespeed, so explicitly turn it off.
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
perl -pi -e 's#^\#Include conf/extra/httpd-userdir.conf#Include conf/extra/httpd-userdir.conf#' ${HTTPD_CONF}
fi
else
perl -pi -e 's#UserDir disabled#UserDir public_html#' /etc/httpd/conf/extra/httpd-vhosts.conf
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
perl -pi -e 's#^Include conf/extra/httpd-userdir.conf#\#Include conf/extra/httpd-userdir.conf#' ${HTTPD_CONF}
fi
fi
doModProctitle 0
doModHostingLimits 0
doModLsapi 0
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
ldconfig
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "Restarting apache."
control_service httpd stop
killall -9 httpd >/dev/null 2>&1
control_service httpd start
fi
writeLog "Apache ${APACHE2_VER} installed"
removeLockfile
}
####################################################
doRemoveUnit() {
if [ "${UNIT_OPT}" = "yes" ]; then
do_exit 1 "You cannot remove Nginx Unit, because you have it set in options.conf file."
fi
if [ ! -e /usr/sbin/unitd ]; then
do_exit 1 "/usr/sbin/unitd does not exist, cannot remove..."
fi
echo "Disabling unit in services.status..."
set_service unit delete
control_service unit stop
echo "Disabling unit in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/unit.service ]; then
systemctl disable unit.service
rm -f ${SYSTEMDDIR}/unit.service
systemctl daemon-reload
fi
if [ -e /etc/logrotate.d/unit ]; then
echo "Removing logrotate: /etc/logrotate.d/unit..."
rm -f /etc/logrotate.d/unit
fi
if [ -d /var/log/unit ]; then
echo "Removing unit logs: /var/log/unit..."
rm -rf /var/log/unit
fi
if [ -d /var/lib/unit ]; then
echo "Removing /var/lib/unit..."
rm -rf /var/lib/unit
fi
if [ -d /usr/lib/unit ]; then
echo "Removing /usr/lib/unit..."
rm -rf /usr/lib/unit
fi
if [ -e /usr/sbin/unitd ]; then
echo "Removing /usr/sbin/unitd..."
rm -f /usr/sbin/unitd
fi
if [ -e /usr/share/man/man8/unitd.8 ]; then
echo "Removing /usr/share/man/man8/unitd.8..."
rm -f /usr/share/man/man8/unitd.8
fi
ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "Unit has been successfully removed"
writeLog "Unit removed"
}
####################################################
doRemoveApache2() {
if [ "${WEBSERVER_OPT}" = "apache" ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
do_exit 1 "You cannot remove Apache, because you have it set in options.conf file."
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
do_exit 1 "You cannot remove Apache, because you have LiteSpeed set in options.conf file, which depends on Apache configuration files."
fi
if [ ! -e /usr/sbin/httpd ]; then
do_exit 1 "/usr/sbin/httpd does not exist, cannot remove..."
fi
echo "Disabling httpd in services.status..."
set_service httpd delete
control_service httpd stop
echo "Disabling httpd in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/httpd.service ]; then
systemctl disable httpd.service
rm -f ${SYSTEMDDIR}/httpd.service
systemctl daemon-reload
fi
if [ -e /etc/logrotate.d/apache ]; then
echo "Removing logrotate: /etc/logrotate.d/apache..."
rm -f /etc/logrotate.d/apache
fi
if [ -d /var/log/httpd ]; then
echo "Removing httpd logs: /var/log/httpd..."
rm -rf /var/log/httpd
fi
if [ -d /var/www/icons ]; then
echo "Removing /var/www/icons..."
rm -rf /var/www/icons
fi
if [ -d /var/www/cgi-bin ]; then
echo "Removing /var/www/cgi-bin..."
rm -rf /var/www/cgi-bin
fi
if [ -d /var/www/error ]; then
echo "Removing /var/www/error..."
rm -rf /var/www/error
fi
if [ -d /var/www/manual ]; then
echo "Removing /var/www/manual..."
rm -rf /var/www/manual
fi
if [ -d /usr/lib/apache ]; then
echo "Removing /usr/lib/apache..."
rm -rf /usr/lib/apache
fi
if [ -d /usr/include/apache ]; then
echo "Removing /usr/include/apache..."
rm -rf /usr/include/apache
fi
echo "Removing httpd configuration files: /etc/httpd/..."
rm -rf /etc/httpd
echo "Removing /usr/sbin/apachectl..."
rm -f /usr/sbin/apachectl
echo "Removing /usr/sbin/htcacheclean..."
rm -f /usr/sbin/htcacheclean
echo "Removing /usr/sbin/httpd..."
rm -f /usr/sbin/httpd
echo "Removing /usr/sbin/rotatelogs..."
rm -f /usr/sbin/rotatelogs
echo "Removing /usr/sbin/suexec..."
rm -f /usr/sbin/suexec
echo "Removing /usr/sbin/apxs..."
rm -f /usr/sbin/apxs
echo "Removing /usr/bin/ab..."
rm -f /usr/bin/ab
echo "Removing /usr/bin/htdbm..."
rm -f /usr/bin/htdbm
echo "Removing /usr/bin/htdigest..."
rm -f /usr/bin/htdigest
echo "Removing /usr/bin/htpasswd..."
rm -f /usr/bin/htpasswd
echo "Removing /usr/bin/logresolve..."
rm -f /usr/bin/logresolve
ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "Apache has been successfully removed"
writeLog "Apache removed"
}
####################################################
doLiteSpeedLicense() {
if [ "${LITESPEED_SERIALNO_OPT}" = "trial" ]; then
echo "LiteSpeed serial number not found. Using a trial key."
if [ ! -e ${LITESPEED_TRIAL_KEY} ]; then
safeDownloadWithMove "${LSWS_HOME}/conf/trial.key" https://license.litespeedtech.com/da/trial.key
fi
if [ ! -e ${LITESPEED_TRIAL_KEY} ] && [ ! -s ${LSWS_HOME}/conf/trial.key ]; then
do_exit 1 "LiteSpeed trial key ${LITESPEED_TRIAL_KEY} is also not found. Exiting."
else
if [ ! -e ${LSWS_HOME}/conf/trial.key ]; then
cp -f ${LITESPEED_TRIAL_KEY} ${LSWS_HOME}/conf/trial.key
fi
fi
else
echo "Writing LiteSpeed serial number ${LITESPEED_SERIALNO_OPT} to ${LSWS_HOME}/conf/serial.no..."
echo "${LITESPEED_SERIALNO_OPT}" > ${LSWS_HOME}/conf/serial.no
fi
if [ -e ${LSWS_HOME}/conf/serial.no ]; then
echo "Contacting licensing server ..."
echo ""
if [ -e ${LSWS_HOME}/conf/license.key ]; then
mv -f ${LSWS_HOME}/conf/license.key ${LSWS_HOME}/conf/license.key.backup
fi
if [ -e ${LSWS_HOME}/conf/trial.key ]; then
rm -f ${LSWS_HOME}/conf/trial.key
fi
${LSWS_HOME}/bin/lshttpd -r
if [ $? -eq 0 ]; then
echo "[OK] License key received."
${LSWS_HOME}/bin/lshttpd -t
if [ $? -eq 0 ]; then
echo "The license key is correct."
else
echo "The license key received does not work."
fi
fi
fi
if [ "${1}" != "0" ]; then
echo "Restarting litespeed."
control_service litespeed reload
fi
}
####################################################
doLiteSpeed() {
if [ "${WEBSERVER_OPT}" != "litespeed" ]; then
do_exit 1 "You cannot install LiteSpeed, because you do not have it set in options.conf file."
fi
if [ -e /usr/local/lsws/bin/lshttpd ]; then
EXPIRED=`/usr/local/lsws/bin/lshttpd -V | grep -m1 -c expired`
if [ ${EXPIRED} -gt 0 ]; then
echo "Cannot install LiteSpeed, because the license is expired."
return
fi
fi
doApache2
getFileLSWS ${LITESPEED_NAME}.tar.gz ${LITESPEED_VER_NAME}
quitIfLocked doLiteSpeed
if [ ! -d /var/www/html ]; then
mkdir -p /var/www/html
fi
set64
addUserGroup apache apache
addToAccess apache
chown apache:apache /var/www
chmod 551 /var/www
cd ${CWD}
FILE=${CWD}/${LITESPEED_NAME}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd lsws-${LITESPEED_VER}
if [ ! -d "${LSWS_HOME}" ]; then
mkdir -p "${LSWS_HOME}"
chown -R apache:apache ${LSWS_HOME}
mkdir -p "${LSWS_HOME}/conf"
chown -R apache:apache ${LSWS_HOME}/conf
elif [ -d /usr/local/lsws/autoupdate ]; then
rm -rf /usr/local/lsws/autoupdate
fi
#configure
echo "Installing LiteSpeed ${LITESPEED_VER}..."
rm -rf ./add-ons/cpanel/lsws_whm_plugin
. ./functions.sh
init
export LSWS_HOME=${LSWS_HOME}
export LSINSTALL_DIR=`pwd`
export PHP_SUEXEC=2
export AP_PORT_OFFSET=0
export ADMIN_USER=admin
export ADMIN_PASS="`random_pass`"
if [ -e /usr/local/directadmin/data/users/admin/user.conf ]; then
export ADMIN_EMAIL=`grep -m1 '^email=' /usr/local/directadmin/data/users/admin/user.conf | cut -d= -f2`
fi
if [ -e /usr/local/lsws/bin/lshttpd ]; then
export INSTALL_TYPE="upgrade"
else
export INSTALL_TYPE="reinstall"
fi
export PHP_SUFFIX=php
export SETUP_PHP=0
export ADMIN_PORT=7080
export DEFAULT_PORT=80
export HOST_PANEL="directadmin"
export WS_USER=apache
export WS_GROUP=apache
export DIR_OWN="apache:apache"
export CONF_OWN="apache:apache"
echo ""
echo "Installing LiteSpeed web server, please wait... "
echo ""
if [ ! -s ${LSWS_HOME}/admin/conf/htpasswd ]; then
ADMIN_PHP=${LSINSTALL_DIR}/admin/fcgi-bin/admin_php5
if [ ! -e ${ADMIN_PHP} ]; then
ADMIN_PHP=${LSINSTALL_DIR}/admin/fcgi-bin/admin_php
fi
ENCRYPT_PASS=`${ADMIN_PHP} -q ${LSINSTALL_DIR}/admin/misc/htpasswd.php "${ADMIN_PASS}"`
echo "${ADMIN_USER}:${ENCRYPT_PASS}" > "${LSINSTALL_DIR}/admin/conf/htpasswd"
SHOWPASSWORD=1
else
SHOWPASSWORD=0
fi
if [ -e /usr/local/lsws/bin/lshttpd ]; then
readCurrentConfig
fi
configRuby
buildApConfigFiles
if [ ! -s ${LSWS_HOME}/admin/conf/htpasswd ]; then
admin_login
fi
chmod 711 /var/log/httpd/
chgrp apache /var/log/httpd/
chown apache:apache /var/log/httpd/domains
installation
echo ""
$LSWS_HOME/admin/misc/rc-inst.sh
removeLockfile
doLiteSpeedLicense 0
setVal nginx_proxy 0 ${DACONF_TEMPLATE_FILE}
setVal nginx_proxy 0 ${DACONF_FILE}
setVal nginx 0 ${DACONF_TEMPLATE_FILE}
setVal nginx 0 ${DACONF_FILE}
setVal litespeed 1 ${DACONF_TEMPLATE_FILE}
setVal litespeed 1 ${DACONF_FILE}
setVal openlitespeed 0 ${DACONF_TEMPLATE_FILE}
setVal openlitespeed 0 ${DACONF_FILE}
killall httpd >/dev/null 2>&1
killall nginx >/dev/null 2>&1
doRestartDA
set_service httpd delete
set_service nginx delete
killall -9 httpd >/dev/null 2>&1
killall -9 nginx >/dev/null 2>&1
if [ ! -L ${SYSTEMDDIR}/lshttpd.service ] && [ -e ${SYSTEMDDIR}/lshttpd.service ]; then
rm -f ${SYSTEMDDIR}/lshttpd.service
systemctl daemon-reload
fi
if [ ! -L ${SYSTEMDDIR}/lsws.service ] && [ -e ${SYSTEMDDIR}/lsws.service ]; then
rm -f ${SYSTEMDDIR}/lsws.service
systemctl daemon-reload
fi
echo "Enabling litespeed in systemd..."
if [ -L ${SYSTEMDDIR}/litespeed.service ]; then
rm -f ${SYSTEMDDIR}/litespeed.service
fi
if [ -e ${CB_CUST_SYSTEMD}/litespeed.service ]; then
cp -f ${CB_CUST_SYSTEMD}/litespeed.service ${SYSTEMDDIR}/litespeed.service
else
cp -f ${CB_SYSTEMD}/litespeed.service ${SYSTEMDDIR}/litespeed.service
fi
if [ -e /etc/systemd/system/multi-user.target.wants/lshttpd.service ]; then
rm -f /etc/systemd/system/multi-user.target.wants/lshttpd.service
fi
if [ -e /etc/systemd/system/multi-user.target.wants/lsws.service ]; then
rm -f /etc/systemd/system/multi-user.target.wants/lsws.service
fi
chmod 644 ${SYSTEMDDIR}/litespeed.service
systemctl daemon-reload
systemctl enable litespeed.service
set_service litespeed ON
PLUGIN_DIR=/usr/local/directadmin/plugins/litespeed_webconsole
mkdir -p ${PLUGIN_DIR}/hooks
mkdir -p ${PLUGIN_DIR}/admin
mkdir -p ${PLUGIN_DIR}/images
safeDownloadWithMove "${PLUGIN_DIR}/images/admin_icon.svg" https://www.litespeedtech.com/images/logos/lsws-icon.svg
echo '<a href="http://|SERVER_NAME|:7080" target="_blank">LiteSpeed WebAdmin Console</a>' > ${PLUGIN_DIR}/hooks/admin_img.html
echo '<a href="http://|SERVER_NAME|:7080" target="_blank">LiteSpeed WebAdmin Console</a>' > ${PLUGIN_DIR}/hooks/admin_txt.html
touch ${PLUGIN_DIR}/admin/index.html
echo 'active=yes' > ${PLUGIN_DIR}/plugin.conf
echo 'author=www.litespeedtech.com, Martynas Bendorius' >> ${PLUGIN_DIR}/plugin.conf
echo 'id=litespeed' >> ${PLUGIN_DIR}/plugin.conf
echo 'installed=yes' >> ${PLUGIN_DIR}/plugin.conf
echo 'name=LiteSpeed WebAdmin Console' >> ${PLUGIN_DIR}/plugin.conf
echo 'update_url=' >> ${PLUGIN_DIR}/plugin.conf
echo 'version=0.1' >> ${PLUGIN_DIR}/plugin.conf
echo 'version_url=' >> ${PLUGIN_DIR}/plugin.conf
chown -R diradmin:diradmin ${PLUGIN_DIR}
csf_enable_quic
#Disable nginx & apache when switching to litespeed
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
if [ -e ${SYSTEMDDIR}/nginx.service ]; then
systemctl disable nginx.service 2> /dev/null
rm -f ${SYSTEMDDIR}/nginx.service
systemctl daemon-reload
fi
if [ -e ${SYSTEMDDIR}/httpd.service ]; then
systemctl disable httpd.service 2> /dev/null
rm -f ${SYSTEMDDIR}/httpd.service
systemctl daemon-reload
fi
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
if [ "${CAGEFS_OPT}" = "yes" ]; then
/usr/sbin/cagefsctl --configure-litespeed
/usr/sbin/cagefsctl --remount-all
fi
if [ -d /tmp/lshttpd ]; then
rm -rf /tmp/lshttpd
fi
if ! grep -m1 -q '<cgroups>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|</CGIRLimit>| <cgroups>2</cgroups>\n </CGIRLimit>|g' /usr/local/lsws/conf/httpd_config.xml
fi
echo "Restarting litespeed."
control_service litespeed reload
#Reload detached lsphp processes
touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt
echo "Installation of LiteSpeed ${LITESPEED_VER} is now complete."
echo "Admin panel address: http://${HOSTNAME}:7080. Please make sure that port 7080 is open in firewall."
if [ "${SHOWPASSWORD}" = "1" ]; then
if [ -e /usr/local/directadmin/scripts/setup.txt ]; then
if ! grep -m1 -q '^litespeedadmin=' /usr/local/directadmin/scripts/setup.txt; then
echo "litespeedadmin=${ADMIN_PASS}" >> /usr/local/directadmin/scripts/setup.txt
fi
fi
echo "Admin password: ${ADMIN_PASS}"
fi
writeLog "LiteSpeed ${LITESPEED_VER} installed"
removeLockfile
}
####################################################
doRemoveLiteSpeed() {
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
do_exit 1 "You cannot remove LiteSpeed, because you have it set in options.conf file."
fi
if [ ! -d /usr/local/lsws ]; then
do_exit 1 "/usr/local/lsws does not exist, cannot remove..."
fi
echo "Disabling litespeed in services.status..."
set_service litespeed delete
control_service litespeed stop
remove_directory /usr/local/directadmin/plugins/litespeed_webconsole
remove_directory /usr/local/lsws
echo "Disabling litespeed in systemd..."
if [ -e ${SYSTEMDDIR}/litespeed.service ]; then
systemctl disable lshttpd.service 2> /dev/null
systemctl disable litespeed.service 2> /dev/null
rm -f ${SYSTEMDDIR}/lshttpd.service
rm -f ${SYSTEMDDIR}/litespeed.service
rm -f ${SYSTEMDDIR}/openlitespeed.service
systemctl daemon-reload
fi
ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "LiteSpeed has been successfully removed"
writeLog "LiteSpeed removed"
}
####################################################
add_openlitespeed_alias_redirect() {
#A fake P real
F=$1
A=$2
P=$3
printf "\tcontext /${A}/ {\n" >> ${F}
if [ -d /var/www/html/${P} ]; then
printf "\t\tlocation /var/www/html/${P}/\n" >> ${F}
else
printf "\t\tlocation /var/www/html/${P}\n" >> ${F}
fi
printf "\t\tinclude /usr/local/lsws/conf/httpd-webapps-php.conf\n" >> ${F}
printf "\t}\n" >> ${F}
}
add_openlitespeed_alias() {
F=$1
A=$2
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
printf "\tcontext /${A}/ {\n" >> ${F}
if [ -d /var/www/html/${A} ]; then
printf "\t\tlocation /var/www/html/${A}/\n" >> ${F}
else
printf "\t\tlocation /var/www/html/${A}\n" >> ${F}
fi
printf "\t\tinclude /usr/local/lsws/conf/httpd-webapps-php.conf\n" >> ${F}
printf "\t}\n" >> ${F}
fi
}
do_rewrite_openlitespeed_webapps() {
if [ -e ${WORKDIR}/custom/openlitespeed/conf/httpd-alias.conf ] && [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
cp -pf ${WORKDIR}/custom/openlitespeed/conf/httpd-alias.conf /usr/local/lsws/conf/httpd-alias.conf
else
NW=/usr/local/lsws/conf/httpd-alias.conf
: > ${NW}
#For let's encrypt challenges
LETSENCRYPT=`getDA_Opt letsencrypt 1`
if [ "${LETSENCRYPT}" = "1" ]; then
add_openlitespeed_alias ${NW} .well-known/acme-challenge
fi
if [ "${SQUIRRELMAIL_OPT}" = "yes" ]; then
add_openlitespeed_alias ${NW} squirrelmail
fi
if [ "${ROUNDCUBE_OPT}" = "yes" ]; then
add_openlitespeed_alias ${NW} roundcube
fi
if [ "${PHPMYADMIN_OPT}" = "yes" ]; then
add_openlitespeed_alias ${NW} phpMyAdmin
add_openlitespeed_alias_redirect ${NW} phpmyadmin phpMyAdmin
add_openlitespeed_alias_redirect ${NW} pma phpMyAdmin
fi
WEBMAILLINK=`get_webmail_link`
if [ -e /var/www/html/${WEBMAILLINK} ]; then
if [ "${WEBMAILLINK}" = "webmail" ]; then
add_openlitespeed_alias ${NW} webmail
else
add_openlitespeed_alias_redirect ${NW} webmail ${WEBMAILLINK}
fi
fi
#protect other places
printf '\tcontext /roundcube/bin/ {\n' >> ${NW}
printf '\t\ttype NULL\n' >> ${NW}
printf '\t\tlocation /var/www/html/roundcube/bin\n' >> ${NW}
printf '\t\tallowBrowse 0\n' >> ${NW}
printf '\t\taddDefaultCharset off\n' >> ${NW}
printf '\t}\n' >> ${NW}
printf '\tcontext /roundcube/SQL/ {\n' >> ${NW}
printf '\t\ttype NULL\n' >> ${NW}
printf '\t\tlocation /var/www/html/roundcube/SQL\n' >> ${NW}
printf '\t\tallowBrowse 0\n' >> ${NW}
printf '\t\taddDefaultCharset off\n' >> ${NW}
printf '\t}\n' >> ${NW}
printf '\tcontext /roundcube/config/ {\n' >> ${NW}
printf '\t\ttype NULL\n' >> ${NW}
printf '\t\tlocation /var/www/html/roundcube/config\n' >> ${NW}
printf '\t\tallowBrowse 0\n' >> ${NW}
printf '\t\taddDefaultCharset off\n' >> ${NW}
printf '\t}\n' >> ${NW}
printf '\tcontext /roundcube/logs/ {\n' >> ${NW}
printf '\t\ttype NULL\n' >> ${NW}
printf '\t\tlocation /var/www/html/roundcube/logs\n' >> ${NW}
printf '\t\tallowBrowse 0\n' >> ${NW}
printf '\t\taddDefaultCharset off\n' >> ${NW}
printf '\t}\n' >> ${NW}
printf '\tcontext /roundcube/temp/ {\n' >> ${NW}
printf '\t\ttype NULL\n' >> ${NW}
printf '\t\tlocation /var/www/html/roundcube/temp\n' >> ${NW}
printf '\t\tallowBrowse 0\n' >> ${NW}
printf '\t\taddDefaultCharset off\n' >> ${NW}
printf '\t}\n' >> ${NW}
printf '\tcontext /phpMyAdmin/log/ {\n' >> ${NW}
printf '\t\ttype NULL\n' >> ${NW}
printf '\t\tlocation /var/www/html/phpMyAdmin/log\n' >> ${NW}
printf '\t\tallowBrowse 0\n' >> ${NW}
printf '\t\taddDefaultCharset off\n' >> ${NW}
printf '\t}\n' >> ${NW}
fi
if [ -s "${WEBAPPS_LIST}" ]; then
#https://forum.directadmin.com/showthread.php?t=48203&p=247343#post247343
echo "Adding custom webapps from ${WEBAPPS_LIST}"
cat ${WEBAPPS_LIST} | while read l; do
app=`echo "$l" | cut -d= -f1`
app_path=`echo "$l" | cut -d= -f2`
if [ "${app}" = "" ] || [ "${app_path}" = "" ]; then
echo "${boldon}Check your ${WEBAPPS_LIST}. A name or path is blank.${boldoff}"
echo "name=$app"
echo "path=$app_path"
continue
fi
if [ ! -e /var/www/html/${app_path} ]; then
echo "${boldon}Cannot find path /var/www/html/${app_path} for alias ${app}${boldoff}"
continue
fi
if [ -e /var/www/html/${app} ] && [ "${app}" = "${app_path}" ]; then
add_openlitespeed_alias ${NW} ${app}
else
add_openlitespeed_alias_redirect ${NW} ${app} ${app_path}
fi
echo "Added ${app} pointing to ${app_path}"
done
fi
}
doOpenLiteSpeed() {
if [ "${WEBSERVER_OPT}" != "openlitespeed" ]; then
do_exit 1 "You cannot install OpenLiteSpeed, because you do not have it set in options.conf file."
fi
if [ ! -e ${DEBIAN_VERSION} ] && [ "${OS_CENTOS_VER}" = "8" ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage libnsl` -ne 0 ]; then
yum -y install libnsl
fi
fi
if [ "${B64}" = "2" ]; then
getFile openlitespeed/openlitespeed-${OPENLITESPEED_VER}.src.tgz openlitespeed_src openlitespeed-${OPENLITESPEED_VER}.src.tgz
else
getFile openlitespeed/openlitespeed-${OPENLITESPEED_VER}.tgz openlitespeed openlitespeed-${OPENLITESPEED_VER}.tgz
fi
quitIfLocked doOpenLiteSpeed
#die die die!!
if [ -s /usr/sbin/apache2 ]; then
chmod 0 /usr/sbin/apache2
killall -9 apache2 2> /dev/null
fi
if [ -s /usr/lib/apache2/mpm-prefork/apache2 ]; then
chmod 0 /usr/lib/apache2/mpm-prefork/apache2
killall -9 apache2 2> /dev/null
fi
if [ ! -d /var/www/html ]; then
mkdir -p /var/www/html
fi
set64
addUserGroup lsadm lsadm
addUserGroup apache apache
addToAccess apache
chown apache:apache /var/www
chmod 551 /var/www
mkdir -p /var/log/httpd/domains
chmod 710 /var/log/httpd/
chgrp apache /var/log/httpd/
chown apache:apache /var/log/httpd/domains
find /var/log/httpd -user root -exec chown apache {} \;
cd ${CWD}
if [ "${B64}" = "2" ]; then
FILE=${CWD}/openlitespeed-${OPENLITESPEED_VER}.src.tgz
else
FILE=${CWD}/openlitespeed-${OPENLITESPEED_VER}.tgz
fi
checkFile ${FILE}
echo "Installing OpenLiteSpeed ${OPENLITESPEED_VER}..."
if [ ! -d "${LSWS_HOME}" ]; then
mkdir -p "${LSWS_HOME}/conf"
elif [ -d /usr/local/lsws/autoupdate ]; then
rm -rf /usr/local/lsws/autoupdate
fi
if [ -L /usr/local/lsws/admin/html ]; then
rm -f /usr/local/lsws/admin/html
fi
if [ "${B64}" = "2" ]; then
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd openlitespeed-${OPENLITESPEED_VER}
else
tar xzf ${FILE} -C /usr/local/lsws/ --strip-components=1 --no-same-owner
fi
if [ "${B64}" = "2" ]; then
setFDSETSIZE
#configure
echo "Configuring openlitespeed-${OPENLITESPEED_VER}"
${CWD}/${OPENLITESPEED_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure Apache 2. Check the ${APACHE2_CONFIGURE} file\n"
do_exit 1
fi
echo "Done Configuration."
while echo "Trying to make OpenLiteSpeed..."; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 0
fi
else
break
fi
done
echo "Make complete"
checkRPMS
fi
#setup the directadmin.conf
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
setVal cloud_cache 1 ${DACONF_TEMPLATE_FILE}
setVal cloud_cache 1 ${DACONF_FILE}
echo "action=cache&value=showallusers" >> ${TASK_QUEUE}
run_dataskq
elif [ "${CLOUDLINUX_OPT}" = "no" ]; then
setVal cloud_cache 0 ${DACONF_TEMPLATE_FILE}
setVal cloud_cache 0 ${DACONF_FILE}
fi
setVal nginx 0 ${DACONF_TEMPLATE_FILE}
setVal nginx 0 ${DACONF_FILE}
setVal nginx_proxy 0 ${DACONF_TEMPLATE_FILE}
setVal nginx_proxy 0 ${DACONF_FILE}
setVal litespeed 0 ${DACONF_TEMPLATE_FILE}
setVal litespeed 0 ${DACONF_FILE}
setVal openlitespeed 1 ${DACONF_TEMPLATE_FILE}
setVal openlitespeed 1 ${DACONF_FILE}
killall nginx >/dev/null 2>&1
killall litespeed >/dev/null 2>&1
killall httpd >/dev/null 2>&1
doRestartDA
set_service nginx delete
set_service httpd delete
killall -9 nginx >/dev/null 2>&1
killall -9 litespeed >/dev/null 2>&1
killall -9 httpd >/dev/null 2>&1
set_service litespeed ON
if [ "${B64}" = "2" ]; then
echo "Installing OpenLiteSpeed ${OPENLITESPEED_VER}..."
make install
fi
# Remove LiteSpeed Enterprise binary if it exists, symlink to OpenLiteSpeed
ln -sf /usr/local/lsws/bin/openlitespeed /usr/local/lsws/bin/litespeed
ln -sf /usr/local/lsws/bin/openlitespeed /usr/local/lsws/bin/lshttpd
rm -f /usr/local/lsws/bin/lscgid
cp -pf /usr/local/lsws/admin/conf/admin_config.conf.in /usr/local/lsws/admin/conf/admin_config.conf
perl -pi -e 's|%ADMIN_PORT%|7080|g' /usr/local/lsws/admin/conf/admin_config.conf
perl -pi -e 's|secure 0|secure 1\n keyFile\t/usr/local/lsws/ssl.key/server.key\n certFile\t/usr/local/lsws/ssl.crt/server.crt.combined \n clientVerify\t0|g' /usr/local/lsws/admin/conf/admin_config.conf
if [ -s /usr/local/lsws/admin/fcgi-bin/admin_php5 ] && [ ! -L /usr/local/lsws/admin/fcgi-bin/admin_php ]; then
ln -sf /usr/local/lsws/admin/fcgi-bin/admin_php5 /usr/local/lsws/admin/fcgi-bin/admin_php
fi
if [ -d /usr/local/lsws/admin/html.open ] && [ ! -L /usr/local/lsws/admin/html ]; then
ln -sf /usr/local/lsws/admin/html.open /usr/local/lsws/admin/html
fi
if [ ! -d /usr/local/lsws/admin/logs ]; then
mkdir -p /usr/local/lsws/admin/logs
fi
chmod 700 /usr/local/lsws/admin/conf
chown -R lsadm:lsadm /usr/local/lsws/admin/conf
chmod 600 /usr/local/lsws/admin/conf/*
if [ ! -s /usr/local/lsws/admin/conf/htpasswd ]; then
export ADMIN_USER=admin
export ADMIN_PASS="`random_pass`"
ENCRYPT_PASS="`/usr/local/lsws/admin/fcgi-bin/admin_php -q /usr/local/lsws/admin/misc/htpasswd.php \"${ADMIN_PASS}\"`"
echo "admin:${ENCRYPT_PASS}" > "/usr/local/lsws/admin/conf/htpasswd"
SHOWPASSWORD=1
else
SHOWPASSWORD=0
fi
if [ ! -d /usr/local/lsws/admin/tmp ]; then
mkdir -p /usr/local/lsws/admin/tmp
chown lsadm:apache /usr/local/lsws/admin/tmp
chmod 710 /usr/local/lsws/admin/tmp
fi
chown lsadm:apache /usr/local/lsws/admin
chmod 710 /usr/local/lsws/admin
if [ "${MODSECURITY_OPT}" = "yes" ]; then
if [ "${B64}" = "2" ]; then
echo "Installing ModSecurity module for OpenLiteSpeed ${OPENLITESPEED_VER}..."
cd ./src/modules/modsecurity-ls
gmake -f Makefile.f
cp -fp mod_security.so /usr/local/lsws/modules/mod_security.so
cd ${CWD}/openlitespeed-${OPENLITESPEED_VER}
fi
echo -n '' > ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
echo 'module mod_security {' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
echo 'modsecurity on' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
echo 'modsecurity_rules_file /usr/local/lsws/conf/httpd-modsecurity.conf' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
create_global_modsecurity_rules
echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
echo '}' >> ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
cp -pf ${MODSECURITY_OPENLITESPEED_INCLUDE} ${LSWS_HOME}/conf/httpd-modsecurity.conf
else
echo -n '' > ${LSWS_HOME}/conf/httpd-modsecurity-enable.conf
fi
removeLockfile
#fresh install, add to System Backup
if [ ! -s ${SYSTEMDDIR}/litespeed.service ]; then
add_to_system_backup dirs /usr/local/lsws
fi
echo "Enabling litespeed in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/litespeed.service ]; then
cp -f ${CB_CUST_SYSTEMD}/litespeed.service ${SYSTEMDDIR}/litespeed.service
else
cp -f ${CB_SYSTEMD}/litespeed.service ${SYSTEMDDIR}/litespeed.service
fi
if [ ! -L /etc/systemd/system/lshttpd.service ]; then
rm -f /etc/systemd/system/lshttpd.service
fi
if [ -e /etc/systemd/system/multi-user.target.wants/lshttpd.service ]; then
rm -f /etc/systemd/system/multi-user.target.wants/lshttpd.service
fi
chmod 644 ${SYSTEMDDIR}/litespeed.service
systemctl daemon-reload
systemctl enable litespeed.service
#Disable nginx & apache when switching to openlitespeed
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
if [ -e ${SYSTEMDDIR}/nginx.service ]; then
systemctl disable nginx.service 2> /dev/null
rm -f ${SYSTEMDDIR}/nginx.service
systemctl daemon-reload
fi
if [ -e ${SYSTEMDDIR}/httpd.service ]; then
systemctl disable httpd.service 2> /dev/null
rm -f ${SYSTEMDDIR}/httpd.service
systemctl daemon-reload
fi
fi
HAVE_DACONF=0
if [ -s ${DACONF_FILE} ]; then
HAVE_DACONF=1
fi
#copy the new configs if needed
if [ "`grep -m1 -c 'include' ${LSWS_HOME}/conf/directadmin-vhosts.conf`" = "0" ] || [ ! -e ${LSWS_HOME}/conf/directadmin-vhosts.conf ]; then
cp -rf ${OPENLITESPEEDCONFDIR} ${LSWS_HOME}
if [ "${OPENLITESPEEDCUSTOMCONFDIR}" != "0" ]; then
cp -rf ${OPENLITESPEEDCUSTOMCONFDIR} ${LSWS_HOME}
fi
fi
dovecotChecks
do_rewrite_openlitespeed_webapps
ensure_server_ca
csf_enable_quic
doModSecurityAdj
doSslConfigurationWebserver
#rewrite ips.conf if needed
echo "action=rewrite&value=ips" >> ${TASK_QUEUE}
echo "action=rewrite&value=openlitespeed" >> ${TASK_QUEUE}
run_dataskq
#tokenize the IP and ports if needed
tokenize_IP
tokenize_ports
doVhosts
if [ ! -s ${LSWS_HOME}/ssl.key/server.key ] || [ ! -s ${LSWS_HOME}/ssl.crt/server.crt.combined ]; then
cd ${WORKDIR}
mkdir -p ${LSWS_HOME}/ssl.key
mkdir -p ${LSWS_HOME}/ssl.crt
if [ -e /etc/httpd/conf/ssl.crt/server.crt ] && [ -e /etc/httpd/conf/ssl.key/server.key ]; then
cat /etc/httpd/conf/ssl.key/server.key > ${LSWS_HOME}/ssl.key/server.key
cat /etc/httpd/conf/ssl.crt/server.crt >> ${LSWS_HOME}/ssl.crt/server.crt.combined
if [ -e /etc/httpd/conf/ssl.crt/server.ca ]; then
cat /etc/httpd/conf/ssl.crt/server.ca >> ${LSWS_HOME}/ssl.crt/server.crt.combined
fi
elif [ -e /etc/nginx/ssl.crt/server.crt.combined ] && [ -e /etc/nginx/ssl.key/server.key ]; then
cat /etc/nginx/ssl.key/server.key > ${LSWS_HOME}/ssl.crt/server.crt
cat /etc/nginx/ssl.crt/server.crt.combined >> ${LSWS_HOME}/ssl.crt/server.crt.combined
else
#install the cert/key
/usr/bin/openssl req -x509 -newkey rsa:2048 -keyout ${LSWS_HOME}/ssl.key/server.key -out ${LSWS_HOME}/ssl.crt/server.crt.combined -days 9999 -nodes -config ./${APCERTCONF}
fi
chmod 600 ${LSWS_HOME}/ssl.crt/server.crt.combined
chmod 600 ${LSWS_HOME}/ssl.key/server.key
cd ${CWD}
fi
if [ ! -e ${WWWDIR}/index.html ]; then
if [ -e ${WWWDIR}/index.html.en ]; then
cp -f ${WWWDIR}/index.html.en ${WWWDIR}/index.html
else
echo "<html>OpenLiteSpeed is functioning normally</html>" > ${WWWDIR}/index.html
fi
fi
perl -pi -e 's/[A-Za-z]* is functioning normally/OpenLiteSpeed is functioning normally/' ${WWWDIR}/index.html
if [ ! -e /etc/logrotate.d/apache ]; then
safeDownloadWithMove /etc/logrotate.d/apache "${WEBPATH}/apache.logrotate"
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
if [ "${CAGEFS_OPT}" = "yes" ]; then
/usr/sbin/cagefsctl --remount-all
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${CAGEFS_OPT}" = "yes" ]; then
OLS_ENABLELVE=2
elif [ "${CLOUDLINUX_OPT}" = "yes" ]; then
OLS_ENABLELVE=1
else
OLS_ENABLELVE=0
fi
if ! grep -m1 -q "^enableLVE.*=${OLS_ENABLELVE}" ${LSWS_HOME}/conf/httpd-defaults.conf; then
perl -pi -e "s|^enableLVE.*|enableLVE ${OLS_ENABLELVE}|g" ${LSWS_HOME}/conf/httpd-defaults.conf
fi
ldconfig
if [ ! -d ${LSWS_HOME}/logs ]; then
mkdir -p ${LSWS_HOME}/logs
fi
# lsadm owner needed for WebAdmin to work (disabled by default) + "make install" to succeed
chown -R lsadm:lsadm /usr/local/lsws/conf
mkdir -p ${LSWS_HOME}/cachedata
chown apache:apache ${LSWS_HOME}/cachedata
# chmod lsws directory 750
if ! stat ${LSWS_HOME}/conf | grep -m1 Access | grep -m1 -q -o "\---"; then
chmod 750 ${LSWS_HOME}/conf
fi
if [ -d /tmp/lshttpd ]; then
rm -rf /tmp/lshttpd
fi
echo "Restarting OpenLiteSpeed."
control_service litespeed reload
#Reload detached lsphp processes
touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt
echo "Installation of OpenLiteSpeed ${OPENLITESPEED_VER} is now complete."
echo "Admin panel address: http://${HOSTNAME}:7080. Please make sure that port 7080 is open in firewall. Panel is read-only."
if [ "${SHOWPASSWORD}" = "1" ]; then
if [ -e /usr/local/directadmin/scripts/setup.txt ]; then
if ! grep -m1 -q '^litespeedadmin=' /usr/local/directadmin/scripts/setup.txt; then
echo "litespeedadmin=${ADMIN_PASS}" >> /usr/local/directadmin/scripts/setup.txt
fi
fi
echo "Admin password: ${ADMIN_PASS}"
fi
writeLog "OpenLiteSpeed ${OPENLITESPEED_VER} installed"
removeLockfile
}
doModSecurityAdj() {
if [ "${MODSECURITY_OPT}" = "yes" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then
MODSECURITY_CONF_FILE=/etc/httpd/conf/extra/httpd-modsecurity.conf
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
if ! grep -m1 -q '<enableCensorship>0</enableCensorship>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|<enableCensorship>0</enableCensorship>|<enableCensorship>1</enableCensorship>|g' /usr/local/lsws/conf/httpd_config.xml
fi
if ! grep -m1 -q '<uploadTmpDir>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|</enableCensorship>|</enableCensorship>\n <uploadTmpDir>/tmp</uploadTmpDir>|g' /usr/local/lsws/conf/httpd_config.xml
fi
if ! grep -m1 -q '<secAuditLog>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|</enableCensorship>|</enableCensorship>\n <secAuditLog>/var/log/httpd/modsec_audit.log</secAuditLog>|g' /usr/local/lsws/conf/httpd_config.xml
fi
fi
elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
MODSECURITY_CONF_FILE=/usr/local/lsws/conf/httpd-modsecurity.conf
else
MODSECURITY_CONF_FILE=/etc/nginx/nginx-modsecurity.conf
fi
if [ "${MODSECURITY_UPLOADSCAN_OPT}" = "yes" ] && [ "${CLAMAV_OPT}" = "yes" ]; then
if [ ! -e /usr/local/bin/clamdscan ]; then
removeLockfile
doclamav
fi
if [ ! -e /usr/local/bin/clamdscan ]; then
do_exit 1 "Cannot enable upload scan in ProFTPd because there is no ClamAV (/usr/local/bin/clamdscan) on the system."
fi
cp -pf ${RUNAV_PL} /usr/local/bin/runav.pl
chmod 755 /usr/local/bin/runav.pl
cp -pf ${RUNAV_CONF} /etc/modsecurity.d/runav.conf
else
rm -f /usr/local/bin/runav.pl
rm -f /etc/modsecurity.d/runav.conf
fi
if [ -d ${MODSECURITY_CUSTOM_RULES} ]; then
echo "Copying custom ModSecurity rules to /etc/modsecurity.d/..."
cp -Rpf ${MODSECURITY_CUSTOM_RULES}/* /etc/modsecurity.d/
fi
if [ -s /etc/modsecurity.d/000_i360_0.conf ]; then
echo "Defaulting to Imunify 360 SecDefaultAction..."
perl -pi -e 's|^SecDefaultAction|#SecDefaultAction|g' ${MODSECURITY_CONF_FILE}
fi
if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then
echo "Defaulting to Comodo WAF SecDefaultAction..."
perl -pi -e 's|^SecDefaultAction|#SecDefaultAction|g' ${MODSECURITY_CONF_FILE}
fi
else
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
if ! grep -m1 -q '<enableCensorship>1</enableCensorship>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|<enableCensorship>1</enableCensorship>|<enableCensorship>0</enableCensorship>|g' /usr/local/lsws/conf/httpd_config.xml
fi
fi
fi
}
####################################################
doModSecurityRules() {
cd ${CWD}
if [ ! -d /etc/modsecurity.d ]; then
mkdir -p /etc/modsecurity.d
fi
rm -f /etc/modsecurity.d/*
if [ "${MODSECURITY_RULESET_OPT}" = "" ]; then
echo "";
echo "";
echo "";
echo "**********************";
echo "";
echo "The setting modsecurity_ruleset is blank. This will cause rewrite issues.";
echo "Please set it to something, eg:";
echo " ./build set modsecurity_ruleset ${MODSECURITY_RULESET_DEF}";
echo "";
echo "**********************";
echo "";
echo "";
echo "";
sleep 5;
fi
if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then
echo "Installing Comodo Rule Set for ModSecurity..."
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
# Generate empty files, so that nginx would still be able to start
if [ ! -e /etc/modsecurity.d/comodo_rules.conf.main ]; then
touch /etc/modsecurity.d/comodo_rules.conf.main
fi
if [ ! -e /etc/modsecurity.d/comodo_rules.conf ]; then
touch /etc/modsecurity.d/comodo_rules.conf
fi
getFileCWAF cwaf_rules_nginx_3-${CWAF_RULES_NGINX_VER}.tgz
CWAF_PLATFORM=Nginx
elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then
getFileCWAF cwaf_rules_ls-${CWAF_RULES_LS_VER}.tgz cwaf_rules_ls
CWAF_PLATFORM=LiteSpeed
else
getFileCWAF cwaf_rules-${CWAF_RULES_VER}.tgz cwaf_rules
CWAF_PLATFORM=Apache
fi
if [ ! -e /usr/local/cwaf/scripts/updater.pl ]; then
safeDownloadWithMove "${CWD}/cwaf_client_install.sh" "${WEBPATH_CWAF}/cpanel/cwaf_client_install.sh"
chmod 700 cwaf_client_install.sh
HOME=/root TERM=xterm ./cwaf_client_install.sh -- --batch --login=nologin --password=nopassword --platform=${CWAF_PLATFORM}
#### plugin was not installed exit ###
if [ $? -ne 0 ]; then
rm -f cwaf_client_install.sh
do_exit 1 "Installation of Comodo WAF plugin failed"
fi
cd ${WORKDIR}
rm -f cwaf_client_install.sh
else
echo 'Updating to latest CWAF client version'
/usr/local/cwaf/scripts/update-client.pl
fi
echo "Include /etc/cwaf/cwaf.conf" > /etc/modsecurity.d/comodo_rules.conf.main
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
perl -pi -e 's/cwaf_platform="Apache"/cwaf_platform="Nginx"/' /etc/cwaf/main.conf
perl -pi -e 's/cwaf_platform="LiteSpeed"/cwaf_platform="Nginx"/' /etc/cwaf/main.conf
/usr/local/cwaf/scripts/updater.pl -p /usr/local/directadmin/custombuild/cwaf_rules_nginx_3-${CWAF_RULES_NGINX_VER}.tgz
cd ${WORKDIR}
rm -f cwaf_rules_nginx_3-${CWAF_RULES_NGINX_VER}.tgz cwaf_rules_nginx_3
if [ -s /etc/cwaf/cwaf.conf ]; then
if grep -m1 -q '^IncludeOptional' /etc/cwaf/cwaf.conf; then
perl -pi -e 's|IncludeOptional|Include|g' /etc/cwaf/cwaf.conf
fi
fi
elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then
perl -pi -e 's/cwaf_platform="Nginx"/cwaf_platform="LiteSpeed"/' /etc/cwaf/main.conf
perl -pi -e 's/cwaf_platform="Apache"/cwaf_platform="LiteSpeed"/' /etc/cwaf/main.conf
/usr/local/cwaf/scripts/updater.pl -p /usr/local/directadmin/custombuild/cwaf_rules_ls-${CWAF_RULES_LS_VER}.tgz
cd ${WORKDIR}
rm -f cwaf_rules_ls-${CWAF_RULES_LS_VER}.tgz
else
perl -pi -e 's/cwaf_platform="Nginx"/cwaf_platform="Apache"/' /etc/cwaf/main.conf
perl -pi -e 's/cwaf_platform="LiteSpeed"/cwaf_platform="Apache"/' /etc/cwaf/main.conf
/usr/local/cwaf/scripts/updater.pl -p /usr/local/directadmin/custombuild/cwaf_rules-${CWAF_RULES_VER}.tgz
cd ${WORKDIR}
rm -f cwaf_rules-${CWAF_RULES_VER}.tgz
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
if grep -m1 -q 'Include [0-9].' /etc/modsecurity.d/comodo_rules.conf.main; then
sed -i '/Include \//! s/Include /Include \/usr\/local\/cwaf\/rules\//g' /etc/modsecurity.d/comodo_rules.conf.main
fi
fi
fi
if [ "${MODSECURITY_RULESET_OPT}" = "owasp" ]; then
echo "Installing OWASP Core Rule Set for ModSecurity..."
getFile owasp-modsecurity-crs-${OWASP_RULES_VER}.tar.gz owasp3_rules
tar xzf owasp-modsecurity-crs-${OWASP_RULES_VER}.tar.gz -C /etc/modsecurity.d/ owasp-modsecurity-crs-${OWASP_RULES_VER}/crs-setup.conf.example --strip-components=1 --no-same-owner
tar xzf owasp-modsecurity-crs-${OWASP_RULES_VER}.tar.gz -C /etc/modsecurity.d/ owasp-modsecurity-crs-${OWASP_RULES_VER}/rules --strip-components=2 --no-same-owner
echo ${OWASP_RULES_VER} > /etc/modsecurity.d/owasp_rules_version
if [ -e /etc/modsecurity.d/crs-setup.conf.example ]; then
mv -f /etc/modsecurity.d/crs-setup.conf.example /etc/modsecurity.d/crs-setup.conf.main
fi
perl -pi -e 's|^SecDefaultAction|#SecDefaultAction|' /etc/modsecurity.d/crs-setup.conf.main
fi
doModSecurityAdj
echo "Installation of ModSecurity Rule Set has been finished."
if [ ! -e /etc/modsecurity.d/comodo_rules.conf.main ]; then
touch /etc/modsecurity.d/comodo_rules.conf.main
fi
if [ ! -e /etc/modsecurity.d/comodo_rules.conf ]; then
touch /etc/modsecurity.d/comodo_rules.conf
fi
if [ "$1" != "norestart" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
control_service httpd restart
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "nginx" ]; then
control_service nginx restart
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
control_service litespeed reload
fi
fi
cd ${CWD}
}
####################################################
doModSecsdbmutil() {
cd ${CWD}
if [ "${MODSECURITY_OPT}" = "no" ]; then
do_exit 1 "Cannot build ModSecurity, because you do not have it set in options.conf file."
fi
#We don't expect version to change, so, hardcoding it here
MODSECSDBMUTIL_VER=1.0
MODSECSDBMUTIL_FILENAME=modsec-sdbm-util
getFile ${MODSECSDBMUTIL_FILENAME}-${MODSECSDBMUTIL_VER}.tar.gz ${MODSECSDBMUTIL_FILENAME}
quitIfLocked doModSecsdbmutil
FILE=${CWD}/${MODSECSDBMUTIL_FILENAME}-${MODSECSDBMUTIL_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd ${MODSECSDBMUTIL_FILENAME}-${MODSECSDBMUTIL_VER}
./autogen.sh
echo "Configuring ${MODSECSDBMUTIL_FILENAME}-${MODSECSDBMUTIL_VER}..."
./configure
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure ModSecurity\n"
do_exit 1
fi
echo "Done Configuration."
while echo "Trying to make ModSec-sdbm-util..."; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): "
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make Complete"
while echo "Installing ModSec-sdbm-util..."; do
make install
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "ModSec-sdbm-util has been installed successfully."
writeLog "ModSec-sdbm-util ${MODSECSDBMUTIL_VER} installed"
removeLockfile
cd ${CWD}
}
doModSecurity() {
cd ${CWD}
if [ "${MODSECURITY_OPT}" = "no" ]; then
do_exit 1 "Cannot build ModSecurity, because you do not have it set in options.conf file."
fi
if [ ! -e /usr/include/libxslt/xslt.h ] && [ ! -e /usr/local/include/libxslt/xslt.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find libxslt, installing using apt-get..."
apt-get -y install libxslt-dev
else
echo "Cannot find libxslt, installing using yum..."
yum -y install libxslt-devel
fi
fi
if [ ! -e /usr/include/lua.h ] && [ ! -e /usr/local/include/lua.h ]; then
if [ ! -e /etc/debian_version ]; then
if [ "${OS_CENTOS_VER}" = "8" ]; then
yum -y install lua-devel --enablerepo=${POWERTOOLS}
elif [ "${OS_CENTOS_VER}" = "9" ]; then
yum -y install lua-devel --enablerepo=crb
else
yum -y install lua-devel
fi
fi
fi
if [ ! -e /usr/lib64/libyajl.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libyajl.so ] && [ ! -e /usr/lib/aarch64-linux-gnu/libyajl.so ] && [ ! -e /usr/local/lib/libyajl.so ]; then
if [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install libyajl-dev
else
if [ "${OS_CENTOS_VER}" = "8" ]; then
yum -y install yajl-devel --enablerepo=${POWERTOOLS}
elif [ "${OS_CENTOS_VER}" = "9" ]; then
yum -y install yajl-devel --enablerepo=crb
else
yum -y install yajl-devel
fi
fi
fi
ldconfig
if [ "${WEBSERVER_OPT}" = "apache" ]; then
if [ ! -e /usr/sbin/apxs ]; then
echo "/usr/sbin/apxs is not found, skipping ModSecurity for now."
return
fi
if [ ! -e /usr/lib/apache/libaprutil-1.so ]; then
echo "/usr/lib/apache/libaprutil-1.so is not found, skipping ModSecurity for now. Please run './build apache' to get the libraries in place."
return
fi
elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then
echo "ModSecurity is built-in with LiteSpeed, there is no need to install it."
elif [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
removeLockfile
./build openlitespeed
else
echo "ModSecurity is not needed for Nginx, please check LibModSecurity (ModSecurity 3.0)."
return
fi
if [ "${MOD_RUID2_OPT}" = "yes" ]; then
mkdir -p /var/log/modsec_audit
chmod 1733 /var/log/modsec_audit
fi
if [ "${WEBSERVER_OPT}" = "apache" ]; then
getFile ${MODSECURITY_FILENAME}-${MODSECURITY_VER}.tar.gz ${MODSECURITY_FILENAME}
quitIfLocked doModSecurity
FILE=${CWD}/${MODSECURITY_FILENAME}-${MODSECURITY_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd ${MODSECURITY_FILENAME}-${MODSECURITY_VER}
echo "Installing ${MODSECURITY_FILENAME}-${MODSECURITY_VER}..."
if [ ! -e ./configure ]; then
echo "calling aclocal:"
aclocal
echo "calling libtoolize:"
libtoolize --force
echo "calling automake:"
automake --add-missing
echo "calling autoreconf:"
autoreconf
fi
echo "Configuring ${MODSECURITY_FILENAME}-${MODSECURITY_VER}..."
${CWD}/${MODSECURITY_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure ModSecurity\n"
do_exit 1
fi
echo "Done Configuration."
while echo "Trying to make ModSecurity..."; do
make CPPFLAGS="-I/usr/include/apache -L/usr/lib/apache -DDEFAULT_USER='\"nginx\"' -DDEFAULT_GROUP='\"nginx\"'" CFLAGS="-I/usr/include/apache -L/usr/lib/apache -DDEFAULT_USER='\"nginx\"' -DDEFAULT_GROUP='\"nginx\"'" -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): "
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 0
fi
else
break
fi
done
echo "Make Complete"
fi
mkdir -p /etc/modsecurity.d
chmod 700 /etc/modsecurity.d
if [ "${WEBSERVER_OPT}" = "apache" ]; then
if [ -e /usr/lib/apache/mod_security2.so ]; then
rm -f /usr/lib/apache/mod_security2.so
fi
while echo "Installing ModSecurity..."; do
make install
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 0
fi
else
break
fi
done
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then
#Add mod_security include in apache
if [ -e ${PHPMODULES} ]; then
perl -pi -e 's|^LoadModule security2_module|#LoadModule security2_module|' /etc/httpd/conf/httpd.conf
if ! grep -m1 -q 'httpd-modsecurity' ${PHPMODULES}; then
echo "Include /etc/httpd/conf/extra/httpd-modsecurity.conf" >> ${PHPMODULES}
fi
cp -pf ${MODSECURITY_APACHE_INCLUDE} /etc/httpd/conf/extra/httpd-modsecurity.conf
if [ -e /usr/lib/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then
perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
elif [ -e /usr/lib64/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then
perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib64/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
elif [ -e /usr/lib/x86_64-linux-gnu/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then
perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib/x86_64-linux-gnu/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
elif [ -e /usr/lib/aarch64-linux-gnu/libxml2.so ] && [ ! -e /usr/local/lib/libxml2.so ]; then
perl -pi -e 's|LoadFile /usr/local/lib/libxml2.so|LoadFile /usr/lib/aarch64-linux-gnu/libxml2.so|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
perl -pi -e 's|^Load|#Load|g' /etc/httpd/conf/extra/httpd-modsecurity.conf
fi
fi
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
if ! grep -m1 -q '<enableCensorship>0</enableCensorship>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|<enableCensorship>0</enableCensorship>|<enableCensorship>1</enableCensorship>|g' /usr/local/lsws/conf/httpd_config.xml
fi
if ! grep -m1 -q '<uploadTmpDir>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|</enableCensorship>|</enableCensorship>\n <uploadTmpDir>/tmp</uploadTmpDir>|g' /usr/local/lsws/conf/httpd_config.xml
fi
if ! grep -m1 -q '<secAuditLog>' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|</enableCensorship>|</enableCensorship>\n <secAuditLog>/var/log/httpd/modsec_audit.log</secAuditLog>|g' /usr/local/lsws/conf/httpd_config.xml
fi
fi
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
run_dataskq
if [ -s /usr/local/modsecurity/lib/mod_security2.so ]; then
cp -pf /usr/local/modsecurity/lib/mod_security2.so /usr/lib/apache/mod_security2.so
fi
echo "ModSecurity has been installed successfully."
writeLog "ModSecurity ${MODSECURITY_VER} installed"
removeLockfile
#For initial comodo ruleset installation we need to restart webserver
#So that it detects installation of modsecurity
if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ]; then
control_service httpd restart
elif [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
control_service litespeed reload
fi
fi
doModSecurityRules norestart
if [ "${WEBSERVER_OPT}" = "apache" ]; then
control_service httpd restart
elif [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
control_service litespeed reload
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
}
####################################################
doModSecurityConnector() {
cd ${CWD}
#For nginx we need to rebuild it, because ModSecurity is added as a static module
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
getFile ${MODSECURITY_NGINX_CONNECTOR_FILENAME}-${MODSECURITY_NGINX_CONNECTOR_VER}.tar.gz modsecurity3_nginx
tar xzf ${MODSECURITY_NGINX_CONNECTOR_FILENAME}-${MODSECURITY_NGINX_CONNECTOR_VER}.tar.gz
echo -n '' > /etc/nginx/nginx-modsecurity-enable.conf
echo 'modsecurity on;' >> /etc/nginx/nginx-modsecurity-enable.conf
echo 'modsecurity_rules_file /etc/nginx/nginx-modsecurity.conf;' >> /etc/nginx/nginx-modsecurity-enable.conf
create_global_modsecurity_rules
echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules;' >> /etc/nginx/nginx-modsecurity-enable.conf
if [ -s /etc/httpd/conf/extra/nginx-modsecurity-enable.conf ]; then
echo -n '' > /etc/httpd/conf/extra/nginx-modsecurity-enable.conf
fi
if nginx -V 2>&1 | grep -q -o -m1 'modsecurity-nginx-v[^ ]*'; then
MODSECURITY_NGINX_CONNECTORV=`nginx -V 2>&1 | grep -o -m1 'modsecurity-nginx-v[^ ]*' | cut -d- -f3`
else
MODSECURITY_NGINX_CONNECTORV=0
fi
#Recompile nginx only if connector's version is different
if [ "${MODSECURITY_NGINX_CONNECTORV}" != "${MODSECURITY_NGINX_CONNECTOR_VER}" ]; then
if [ "$1" = "1" ]; then
cd ${CWD}
# Build nginx to enable the module statically (./configure --add-module=../mod_security/nginx/modsecurity)
echo "Building Nginx to enable ModSecurity module statically."
removeLockfile
./build nginx
fi
fi
elif [ "${WEBSERVER_OPT}" = "apache" ]; then
getFile ${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER}.tar.gz modsecurity3_nginx
tar xzf ${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER}.tar.gz
if [ -d "${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER}" ]; then
rm -rf "${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER}"
fi
cd ${MODSECURITY_APACHE_CONNECTOR_FILENAME}-${MODSECURITY_APACHE_CONNECTOR_VER}
./autogen.sh
./configure
make -j ${CPU_CORES}
make install
if [ -s ./src/.libs/mod_security3.so ]; then
cp -pf ./src/.libs/mod_security3.so /usr/lib/apache/mod_security3.so
fi
echo -n '' > /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
echo '<IfModule mod_security3.c>' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
echo 'modsecurity on' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
echo 'modsecurity_rules_file /etc/nginx/nginx-modsecurity.conf' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
create_global_modsecurity_rules
echo 'modsecurity_rules_file /usr/local/directadmin/data/admin/modsecurity_rules' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
echo '</IfModule>' >> /etc/httpd/conf/extra/httpd-modsecurity-enable.conf
cp -pf ${MODSECURITY_APACHE_INCLUDE} /etc/httpd/conf/extra/httpd-modsecurity.conf
else
if [ -d /etc/nginx ]; then
echo -n '' > /etc/nginx/nginx-modsecurity-enable.conf
fi
fi
if [ ! -d /etc/nginx ]; then
mkdir -p /etc/nginx
fi
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
cp -pf ${MODSECURITY_NGINX_INCLUDE} /etc/nginx/nginx-modsecurity.conf
elif [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
cp -pf ${MODSECURITY_NGINX_REVERSE_INCLUDE} /etc/nginx/nginx-modsecurity.conf
fi
echo "ModSecurity Connector ${MODSECURITY_NGINX_CONNECTOR_VER} is now enabled in Nginx"
}
doLibModSecurity() {
cd ${CWD}
if [ "${MODSECURITY_OPT}" = "no" ]; then
do_exit 1 "Cannot build ModSecurity, because you do not have it set in options.conf file."
fi
if [ ! -e /usr/include/libxslt/xslt.h ] && [ ! -e /usr/local/include/libxslt/xslt.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find libxslt, installing using apt-get..."
apt-get -y install libxslt-dev
else
echo "Cannot find libxslt, installing using yum..."
yum -y install libxslt-devel
fi
fi
if [ ! -e /usr/lib64/libyajl.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libyajl.so ] && [ ! -e /usr/lib/aarch64-linux-gnu/libyajl.so ] && [ ! -e /usr/local/lib/libyajl.so ]; then
if [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install libyajl-dev
else
yum -y install yajl-devel
fi
fi
if [ ! -s /usr/local/include/maxminddb.h ] && [ "${LIBMAXMINDDB_VER}" != "0" ]; then
echo "Installing latest version of libmaxminddb to provide /usr/local/lib/libmaxminddb.so for LibModSecurity."
dolibmaxminddb
fi
# if [ ! -e /usr/local/bin/geoipupdate ] && [ "${GEOIPUPDATE_VER}" != "0" ]; then
# echo "Installing latest version of geoipupdate to provide /usr/local/bin/geoipupdate for LibModSecurity."
# doGeoipupdate
# fi
if [ ! -e /usr/local/lib/liblua.so ] && [ "${LUA_VER}" != "0" ]; then
echo "Installing latest version of lua to provide /usr/local/bin/geoipupdate for LibModSecurity."
doLua
fi
if [ "${WEBSERVER_OPT}" != "nginx" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ] && [ "${WEBSERVER_OPT}" != "apache" ]; then
do_exit 1 "LibModSecurity connector is only available for nginx and apache right now."
fi
ldconfig
getFile ${LIBMODSECURITY_FILENAME}-v${LIBMODSECURITY_VER}.tar.gz modsecurity3
quitIfLocked doModSecurity
FILE=${CWD}/${LIBMODSECURITY_FILENAME}-v${LIBMODSECURITY_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd ${LIBMODSECURITY_FILENAME}-v${LIBMODSECURITY_VER}
echo "Configuring ${LIBMODSECURITY_FILENAME}-v${LIBMODSECURITY_VER}..."
${CWD}/${MODSECURITY_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure LibModSecurity\n"
do_exit 1
fi
echo "Done Configuration."
while echo "Trying to make LibModSecurity..."; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
echo -n -e "\n*** The make has failed, would you like to try to make again? (y,n): "
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make Complete"
mkdir -p /etc/modsecurity.d
chmod 700 /etc/modsecurity.d
while echo "Installing LibModSecurity..."; do
make install
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The install has failed, would you like to try to install it again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
removeLockfile
#For nginx we need to rebuild it, because ModSecurity is added as a static module
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ] || [ "${WEBSERVER_OPT}" = "apache" ] ; then
if [ "$1" = "0" ]; then
doModSecurityConnector 0
else
doModSecurityConnector 1
fi
fi
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
run_dataskq
echo "LibModSecurity has been installed successfully."
writeLog "LibModSecurity ${LIBMODSECURITY_VER} installed"
#For initial comodo ruleset installation we need to restart webserver
#So that it detects installation of modsecurity
if [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ]; then
control_service httpd restart
elif [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
control_service litespeed reload
elif [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
control_service nginx restart
fi
fi
doModSecurityRules norestart
if [ "${WEBSERVER_OPT}" = "apache" ]; then
control_service httpd restart
elif [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
control_service litespeed reload
elif [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
control_service nginx restart
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
}
####################################################
doNginx() {
if [ "${WEBSERVER_OPT}" != "nginx" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ]; then
do_exit 1 "You cannot install Nginx, because you do not have it set in options.conf file."
fi
getFile nginx-${NGINX_VER}.tar.gz nginx
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
NGX_CACHE_PURGE_VER=`getVer ngx_cache_purge`
getFile ngx_cache_purge-${NGX_CACHE_PURGE_VER}.tar.gz ngx_cache_purge
mkdir -p ngx_cache_purge/
tar xzf ngx_cache_purge-${NGX_CACHE_PURGE_VER}.tar.gz -C ngx_cache_purge/ --strip-components=1 --no-same-owner
fi
quitIfLocked doNginx
ADMNNGINX=/usr/local/directadmin/data/users/admin/nginx.conf
if [ ! -e ${ADMNNGINX} ] && [ -d /usr/local/directadmin/data/users/admin ]; then
echo -n "" > ${ADMNNGINX}
chown diradmin:admin ${ADMNNGINX}
chmod 640 ${ADMNNGINX}
fi
if [ ! -d /var/www/html ]; then
mkdir -p /var/www/html
fi
set64
set_http2
addUserGroup nginx nginx
addToAccess nginx
if grep -m1 -q '^apache:' /etc/group; then
usermod -a -G apache nginx 2>/dev/null
fi
chown webapps:nginx /var/www
chmod 551 /var/www
cd ${CWD}
FILE=${CWD}/nginx-${NGINX_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd nginx-${NGINX_VER}
setFDSETSIZE
#copy the new configs
if [ ! -d ${NGINXCONF} ]; then
mkdir -p ${NGINXCONF}
fi
cp -rf ${NGINXCONFDIR}/* ${NGINXCONF}
if [ ! -d ${NGINXCONF}/templates ]; then
mkdir -p ${NGINXCONF}/templates
fi
cp -rf ${NGINXTEMPLATESDIR}/* ${NGINXCONF}/templates
if [ ! -e ${NGINXCONF}/directadmin-settings.conf ]; then
touch ${NGINXCONF}/directadmin-settings.conf
fi
if [ ! -e ${NGINXCONF}/directadmin-ips.conf ]; then
touch ${NGINXCONF}/directadmin-ips.conf
fi
if [ ! -e ${NGINXCONF}/nginx-includes.conf ]; then
touch ${NGINXCONF}/nginx-includes.conf
fi
if [ ! -e ${NGINXCONF}/nginx-modsecurity-enable.conf ]; then
touch ${NGINXCONF}/nginx-modsecurity-enable.conf
elif [ "${MODSECURITY_OPT}" = "no" ]; then
echo -n '' > ${NGINXCONF}/nginx-modsecurity-enable.conf
fi
MODSEC_APPENDED=0
if [ "${MODSECURITY_OPT}" = "yes" ]; then
removeLockfile
if [ ! -s /usr/local/modsecurity/lib/pkgconfig/modsecurity.pc ]; then
echo "LibModSecurity has not been installed, installing..."
doLibModSecurity 0
fi
cd ${CWD}/nginx-${NGINX_VER}
MODSEC_DIR=../${MODSECURITY_NGINX_CONNECTOR_FILENAME}-${MODSECURITY_NGINX_CONNECTOR_VER}
if [ ! -d ${MODSEC_DIR} ]; then
removeLockfile
cd ${CWD}
doModSecurityConnector 0
cd nginx-${NGINX_VER}
fi
if ! grep -q \"\-\-add-module=${MODSEC_DIR}\" ${CWD}/${NGINX_CONFIGURE}; then
MODSEC_APPENDED=1
perl -pi -e "s#./configure \\\#./configure --add-module=${MODSEC_DIR} \\\#" ${CWD}/${NGINX_CONFIGURE}
fi
fi
#configure
echo "Configuring nginx-${NGINX_VER}"
${CWD}/${NGINX_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure Nginx. Check the ${NGINX_CONFIGURE} file\n"
do_exit 1
fi
echo "Done Configuration."
if [ "${MODSEC_APPENDED}" = "1" ]; then
perl -pi -e "s#./configure --add-module=${MODSEC_DIR} \\\#./configure \\\#" ${CWD}/${NGINX_CONFIGURE}
fi
echo "increasing FD_SETSIZE in os/tpf/os.h .."
if [ -e ./os/tpf/os.h ]; then
perl -pi -e 's/\#define FD_SETSIZE.*2048/\#ifdef FD_SETSIZE\n\#undef FD_SETSIZE\n\#endif\n\#define FD_SETSIZE 32768/' ./os/tpf/os.h
fi
while echo "Trying to make Nginx..."; do
C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
checkRPMS
echo "Installing Nginx..."
control_service nginx stop >/dev/null 2>&1
# A fix for "cp: cannot create regular file `/usr/sbin/nginx': Text file busy"
killall nginx
sleep 2
killall -9 nginx >/dev/null 2>&1
sleep 1
make install
cd ${CWD}
#fresh install, add to System Backup
if [ ! -s ${SYSTEMDDIR}/nginx.service ]; then
add_to_system_backup dirs /etc/nginx
fi
echo "Enabling nginx in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/nginx.service ]; then
cp -f ${CB_CUST_SYSTEMD}/nginx.service ${SYSTEMDDIR}/nginx.service
else
cp -f ${CB_SYSTEMD}/nginx.service ${SYSTEMDDIR}/nginx.service
fi
chmod 644 ${SYSTEMDDIR}/nginx.service
systemctl daemon-reload
systemctl enable nginx.service
#Disable httpd & litespeed, when switching to nginx
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
if [ -e ${SYSTEMDDIR}/httpd.service ]; then
systemctl disable httpd.service 2> /dev/null
rm -f ${SYSTEMDDIR}/httpd.service
systemctl daemon-reload
fi
if [ -e ${SYSTEMDDIR}/litespeed.service ]; then
systemctl disable lshttpd.service 2> /dev/null
systemctl disable litespeed.service 2> /dev/null
rm -f ${SYSTEMDDIR}/lshttpd.service
rm -f ${SYSTEMDDIR}/litespeed.service
systemctl daemon-reload
fi
fi
#Disable litespeed, when switching to nginx_apache
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -e ${SYSTEMDDIR}/litespeed.service ]; then
systemctl disable lshttpd.service 2> /dev/null
systemctl disable litespeed.service 2> /dev/null
rm -f ${SYSTEMDDIR}/lshttpd.service
rm -f ${SYSTEMDDIR}/litespeed.service
systemctl daemon-reload
fi
fi
for php_shortrelease in `echo ${PHP1_SHORTRELEASE_SET}`; do
perl -pi -e "s|/usr/local/php${php_shortrelease}/sockets/webapps.sock|/usr/local/php${PHP1_SHORTRELEASE}/sockets/webapps.sock|" ${NGINXCONF}/nginx.conf
done
tokenize_IP
tokenize_ports
if [ "${IPV6}" = "0" ]; then
perl -pi -e 's| listen \[::1\]:| #listen \[::1\]:|' ${NGINXCONF}/nginx-vhosts.conf
perl -pi -e 's| listen \[::1\]:| #listen \[::1\]:|' ${NGINXCONF}/nginx.conf
else
perl -pi -e 's| #listen \[::1\]:| listen \[::1\]:|' ${NGINXCONF}/nginx-vhosts.conf
perl -pi -e 's| #listen \[::1\]:| listen \[::1\]:|' ${NGINXCONF}/nginx.conf
fi
# Disable UserDir access if userdir_access=no is set in the options.conf file
if [ "${USERDIR_ACCESS_OPT}" = "no" ]; then
perl -pi -e 's| include /etc/nginx/nginx-userdir.conf;| #include /etc/nginx/nginx-userdir.conf;|' /etc/nginx/nginx-vhosts.conf
else
perl -pi -e 's| #include /etc/nginx/nginx-userdir.conf;| include /etc/nginx/nginx-userdir.conf;|' /etc/nginx/nginx-vhosts.conf
fi
fpmChecks
dovecotChecks
do_rewrite_nginx_webapps
#rewrite ips.conf if needed
echo "action=rewrite&value=ips" >> ${TASK_QUEUE}
echo "action=rewrite&value=nginx" >> ${TASK_QUEUE}
run_dataskq
doVhosts
doSslConfigurationWebserver
if [ ! -s ${NGINXCONF}/ssl.key/server.key ] || [ ! -s ${NGINXCONF}/ssl.crt/server.crt ]; then
cd ${WORKDIR}
mkdir -p ${NGINXCONF}/ssl.key
mkdir -p ${NGINXCONF}/ssl.crt
if [ -s ${HTTPDCONF}/ssl.key/server.key ] && [ -s ${HTTPDCONF}/ssl.crt/server.crt ]; then
cp -pf ${HTTPDCONF}/ssl.key/server.key ${NGINXCONF}/ssl.key
cp -pf ${HTTPDCONF}/ssl.crt/server.crt ${NGINXCONF}/ssl.crt/server.crt
else
#install the cert/key
/usr/bin/openssl req -x509 -newkey rsa:2048 -keyout ${NGINXCONF}/ssl.key/server.key -out ${NGINXCONF}/ssl.crt/server.crt -days 9999 -nodes -config ./${APCERTCONF}
fi
chmod 600 ${NGINXCONF}/ssl.crt/server.crt
chmod 600 ${NGINXCONF}/ssl.key/server.key
cd ${CWD}
fi
ensure_server_ca
if [ "${NGINXCUSTOMCONFDIR}" != "0" ]; then
cp -rf ${NGINXCUSTOMCONFDIR}/* ${NGINXCONF}/
fi
if [ "${NGINXCUSTOMEMPLATESDIR}" != "0" ]; then
cp -rf ${NGINXCUSTOMEMPLATESDIR}/* ${NGINXCONF}/templates/
fi
tokenize_IP
tokenize_ports
if [ "${MODSECURITY_OPT}" = "yes" ]; then
doModSecurityRules norestart
fi
mkdir -p ${WWWDIR}
if [ ! -e ${WWWDIR}/index.html ]; then
echo "<html>Nginx is functioning normally</html>" > ${WWWDIR}/index.html
fi
perl -pi -e 's/[A-Za-z]* is functioning normally/Nginx is functioning normally/' ${WWWDIR}/index.html
if [ ! -e /etc/logrotate.d/nginx ]; then
safeDownloadWithMove /etc/logrotate.d/nginx "${WEBPATH}/nginx.logrotate"
fi
if [ ! -d /var/log/nginx/domains ]; then
mkdir -p /var/log/nginx/domains
fi
chmod 710 /var/log/nginx
chown nginx:${ROOT_GRP} /var/log/nginx
#setup the directadmin.conf
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
setVal cloud_cache 1 ${DACONF_TEMPLATE_FILE}
setVal cloud_cache 1 ${DACONF_FILE}
echo "action=cache&value=showallusers" >> ${TASK_QUEUE}
run_dataskq d
elif [ "${CLOUDLINUX_OPT}" = "no" ]; then
setVal cloud_cache 0 ${DACONF_TEMPLATE_FILE}
setVal cloud_cache 0 ${DACONF_FILE}
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
setVal nginx_proxy 1 ${DACONF_TEMPLATE_FILE}
setVal nginx_proxy 1 ${DACONF_FILE}
setVal nginx 0 ${DACONF_TEMPLATE_FILE}
setVal nginx 0 ${DACONF_FILE}
setVal litespeed 0 ${DACONF_TEMPLATE_FILE}
setVal litespeed 0 ${DACONF_FILE}
killall litespeed >/dev/null 2>&1
setVal openlitespeed 0 ${DACONF_TEMPLATE_FILE}
setVal openlitespeed 0 ${DACONF_FILE}
doRestartDA
set_service litespeed delete
killall -9 litespeed >/dev/null 2>&1
else
setVal nginx_proxy 0 ${DACONF_TEMPLATE_FILE}
setVal nginx_proxy 0 ${DACONF_FILE}
setVal nginx 1 ${DACONF_TEMPLATE_FILE}
setVal nginx 1 ${DACONF_FILE}
setVal litespeed 0 ${DACONF_TEMPLATE_FILE}
setVal litespeed 0 ${DACONF_FILE}
setVal openlitespeed 0 ${DACONF_TEMPLATE_FILE}
setVal openlitespeed 0 ${DACONF_FILE}
killall httpd >/dev/null 2>&1
killall litespeed >/dev/null 2>&1
doRestartDA
set_service httpd delete
set_service litespeed delete
killall -9 httpd >/dev/null 2>&1
killall -9 litespeed >/dev/null 2>&1
fi
set_service nginx ON
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "Restarting nginx."
control_service nginx stop >/dev/null 2>&1
control_service nginx start
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
rm -rf ${CWD}/ngx_cache_purge
fi
writeLog "Nginx ${NGINX_VER} installed"
removeLockfile
}
doRemoveNginx() {
if [ "${WEBSERVER_OPT}" = "nginx" ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
do_exit 1 "You cannot remove Nginx, because you have it set in options.conf file."
fi
if [ ! -e /usr/sbin/nginx ]; then
do_exit 1 "/usr/sbin/nginx does not exist, cannot remove..."
fi
echo "Disabling nginx in services.status..."
set_service nginx delete
control_service nginx stop >/dev/null 2>&1
# A fix for "cp: cannot create regular file `/usr/sbin/nginx': Text file busy"
sleep 2
killall -9 nginx >/dev/null 2>&1
echo "Disabling nginx in systemd..."
if [ -e ${SYSTEMDDIR}/nginx.service ]; then
systemctl disable nginx.service
rm -f ${SYSTEMDDIR}/nginx.service
systemctl daemon-reload
fi
remove_file /etc/logrotate.d/nginx
remove_file /usr/sbin/nginx
remove_directory /var/log/nginx
remove_directory /etc/nginx
ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "Nginx has been successfully removed"
writeLog "Nginx removed"
}
####################################################
doJailshell() {
if [ ! -x /usr/bin/bwrap ] && [ ! -x /usr/local/bin/bwrap ]; then
echo "Bubblewrap is needed for Jail Shell, it's not installed. Please run: ./build bubblewrap."
fi
if [ ! -x /usr/local/bin/msmtp ]; then
doMsmtp
fi
if [ ! -d /etc/exim.jail ]; then
echo "action=rewrite&value=jail" >> ${TASK_QUEUE}
echo "Executing the task.queue cotents now, please be patient ..."
run_dataskq d
fi
echo "Downloading jailshell to /usr/bin/jailshell..."
getFile bubblewrap/jailshell-${JAILSHELL_SH_VER}.sh jailshell_sh jailshell-${JAILSHELL_SH_VER}
if grep -m1 -q 'bwrap' jailshell-${JAILSHELL_SH_VER}; then
mv -f jailshell-${JAILSHELL_SH_VER} /usr/bin/jailshell
chmod 755 /usr/bin/jailshell
fi
if [ ! -d /usr/lib/modules ]; then
mkdir -p /usr/lib/modules
fi
echo "/usr/bin/jailshell has been installed."
}
doBubblewrap() {
quitIfLocked doBubblewrap
LXC_SKIP_BWRAP=true
if [ -e /dev/.lxc/proc/self/uid_map ]; then
if ! cat /dev/.lxc/proc/self/uid_map >/dev/null 2>&1; then
LXC_SKIP_BWRAP=false
fi
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
echo "Please rely on CloudLinux CageFS for isolation of the users (cloudlinux=yes detected in the settings)."
return
elif systemd-detect-virt | grep -m1 -q -E 'lxc|openvz'; then
if ${LXC_SKIP_BWRAP}; then
echo "Your container virtualization does not support Linux namespaces for user isolation, please switch to XEN/KVM/VMware or other non-container virtualization.."
return
fi
fi
cd ${CWD}
getFile bubblewrap/bubblewrap-${BUBBLEWRAP_VER}.tar.xz bubblewrap bubblewrap-${BUBBLEWRAP_VER}.tar.xz
tar xJf bubblewrap-${BUBBLEWRAP_VER}.tar.xz --no-same-owner
cd bubblewrap-${BUBBLEWRAP_VER}
if [ "${OS_CENTOS_VER}" = "7" ] || [ -s /etc/debian_version ]; then
./configure --prefix=/usr --sysconfdir=/etc --disable-man --with-priv-mode=setuid
else
./configure --prefix=/usr --sysconfdir=/etc --disable-man
fi
while echo "Trying to make bubblewrap"; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
make install
#enable jail=1
if [ -s ${DACONF_FILE} ]; then
if ! grep -q -m1 'jail=0' ${DACONF_FILE}; then
setVal jail 1 ${DACONF_TEMPLATE_FILE}
setVal jail 1 ${DACONF_FILE}
doRestartDA
fi
fi
writeLog "bubblewrap ${BUBBLEWRAP_VER} installed"
removeLockfile
cd ${CWD}
doJailshell
}
####################################################
doXapian() {
quitIfLocked doXapian
cd ${CWD}
getFile xapian/xapian-core-${XAPIAN_CORE_VER}.tar.xz xapian-core xapian-core-${XAPIAN_CORE_VER}.tar.xz
tar xJf xapian-core-${XAPIAN_CORE_VER}.tar.xz --no-same-owner
cd xapian-core-${XAPIAN_CORE_VER}
./configure
while echo "Trying to make xapian-core"; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
make install
writeLog "xapian-core ${XAPIAN_CORE_VER} installed"
removeLockfile
cd ${CWD}
}
####################################################
doFTSXapian() {
if [ ! -x /usr/local/bin/xapian-config ]; then
doXapian
fi
if [ ! -e /usr/include/sqlite3.h ] && [ ! -e /usr/local/include/sqlite3.h ]; then
if [ -e /etc/debian_version ]; then
echo "Cannot find /usr/include/sqlite3.h, installing using apt-get..."
apt-get -y install libsqlite3-dev
else
echo "Cannot find /usr/include/sqlite3.h, installing using yum..."
yum -y install sqlite-devel
fi
fi
quitIfLocked doFTSXapian
cd ${CWD}
getFile xapian/fts-xapian-${FTS_XAPIAN_VER}.tar.gz fts-xapian fts-xapian-${FTS_XAPIAN_VER}.tar.gz
tar xzf fts-xapian-${FTS_XAPIAN_VER}.tar.gz --no-same-owner
cd fts-xapian-${FTS_XAPIAN_VER}
if [ -d /usr/lib64/dovecot ]; then
DOVECOT_FLAG="--with-dovecot=/usr/lib64/dovecot"
elif [ -d /usr/lib/dovecot ]; then
DOVECOT_FLAG="--with-dovecot=/usr/lib/dovecot"
else
DOVECOT_FLAG=""
fi
autoreconf -i
./configure --prefix=/usr ${DOVECOT_FLAG}
while echo "Trying to make fts-xapian ${FTS_XAPIAN_VER}"; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
make install
if [ "${DOVECOT_CONF_OPT}" = "yes" ]; then
cp -f ${DOVECTCONFFTS} /etc/dovecot/conf.d/90-fts-xapian.conf
echo 'mail_plugins = $mail_plugins fts fts_xapian quota zlib' > /etc/dovecot/conf/mail_plugins.conf
fi
ldconfig
cd ${WORKDIR}
removeLockfile
echo "Restarting dovecot."
control_service dovecot restart
}
####################################################
doPigeonhole() {
if [ "${PIGEONHOLE_OPT}" = "no" ]; then
do_exit 1 "Cannot install pigeonhole, because there is no version available for Dovecot ${DOVECOT_VER}."
fi
quitIfLocked doPigeonhole
cd ${CWD}
getFile dovecot-${DOVECOT_REL}-pigeonhole-${PIGEONHOLE_VER}.tar.gz pigeonhole${DOVECOT_SHORTREL}
tar xzf dovecot-${DOVECOT_REL}-pigeonhole-${PIGEONHOLE_VER}.tar.gz --no-same-owner
cd dovecot-${DOVECOT_REL}-pigeonhole-${PIGEONHOLE_VER}
if [ -d /usr/lib64/dovecot ]; then
DOVECOT_FLAG="--with-dovecot=/usr/lib64/dovecot"
elif [ -d /usr/lib/dovecot ]; then
DOVECOT_FLAG="--with-dovecot=/usr/lib/dovecot"
else
DOVECOT_FLAG=""
fi
./configure --prefix=/usr ${DOVECOT_FLAG}
while echo "Trying to make pigeonhole ${PIGEONHOLE_VER}"; do
make
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
make install
mkdir -p /var/lib/dovecot/sieve >/dev/null 2>&1
touch /var/lib/dovecot/sieve/default.sieve
sievec /var/lib/dovecot/sieve/default.sieve
chown root:${ROOT_GRP} /var/lib/dovecot/sieve/default.sieve
getFile patches/dovecot.conf.pigeonhole.patch dovecot.conf.pigeonhole.patch patches/dovecot.conf.pigeonhole.patch hexan
perl -pi -e 's#transport = virtual_localdelivery#transport = dovecot_lmtp_udp#' /etc/exim.conf
if [ "${DOVECOT_CONF_OPT}" = "no" ]; then
COUNT="`grep -m1 -c managesieve /etc/dovecot/dovecot.conf`"
if [ "${COUNT}" -eq 0 ] && [ -e ${WORKDIR}/patches/dovecot.conf.pigeonhole.patch ]; then
cd /etc/dovecot
patch -p0 < ${WORKDIR}/patches/dovecot.conf.pigeonhole.patch
fi
perl -pi -e "s|hostname #req|${HOSTNAME} #req|" /etc/dovecot/dovecot.conf
else
cp -f ${DOVECTCONFSIEVE} /etc/dovecot/conf.d/90-sieve.conf
echo 'protocols = imap pop3 lmtp sieve' > /etc/dovecot/conf/protocols.conf
echo 'mail_plugins = $mail_plugins quota sieve zlib' > /etc/dovecot/conf/lmtp_mail_plugins.conf
fi
cd ${WORKDIR}
removeLockfile
echo "Restarting dovecot."
control_service dovecot restart
echo "Restarting exim."
control_service exim restart
}
ensure_dovecot_dh() {
D_SSL=/etc/dovecot/conf/ssl.conf
SSL_DH=/etc/dovecot/dh.pem
echo "ensuring ssl_dh for dovecot: ${SSL_DH}";
NEED_SSL_DH=false
if [ ! -s ${SSL_DH} ]; then
NEED_SSL_DH=true
fi
if [ -s ${SSL_DH} ]; then
DH_FILE_SIZE=`stat -c %s ${SSL_DH}`
if [ "${DH_FILE_SIZE}" = "245" ]; then
echo "${SSL_DH} is only 1024 bits. Upgrading to 2048 bits."
NEED_SSL_DH=true
fi
fi
if ${NEED_SSL_DH}; then
ensure_dhparam ${SSL_DH}
if [ ! -s ${SSL_DH} ] && [ -s /var/lib/dovecot/ssl-parameters.dat ]; then
#this is only 1024 bits, backup if above fails.
dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dh -inform der > ${SSL_DH}
fi
chmod 600 ${SSL_DH}
fi
if [ -e $D_SSL ]; then
C=`grep -c ssl_dh ${D_SSL}`
if [ -s ${SSL_DH} ] && [ "$C" -eq 0 ]; then
echo "adding ssl_dh to ${D_SSL}";
echo "ssl_dh=<${SSL_DH}" >> ${D_SSL}
fi
C=`grep -c ssl_protocols ${D_SSL}`
if [ "${C}" -gt 0 ]; then
echo "swapping ssl_protocols to be ssl_min_protocols in ${D_SSL}"
perl -pi -e 's/^ssl_protocols = .*/ssl_min_protocol = TLSv1.1/' ${D_SSL}
fi
fi
}
doDovecotConf() {
if [ "${DOVECOT_CONF_OPT}" != "yes" ]; then
do_exit 1 "You cannot update Dovecot configuration files, because you do not have it set in options.conf file."
fi
echo "Updating dovecot configuration files..."
#Enable dovecot quota by default
COUNT=0
if [ -e ${DACONF_FILE} ]; then
COUNT="`grep -m1 -c -e '^add_userdb_quota=1' ${DACONF_FILE}`"
fi
if [ "${COUNT}" = "0" ] && [ -e ${DACONF_FILE} ]; then
echo "Adding add_userdb_quota=1 to the ${DACONF_FILE} file to enable dovecot quota..."
echo "add_userdb_quota=1" >> ${DACONF_FILE}
doRestartDA
echo "action=rewrite&value=email_passwd" >> ${TASK_QUEUE}
run_dataskq d
fi
COUNT_TEMPLATE="`grep -m1 -c -e '^add_userdb_quota=1' ${DACONF_TEMPLATE_FILE}`"
if [ "${COUNT_TEMPLATE}" = "0" ] && [ -e ${DACONF_TEMPLATE_FILE} ]; then
echo "Adding add_userdb_quota=1 to the ${DACONF_TEMPLATE_FILE} (template) file ..."
echo "add_userdb_quota=1" >> ${DACONF_TEMPLATE_FILE}
fi
if [ ! -d /etc/dovecot/conf ]; then
mkdir -p /etc/dovecot/conf
fi
if [ ! -d /etc/dovecot/conf.d ]; then
mkdir -p /etc/dovecot/conf.d
fi
cp -rf ${DOVECOTCONFDIR} /etc/dovecot/
doSslConfigurationEmail
#remove SSLv2 from dovecot config for openssl 1.1+
OV=`openssl_version | cut -d. -f1,2`
OPENSSL_11_OR_HIGHER=false
if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.1 'dovecot SSLv2 support for openssl 1.1.0 ver check'`" -ge 0 ]; then
OPENSSL_11_OR_HIGHER=true
fi
if ${OPENSSL_11_OR_HIGHER}; then
perl -pi -e 's|ssl_protocols \= !SSLv2 !SSLv3|ssl_protocols = !SSLv3|g' /etc/dovecot/conf/ssl.conf
fi
ensure_dovecot_dh
if [ "${IPV6}" = "1" ]; then
echo "listen = *, ::" > /etc/dovecot/conf/ip.conf
fi
if [ "${DOVECOTCUSTOMCONFDIR}" != "0" ]; then
cp -rf ${DOVECOTCUSTOMCONFDIR} /etc/dovecot/
fi
cp -f ${DOVECTCONFFILE} /etc/dovecot/dovecot.conf
cp -f ${DOVECTCONFQUOTA} /etc/dovecot/conf.d/90-quota.conf
if [ "${PIGEONHOLE_OPT}" = "yes" ]; then
cp -f ${DOVECTCONFSIEVE} /etc/dovecot/conf.d/90-sieve.conf
echo 'protocols = imap pop3 lmtp sieve' > /etc/dovecot/conf/protocols.conf
echo 'mail_plugins = $mail_plugins quota sieve zlib' > /etc/dovecot/conf/lmtp_mail_plugins.conf
else
rm -f /etc/dovecot/conf.d/90-sieve.conf
echo 'mail_plugins = $mail_plugins quota zlib' > /etc/dovecot/conf/lmtp_mail_plugins.conf
fi
if [ "${MAIL_COMPRESS_OPT}" = "yes" ]; then
cp -f ${DOVECOTCONFZLIB} /etc/dovecot/conf.d/90-zlib.conf
else
rm -f /etc/dovecot/conf.d/90-zlib.conf
fi
if [ -e /etc/dovecot/conf/lmtp.conf ]; then
perl -pi -e "s|HOSTNAME|${HOSTNAME}|" /etc/dovecot/conf/lmtp.conf
fi
if [ ! -L /etc/dovecot.conf ]; then
mv -f /etc/dovecot.conf /etc/dovecot.conf.old
ln -s ${DOVECOT_CONFIG} /etc/dovecot.conf
fi
if [ ! -e /usr/lib/dovecot/lib21_fts_xapian_plugin.a ] && [ ! -e /usr/lib64/dovecot/lib21_fts_xapian_plugin.a ]; then
echo 'mail_plugins = $mail_plugins quota zlib' > /etc/dovecot/conf/mail_plugins.conf
else
cp -f ${DOVECTCONFFTS} /etc/dovecot/conf.d/90-fts-xapian.conf
echo 'mail_plugins = $mail_plugins fts fts_xapian quota zlib' > /etc/dovecot/conf/mail_plugins.conf
fi
echo 'mail_plugins = $mail_plugins quota imap_quota zlib' > /etc/dovecot/conf/imap_mail_plugins.conf
#SSO alternate passwd file
if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then
if ${DA_BIN} c | grep -m1 -q '^one_click_webmail_login=1$'; then
safeDownloadWithMove /etc/dovecot/conf/alternate_passwd.conf "${WEBPATH_SERVICES}/all/auto_login/dovecot/alternate_passwd.conf"
elif [ -s /etc/dovecot/conf/alternate_passwd.conf ]; then
rm -f /etc/dovecot/conf/alternate_passwd.conf
fi
fi
MAIL_SNI_OPT=`getDA_Opt mail_sni 1`
if [ "${MAIL_SNI_OPT}" -eq 0 ]; then
rm -f /etc/dovecot/conf.d/95-sni.conf
else
if [ ! -d /etc/dovecot/conf/sni ]; then
mkdir /etc/dovecot/conf/sni
chmod 755 /etc/dovecot/conf/sni
chown mail:mail /etc/dovecot/conf/sni
fi
rm -f /etc/dovecot/conf/sni/*.conf
echo "action=rewrite&value=mail_sni" >> ${TASK_QUEUE}
if [ -x /usr/local/directadmin/dataskq ]; then
run_dataskq
fi
echo '!include_try /etc/dovecot/conf/sni/*.conf' > /etc/dovecot/conf.d/95-sni.conf
fi
#If customized configs - overwrite existing ones, which we modified above
if [ "${DOVECOTCUSTOMCONFDIR}" != "0" ]; then
if [ -e ${DOVECOTCUSTOMCONFDIR}/protocols.conf ]; then
cp -f ${DOVECOTCUSTOMCONFDIR}/protocols.conf /etc/dovecot/conf/protocols.conf
fi
if [ -e ${DOVECOTCUSTOMCONFDIR}/lmtp_mail_plugins.conf ]; then
cp -f ${DOVECOTCUSTOMCONFDIR}/lmtp_mail_plugins.conf /etc/dovecot/conf/lmtp_mail_plugins.conf
fi
if [ -e ${DOVECOTCUSTOMCONFDIR}/mail_plugins.conf ]; then
cp -f ${DOVECOTCUSTOMCONFDIR}/mail_plugins.conf /etc/dovecot/conf/mail_plugins.conf
fi
if [ -e ${DOVECOTCUSTOMCONFDIR}/imap_mail_plugins.conf ]; then
cp -f ${DOVECOTCUSTOMCONFDIR}/imap_mail_plugins.conf /etc/dovecot/conf/imap_mail_plugins.conf
fi
if [ -e ${DOVECOTCUSTOMCONFDIR}/lmtp.conf ]; then
cp -f ${DOVECOTCUSTOMCONFDIR}/lmtp.conf /etc/dovecot/conf/lmtp.conf
fi
fi
if [ "$1" != "norestart" ]; then
echo "Restarting dovecot."
control_service dovecot restart
fi
echo "Dovecot configuration files have been updated successfully."
writeLog "dovecot.conf installed"
}
ensure_dovecot_logrotate() {
cd ${CWD}
WL=/etc/logrotate.d/dovecot
if [ ! -s ${WL} ]; then
getFile dovecot.logrotate dovecot_logrotate
CWL=${CWD}/dovecot.logrotate
if [ ! -s ${CWL} ]; then
echo "Download of $CWL failed"
return
fi
cp -f ${CWL} ${WL}
chmod 644 ${WL}
fi
}
doDovecot() {
updateDovecot
if [ "${DOVECOT_OPT}" != "yes" ]; then
do_exit 1 "You cannot install Dovecot, because you do not have it set in options.conf file."
fi
if [ ! -e /usr/include/zstd.h ] && [ ! -e /usr/local/include/zstd.h ]; then
if [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install zstd libzstd-dev
else
if [ "${OS_CENTOS_VER}" = "7" ] ; then
yum -y install zstd libzstd-devel --enablerepo=${EPEL_REPO_NAME}
else
yum -y install zstd libzstd-devel
fi
fi
fi
quitIfLocked doDovecot
if [ "${DOVECOT_OPT}" = "no" ]; then
do_exit 1 "Dovecot is not set in options.conf."
fi
if [ ! -e ${WORKDIR}/dovecot-${DOVECOT_VER}.tar.gz ]; then
do_exit 1 "File dovecot-${DOVECOT_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}"
fi
if [ -e ${DACONF_FILE} ]; then
if ! grep -m1 -q -e '^dovecot=1' ${DACONF_FILE}; then
echo "Adding dovecot=1 to the ${DACONF_FILE} file..."
echo "dovecot=1" >> ${DACONF_FILE}
set_service dovecot ON
set_service vm-pop3d delete
doRestartDA
fi
fi
if [ -e ${DACONF_TEMPLATE_FILE} ]; then
if ! grep -m1 -q -e '^dovecot=1' ${DACONF_TEMPLATE_FILE}; then
echo "Adding dovecot=1 to the ${DACONF_TEMPLATE_FILE} (template) file ..."
echo "dovecot=1" >> ${DACONF_TEMPLATE_FILE}
set_service dovecot ON
fi
fi
echo "Installing dovecot ${DOVECOT_VER} ..."
addUserGroup dovecot dovecot
cd ${CWD}
FILE=${CWD}/dovecot-${DOVECOT_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
# if [ "${DOVECOT_VER}" = "2.3.6" ]; then
getFile patches/maildirlock-crash.patch maildirlock-crash.patch patches/maildirlock-crash.patch hexan
# fi
cd dovecot-${DOVECOT_VER}
echo "Patching syslog with LOG_PID ..."
perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/auth/main.c
perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/imap/main.c
perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/master/main.c
perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/pop3/main.c
perl -pi -e 's/LOG_NDELAY/LOG_NDELAY|LOG_PID/' src/lib-master/master-service.c
if ! grep -m1 -q 'this should never be reached anyways' src/util/maildirlock.c; then
if [ -s ${WORKDIR}/patches/maildirlock-crash.patch ]; then
echo "Patching maildirlock utility..."
patch -p1 < ${WORKDIR}/patches/maildirlock-crash.patch
fi
fi
echo "Configuring dovecot ${DOVECOT_VER} ..."
CONF_FILE=${CWD}/${DOVECOT_CONFIGURE}
${CONF_FILE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure dovecot. Please check ${DOVECOT_CONFIGURE} file.\n"
do_exit 1
fi
echo "Done Configuration."
while echo "Trying to make dovecot..."; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Installing ..."
make install
removeLockfile
touch /var/log/dovecot-lmtp.log /var/log/dovecot-lmtp-errors.log
chown root:${ROOT_GRP} /var/log/dovecot-lmtp.log /var/log/dovecot-lmtp-errors.log
chmod 600 /var/log/dovecot-lmtp.log /var/log/dovecot-lmtp-errors.log
cd ${CWD}
if [ ! -d /etc/dovecot ]; then
mkdir -p /etc/dovecot
fi
if [ "${DOVECOT_CONF_OPT}" = "no" ]; then
CONF_VER=0
INST_CONF=0
if [ -e /etc/dovecot.conf ]; then
CONF_VER=`grep -m1 '## Dovecot' /etc/dovecot.conf | awk '{print $3}'`
else
INST_CONF=1
fi
if [ ! -e ${DOVECOT_CONFIG} ]; then
INST_CONF=1
elif [ "$CONF_VER" != "2.0" ]; then
INST_CONF=1
fi
if [ ! -L /etc/dovecot.conf ]; then
mv -f /etc/dovecot.conf /etc/dovecot.conf.old
ln -s ${DOVECOT_CONFIG} /etc/dovecot.conf
fi
#install the dovecot.conf
if [ "$INST_CONF" -eq 1 ]; then
if [ "$INST_VER" = "2" ]; then
getFile dovecot.conf.2.0
mv -f ${CWD}/dovecot.conf.2.0 ${DOVECOT_CONFIG}
if [ ! -L /etc/dovecot.conf ]; then
mv -f /etc/dovecot.conf /etc/dovecot.conf.1.2
ln -s ${DOVECOT_CONFIG} /etc/dovecot.conf
fi
fi
fi
else
doDovecotConf norestart
fi
if [ ! -L /etc/dovecot.conf ]; then
mv -f /etc/dovecot.conf /etc/dovecot.conf.old
ln -s ${DOVECOT_CONFIG} /etc/dovecot.conf
fi
if [ "${PIGEONHOLE_OPT}" = "yes" ]; then
doPigeonhole
perl -pi -e 's#transport = virtual_localdelivery#transport = dovecot_lmtp_udp#' /etc/exim.conf
else
if [ -d /var/lib/dovecot/sieve ]; then
echo "Dovecot's Sieve/Pigeonhole is not enabled, but the directroy /var/lib/dovecot/sieve exists. Removing it."
rm -rf /var/lib/dovecot/sieve
fi
fi
if [ -s /usr/lib/dovecot/lib21_fts_xapian_plugin.so ] || [ -s /usr/lib64/dovecot/lib21_fts_xapian_plugin.so ]; then
doFTSXapian
fi
if [ "${IPV6}" = "1" ]; then
perl -pi -e 's|^listen = \*$|#listen = \*|' ${DOVECOT_CONFIG}
perl -pi -e 's|^#listen = \*, ::$|listen = \*, ::|' ${DOVECOT_CONFIG}
else
perl -pi -e 's|^#listen = \*$|listen = \*|' ${DOVECOT_CONFIG}
perl -pi -e 's|^listen = \*, ::$|#listen = \*, ::|' ${DOVECOT_CONFIG}
fi
#remove SSLv2 from dovecot config for openssl 1.1+
OV=`openssl_version | cut -d. -f1,2`
OPENSSL_11_OR_HIGHER=false
if [ "${OV}" != "" ] && [ "`version_cmp ${OV} 1.1 'dovecot SSLv2 support for openssl 1.1.0 ver check'`" -ge 0 ]; then
OPENSSL_11_OR_HIGHER=true
fi
if ${OPENSSL_11_OR_HIGHER}; then
perl -pi -e 's|ssl_protocols \= !SSLv2 !SSLv3|ssl_protocols = !SSLv3|g' ${DOVECOT_CONFIG}
fi
ensure_dovecot_dh
# Dovecot's "make install" overwrites these scripts, so we need to re-enable them everytime
#echo "Enabling dovecot.socket in systemd..."
if [ -e ${SYSTEMDDIR}/dovecot.socket ]; then
echo "Disabling dovecot.socket in systemd..."
systemctl disable dovecot.socket 2> /dev/null
rm -f ${SYSTEMDDIR}/dovecot.socket
systemctl daemon-reload
fi
# Dovecot's "make install" overwrites these scripts, so we need to re-enable them everytime
echo "Enabling dovecot in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/dovecot.service ]; then
cp -f ${CB_CUST_SYSTEMD}/dovecot.service ${SYSTEMDDIR}/dovecot.service
else
cp -f ${CB_SYSTEMD}/dovecot.service ${SYSTEMDDIR}/dovecot.service
fi
chmod 644 ${SYSTEMDDIR}/dovecot.service
systemctl daemon-reload
systemctl enable dovecot.service
if [ ! -e /etc/exim.cert ] && [ ! -e /etc/exim.key ]; then
getFile da_exim-cert-config
/usr/bin/openssl req -x509 -newkey rsa:2048 -keyout /etc/exim.key -out /etc/exim.cert -days 9999 -nodes -config ${WORKDIR}/da_exim-cert-config
fi
chmod 600 /etc/exim.cert /etc/exim.key
chown mail:mail /etc/exim.cert /etc/exim.key
if [ ! -d ${SYSTEMD_SCRIPTS}/dovecot ]; then
mkdir -p ${SYSTEMD_SCRIPTS}/dovecot
fi
if [ ! -e ${SYSTEMD_SCRIPTS}/dovecot/dovecot_prestartscript ]; then
if [ -e ${CB_CUST_SYSTEMD}/scripts/dovecot_prestartscript ]; then
cp -f ${CB_CUST_SYSTEMD}/scripts/dovecot_prestartscript ${SYSTEMD_SCRIPTS}/dovecot/prestartscript
else
cp -f ${CB_SYSTEMD}/scripts/dovecot_prestartscript ${SYSTEMD_SCRIPTS}/dovecot/prestartscript
fi
chmod 755 ${SYSTEMD_SCRIPTS}/dovecot/prestartscript
fi
ensure_dovecot_logrotate
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
/sbin/ldconfig
echo "Restarting dovecot."
systemctl daemon-reload
control_service dovecot restart
set_service dovecot ON
set_service vm-pop3d delete
writeLog "Dovecot ${DOVECOT_VER} installed"
}
####################################################
doRemoveDovecot() {
if [ "${DOVECOT_OPT}" != "no" ]; then
do_exit 1 "Cannot remove Dovecot, because it is enabled in options.conf file."
fi
echo "Disabling dovecot in services.status"
set_service dovecot delete
control_service dovecot stop
echo "Disabling dovecot in systemd..."
systemctl disable dovecot.service
rm -f ${SYSTEMDDIR}/dovecot.service
systemctl daemon-reload
remove_directory /usr/share/doc/dovecot
remove_directory /etc/dovecot
remove_directory /usr/lib/dovecot
remove_directory /usr/lib64/dovecot
remove_directory /usr/libexec/dovecot
remove_directory /usr/include/dovecot
remove_file /usr/sbin/dovecot
remove_file /etc/dovecot.conf
remove_file ${DOVECOT_CONFIG}
ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
writeLog "Dovecot removed"
}
dospamassassin() {
if [ "${SPAMD_OPT}" != "spamassassin" ]; then
do_exit 1 "SpamAssassin is not set in options.conf."
fi
#Install dependencies
if [ ! -x /usr/bin/spamd ]; then
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ "${OS_CENTOS_VER}" = "7" ]; then
PACKAGES="perl-Archive-Tar perl-Carp perl-DB_File perl-Data-Dumper perl-Digest-SHA perl-Encode-Detect perl-Exporter perl-File-Path perl-Getopt-Long perl-HTML-Parser perl-HTTP-Date perl-IO-Socket-SSL perl-IO-Zlib perl-Mail-DKIM perl-Mail-SPF perl-Net-DNS perl-NetAddr-IP perl-PathTools perl-Pod-Usage perl-Scalar-List-Utils perl-Socket perl-Sys-Syslog perl-Time-HiRes perl-Time-Local perl-constant perl-interpreter perl-libs perl-libwww-perl perl-version perl-DBI perl-Digest-SHA perl-ExtUtils-MakeMaker perl-IO-Socket-INET6 pyzor"
else
PACKAGES="perl-Archive-Tar perl-Carp perl-DB_File perl-Data-Dumper perl-Digest-SHA perl-Encode-Detect perl-Errno perl-Exporter perl-File-Path perl-Getopt-Long perl-HTML-Parser perl-HTTP-Date perl-IO perl-IO-Socket-SSL perl-IO-Zlib perl-Net-DNS perl-NetAddr-IP perl-PathTools perl-Pod-Usage perl-Scalar-List-Utils perl-Socket perl-Sys-Syslog perl-Time-HiRes perl-Time-Local perl-constant perl-interpreter perl-libs perl-libwww-perl perl-version perl-DBI perl-Digest-SHA perl-ExtUtils-MakeMaker perl-IO-Socket-INET6 pyzor"
fi
MISSING_PACKAGES=" "
for package in ${PACKAGES}; do {
PACKAGE_TEST=`checkRPMPackage ${package}`
if [ ${PACKAGE_TEST} -ne 0 ]; then
MISSING_PACKAGES="${package} ${MISSING_PACKAGES}"
fi
}
done
if [ ! -z "${MISSING_PACKAGES}" ]; then
yum -y install ${MISSING_PACKAGES}
fi
elif [ -e ${DEBIAN_VERSION} ]; then
if [ -x /usr/bin/dpkg-query ]; then
MISSING_PACKAGES=" "
for package in libhtml-parser-perl libsocket6-perl libsys-hostname-long-perl libnet-dns-perl libnetaddr-ip-perl libhttp-date-perl libmail-dkim-perl libwww-perl; do {
PACKAGE_TEST=`checkDebianPackage ${package}`
if [ ${PACKAGE_TEST} -ne 0 ]; then
MISSING_PACKAGES="${package} ${MISSING_PACKAGES}"
fi
}
done
if [ ! -z "${MISSING_PACKAGES}" ]; then
apt-get update
apt-get -y install ${MISSING_PACKAGES}
fi
fi
fi
fi
getFile Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz spamassassin
getFile patches/spamc-configure-version-h.patch spamc-configure-version-h.patch patches/spamc-configure-version-h.patch hexan
rm -f /etc/exim.spamassassin.conf
quitIfLocked dospamassassin
if [ ! -e ${WORKDIR}/Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz ]; then
do_exit 1 "File Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}"
fi
echo "Installing spamassassin ${SPAMASSASSIN_VER}..."
cd ${CWD}
FILE=${CWD}/Mail-SpamAssassin-${SPAMASSASSIN_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd Mail-SpamAssassin-${SPAMASSASSIN_VER}
echo "Configuring SpamAssassin ${SPAMASSASSIN_VER}..."
export LANG=C
perl Makefile.PL PREFIX=/usr CONTACT_ADDRESS="the administrator of that system" RUN_NET_TESTS="no" INSTALL_BASE=""
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure SpamAssassin.\n"
do_exit 1
fi
echo "Done Configuration."
while echo "Trying to make SpamAssassin..."; do
make
if [ $? -ne 0 ]; then
echo ""
echo "If needed, use cpan to install the missing modules, eg:"
echo " cpan -i Archive::Tar Digest::SHA Mail::SPF IP::Country Net::Ident IO::Socket::INET6 Compress::Zlib Mail::DKIM LWP::UserAgent HTTP::Date Encode::Detect ExtUtils::MakeMaker"
echo ""
echo "Press enter to answer [yes] if it asks you to install dependencies (it will prepend them to the queue)"
echo "Answer no if it asks: Are you ready for manual configuration? [yes] no"
echo ""
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Installing ..."
#It's not able to overwrite spamd binary sometimes, if process is still running
killall spamd >/dev/null 2>&1
killall -9 spamd >/dev/null 2>&1
make install
echo "Enabling spamassassin in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/spamassassin.service ]; then
cp -f ${CB_CUST_SYSTEMD}/spamassassin.service ${SYSTEMDDIR}/spamassassin.service
else
cp -f ${CB_SYSTEMD}/spamassassin.service ${SYSTEMDDIR}/spamassassin.service
fi
chmod 644 ${SYSTEMDDIR}/spamassassin.service
systemctl daemon-reload
systemctl enable spamassassin.service
removeLockfile
cd ${CWD}
dospamassassinCron
perl -pi -e 's|#.include_if_exists /etc/exim.spamassassin.conf|.include_if_exists /etc/exim.spamassassin.conf|' /etc/exim.conf
V342PRE=/etc/mail/spamassassin/v342.pre
if [ -s ${V342PRE} ]; then
echo "Enabling new SA plugins"
# loadplugin Mail::SpamAssassin::Plugin::HashBL
perl -pi -e 's/^# loadplugin Mail::SpamAssassin::Plugin::HashBL$/loadplugin Mail::SpamAssassin::Plugin::HashBL/' ${V342PRE}
# loadplugin Mail::SpamAssassin::Plugin::ResourceLimits
# perl -pi -e 's/^# loadplugin Mail::SpamAssassin::Plugin::ResourceLimits$/loadplugin Mail::SpamAssassin::Plugin::ResourceLimits/' ${V342PRE}
# Can't locate BSD/Resource.pm in @INC
# loadplugin Mail::SpamAssassin::Plugin::FromNameSpoof
perl -pi -e 's/^# loadplugin Mail::SpamAssassin::Plugin::FromNameSpoof$/loadplugin Mail::SpamAssassin::Plugin::FromNameSpoof/' ${V342PRE}
# loadplugin Mail::SpamAssassin::Plugin::Phishing
perl -pi -e 's/^# loadplugin Mail::SpamAssassin::Plugin::Phishing$/loadplugin Mail::SpamAssassin::Plugin::Phishing/' ${V342PRE}
fi
echo "Running sa-update."
if [ -e /usr/bin/sa-update ]; then
#/usr/bin/sa-update --nogpg --channel sought.rules.yerp.org --channel updates.spamassassin.org
/usr/bin/sa-update --nogpg --channel updates.spamassassin.org
else
echo "Cannot find /usr/bin/sa-update after install. Check for errors above."
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
set_service rspamd delete
if [ -d /etc/exim/rspamd ]; then
if [ ! -d /etc/exim/rspamd_disabled ]; then
echo "Renaming /etc/exim/rspamd to /etc/exim/rspamd_disabled..."
mv /etc/exim/rspamd /etc/exim/rspamd_disabled
else
echo "Removing old /etc/exim/rspamd directory..."
rm -rf /etc/exim/rspamd
fi
fi
echo "Starting SpamAssassin."
systemctl restart spamassassin.service
set_service spamd ON
if ! grep -m1 -q '/etc/exim.spamd.conf' /etc/exim.conf; then
perl -pi -e 's|\.include_if_exists /etc/exim\.clamav\.conf|.include_if_exists /etc/exim.spamd.conf\n .include_if_exists /etc/exim.clamav.conf|g' /etc/exim.conf
fi
if ! grep -m1 -q '/etc/exim.spamd.load.conf' /etc/exim.conf; then
perl -pi -e 's|\.include_if_exists /etc/exim\.clamav\.load\.conf|.include_if_exists /etc/exim.spamd.load.conf\n .include_if_exists /etc/exim.clamav.load.conf|g' /etc/exim.conf
fi
if [ "`version_cmp ${EXIMCONF_RELEASE_OPT} 4.6 'exim.conf ver check for ACL spam check'`" -lt 0 ]; then
perl -pi -e 's|#.include_if_exists /etc/exim.spamassassin.conf|.include_if_exists /etc/exim.spamassassin.conf|' /etc/exim.conf
if [ ! -s /etc/exim.spamassassin.conf ]; then
safeDownloadWithMove /etc/exim.spamassassin.conf "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.spamassassin.conf"
chmod 644 /etc/exim.spamassassin.conf
fi
rm -f /etc/exim.spamd.conf
#disabling rspamd
echo -n '' > /etc/exim.spamd.load.conf
echo -n '' > /etc/exim.spamd.conf
else
echo "Enabling SpamAssassin in /etc/exim.spamd.load.conf..."
echo 'spamd_address = 127.0.0.1 783 retry=20s' > /etc/exim.spamd.load.conf
cp -fv ${SPAMD_CONF} /etc/exim.spamd.conf
fi
echo "Restarting exim."
control_service exim restart
ldconfig
writeLog "SpamAssassin ${SPAMASSASSIN_VER} installed"
}
doRemoveSpamassassin() {
if [ "${SPAMD_OPT}" = "spamassassin" ]; then
do_exit 1 "Cannot remove SpamAssassin because it is enabled in options.conf."
fi
RESTART_EXIM=0
if [ -e /etc/exim.spamassassin.conf ]; then
RESTART_EXIM=1
fi
if [ -e ${SYSTEMDDIR}/spamassassin.service ]; then
echo "Disabling spamassassin in systemd..."
systemctl disable spamassassin.service
rm -f ${SYSTEMDDIR}/spamassassin.service
systemctl daemon-reload
fi
set_service spamd delete
remove_directory /var/lib/spamassassin
remove_directory /usr/share/perl5/Mail/SpamAssassin
remove_directory /usr/lib64/perl5/auto/Mail/SpamAssassin
remove_directory /usr/share/spamassassin
remove_directory /etc/mail/spamassassin
remove_directory /root/.spamassassin
remove_file /usr/bin/spamassassin
remove_file /usr/bin/sa-check_spamd
remove_file /usr/bin/spamc
remove_file /usr/bin/sa-learn
remove_file /usr/bin/spamd
remove_file /usr/bin/sa-awl
remove_file /usr/bin/sa-update
remove_file /usr/bin/sa-compile
remove_file /etc/exim.spamassassin.conf
#remove bits which may exist.
remove_file /etc/cron.daily/sa-update
remove_file /etc/cron.weekly/sa-update
remove_file /etc/cron.monthly/sa-update
ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
if [ "${RESTART_EXIM}" = "1" ]; then
control_service exim restart
fi
echo "SpamAssassin has been successfully removed"
writeLog "SpamAssassin removed"
}
doRspamd() {
if [ "${SPAMD_OPT}" != "rspamd" ]; then
do_exit 1 "Rspamd is not set in options.conf."
fi
if [ -e /etc/debian_version ]; then
if [ ! -x /usr/bin/lsb_release ]; then
apt-get -y install lsb-release
fi
CODENAME=`lsb_release -c -s`
if [ ! -s /etc/apt/sources.list.d/rspamd.list ]; then
curl ${CURL_CONNECT_OPTIONS} -o - https://rspamd.com/apt-stable/gpg.key | apt-key add -
echo "deb [arch=amd64] https://rspamd.com/apt-stable/ $CODENAME main" > /etc/apt/sources.list.d/rspamd.list
echo "deb-src [arch=amd64] https://rspamd.com/apt-stable/ $CODENAME main" >> /etc/apt/sources.list.d/rspamd.list
fi
apt-get -y update
apt-get -y --no-install-recommends install rspamd
if [ $? -ne 0 ]; then
do_exit 1 "Apt-get failed to install rspamd."
fi
else
if [ ! -s /etc/yum.repos.d/rspamd.repo ]; then
RSPAMD_REPO_URL=https://rspamd.com/rpm-stable/centos-${OS_CENTOS_VER}/rspamd.repo
if ! curl --silent --fail ${RSPAMD_REPO_URL}; then
do_exit 1 "Cannot download rspamd repo file ${RSPAMD_REPO_URL}."
fi
curl --fail ${RSPAMD_REPO_URL} > /etc/yum.repos.d/rspamd.repo
rpm --import https://rspamd.com/rpm-stable/gpg.key
fi
yum -y install rspamd
if [ $? -ne 0 ]; then
do_exit 1 "Yum failed to install rspamd."
fi
fi
#Add _rspamd user/group if it doesn't exist after installation
addUserGroup _rspamd _rspamd
if [ ! -x /usr/bin/redis-server ] && [ ! -x /usr/local/bin/redis-server ]; then
if [ "${REDIS_OPT}" = "no" ]; then
setOpt redis yes
REDIS_OPT="yes"
fi
doRedis
else
echo "Enabling redis-rspamd in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/redis-rspamd.service ]; then
cp -f ${CB_CUST_SYSTEMD}/redis-rspamd.service ${SYSTEMDDIR}/redis-rspamd.service
else
cp -f ${CB_SYSTEMD}/redis-rspamd.service ${SYSTEMDDIR}/redis-rspamd.service
fi
chmod 644 ${SYSTEMDDIR}/redis-rspamd.service
systemctl daemon-reload
systemctl enable --now redis-rspamd
fi
#disable greylisting by default, as no redis server back-end (yet?).
if [ ! -e /etc/rspamd/local.d/greylist.conf ]; then
if [ ! -d /etc/rspamd/local.d ]; then
mkdir /etc/rspamd/local.d
chmod 755 /etc/rspamd/local.d
fi
echo "enabled = false;" > /etc/rspamd/local.d/greylist.conf
fi
#copy custom configs here? TODO
#end custom configs
echo "Enabling rspamd in systemd..."
if [ -e ${SYSTEMDDIR}/rspamd.service ]; then
systemctl enable rspamd.service
if [ -e ${SYSTEMDDIR}/spamassassin.service ]; then
systemctl stop spamassassin.service
systemctl disable spamassassin.service
rm -f ${SYSTEMDDIR}/spamassassin.service
systemctl daemon-reload
fi
fi
set_service spamd delete
if [ -e /usr/bin/spamd ]; then
doRemoveSpamassassin
fi
killall -9 spamd >/dev/null 2>&1
removeLockfile
cd ${CWD}
mkdir -p /var/log/rspamd
if [ ! -d /etc/rspamd/local.d ]; then
mkdir -p /etc/rspamd/local.d
chmod 755 /etc/rspamd/local.d
fi
echo 'servers = "/var/lib/rspamd/.redis/redis.sock";' > /etc/rspamd/local.d/redis.conf
#set permissions
if [ -e /etc/rspamd/local.d/settings.conf ]; then
if ! grep -m1 -q ".include \"\$CONFDIR/directadmin-users.conf\"" /etc/rspamd/local.d/settings.conf; then
echo ".include \"\$CONFDIR/directadmin-users.conf\"" >> /etc/rspamd/local.d/settings.conf
fi
else
echo ".include \"\$CONFDIR/directadmin-users.conf\"" > /etc/rspamd/local.d/settings.conf
fi
#listen on UDS instead of localhost TCP/IP
if [ -e /etc/rspamd/local.d/worker-normal.inc ]; then
sed -i '/bind_socket =/d' /etc/rspamd/local.d/worker-normal.inc
echo 'bind_socket = "localhost:11333";' >> /etc/rspamd/local.d/worker-normal.inc
else
echo 'bind_socket = "localhost:11333";' > /etc/rspamd/local.d/worker-normal.inc
fi
#listen on UDS instead of localhost TCP/IP
if [ -e /etc/rspamd/local.d/worker-controller.inc ]; then
sed -i '/bind_socket =/d' /etc/rspamd/local.d/worker-controller.inc
echo 'bind_socket = "/var/run/rspamd/rspamd_controller.sock mode=0600 owner=_rspamd";' >> /etc/rspamd/local.d/worker-controller.inc
else
echo 'bind_socket = "/var/run/rspamd/rspamd_controller.sock mode=0600 owner=_rspamd";' > /etc/rspamd/local.d/worker-controller.inc
fi
#listen on UDS instead of localhost TCP/IP
if [ -e /etc/rspamd/local.d/worker-proxy.inc ]; then
sed -i '/bind_socket =/d' /etc/rspamd/local.d/worker-proxy.inc
echo 'bind_socket = "/var/run/rspamd/rspamd_proxy.sock mode=0600 owner=_rspamd";' >> /etc/rspamd/local.d/worker-proxy.inc
else
echo 'bind_socket = "/var/run/rspamd/rspamd_proxy.sock mode=0600 owner=_rspamd";' > /etc/rspamd/local.d/worker-proxy.inc
fi
#prevent: cfg; rspamd_config_read: failed to load config: ucl parser error: cannot open file /etc/rspamd/directadmin-users.conf: No such file or directory
if [ ! -e /etc/rspamd/directadmin-users.conf ]; then
touch /etc/rspamd/directadmin-users.conf
fi
mkdir -p /etc/rspamd/users.d
chown _rspamd:_rspamd /etc/rspamd/local.d/settings.conf /etc/rspamd/users.d /etc/rspamd/directadmin-users.conf /etc/rspamd
# generate user prefs
echo "action=rewrite&value=rspamd" >> ${TASK_QUEUE}
run_dataskq d
csf_enable_rspamd
echo "Restarting rspamd."
control_service rspamd restart
set_service rspamd ON
# Not needed, as we load it elsewhere
# if ! grep -m1 -q '^\.include_if_exists /etc/exim.spamd.conf' /etc/exim.conf; then
# if grep -m1 -q '^#\.include_if_exists /etc/exim.spamd.conf' /etc/exim.conf; then
# perl -pi -e 's|#\.include_if_exists /etc/exim\.spamd\.conf|.include_if_exists /etc/exim.clamav.conf|g' /etc/exim.conf
# else
# perl -pi -e 's|\.include_if_exists /etc/exim\.clamav\.conf|.include_if_exists /etc/exim.spamd.conf\n .include_if_exists /etc/exim.clamav.conf|g' /etc/exim.conf
# fi
# fi
#
# if ! grep -m1 -q '^\.include_if_exists /etc/exim.spamd.load.conf' /etc/exim.conf; then
# if grep -m1 -q '^#\.include_if_exists /etc/exim.spamd.load.conf' /etc/exim.conf; then
# perl -pi -e 's|#\.include_if_exists /etc/exim\.spamd\.load\.conf|.include_if_exists /etc/exim.spamd.load.conf|g' /etc/exim.conf
# else
# perl -pi -e 's|\.include_if_exists /etc/exim\.clamav\.conf|.include_if_exists /etc/exim.spamd.conf\n .include_if_exists /etc/exim.spamd.load.conf|g' /etc/exim.conf
# fi
# fi
#
# echo "Enabling rspamd in /etc/exim.spamd.load.conf..."
# echo 'spamd_address = 127.0.0.1 11333 retry=20s variant=rspamd' > /etc/exim.spamd.load.conf
#
# cp -fv ${SPAMD_CONF} /etc/exim.spamd.conf
echo "Restarting exim."
control_service exim restart
ldconfig
if [ ! -s /etc/logrotate.d/rspamd ]; then
safeDownloadWithMove /etc/logrotate.d/rspamd "${WEBPATH}/rspamd.logrotate"
fi
writeLog "Rspamd has been installed successfully."
}
doNetdata() {
curl ${CURL_CONNECT_OPTIONS} -o netdata.sh https://my-netdata.io/kickstart-static64.sh && bash ./netdata.sh --dont-wait --disable-telemetry && rm -f netdata.sh
if [ -e /opt/netdata/etc/netdata/netdata.conf ] && [ ! -e /etc/netdata/netdata.conf ]; then
NETDATA_CONF=/opt/netdata/etc/netdata/netdata.conf
else
NETDATA_CONF=/etc/netdata/netdata.conf
fi
if [ -s ${WORKDIR}/custom/netdata/netdata.conf ]; then
cp -pf ${WORKDIR}/custom/netdata/netdata.conf ${NETDATA_CONF}
else
printf "[web]\nbind to = unix:/var/run/netdata/netdata.sock\nweb files owner = root\nweb files group = netdata\n[global]\nrun as user = netdata\nprocess scheduling policy = keep\nOOM score = keep\n" > ${NETDATA_CONF}
fi
if [ -s /usr/lib/systemd/system/netdata.service ]; then
if grep -m1 -q '^RuntimeDirectoryMode=0775$' /usr/lib/systemd/system/netdata.service; then
perl -pi -e 's|^RuntimeDirectoryMode=0775$|RuntimeDirectoryMode=0700|g' /usr/lib/systemd/system/netdata.service
systemctl daemon-reload
fi
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
usermod -a -G clsupergid netdata
fi
killall netdata
sleep 10
control_service netdata start
set_service netdata ON
}
do_remove_rspamd() {
if [ "${SPAMD_OPT}" = "rspamd" ]; then
do_exit 1 "Cannot remove Rspamd because it is enabled in options.conf."
fi
if [ -e /etc/debian_version ]; then
apt-get -y purge rspamd
else
yum -y remove rspamd
fi
if [ -e ${SYSTEMDDIR}/rspamd.service ]; then
echo "Disabling rspamd in systemd..."
systemctl disable rspamd.service
remove_file ${SYSTEMDDIR}/rspamd.service
systemctl daemon-reload
fi
if [ -d /etc/rspamd ]; then
remove_directory /etc/rspamd
fi
echo "Rspamd has been successfully removed"
writeLog "Rspamd removed"
}
####################################################
create_symlinks_for_binaries() {
if [ -e $1 ] && [ -e $2 ] && [ ! -h $2 ]; then
echo "Symlinking $1 to $2..."
mv -f $2 $2_backup
ln -sf $1 $2
fi
}
doclamav() {
if [ "${CLAMAV_OPT}" = "no" ]; then
do_exit 1 "ClamAV is not set in options.conf."
fi
getFile clamav-${CLAMAV_VER}.tar.gz clamav
if [ "${CLAMAV_EXIM_OPT}" = "yes" ]; then
safeDownloadWithMove /etc/exim.clamav.load.conf "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.load.conf"
safeDownloadWithMove /etc/exim.clamav.conf "${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.conf"
chmod 644 /etc/exim.clamav.load.conf
chmod 644 /etc/exim.clamav.conf
fi
quitIfLocked doclamav
if [ ! -e ${WORKDIR}/clamav-${CLAMAV_VER}.tar.gz ]; then
do_exit 1 "File clamav-${CLAMAV_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}"
fi
echo "Installing clamav ${CLAMAV_VER} ..."
CLAMD_CONF=1
if [ ! -e /etc/clamd.conf ]; then
CLAMD_CONF=0
fi
FRESHCLAM_CONF=1
if [ ! -e /etc/freshclam.conf ]; then
FRESHCLAM_CONF=0
fi
addUserGroup clamav clamav
mkdir -p /var/run/clamd
chown -R clamav.clamav /var/run/clamd
chmod 700 /var/run/clamd
cd ${CWD}
FILE=${CWD}/clamav-${CLAMAV_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd clamav-${CLAMAV_VER}
echo "Configuring clamav ${CLAMAV_VER} ..."
mkdir -p build
cd build
if [ ! -d /usr/local/include/curl ] && grep -m1 -q 'with-libcurl=/usr/local' ${CWD}/${CLAMAV_CONFIGURE}; then
perl -pi -e 's|with-libcurl=/usr/local|with-libcurl=/usr|g' ${CWD}/${CLAMAV_CONFIGURE}
fi
if [ "${OS_CENTOS_VER}" = "7" ]; then
CMAKE_NAME="cmake3"
if grep -m1 -q "^cmake " ${CWD}/${CLAMAV_CONFIGURE}; then
perl -pi -e 's|^cmake |cmake3 |g' ${CWD}/${CLAMAV_CONFIGURE}
fi
else
CMAKE_NAME="cmake"
fi
if [ "${CMAKE_NAME}" = "cmake" ]; then
if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ] && [ ! -e /usr/bin/cmake3 ]; then
echo "Cannot find ${CMAKE_NAME}, installing it..."
if [ -e /etc/debian_version ]; then
apt-get -y install ${CMAKE_NAME}
else
yum -y install ${CMAKE_NAME}
fi
fi
elif [ ! -e /usr/bin/cmake3 ]; then
yum -y install ${CMAKE_NAME} --enablerepo=${EPEL_REPO_NAME}
fi
if [ "${OS_DEBIAN_VER}" = "9" ]; then
CMAKE_MINOR_VER=`cmake --version | head -n1 | grep -o '[0-9]\.[^ ]*' | cut -d. -f2`
if [ ${CMAKE_MINOR_VER} -lt 14 ]; then
if ! grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d | grep -m1 -q 'stretch-backports'; then
echo 'deb http://deb.debian.org/debian stretch-backports main' >> /etc/apt/sources.list.d/stretch-backports.list
apt-get update
fi
apt-get -y install -t stretch-backports ${CMAKE_NAME}
fi
fi
if [ "${OS_DEBIAN_VER}" = "10" ]; then
CMAKE_MINOR_VER=`cmake --version | head -n1 | grep -o '[0-9]\.[^ ]*' | cut -d. -f2`
if [ ${CMAKE_MINOR_VER} -lt 14 ]; then
if ! grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d | grep -m1 -q 'buster-backports'; then
echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list.d/buster-backports.list
apt-get update
fi
apt-get -y install -t buster-backports ${CMAKE_NAME}
fi
fi
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage libxml2-devel` -ne 0 ]; then
yum -y install libxml2-devel
ldconfig
fi
if [ `checkRPMPackage bzip2-devel` -ne 0 ]; then
yum -y install bzip2-devel
ldconfig
fi
elif [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libxml2-dev` -ne 0 ]; then
apt-get -y install libxml2-dev
ldconfig
fi
if [ `checkDebianPackage libbz2-dev` -ne 0 ]; then
apt-get -y install libbz2-dev
ldconfig
fi
fi
if [ ! -e /usr/include/pcre2.h ] && [ ! -e /usr/local/include/pcre2.h ]; then
echo "Cannot find pcre2, installing it..."
if [ -e /etc/debian_version ]; then
apt-get -y install libpcre2-dev
else
yum -y install pcre2-devel
fi
fi
if [ ! -e /usr/include/json/json.h ] && [ ! -e /usr/local/include/json/json.h ] && [ ! -e /usr/include/json-c/json.h ] && [ ! -e /usr/local/include/json-c/json.h ]; then
echo "Cannot find json-c, installing it..."
if [ -e /etc/debian_version ]; then
apt-get -y install libjson-c-dev
else
yum -y install json-c-devel
fi
fi
if [ ! -e /usr/include/curses.h ] && [ ! -e /usr/local/include/curses.h ]; then
echo "Cannot find ncurses, installing it..."
if [ -e /etc/debian_version ]; then
apt-get -y install libncurses-dev
else
yum -y install ncurses-devel
fi
fi
${CWD}/${CLAMAV_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure clamav.\n"
do_exit 1
fi
echo "Done Configuration."
while echo "Trying to make clamav..."; do
make CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, do you want to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Cleaning old libraries up..."
if [ "${B64}" = "1" ]; then
rm -f /usr/local/lib64/libclam*
fi
rm -f /usr/local/lib/libclam*
echo "Installing ..."
make install
removeLockfile
ldconfig
cd ${CWD}
if [ ${CLAMD_CONF} -eq 0 ]; then
if [ ! -s /etc/clamd.conf ] && [ -s /etc/clamd.conf.sample ]; then
cp -f /etc/clamd.conf.sample /etc/clamd.conf
fi
perl -pi -e 's|Example|#Example|' /etc/clamd.conf
perl -pi -e 's|#PidFile /var/run/clamd.pid|PidFile /var/run/clamd/clamd.pid|' /etc/clamd.conf
perl -pi -e 's|#TCPSocket 3310|TCPSocket 3310|' /etc/clamd.conf
perl -pi -e 's|#TCPAddr 127.0.0.1|TCPAddr 127.0.0.1|' /etc/clamd.conf
perl -pi -e 's|^LocalSocket|#LocalSocket|' /etc/clamd.conf
fi
if [ ${FRESHCLAM_CONF} -eq 0 ]; then
if [ ! -s /etc/freshclam.conf ] && [ -s /etc/freshclam.conf.sample ]; then
cp -f /etc/freshclam.conf.sample /etc/freshclam.conf
fi
perl -pi -e 's|Example|#Example|' /etc/freshclam.conf
perl -pi -e 's|#LogSyslog yes|LogSyslog yes|' /etc/freshclam.conf
perl -pi -e 's|#PidFile /var/run/freshclam.pid|PidFile /var/run/clamd/freshclam.pid|' /etc/freshclam.conf
perl -pi -e 's|#Checks 24|#Checks 24|' /etc/freshclam.conf
perl -pi -e 's|#NotifyClamd /path/to/clamd.conf|#NotifyClamd /etc/clamd.conf|' /etc/freshclam.conf
fi
#Deprecated in 0.100
perl -pi -e 's|^AllowSupplementaryGroups|#AllowSupplementaryGroups|' /etc/clamd.conf
if [ -e ${WORKDIR}/custom/clamav/clamd.conf ]; then
cp -f ${WORKDIR}/custom/clamav/clamd.conf /etc/clamd.conf
fi
if [ -e ${WORKDIR}/custom/clamav/freshclam.conf ]; then
cp -f ${WORKDIR}/custom/clamav/freshclam.conf /etc/freshclam.conf
fi
if [ "${CLAMAV_EXIM_OPT}" = "yes" ]; then
perl -pi -e 's|#.include_if_exists /etc/exim.clamav.load.conf|.include_if_exists /etc/exim.clamav.load.conf|' /etc/exim.conf
perl -pi -e 's|#.include_if_exists /etc/exim.clamav.conf|.include_if_exists /etc/exim.clamav.conf|' /etc/exim.conf
fi
echo "Enabling clamd in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/clamd.service ]; then
cp -f ${CB_CUST_SYSTEMD}/clamd.service ${SYSTEMDDIR}/clamd.service
else
if [ -e /etc/debian_version ]; then
cp -f ${CB_SYSTEMD}/clamd.service.debian ${SYSTEMDDIR}/clamd.service
else
cp -f ${CB_SYSTEMD}/clamd.service ${SYSTEMDDIR}/clamd.service
fi
fi
chmod 644 ${SYSTEMDDIR}/clamd.service
DISABLE_PRIVATETMP=false
if [ "${CLAMAV_OPT}" = "yes" ]; then
if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] || [ "${MODSECURITY_UPLOADSCAN_OPT}" = "yes" ]; then
DISABLE_PRIVATETMP=true
fi
fi
if [ -e /proc/1/environ ]; then
if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then
DISABLE_PRIVATETMP=true
fi
fi
if ${DISABLE_PRIVATETMP}; then
echo "Upload scan option detected in options.conf. Disabling PrivateTmp feature in clamd.service for ClamAV to be able to scan files in /tmp."
perl -pi -e 's#PrivateTmp \= true#PrivateTmp = false#' ${SYSTEMDDIR}/clamd.service
fi
systemctl daemon-reload
systemctl enable clamd.service
echo "Enabling freshclam in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/freshclam.service ]; then
cp -f ${CB_CUST_SYSTEMD}/freshclam.service ${SYSTEMDDIR}/freshclam.service
else
cp -f ${CB_SYSTEMD}/freshclam.service ${SYSTEMDDIR}/freshclam.service
fi
chmod 644 ${SYSTEMDDIR}/freshclam.service
systemctl daemon-reload
systemctl enable freshclam.service
if [ ! -d /var/run/clamd ]; then
mkdir /var/run/clamd
fi
#Ensure ClamAV Database
USC=/usr/local/share/clamav
if [ -s /etc/freshclam.conf ]; then
if grep -m1 -q ^DatabaseDirectory /etc/freshclam.conf; then
USC=`grep -m1 ^DatabaseDirectory /etc/freshclam.conf | awk '{print $2}'`
fi
fi
if [ ! -d $USC ]; then
echo "Creating DatabaseDirectory $USC ..."
mkdir -p $USC
chown clamav:clamav $USC
fi
if [ ! -s $USC/daily.cld ]; then
/usr/local/bin/freshclam -v
fi
#Symlink /usr/bin binaries to /usr/local/bin
create_symlinks_for_binaries /usr/local/bin/clamav-config /usr/bin/clamav-config
create_symlinks_for_binaries /usr/local/bin/clambc /usr/bin/clambc
create_symlinks_for_binaries /usr/local/bin/clamconf /usr/bin/clamconf
create_symlinks_for_binaries /usr/local/bin/clamdscan /usr/bin/clamdscan
create_symlinks_for_binaries /usr/local/bin/clamscan /usr/bin/clamscan
create_symlinks_for_binaries /usr/local/bin/freshclam /usr/bin/freshclam
create_symlinks_for_binaries /usr/local/sbin/clamd /usr/sbin/clamd
set_service clamd ON
set_service freshclam ON
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "Restarting freshclam."
control_service freshclam restart
echo "Restarting clamd."
control_service clamd restart
if [ "${CLAMAV_EXIM_OPT}" = "yes" ]; then
echo "Restarting exim."
control_service exim restart
fi
echo "Done ClamAV."
writeLog "ClamAV ${CLAMAV_VER} installed"
}
doRemoveClamav() {
if [ ! -e /usr/local/sbin/clamd ]; then
do_exit 1 "/usr/local/sbin/clamd wasn't found on the system, exiting..."
fi
if [ "${CLAMAV_OPT}" = "yes" ]; then
do_exit 1 "ClamAV is still set in options.conf, cannot remove."
fi
getFile clamav-${CLAMAV_VER}.tar.gz clamav
quitIfLocked doRemoveClamav
if [ ! -e ${WORKDIR}/clamav-${CLAMAV_VER}.tar.gz ]; then
do_exit 1 "File clamav-${CLAMAV_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}"
fi
echo "Removing clamav ${CLAMAV_VER}..."
cd ${CWD}
FILE=${CWD}/clamav-${CLAMAV_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd clamav-${CLAMAV_VER}
mkdir -p build
cd build
if [ ! -d /usr/local/include/curl ] && grep -m1 -q 'with-libcurl=/usr/local' ${CWD}/${CLAMAV_CONFIGURE}; then
perl -pi -e 's|with-libcurl=/usr/local|with-libcurl=/usr|g' ${CWD}/${CLAMAV_CONFIGURE}
fi
if [ "${OS_CENTOS_VER}" = "7" ]; then
CMAKE_NAME="cmake3"
if grep -m1 -q "^cmake " ${CWD}/${CLAMAV_CONFIGURE}; then
perl -pi -e 's|^cmake |cmake3 |g' ${CWD}/${CLAMAV_CONFIGURE}
fi
else
CMAKE_NAME="cmake"
fi
if [ "${CMAKE_NAME}" = "cmake" ]; then
if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ] && [ ! -e /usr/bin/cmake3 ]; then
echo "Cannot find ${CMAKE_NAME}, installing it..."
if [ -e /etc/debian_version ]; then
apt-get -y install ${CMAKE_NAME}
else
yum -y install ${CMAKE_NAME}
fi
fi
elif [ ! -e /usr/bin/cmake3 ]; then
yum -y install ${CMAKE_NAME} --enablerepo=${EPEL_REPO_NAME}
fi
if [ "${OS_DEBIAN_VER}" = "9" ]; then
CMAKE_MINOR_VER=`cmake --version | head -n1 | grep -o '[0-9]\.[^ ]*' | cut -d. -f2`
if [ ${CMAKE_MINOR_VER} -lt 14 ]; then
if ! grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d | grep -m1 -q 'stretch-backports'; then
echo 'deb http://deb.debian.org/debian stretch-backports main' >> /etc/apt/sources.list.d/stretch-backports.list
apt-get update
fi
apt-get -y install -t stretch-backports ${CMAKE_NAME}
fi
fi
if [ "${OS_DEBIAN_VER}" = "10" ]; then
CMAKE_MINOR_VER=`cmake --version | head -n1 | grep -o '[0-9]\.[^ ]*' | cut -d. -f2`
if [ ${CMAKE_MINOR_VER} -lt 14 ]; then
if ! grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d | grep -m1 -q 'buster-backports'; then
echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list.d/buster-backports.list
apt-get update
fi
apt-get -y install -t buster-backports ${CMAKE_NAME}
fi
fi
if [ ! -e ${DEBIAN_VERSION} ] && [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage libxml2-devel` -ne 0 ]; then
yum -y install libxml2-devel
ldconfig
fi
if [ `checkRPMPackage bzip2-devel` -ne 0 ]; then
yum -y install bzip2-devel
ldconfig
fi
elif [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libxml2-dev` -ne 0 ]; then
apt-get -y install libxml2-dev
ldconfig
fi
if [ `checkDebianPackage libbz2-dev` -ne 0 ]; then
apt-get -y install libbz2-dev
ldconfig
fi
fi
if [ ! -e /usr/include/pcre2.h ] && [ ! -e /usr/local/include/pcre2.h ]; then
echo "Cannot find pcre2, installing it..."
if [ -e /etc/debian_version ]; then
apt-get -y install libpcre2-dev
else
yum -y install pcre2-devel
fi
fi
if [ ! -e /usr/include/json/json.h ] && [ ! -e /usr/local/include/json/json.h ] && [ ! -e /usr/include/json-c/json.h ] && [ ! -e /usr/local/include/json-c/json.h ]; then
echo "Cannot find json-c, installing it..."
if [ -e /etc/debian_version ]; then
apt-get -y install libjson-c-dev
else
yum -y install json-c-devel
fi
fi
if [ ! -e /usr/include/curses.h ] && [ ! -e /usr/local/include/curses.h ]; then
echo "Cannot find ncurses, installing it..."
if [ -e /etc/debian_version ]; then
apt-get -y install libncurses-dev
else
yum -y install ncurses-devel
fi
fi
echo "Configuring clamav ${CLAMAV_VER} for removal..."
${CWD}/${CLAMAV_CONFIGURE}
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure clamav.\n"
do_exit 1
fi
echo "Done Configuration."
echo "Uninstalling ..."
while echo "Trying to make clamav..."; do
make CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, do you want to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
make install
xargs rm -f < install_manifest.txt
removeLockfile
ldconfig
cd ${CWD}
echo "Removing clamav/freshclam from services.status..."
set_service clamd delete
set_service freshclam delete
if [ -e ${SYSTEMDDIR}/clamd.service ]; then
echo "Removing clamd systemd script..."
systemctl stop clamd.service
systemctl disable clamd.service
rm -f ${SYSTEMDDIR}/clamd.service
systemctl daemon-reload
fi
if [ -e ${SYSTEMDDIR}/freshclam.service ]; then
echo "Removing freshclam systemd script..."
systemctl stop freshclam.service
systemctl disable freshclam.service
rm -f ${SYSTEMDDIR}/freshclam.service
systemctl daemon-reload
fi
echo "Removing ClamAV configuration files: /etc/clamd.conf.sample and /etc/clamd.conf..."
rm -f /etc/clamd.conf.sample
rm -f /etc/clamd.conf
echo "Removing Freshclam configuration files: /etc/freshclam.conf.sample and /etc/freshclam.conf..."
rm -f /etc/freshclam.conf.sample
rm -f /etc/freshclam.conf
EXIMRESTART=0
if [ -e /etc/exim.clamav.load.conf ] || [ -e /etc/exim.clamav.conf ]; then
EXIMRESTART=1
echo "Disabling ClamAV in exim.conf..."
rm -f /etc/exim.clamav.load.conf
rm -f /etc/exim.clamav.conf
fi
#Remove ClamAV Database
echo "Removing ClamAV Database: /usr/local/share/clamav..."
rm -rf /usr/local/share/clamav
#Rempove symlinks of /usr/bin binaries to /usr/local/bin
echo "Removing ClamAV symlins from /usr/bin..."
rm -f /usr/bin/clamav-config
rm -f /usr/bin/clambc
rm -f /usr/bin/clamconf
rm -f /usr/bin/clamdscan
rm -f /usr/bin/clamscan
rm -f /usr/bin/freshclam
rm -f /usr/sbin/clamd
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
if [ "${EXIMRESTART}" = "1" ]; then
echo "Restarting exim..."
control_service exim restart
fi
echo "ClamAV has been successfully removed."
writeLog "ClamAV removed"
}
####################################################
doPhp() {
doPhp_build ${PHP1_RELEASE_OPT} ${PHP1_MODE_OPT}
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
doPhp_build ${PHP2_RELEASE_OPT} ${PHP2_MODE_OPT}
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
doPhp_build ${PHP3_RELEASE_OPT} ${PHP3_MODE_OPT}
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
doPhp_build ${PHP4_RELEASE_OPT} ${PHP4_MODE_OPT}
fi
if [ -x /usr/share/i360-php/native_da.hook ]; then
/usr/share/i360-php/native_da.hook --install-i360
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ] || [ "${WEBSERVER_OPT}" = "litespeed" ]; then
#Reload detached lsphp processes
touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt
fi
writeLog "PHP built"
}
####################################################
doRemovePhp() {
if [ "$1" = "" ]; then
do_exit 1 "No arguments given (PHP release), exiting..."
fi
REMOVE_SHORTRELEASE=`echo $1 | tr -d '.'`
if [ "${PHP1_RELEASE_OPT}" = "$1" ] || [ "${PHP2_RELEASE_OPT}" = "$1" ] || [ "${PHP3_RELEASE_OPT}" = "$1" ] || [ "${PHP4_RELEASE_OPT}" = "$1" ]; then
do_exit 1 "Cannot remove PHP $1, because you have it set in options.conf file."
fi
if [ ! -d /usr/local/php${REMOVE_SHORTRELEASE} ]; then
do_exit 1 "/usr/local/php${REMOVE_SHORTRELEASE} does not exist, cannot remove..."
fi
echo "Removing /usr/local/php${REMOVE_SHORTRELEASE}"
rm -rf /usr/local/php${REMOVE_SHORTRELEASE}
remove_file /var/log/php-fpm${REMOVE_SHORTRELEASE}.log
ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "PHP $1 has been successfully removed"
writeLog "PHP $1 removed"
}
####################################################
doFtpCleanup() {
if grep -q "^pure-ftpd" ${SERVICES} 2>/dev/null || grep -q "^proftpd" ${SERVICES} 2>/dev/null; then
return
fi
#Clean up FTP env
#Get out of here! We don't want any of this (wu-ftpd)!
if [ -s /etc/debian_version ]; then
dpkg -r --force-all gadmin-proftpd gforge-ftp-proftpd gproftpd proftpd-basic proftpd-doc proftpd-mod-ldap proftpd-mod-mysql proftpd-mod-pgsql pure-ftpd pure-ftpd-common 2> /dev/null
dpkg -P gadmin-proftpd gforge-ftp-proftpd gproftpd proftpd-basic proftpd-doc proftpd-mod-ldap proftpd-mod-mysql proftpd-mod-pgsql pure-ftpd pure-ftpd-common 2> /dev/null
else
rpm -e --nodeps wu-ftp 2> /dev/null
rpm -e --nodeps wu-ftpd 2> /dev/null
rpm -e --nodeps anonftp 2> /dev/null
rpm -e --nodeps pure-ftpd 2> /dev/null
rpm -e --nodeps vsftpd 2> /dev/null
rpm -e --nodeps psa-proftpd 2> /dev/null
rpm -e --nodeps psa-proftpd-xinetd 2> /dev/null
rpm -e --nodeps psa-proftpd-start 2> /dev/null
rm -f /etc/xinetd.d/proftpd
rm -f /etc/xinetd.d/wu-ftpd.rpmsave
rm -f /etc/xinetd.d/wu-ftpd
rm -f /etc/xinetd.d/ftp_psa
rm -f /etc/xinetd.d/gssftp
rm -f /etc/xinetd.d/xproftpd
fi
if [ -x /usr/local/sbin/pure-ftpd ]; then
if ! grep -q "^pure-ftpd" ${SERVICES} 2>/dev/null; then
killall -9 pure-ftpd 2> /dev/null > /dev/null
rm -f /usr/local/sbin/pure-ftpd 2> /dev/null > /dev/null
fi
fi
#while we're doing it, lets get rid of pop stuff too
rm -f /etc/xinetd.d/pop*
#in case they it still holds port 21
if [ -s /usr/lib/systemd/system/xinetd.service ]; then
systemctl restart xinetd.service
fi
}
####################################################
doProftpd() {
if [ "${FTPD_OPT}" != "proftpd" ]; then
do_exit 1 "You cannot install ProFTPD, because you do not have it set in options.conf file."
fi
doFtpCleanup
addUserGroup ftp ftp
addToAccess ftp
getFile proftpd-${PROFTPD_VER}.tar.gz proftpd
quitIfLocked doProftpd
# Setting a new temp dir (in case /tmp is noexec,nosuid)
cd ${CWD}
FILE=${CWD}/proftpd-${PROFTPD_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
chown -R root:${ROOT_GRP} proftpd-${PROFTPD_VER}
cd proftpd-${PROFTPD_VER}
# Backup ProFTPD config
if [ -e /etc/proftpd.conf ]; then
cp -pf /etc/proftpd.conf /etc/proftpd.conf.old
fi
cp -pf ${CWD}/${PROFTPD_CONF} /etc/proftpd.conf
if [ -s /etc/proftpd.sftp.conf ] && ! grep -m1 -q '^Include /etc/proftpd.sftp.conf' /etc/proftpd.conf; then
echo 'Include /etc/proftpd.sftp.conf' >> /etc/proftpd.conf
elif [ ! -s /etc/proftpd.sftp.conf ] && grep -m1 -q '^Include /etc/proftpd.sftp.conf' /etc/proftpd.conf; then
sed -i '/^Include /etc/proftpd.sftp.conf/d' /etc/proftpd.conf
fi
if [ -d /usr/local/directadmin/data/admin/ips ]; then
IP="`grep -r -l -m1 '^status=server$' /usr/local/directadmin/data/admin/ips | cut -d/ -f8`"
fi
if [ "${IP}" = "" ]; then
IP="`grep -im1 ${HOSTNAME} /etc/hosts | awk '{print $1}'`"
if [ "${IP}" = "" ]; then
echo "Unable to detect your server IP in /etc/hosts. Please enter it: "
read IP
fi
fi
if [ "${IP}" = "" ]; then
echo "Unable to detect your server IP. Exiting..."
do_exit 0
fi
if [ "`echo ${IP} | grep -m1 -c ':'`" -gt 0 ]; then
IP="[${IP}]"
fi
echo "Using $IP for your server IP"
if [ -e /etc/proftpd.conf ]; then
if [ "`grep -m1 -c '|IP|' /etc/proftpd.conf`" -gt "0" ]; then
STR="perl -pi -e 's/\|IP\|/$IP/' /etc/proftpd.conf"
eval ${STR}
fi
fi
if [ -e /etc/proftpd.sftp.conf ]; then
if [ "`grep -m1 -c '|IP|' /etc/proftpd.sftp.conf`" -gt "0" ]; then
STR="perl -pi -e 's/\|IP\|/$IP/' /etc/proftpd.sftp.conf"
eval ${STR}
fi
fi
echo "Configuring proftpd-${PROFTPD_VER}..."
${CWD}/${PROFTPD_CONFIGURE}
echo "Done. Making proftpd-${PROFTPD_VER}..."
while echo "Trying to make ProFTPD..."; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Installing proftpd-${PROFTPD_VER}..."
make install
if [ ! -e /etc/proftpd.passwd ]; then
touch /etc/proftpd.passwd
chmod 640 /etc/proftpd.passwd
fi
if [ ! -d /var/log/proftpd ]; then
mkdir -p /var/log/proftpd
fi
if [ ! -e /etc/proftpd.vhosts.conf ]; then
touch /etc/proftpd.vhosts.conf
fi
echo "Enabling proftpd in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/proftpd.service ]; then
cp -f ${CB_CUST_SYSTEMD}/proftpd.service ${SYSTEMDDIR}/proftpd.service
else
cp -f ${CB_SYSTEMD}/proftpd.service ${SYSTEMDDIR}/proftpd.service
fi
chmod 644 ${SYSTEMDDIR}/proftpd.service
if [ -e /etc/debian_version ]; then
perl -pi -e 's#/usr/bin/mkdir#/bin/mkdir#' ${SYSTEMDDIR}/proftpd.service
fi
systemctl daemon-reload
if [ -e ${SYSTEMDDIR}/proftpd.service ]; then
systemctl enable proftpd.service
if [ -e ${SYSTEMDDIR}/pure-ftpd.service ]; then
systemctl stop pure-ftpd.service
systemctl disable pure-ftpd.service
rm -f ${SYSTEMDDIR}/pure-ftpd.service
if [ -e ${SYSTEMDDIR}/pure-certd.service ]; then
systemctl stop pure-certd.service
systemctl disable pure-certd.service
rm -f ${SYSTEMDDIR}/pure-certd.service
fi
if [ -e ${SYSTEMDDIR}/pure-uploadscript.service ]; then
systemctl stop pure-uploadscript.service
systemctl disable pure-uploadscript.service
rm -f ${SYSTEMDDIR}/pure-uploadscript.service
fi
systemctl daemon-reload
fi
fi
mkdir -p /run/proftpd
killall -9 pure-ftpd >/dev/null 2>&1
echo "Done proftpd."
writeLog "Proftpd ${PROFTPD_VER} installed"
removeLockfile
# Linking configs
rm -f /usr/local/etc/proftpd.conf
ln -sf /etc/proftpd.conf /usr/local/etc/proftpd.conf
perl -pi -e 's/DisplayFirstChdir/DisplayChdir/' /etc/proftpd.conf
#setup the directadmin.conf
setVal pureftp 0 ${DACONF_TEMPLATE_FILE}
setVal pureftp 0 ${DACONF_FILE}
set_service pure-ftpd delete
set_service proftpd ON
killall pure-ftpd >/dev/null 2>&1
if [ "${PROFTPD_UPLOADSCAN_OPT}" = "yes" ] && [ "${CLAMAV_OPT}" = "yes" ]; then
if [ ! -e /usr/local/bin/clamdscan ]; then
removeLockfile
doclamav
fi
if [ ! -e /usr/local/bin/clamdscan ]; then
do_exit 1 "Cannot enable upload scan in ProFTPd because there is no ClamAV (/usr/local/bin/clamdscan) on the system."
fi
echo "Enabling ProFTPd ClamAV module for upload scanning"
getFile mod_clamav.c mod_clamav_c
getFile mod_clamav.h mod_clamav_h
if ! grep -m1 -q '^Include /etc/proftpd.clamav.conf' /etc/proftpd.conf; then
perl -pi -e 's#</Global>#</Global>\n\nInclude /etc/proftpd.clamav.conf#' /etc/proftpd.conf
fi
/usr/bin/prxs -c -i -d mod_clamav.c
echo -n '' > /etc/proftpd.clamav.conf
echo '<IfModule mod_dso.c>' >> /etc/proftpd.clamav.conf
echo 'LoadModule mod_clamav.c' >> /etc/proftpd.clamav.conf
echo '</IfModule>' >> /etc/proftpd.clamav.conf
echo '<IfModule mod_clamav.c>' >> /etc/proftpd.clamav.conf
echo 'ClamAV on' >> /etc/proftpd.clamav.conf
echo 'ClamServer 127.0.0.1' >> /etc/proftpd.clamav.conf
echo 'ClamPort 3310' >> /etc/proftpd.clamav.conf
echo 'ClamMaxSize 5 Mb' >> /etc/proftpd.clamav.conf
echo '</IfModule>' >> /etc/proftpd.clamav.conf
else
echo '' > /etc/proftpd.clamav.conf
fi
doSslConfigurationFtp
if [ ! -e /etc/logrotate.d/proftpd ]; then
safeDownloadWithMove /etc/logrotate.d/proftpd "${WEBPATH}/proftpd.logrotate"
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
echo "Restarting ProFTPd."
control_service proftpd restart
}
####################################################
doRemoveProftpd() {
if [ "${FTPD_OPT}" = "proftpd" ]; then
do_exit 1 "Cannot remove Pure-FTPd, because it is enabled in options.conf file."
fi
echo "Disabling proftpd in services.status"
set_service proftpd delete
control_service proftpd stop
echo "Disabling proftpd in systemd..."
systemctl disable proftpd.service
rm -f ${SYSTEMDDIR}/proftpd.service
systemctl daemon-reload
remove_directory /etc/logrotate.d/proftpd
remove_directory /usr/include/proftpd
remove_directory /usr/log/proftpd
remove_file /usr/lib/pkgconfig/proftpd.pc
remove_file /usr/lib64/pkgconfig/proftpd.pc
remove_file /etc/ftpusers
remove_file /etc/pam.d/proftpd
remove_file /etc/proftpd.conf
remove_file /usr/bin/ftpasswd
remove_file /usr/bin/ftpcount
remove_file /usr/bin/ftpdctl
remove_file /usr/bin/ftpmail
remove_file /usr/bin/ftpquota
remove_file /usr/bin/ftptop
remove_file /usr/bin/ftpwho
remove_file /usr/bin/prxs
remove_file /usr/share/man/man5/proftpd.conf.5
remove_file /usr/share/man/man8/proftpd.8
remove_file /usr/share/man/man8/proftpd.8.gz
remove_file /usr/share/locale/bg_BG/LC_MESSAGES/proftpd.mo
remove_file /usr/share/locale/en_US/LC_MESSAGES/proftpd.mo
remove_file /usr/share/locale/fr_FR/LC_MESSAGES/proftpd.mo
remove_file /usr/share/locale/it_IT/LC_MESSAGES/proftpd.mo
remove_file /usr/share/locale/ja_JP/LC_MESSAGES/proftpd.mo
remove_file /usr/share/locale/ko_KR/LC_MESSAGES/proftpd.mo
remove_file /usr/share/locale/ru_RU/LC_MESSAGES/proftpd.mo
remove_file /usr/share/locale/zh_CN/LC_MESSAGES/proftpd.mo
remove_file /usr/share/locale/zh_TW/LC_MESSAGES/proftpd.mo
remove_file /usr/local/etc/proftpd.conf
remove_file /usr/sbin/in.proftpd
remove_file /usr/sbin/proftpd
remove_file /usr/sbin/ftpscrub
remove_file /usr/sbin/ftpshut
remove_file /etc/proftpd.clamav.conf
remove_file /etc/proftpd.vhosts.conf
ldconfig
echo "ProFTPd has been successfully removed"
writeLog "Proftpd removed"
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doPureftpd() {
if [ "${FTPD_OPT}" != "pureftpd" ]; then
do_exit 1 "You cannot install Pure-FTPd, because you do not have it set in options.conf file."
fi
doFtpCleanup
addUserGroup ftp ftp
addToAccess ftp
getFile pure-ftpd-${PUREFTPD_VER}.tar.gz pureftpd
getFile patches/pure-ftpd-logjam.patch pure-ftpd-logjam.patch patches/pure-ftpd-logjam.patch hexan
quitIfLocked doPureftpd
cd ${CWD}
FILE=${CWD}/pure-ftpd-${PUREFTPD_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
chown -R root:${ROOT_GRP} pure-ftpd-${PUREFTPD_VER}
cd pure-ftpd-${PUREFTPD_VER}
patch -p0 < ../patches/pure-ftpd-logjam.patch
perl -pi -e 's|/etc/ssl/private|/etc|g' ./src/ftpd.h
# add --without-capabilities on LXC containers to fix "Unable to switch capabilities"
DISABLE_CAPABILITIES=false
if [ -e /proc/1/environ ]; then
if cat /proc/1/environ | tr '\0' '\n' | grep -q ^container=lxc; then
DISABLE_CAPABILITIES=true
fi
fi
if ${DISABLE_CAPABILITIES}; then
echo "Adding --without-capabilities, to solve \"Unable to switch capabilities\" on LXC containers..."
perl -pi -e 's|\./configure \\|./configure --without-capabilities \|g' ${CWD}/${PUREFTPD_CONFIGURE}
fi
echo "Configuring pure-ftpd-${PUREFTPD_VER}..."
${CWD}/${PUREFTPD_CONFIGURE}
echo "Done. Making pure-ftpd-${PUREFTPD_VER}..."
while echo "Trying to make Pure-FTPd..."; do
make -j ${CPU_CORES}
if [ $? -ne 0 ]; then
if [ ${USER_INPUT} -eq 1 ]; then
printf "\n*** The make has failed, would you like to try to make again? (y,n): \n"
read yesno
echo ""
else
if [ "${INPUT_VALUE}" != "y" ]; then
yesno=n
else
yesno=${INPUT_VALUE}
fi
fi
if [ "${yesno}" = "n" ]; then
do_exit 1
fi
else
break
fi
done
echo "Make complete"
echo "Installing pure-ftpd-${PUREFTPD_VER}..."
make install
if [ ! -e /etc/proftpd.passwd ]; then
touch /etc/proftpd.passwd
chmod 640 /etc/proftpd.passwd
fi
if [ ! -e /etc/pure-ftpd.pem ] && [ "${WEBSERVER_OPT}" = "nginx" ]; then
if [ -e /etc/nginx/ssl.crt/server.crt.combined ] && [ -e /etc/nginx/ssl.key/server.key ]; then
cat /etc/nginx/ssl.key/server.key > /etc/pure-ftpd.pem
cat /etc/nginx/ssl.crt/server.crt.combined >> /etc/pure-ftpd.pem
fi
fi
if [ ! -e /etc/pure-ftpd.pem ]; then
if [ -e /etc/httpd/conf/ssl.crt/server.crt ] && [ -e /etc/httpd/conf/ssl.key/server.key ]; then
cat /etc/httpd/conf/ssl.key/server.key > /etc/pure-ftpd.pem
cat /etc/httpd/conf/ssl.crt/server.crt >> /etc/pure-ftpd.pem
if [ -e /etc/httpd/conf/ssl.crt/server.ca ]; then
cat /etc/httpd/conf/ssl.crt/server.ca >> /etc/pure-ftpd.pem
fi
fi
fi
if [ ! -e /etc/pure-ftpd.pem ]; then
if [ -e /etc/exim.cert ] && [ -e /etc/exim.key ]; then
cat /etc/exim.key > /etc/pure-ftpd.pem
cat /etc/exim.cert >> /etc/pure-ftpd.pem
fi
fi
if grep -m1 -q -- "----------" /etc/pure-ftpd.pem; then
perl -pi -e 's|----------|-----\n-----|g' /etc/pure-ftpd.pem
fi
if [ ! -s /etc/pure-ftpd-dhparams.pem ]; then
ensure_dhparam /etc/pure-ftpd-dhparams.pem
fi
chmod 600 /etc/pure-ftpd-dhparams.pem
chmod 600 /etc/pure-ftpd.pem
echo "Copying ${PUREFTPD_CONF} to /etc/pure-ftpd.conf..."
cp -f ${CWD}/${PUREFTPD_CONF} /etc/pure-ftpd.conf
PATH_TO_UPLOADSCAN=/usr/local/bin/pureftpd_uploadscan.sh
if [ "${PUREFTPD_UPLOADSCAN_OPT}" = "yes" ]; then
if [ ! -e /usr/local/bin/clamdscan ] && [ "${CLAMAV_OPT}" = "yes" ]; then
removeLockfile
doclamav
fi
if [ ! -e /usr/local/bin/clamdscan ] && [ "${CLAMAV_OPT}" = "yes" ]; then
do_exit 1 "Cannot enable upload scan in Pure-FTPd because there is no ClamAV (/usr/local/bin/clamdscan) on the system."
fi
echo "Enabling PureFTPd upload scanning script..."
cp -f ${PUREFTPD_UPLOADSCAN_SCRIPT} ${PATH_TO_UPLOADSCAN}
chmod 711 ${PATH_TO_UPLOADSCAN}
perl -pi -e 's|^CallUploadScript no|CallUploadScript yes|' /etc/pure-ftpd.conf
echo "Enabling pure-uploadscript in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/pure-uploadscript.service ]; then
cp -f ${CB_CUST_SYSTEMD}/pure-uploadscript.service ${SYSTEMDDIR}/pure-uploadscript.service
else
cp -f ${CB_SYSTEMD}/pure-uploadscript.service ${SYSTEMDDIR}/pure-uploadscript.service
fi
chmod 644 ${SYSTEMDDIR}/pure-uploadscript.service
systemctl daemon-reload
if [ -e ${SYSTEMDDIR}/pure-uploadscript.service ]; then
systemctl start pure-uploadscript.service
fi
else
rm -f ${PATH_TO_UPLOADSCAN}
perl -pi -e 's|^CallUploadScript yes|CallUploadScript no|' /etc/pure-ftpd.conf
if [ -e ${SYSTEMDDIR}/pure-uploadscript.service ]; then
echo "Disabling pure-uploadscript in systemd..."
systemctl stop pure-uploadscript.service
rm -f ${SYSTEMDDIR}/pure-uploadscript.service
systemctl daemon-reload
fi
fi
PATH_TO_PURE_CERTD=/usr/local/bin/pureftpd_sni.sh
echo "Enabling pure-certd script for SNI certificates..."
if ! grep -m1 -q 'ExtCert /var/run/pure-certd.sock' /etc/pure-ftpd.conf; then
echo 'ExtCert /var/run/pure-certd.sock' >> /etc/pure-ftpd.conf
fi
cp -f ${PUREFTPD_PURE_CERTD_SCRIPT} ${PATH_TO_PURE_CERTD}
chmod 711 ${PATH_TO_PURE_CERTD}
echo "Enabling pure-certd in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/pure-certd.service ]; then
cp -f ${CB_CUST_SYSTEMD}/pure-certd.service ${SYSTEMDDIR}/pure-certd.service
else
cp -f ${CB_SYSTEMD}/pure-certd.service ${SYSTEMDDIR}/pure-certd.service
fi
chmod 644 ${SYSTEMDDIR}/pure-certd.service
systemctl daemon-reload
if [ -e ${SYSTEMDDIR}/pure-certd.service ]; then
systemctl start pure-certd.service
fi
echo "Enabling pure-ftpd in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/pure-ftpd.service ]; then
cp -f ${CB_CUST_SYSTEMD}/pure-ftpd.service ${SYSTEMDDIR}/pure-ftpd.service
else
cp -f ${CB_SYSTEMD}/pure-ftpd.service ${SYSTEMDDIR}/pure-ftpd.service
fi
chmod 644 ${SYSTEMDDIR}/pure-ftpd.service
if [ "${PUREFTPD_UPLOADSCAN_OPT}" = "yes" ] && [ "${CLAMAV_OPT}" = "yes" ]; then
if ! grep -m1 -q '^After=pure-uploadscript.service' ${SYSTEMDDIR}/pure-ftpd.service; then
perl -pi -e 's|^After\=syslog.target|Requires=pure-uploadscript.service\nAfter=pure-uploadscript.service syslog.target|g' ${SYSTEMDDIR}/pure-ftpd.service
fi
else
perl -pi -e 's|^Requires\=pure-uploadscript.service\nAfter\=pure-uploadscript.service |After=|g' ${SYSTEMDDIR}/pure-ftpd.service
fi
systemctl daemon-reload
if [ -e ${SYSTEMDDIR}/pure-ftpd.service ]; then
systemctl enable pure-ftpd.service
if [ -e ${SYSTEMDDIR}/proftpd.service ]; then
systemctl stop proftpd.service
systemctl disable proftpd.service
rm -f ${SYSTEMDDIR}/proftpd.service
systemctl daemon-reload
fi
fi
doSslConfigurationFtp
killall -9 proftpd >/dev/null 2>&1
echo "Done pure-ftpd."
writeLog "Pure-ftpd ${PUREFTPD_VER} installed"
removeLockfile
#setup the directadmin.conf
setVal pureftp 1 ${DACONF_TEMPLATE_FILE}
setVal pureftp 1 ${DACONF_FILE}
killall proftpd >/dev/null 2>&1
doRestartDA
set_service proftpd delete
set_service pure-ftpd ON
killall proftpd >/dev/null 2>&1
pure-pw mkdb /etc/pureftpd.pdb -f /etc/proftpd.passwd
if [ ! -e /etc/logrotate.d/pure-ftpd ]; then
safeDownloadWithMove /etc/logrotate.d/pure-ftpd "${WEBPATH}/pure-ftpd.logrotate"
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
echo "Restarting Pure-FTPd."
control_service pure-ftpd restart
}
####################################################
doRemovePureftpd() {
if [ "${FTPD_OPT}" = "pureftpd" ]; then
do_exit 1 "Cannot remove Pure-FTPd, because it is enabled in options.conf file."
fi
getFile pure-ftpd-${PUREFTPD_VER}.tar.gz pureftpd
quitIfLocked doRemovePureftpd
echo "Disabling pure-ftpd in services.status"
set_service pure-ftpd delete
cd ${CWD}
FILE=${CWD}/pure-ftpd-${PUREFTPD_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
chown -R root:${ROOT_GRP} pure-ftpd-${PUREFTPD_VER}
cd pure-ftpd-${PUREFTPD_VER}
echo "Configuring pure-ftpd-${PUREFTPD_VER} for removal..."
${CWD}/${PUREFTPD_CONFIGURE}
echo "Done. Removing pure-ftpd-${PUREFTPD_VER}..."
make uninstall
if [ -e /etc/pure-ftpd.pem ]; then
echo "Removing /etc/pure-ftpd.pem..."
rm -f /etc/pure-ftpd.pem
fi
if [ -e /usr/local/bin/pureftpd_uploadscan.sh ]; then
echo "Removing /usr/local/bin/pureftpd_uploadscan.sh..."
rm -f /usr/local/bin/pureftpd_uploadscan.sh
fi
control_service pure-ftpd stop
echo "Disabling pure-ftpd in systemd..."
systemctl disable pure-ftpd.service
rm -f ${SYSTEMDDIR}/pure-ftpd.service
if [ -e ${SYSTEMDDIR}/pure-certd.service ]; then
systemctl stop pure-certd.service
systemctl disable pure-certd.service
rm -f ${SYSTEMDDIR}/pure-certd.service
fi
if [ -e ${SYSTEMDDIR}/pure-uploadscript.service ]; then
systemctl stop pure-uploadscript.service
systemctl disable pure-uploadscript.service
rm -f ${SYSTEMDDIR}/pure-uploadscript.service
fi
systemctl daemon-reload
rm -f /usr/libexec/pureftpd_startscript
if [ -e /etc/pureftpd.pdb ]; then
echo "Removing pure-ftpd password database: /etc/pureftpd.pdb..."
rm -f /etc/pureftpd.pdb
fi
if [ -e /etc/logrotate.d/pure-ftpd ]; then
echo "Removing /etc/logrotate.d/pure-ftpd..."
rm -f /etc/logrotate.d/pure-ftpd
fi
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
writeLog "Pure-ftpd removed"
}
####################################################
doNoFtpd() {
echo "No ftpd server set. Adding basic ftp:ftp account setup."
addUserGroup ftp ftp
addToAccess ftp
}
####################################################
doRemoveNghttp2() {
initHTTP2var
NGHTTP2_VER=1.48.0
getFile nghttp2-${NGHTTP2_VER}.tar.gz nghttp2
quitIfLocked doRemoveNghttp2
cd ${CWD}
FILE=${CWD}/nghttp2-${NGHTTP2_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd nghttp2-${NGHTTP2_VER}
echo "Configuring nghttp2-${NGHTTP2_VER} for removal..."
./configure
echo "Done. Removing nghttp2-${NGHTTP2_VER}..."
make uninstall
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
writeLog "nghttp2 removed"
}
####################################################
doUpdateDA() {
echo "${boldon}Updating DirectAdmin${boldoff}"
echo "action=update&value=program" >> ${TASK_QUEUE}
run_dataskq
writeLog "DirectAdmin update requested"
}
####################################################
doLetsEncrypt() {
if [ ! -x /usr/local/bin/lego ]; then
doLego
fi
cd ${CWD}
LETSENCRYPT_SH=/usr/local/directadmin/scripts/letsencrypt.sh
getFile all/letsencrypt/letsencrypt.sh.${LETSENCRYPT_VER} letsencrypt_sh letsencrypt.sh
mv -f ${CWD}/letsencrypt.sh ${LETSENCRYPT_SH}
chown diradmin:diradmin ${LETSENCRYPT_SH}
chmod 700 ${LETSENCRYPT_SH}
echo "Let's encrypt client ${LETSENCRYPT_VER} has been installed."
writeLog "Let's Encrypt client update requested"
}
####################################################
checkSecurity() {
MYSQL_IS_EOL=false
if [ -e /usr/bin/mysql ]; then
MYSQLV=`mysql_main`
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
MYSQL_NAME="MySQL"
else
MYSQL_NAME="MariaDB"
fi
if [ "${MYSQLV}" = "5.5" ] || [ "${MYSQLV}" = "10.0" ] || [ "${MYSQLV}" = "10.1" ]; then
MYSQL_IS_EOL=true
fi
fi
LIST_JSON_SECURITY=false
if ${MYSQL_IS_EOL}; then
LIST_JSON_SECURITY=true
fi
#0 update items
#1 show available updates
#2 just webapps N/A here.
#json similar to #1, but in json format.
VERSIONS=$1
if [ "${VERSIONS}" = "2" ]; then
return;
fi
if [ "${VERSIONS}" = "0" ]; then
#found cases where bind9.service boot of named, and named.serivce both running,
#so bind9 instance never gets reloaded, so randomly serves stale data.
ensure_not_debian_bind9_boot
fi
if [ "${VERSIONS}" = "json" ] && ${LIST_JSON_SECURITY}; then
printf "\t\"security\": {\n"
fi
SECURITY_ITEM_ADDED=0
if ${MYSQL_IS_EOL}; then
if [ "${VERSIONS}" = "json" ]; then
if [ "${SECURITY_ITEM_ADDED}" -eq 1 ]; then
echo ","
fi
SECURITY_ITEM_ADDED=1
printf "\t\t\"${MYSQL_NAME} EOL\": {\n"
printf "\t\t\t\"name\": \"${MYSQL_NAME} is EOL\",\n"
printf "\t\t\t\"description\": \"${MYSQL_NAME} version on the system is end of life, please upgrade\",\n"
printf "\t\t\t\"url\": \"https://endoflife.software/applications/databases\"\n"
printf "\t\t}"
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Security update is available.${boldoff}: ${MYSQL_NAME}: https://endoflife.software/applications/databases"
echo ""
fi
fi
if [ "${VERSIONS}" = "json" ] && ${LIST_JSON_SECURITY}; then
printf "\n\t},\n"
fi
}
####################################################
ensure_not_debian_bind9_boot() {
if [ ! -e /etc/debian_version ]; then
return;
fi
if [ ! -e /lib/systemd/system/bind9.service ] || [ ! -e /etc/systemd/system/named.service ]; then
return;
fi
if [ -h /lib/systemd/system/bind9.service ]; then
return;
fi
if [ ! -s ${SERVICES} ]; then
return;
fi
NAMED_ON=`grep -c 'named=ON' ${SERVICES}`
if [ "${NAMED_ON}" != "1" ]; then
return
fi
B9ON=`systemctl is-enabled bind9.service`
if [ "${B9ON}" != "enabled" ]; then
return;
fi
NAMEDON=`systemctl is-enabled named.service`
if [ "${NAMEDON}" != "enabled" ]; then
return;
fi
#only applies if named was already running as we don't want to start it up later, if it was never supposed to be running.
NAMED_COUNT=`ps ax | grep -v grep | grep -c named`
if [ "${NAMED_COUNT}" = "0" ]; then
return;
fi
echo "${boldon}Both bind9.service and named.service are enabled. This could lead to random stale dns data being serviced. Disabling bind9.service${boldoff}"
writeLog "disabling bind9 as both it and named were enabled."
control_service bind9 stop
control_service named stop
killall -9 named
sleep 1
systemctl disable bind9.service
control_service named start
sleep 1
NAMED_COUNT=`ps ax | grep -v grep | grep -c named`
SUBJECT="bind9.service disabled, named.service still enabled"
MESSAGE="CustomBuild has noticed both bind9.service and named.service were enabled.%0AThis could lead to bind9 serving stale data as it is never reloaded.%0AThe bind9.service boot script has been disabled, and named.service has been left as it was.%0ACustomBuild does see a new named process, you can likely disregard this message."
if [ "${NAMED_COUNT}" = "0" ]; then
#double check that.
sleep 5;
NAMED_COUNT=`ps ax | grep -v grep | grep -c named`
if [ "${NAMED_COUNT}" = "0" ]; then
#yikes, its broken.
SUBJECT="bind9.service has been disabled but there is an issue with named starting up."
MESSAGE="CustomBuild has noticed both bind9.service and named.service were enabled.%0AThis could lead to bind9 serving stale data as it is never reloaded.%0AThe bind9.service boot script has been disabled, and named.service has been left as it was.%0AHowever CustomBuild does not see a new named process, so investigation of /var/log/messages might be need if it's not running."
fi
fi
echo "action=notify&value=admin&subject=${SUBJECT}&message=${MESSAGE}" >> /usr/local/directadmin/data/task.queue
}
####################################################
doVersions() {
cd ${CWD}
if [ "$2" = "full" ]; then
if [ -e ${DEBIAN_VERSION} ]; then
apt-get update
apt-get -y upgrade
else
yum -y update
fi
doUpdate
fi
VERSIONS=$1
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${VERSIONS}" = "2" ]; then
#Skip executing CL commands like "cagefsctl --force update" on every component update
EXEC_CL_COMMANDS_ONCE=true
fi
WEBAPPS_UPDATED=false
if [ "${VERSIONS}" = "1" ]; then
if [ -s ${VERSIONS_FILE_CUSTOM} ]; then
echo -n "${boldon}NOTE${boldoff}: Some custom versions are set in ${VERSIONS_FILE_CUSTOM}, this may prevent showing the actual latest version of the software: "
cat ${VERSIONS_FILE_CUSTOM} | cut -d: -f1,2 | perl -p0 -e 's|:| (|g' | perl -p0 -e 's|\n|), |g' | perl -p0 -e 's|, $||g'
echo ""
echo ""
fi
fi
if [ "${VERSIONS}" = "json" ]; then
echo "{"
fi
if [ $(is_os_eol) -eq 0 ] && [ -e ${DA_BIN} ]; then
DOWNGRADE_CASE=false
UPDATE_DATA=`curl -s -k -L $(/usr/local/directadmin/directadmin --root-auth-url)/CMD_API_LICENSE?json=yes 2>/dev/null | perl -ne 'print if /"(update_available|latest_commit_sha|commit_sha|version|current_version)":[^,]*/'`
if [ ! -z "${UPDATE_DATA}" ]; then
DIRECTADMIN_UPDATE_AVAIL="`echo "${UPDATE_DATA}" | grep -o '"update_available"[^,]*' | cut -d'"' -f4`"
DIRECTADMIN_UPDATE_LATEST_SHA="`echo "${UPDATE_DATA}" | grep -o '"latest_commit_sha"[^,]*' | cut -d'"' -f4`"
DIRECTADMIN_UPDATE_SHA="`echo "${UPDATE_DATA}" | grep -o '"commit_sha"[^,]*' | cut -d'"' -f4`"
DIRECTADMIN_UPDATE_VER="`echo "${UPDATE_DATA}" | grep -o '"version"[^,]*' | cut -d'"' -f4`"
DIRECTADMIN_UPDATE_CURRENT_VER="`echo "${UPDATE_DATA}" | grep -o '"current_version"[^,]*' | cut -d'"' -f4`"
else
DIRECTADMIN_UPDATE_AVAIL="0"
DIRECTADMIN_UPDATE_LATEST_SHA="0"
DIRECTADMIN_UPDATE_SHA="0"
DIRECTADMIN_UPDATE_VER="0"
DIRECTADMIN_UPDATE_CURRENT_VER="0"
fi
if [ -z "${DIRECTADMIN_UPDATE_LATEST_SHA}" ]; then
DIRECTADMIN_UPDATE_LATEST_SHA="0"
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of DirectAdmin: ${DIRECTADMIN_UPDATE_VER} build ${DIRECTADMIN_UPDATE_LATEST_SHA}"
echo "Installed version of DirectAdmin: ${DIRECTADMIN_UPDATE_CURRENT_VER} build ${DIRECTADMIN_UPDATE_SHA}"
echo ""
fi
if [ "${DIRECTADMIN_UPDATE_AVAIL}" = "1" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "3" ]; then
doUpdateDA
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}DirectAdmin ${DIRECTADMIN_UPDATE_VER} build ${DIRECTADMIN_UPDATE_SHA} to ${DIRECTADMIN_UPDATE_CURRENT_VER} build ${DIRECTADMIN_UPDATE_LATEST_SHA} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"update_da\": {\n"
printf "\t\t\"name\": \"DirectAdmin\",\n"
printf "\t\t\"current\": \"${DIRECTADMIN_UPDATE_VER} build ${DIRECTADMIN_UPDATE_SHA}\",\n"
printf "\t\t\"offered\": \"${DIRECTADMIN_UPDATE_CURRENT_VER} build ${DIRECTADMIN_UPDATE_LATEST_SHA}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
LETSENCRYPT=`getDA_Opt letsencrypt 1`
if [ "${LETSENCRYPT}" -ge 1 ] && [ -e /usr/local/directadmin/scripts/letsencrypt.sh ]; then
if grep -q -m1 'VERSION=' /usr/local/directadmin/scripts/letsencrypt.sh; then
LETSENCRYPTV="`grep -m1 'VERSION=' /usr/local/directadmin/scripts/letsencrypt.sh | cut -d'=' -f2`"
else
LETSENCRYPTV="0"
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of LetsEncrypt: ${LETSENCRYPT_VER}"
echo "Installed version of LetsEncrypt: ${LETSENCRYPTV}"
echo ""
fi
if [ "${LETSENCRYPT_VER}" != "${LETSENCRYPTV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating LetsEncrypt${boldoff}"
doLetsEncrypt
WEBAPPS_UPDATED=true
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}LetsEncrypt ${LETSENCRYPTV} to ${LETSENCRYPT_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"letsencrypt\": {\n"
printf "\t\t\"name\": \"LetsEncrypt\",\n"
printf "\t\t\"current\": \"${LETSENCRYPTV}\",\n"
printf "\t\t\"offered\": \"${LETSENCRYPT_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -x /usr/bin/bwrap ] && [ "${CLOUDLINUX_OPT}" != "yes" ]; then
BUBBLEWRAPV="`/usr/bin/bwrap --version | awk '{print $2}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Bubblewrap: ${BUBBLEWRAP_VER}"
echo "Installed version of Bubblewrap: ${BUBBLEWRAPV}"
echo ""
fi
if [ "${BUBBLEWRAP_VER}" != "${BUBBLEWRAPV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Bubblewrap${boldoff}"
doBubblewrap
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Bubblewrap ${BUBBLEWRAPV} to ${BUBBLEWRAP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"bubblewrap\": {\n"
printf "\t\t\"name\": \"Bubblewrap\",\n"
printf "\t\t\"current\": \"${BUBBLEWRAPV}\",\n"
printf "\t\t\"offered\": \"${BUBBLEWRAP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
if [ -s /usr/bin/jailshell ]; then
if grep -q -m1 'VERSION=' /usr/bin/jailshell; then
JAILSHELL_SHV="`grep -m1 'VERSION=' /usr/bin/jailshell | cut -d'=' -f2`"
else
JAILSHELL_SHV="0"
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Jailshell: ${JAILSHELL_SH_VER}"
echo "Installed version of Jailshell: ${JAILSHELL_SHV}"
echo ""
fi
if [ "${JAILSHELL_SH_VER}" != "${JAILSHELL_SHV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating Jailshell${boldoff}"
doJailshell
WEBAPPS_UPDATED=true
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Jailshell ${JAILSHELL_SHV} to ${JAILSHELL_SH_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"jailshell\": {\n"
printf "\t\t\"name\": \"Jailshell\",\n"
printf "\t\t\"current\": \"${JAILSHELL_SHV}\",\n"
printf "\t\t\"offered\": \"${JAILSHELL_SH_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${CUSTOMBUILD_PLUGIN_OPT}" = "yes" ]; then
if [ -s /usr/local/directadmin/plugins/custombuild/plugin.conf ]; then
CB_PLUGINV="`grep '^version=' /usr/local/directadmin/plugins/custombuild/plugin.conf | cut -d= -f2`"
else
CB_PLUGINV=0
fi
if [ -s /usr/local/directadmin/plugins/custombuild/available_version.txt ]; then
CB_PLUGIN_VER="`cat /usr/local/directadmin/plugins/custombuild/available_version.txt`"
else
CB_PLUGIN_VER=`curl -s ${WEBPATH}/plugin/version.html | head -n1`
if ! echo "${CB_PLUGIN_VER}" | grep -m1 -q '^[0-9]\.'; then
CB_PLUGIN_VER=0
fi
fi
DOWNGRADE_CASE=false
if [ "`version_cmp ${CB_PLUGIN_VER} $CB_PLUGINV`" -lt 0 ]; then
DOWNGRADE_CASE=true
fi
if ! ${DOWNGRADE_CASE}; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of CustomBuild plugin: ${CB_PLUGIN_VER}"
echo "Installed version of CustomBuild plugin: ${CB_PLUGINV}"
echo ""
fi
if [ "${CB_PLUGIN_VER}" != "${CB_PLUGINV}" ] && [ "${CB_PLUGINV}" != "0" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating CustomBuild plugin${boldoff}"
doCustombuildPlugin
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}CustomBuild plugin ${CB_PLUGINV} to ${CB_PLUGIN_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"custombuild_plugin\": {\n"
printf "\t\t\"name\": \"CustomBuild plugin\",\n"
printf "\t\t\"current\": \"${CB_PLUGINV}\",\n"
printf "\t\t\"offered\": \"${CB_PLUGIN_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ] && [ "${LITESPEED_VER}" != "0" ]; then
if [ -e /usr/local/lsws/bin/lshttpd ]; then
LITESPEEDV="`/usr/local/lsws/bin/lshttpd -v | cut -d/ -f2 | awk '{print $1}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of LiteSpeed: ${LITESPEED_VER}"
echo "Installed version of LiteSpeed: ${LITESPEEDV}"
echo ""
fi
if [ "${LITESPEED_VER}" != "${LITESPEEDV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating LiteSpeed${boldoff}"
doLiteSpeed
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}LiteSpeed ${LITESPEEDV} to ${LITESPEED_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"litespeed\": {\n"
printf "\t\t\"name\": \"LiteSpeed\",\n"
printf "\t\t\"current\": \"${LITESPEEDV}\",\n"
printf "\t\t\"offered\": \"${LITESPEED_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ] && [ "${OPENLITESPEED_VER}" != "0" ]; then
if [ -e /usr/local/lsws/bin/lshttpd ]; then
OPENLITESPEEDV="`/usr/local/lsws/bin/lshttpd -v | head -n1 | cut -d/ -f2 | awk '{print $1}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of OpenLiteSpeed: ${OPENLITESPEED_VER}"
echo "Installed version of OpenLiteSpeed: ${OPENLITESPEEDV}"
echo ""
fi
if [ "${OPENLITESPEED_VER}" != "${OPENLITESPEEDV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating OpenLiteSpeed${boldoff}"
doOpenLiteSpeed
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}OpenLiteSpeed ${OPENLITESPEEDV} to ${OPENLITESPEED_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"openlitespeed\": {\n"
printf "\t\t\"name\": \"OpenLiteSpeed\",\n"
printf "\t\t\"current\": \"${OPENLITESPEEDV}\",\n"
printf "\t\t\"offered\": \"${OPENLITESPEED_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${APACHE2_VER}" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -e /usr/sbin/httpd ]; then
APACHEV="`/usr/sbin/httpd -v | grep -m1 'Server version:' | awk '{ print $3 }' | cut -d/ -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Apache: ${APACHE2_VER}"
echo "Installed version of Apache: ${APACHEV}"
echo ""
fi
if [ "${APACHE2_VER}" != "${APACHEV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Apache${boldoff}"
doApache2
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Apache ${APACHEV} to ${APACHE2_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"apache\": {\n"
printf "\t\t\"name\": \"Apache\",\n"
printf "\t\t\"current\": \"${APACHEV}\",\n"
printf "\t\t\"offered\": \"${APACHE2_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
fi
NGINX_UPDATE_AVAILABLE=0
if [ "${NGINX_VER}" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -e /usr/sbin/nginx ]; then
NGINXV="`/usr/sbin/nginx -v 2>&1 | grep -m1 'nginx version:' | cut -d'/' -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Nginx: ${NGINX_VER}"
echo "Installed version of Nginx: ${NGINXV}"
echo ""
fi
if [ "${NGINX_VER}" != "${NGINXV}" ]; then
NGINX_UPDATE_AVAILABLE=1
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Nginx${boldoff}"
doNginx
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Nginx ${NGINXV} to ${NGINX_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"nginx\": {\n"
printf "\t\t\"name\": \"Nginx\",\n"
printf "\t\t\"current\": \"${NGINXV}\",\n"
printf "\t\t\"offered\": \"${NGINX_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
fi
if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "owasp" ] && [ "${OWASP_RULES_VER}" != "0" ]; then
OWASP_RULESV=0
if [ -e /etc/modsecurity.d/owasp_rules_version ]; then
OWASP_RULESV=`cat /etc/modsecurity.d/owasp_rules_version`
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of OWASP ModSecurity Rule Set: ${OWASP_RULES_VER}"
echo "Installed version of OWASP ModSecurity Rule Set: ${OWASP_RULESV}"
echo ""
fi
if [ "${OWASP_RULES_VER}" != "${OWASP_RULESV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating OWASP ModSecurity Rule Set${boldoff}"
doModSecurityRules
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}OWASP ModSecurity Rule Set ${OWASP_RULESV} to ${OWASP_RULES_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"modsecurity_rules\": {\n"
printf "\t\t\"name\": \"OWASP ModSecurity Rule Set\",\n"
printf "\t\t\"current\": \"${OWASP_RULESV}\",\n"
printf "\t\t\"offered\": \"${OWASP_RULES_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -s /usr/local/include/maxminddb.h ]; then
LIBMAXMINDDBV=`grep -m1 'PACKAGE_VERSION' /usr/local/include/maxminddb.h | cut -d'"' -f2`
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of libmaxminddb: ${LIBMAXMINDDB_VER}"
echo "Installed version of libmaxminddb: ${LIBMAXMINDDBV}"
echo ""
fi
if [ "${LIBMAXMINDDB_VER}" != "${LIBMAXMINDDBV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating libmaxminddb${boldoff}"
dolibmaxminddb
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}libmaxminddb ${LIBMAXMINDDBV} to ${LIBMAXMINDDB_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"libmaxminddb\": {\n"
printf "\t\t\"name\": \"libmaxminddb\",\n"
printf "\t\t\"current\": \"${LIBMAXMINDDBV}\",\n"
printf "\t\t\"offered\": \"${LIBMAXMINDDB_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -x /usr/local/bin/geoipupdate ]; then
GEOIPUPDATEV="`/usr/local/bin/geoipupdate -V | awk '{print $2}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of geoipupdate: ${GEOIPUPDATE_VER}"
echo "Installed version of geoipupdate: ${GEOIPUPDATEV}"
echo ""
fi
if [ "${GEOIPUPDATE_VER}" != "${GEOIPUPDATEV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating geoipupdate${boldoff}"
doGeoipupdate
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}geoipupdate ${GEOIPUPDATEV} to ${GEOIPUPDATE_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"geoipupdate\": {\n"
printf "\t\t\"name\": \"geoipupdate\",\n"
printf "\t\t\"current\": \"${GEOIPUPDATEV}\",\n"
printf "\t\t\"offered\": \"${GEOIPUPDATE_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
CURRENT_CWAF_RULES_VER=${CWAF_RULES_LS_VER}
elif [ "${WEBSERVER_OPT}" = "apache" ]; then
CURRENT_CWAF_RULES_VER=${CWAF_RULES_VER}
else
CURRENT_CWAF_RULES_VER=${CWAF_RULES_NGINX_VER}
fi
if [ "${CURRENT_CWAF_RULES_VER}" != "0" ]; then
CWAF_RULESV=0
if [ -e /usr/local/cwaf/rules/rules.dat ]; then
CWAF_RULESV=`cat /usr/local/cwaf/rules/rules.dat`
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Comodo ModSecurity Rule Set: ${CURRENT_CWAF_RULES_VER}"
echo "Installed version of Comodo ModSecurity Rule Set: ${CWAF_RULESV}"
echo ""
fi
if [ "${CURRENT_CWAF_RULES_VER}" != "${CWAF_RULESV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Comodo ModSecurity Rule Set${boldoff}"
doModSecurityRules
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Comodo ModSecurity Rule Set ${CWAF_RULESV} to ${CURRENT_CWAF_RULES_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"modsecurity_rules\": {\n"
printf "\t\t\"name\": \"Comodo ModSecurity Rule Set\",\n"
printf "\t\t\"current\": \"${CWAF_RULESV}\",\n"
printf "\t\t\"offered\": \"${CURRENT_CWAF_RULES_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${FTPD_OPT}" = "proftpd" ] && [ "${PROFTPD_VER}" != "0" ]; then
if [ -e $PROFTPD_PREFIX/sbin/proftpd ]; then
PROFTPDV="`$PROFTPD_PREFIX/sbin/proftpd -v 2>&1 | awk '{ print $3 }'`"
if [ "$PROFTPDV" = "Version" ]; then
PROFTPDV="`$PROFTPD_PREFIX/sbin/proftpd -v 2>&1 | awk '{ print $4 }'`"
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of ProFTPD: ${PROFTPD_VER}"
echo "Installed version of ProFTPD: ${PROFTPDV}"
echo ""
fi
if [ "${PROFTPD_VER}" != "${PROFTPDV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating ProFTPD${boldoff}"
doProftpd
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}ProFTPD ${PROFTPDV} to ${PROFTPD_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"proftpd\": {\n"
printf "\t\t\"name\": \"ProFTPd\",\n"
printf "\t\t\"current\": \"${PROFTPDV}\",\n"
printf "\t\t\"offered\": \"${PROFTPD_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${FTPD_OPT}" = "pureftpd" ] && [ "${PUREFTPD_VER}" != "0" ]; then
if [ -e /usr/sbin/pure-ftpd ]; then
PUREFTPDV="`/usr/sbin/pure-ftpd -h | grep -m1 pure-ftpd | awk '{print $2}' | cut -dv -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Pure-FTPD: ${PUREFTPD_VER}"
echo "Installed version of Pure-FTPd: ${PUREFTPDV}"
echo ""
fi
if [ "${PUREFTPD_VER}" != "${PUREFTPDV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Pure-FTPd${boldoff}"
doPureftpd
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Pure-FTPD ${PUREFTPDV} to ${PUREFTPD_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"pureftpd\": {\n"
printf "\t\t\"name\": \"Pure-FTPd\",\n"
printf "\t\t\"current\": \"${PUREFTPDV}\",\n"
printf "\t\t\"offered\": \"${PUREFTPD_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${REDIS_OPT}" = "yes" ]; then
REDISV=0
if [ -x /usr/local/bin/redis-server ]; then
REDISV="`/usr/local/bin/redis-server -v | grep -o -m1 'v=[^ ]*' | cut -d= -f2`"
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Redis: ${REDIS_VER}"
echo "Installed version of Redis: ${REDISV}"
echo ""
fi
if [ "${REDIS_VER}" != "${REDISV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Redis${boldoff}"
doRedis
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Redis ${REDISV} to ${REDIS_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"redis\": {\n"
printf "\t\t\"name\": \"Redis\",\n"
printf "\t\t\"current\": \"${REDISV}\",\n"
printf "\t\t\"offered\": \"${REDIS_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${IMAGICK_OPT}" = "yes" ] && [ "${IMAGEMAGICK_VER}" != "0" ]; then
IMAGEMAGICKV=0
if [ -x /usr/local/bin/magick ]; then
IMAGEMAGICKV="`/usr/local/bin/magick -version | head -n1 | awk '{print $3}'`"
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of ImageMagick: ${IMAGEMAGICK_VER}"
echo "Installed version of ImageMagick: ${IMAGEMAGICKV}"
echo ""
fi
if [ "${IMAGEMAGICK_VER}" != "${IMAGEMAGICKV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating ImageMagick${boldoff}"
doImageMagick
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}ImageMagick ${IMAGEMAGICKV} to ${IMAGEMAGICK_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"imagemagick\": {\n"
printf "\t\t\"name\": \"ImageMagick\",\n"
printf "\t\t\"current\": \"${IMAGEMAGICKV}\",\n"
printf "\t\t\"offered\": \"${IMAGEMAGICK_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${IMAGICK_OPT}" = "yes" ] && [ "${IMAGICK_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then
IMAGICKV=0
if /usr/local/bin/php -i | grep -m1 -q 'imagick module version'; then
IMAGICKV="`/usr/local/bin/php -i | grep -m1 'imagick module version' | awk '{print $5}'`"
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of imagick: ${IMAGICK_VER}"
echo "Installed version of imagick: ${IMAGICKV}"
echo ""
fi
if [ "${IMAGICK_VER}" != "${IMAGICKV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating imagick${boldoff}"
doIMagick
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Imagick ${IMAGICKV} to ${IMAGICK_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"imagick\": {\n"
printf "\t\t\"name\": \"imagick\",\n"
printf "\t\t\"current\": \"${IMAGICKV}\",\n"
printf "\t\t\"offered\": \"${IMAGICK_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${WEBSERVER}" = "nginx" ] || [ "${WEBSERVER}" = "nginx_apache" ]; then
if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${LIBMODSECURITY_VER}" != "0" ]; then
if [ -s /usr/local/modsecurity/lib/pkgconfig/modsecurity.pc ]; then
LIBMODSECURITYV=`grep 'Version: ' /usr/local/modsecurity/lib/pkgconfig/modsecurity.pc | awk '{print $2}'`
else
LIBMODSECURITYV=0
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of LibModSecurity: ${LIBMODSECURITYV}"
echo "Installed version of LibModSecurity: ${LIBMODSECURITY_VER}"
echo ""
fi
if [ "${LIBMODSECURITYV}" != "${LIBMODSECURITY_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating LibModSecurity${boldoff}"
doLibModSecurity
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}LibModSecurity ${LIBMODSECURITYV} to ${LIBMODSECURITY_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"libmodsecurity\": {\n"
printf "\t\t\"name\": \"LibModSecurity\",\n"
printf "\t\t\"current\": \"${LIBMODSECURITYV}\",\n"
printf "\t\t\"offered\": \"${LIBMODSECURITY_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
# Check ModSecurity connector version
if nginx -V 2>&1 | grep -q -o -m1 'modsecurity-nginx-v[^ ]*'; then
MODSECURITY_NGINX_CONNECTORV=`nginx -V 2>&1 | grep -o -m1 'modsecurity-nginx-v[^ ]*' | cut -d- -f3`
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of ModSecurity Nginx Connector: ${MODSECURITY_NGINX_CONNECTORV}"
echo "Installed version of ModSecurity Nginx Connector: ${MODSECURITY_NGINX_CONNECTOR_VER}"
echo ""
fi
if [ "${MODSECURITY_NGINX_CONNECTORV}" != "${MODSECURITY_NGINX_CONNECTOR_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating ModSecurity Nginx Connector${boldoff}"
doModSecurityConnector 1
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}ModSecurity Nginx Connector ${MODSECURITY_NGINX_CONNECTORV} to ${MODSECURITY_NGINX_CONNECTOR_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"modsecurity_connector\": {\n"
printf "\t\t\"name\": \"ModSecurity Nginx Connector\",\n"
printf "\t\t\"current\": \"${MODSECURITY_NGINX_CONNECTORV}\",\n"
printf "\t\t\"offered\": \"${MODSECURITY_NGINX_CONNECTOR_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
fi
if [ -x /usr/local/bin/wp ]; then
WPV="`/usr/local/bin/wp --version --allow-root | cut -d" " -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of WP-CLI: ${WP_VER}"
echo "Installed version of WP-CLI: ${WPV}"
echo ""
fi
if [ "${WP_VER}" != "${WPV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating WP-CLI${boldoff}"
doWP
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}WP-CLI ${WPV} to ${WP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"wp\": {\n"
printf "\t\t\"name\": \"wp-cli\",\n"
printf "\t\t\"current\": \"${WPV}\",\n"
printf "\t\t\"offered\": \"${WP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -x /usr/local/bin/imapsync ]; then
IMAPSYNCV="`/usr/local/bin/imapsync --version`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Imapsync: ${IMAPSYNC_VER}"
echo "Installed version of Imapsync: ${IMAPSYNCV}"
echo ""
fi
if [ "${IMAPSYNC_VER}" != "${IMAPSYNCV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Imapsync${boldoff}"
doImapsync
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Imapsync ${IMAPSYNCV} to ${IMAPSYNC_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"imapsync\": {\n"
printf "\t\t\"name\": \"Imapsync\",\n"
printf "\t\t\"current\": \"${IMAPSYNCV}\",\n"
printf "\t\t\"offered\": \"${IMAPSYNC_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -s ${STRINGS} ]; then
if [ -x /usr/local/bin/composer ]; then
COMPOSERV="`strings /usr/local/bin/composer | grep -m1 'const VERSION = ' | cut -d"'" -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of composer: ${COMPOSER_VER}"
echo "Installed version of composer: ${COMPOSERV}"
echo ""
fi
if [ "${COMPOSER_VER}" != "${COMPOSERV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating composer${boldoff}"
doComposer
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Composer ${COMPOSERV} to ${COMPOSER_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"composer\": {\n"
printf "\t\t\"name\": \"composer\",\n"
printf "\t\t\"current\": \"${COMPOSERV}\",\n"
printf "\t\t\"offered\": \"${COMPOSER_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${PHP1_MODE_OPT}" = "lsphp" ] && [ "${MOD_LSAPI_VER}" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -s /usr/lib/apache/mod_lsapi.so ]; then
MODLSAPIV="`${STRINGS} /usr/lib/apache/mod_lsapi.so | grep -m1 'version' | awk '{print $3}' | cut -d: -f1 | grep -o '.*[0-9][^a-z]'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of mod_lsapi: ${MOD_LSAPI_VER}"
echo "Installed version of mod_lsapi: ${MODLSAPIV}"
echo ""
fi
if [ "${MODLSAPIV}" != "${MOD_LSAPI_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating mod_lsapi${boldoff}"
doModLsapi 1
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}mod_lsapi ${MODLSAPIV} to ${MOD_LSAPI_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"mod_lsapi\": {\n"
printf "\t\t\"name\": \"mod_lsapi\",\n"
printf "\t\t\"current\": \"${MODLSAPIV}\",\n"
printf "\t\t\"offered\": \"${MOD_LSAPI_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${MOD_PROCTITLE_VER}" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -s /usr/lib/apache/mod_proctitle.so ]; then
MODPROCTITLEV="`${STRINGS} /usr/lib/apache/mod_proctitle.so | grep -m1 'version' | awk '{print $3}' | cut -d. -f1,2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of mod_proctitle: ${MODPROCTITLEV}"
echo "Installed version of mod_proctitle: ${MOD_PROCTITLE_VER}"
echo ""
fi
if [ "${MODPROCTITLEV}" != "${MOD_PROCTITLE_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating mod_proctitle${boldoff}"
doModProctitle 1
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}mod_proctitle ${MODPROCTITLEV} to ${MOD_PROCTITLE_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"mod_proctitle\": {\n"
printf "\t\t\"name\": \"mod_proctitle\",\n"
printf "\t\t\"current\": \"${MODPROCTITLEV}\",\n"
printf "\t\t\"offered\": \"${MOD_PROCTITLE_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${MOD_HOSTINGLIMITS_VER}" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ -s /usr/lib/apache/mod_hostinglimits.so ]; then
MODHOSTINGLIMITSV="`${STRINGS} /usr/lib/apache/mod_hostinglimits.so | grep -m1 'version' | awk '{print $3}' | cut -d. -f1,2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of mod_hostinglimits: ${MODHOSTINGLIMITSV}"
echo "Installed version of mod_hostinglimits: ${MOD_HOSTINGLIMITS_VER}"
echo ""
fi
if [ "${MODHOSTINGLIMITSV}" != "${MOD_HOSTINGLIMITS_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating mod_hostinglimits${boldoff}"
doModHostingLimits 1
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}mod_hostinglimits ${MODHOSTINGLIMITSV} to ${MOD_HOSTINGLIMITS_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"mod_hostinglimits\": {\n"
printf "\t\t\"name\": \"mod_hostinglimits\",\n"
printf "\t\t\"current\": \"${MODHOSTINGLIMITSV}\",\n"
printf "\t\t\"offered\": \"${MOD_HOSTINGLIMITS_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
fi
if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${WEBSERVER_OPT}" = "apache" ] && [ "${MODSECURITY_VER}" != "0" ]; then
if [ -s /usr/lib/apache/mod_security2.so ]; then
MODSECURITYV="`${STRINGS} /usr/lib/apache/mod_security2.so | grep -m1 'ModSecurity for Apache/' | cut -d/ -f2 | awk '{print $1}'`"
if ! ${STRINGS} /usr/lib/apache/mod_security2.so | grep -m1 -q 'libyajl'; then
MODSECURITYV="0"
fi
else
MODSECURITYV="0"
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of ModSecurity: ${MODSECURITYV}"
echo "Installed version of ModSecurity: ${MODSECURITY_VER}"
echo ""
fi
if [ "${MODSECURITYV}" != "${MODSECURITY_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating ModSecurity${boldoff}"
doModSecurity
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}ModSecurity ${MODSECURITYV} to ${MODSECURITY_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"modsecurity\": {\n"
printf "\t\t\"name\": \"ModSecurity\",\n"
printf "\t\t\"current\": \"${MODSECURITYV}\",\n"
printf "\t\t\"offered\": \"${MODSECURITY_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${MOD_RUID2_OPT}" = "yes" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${MOD_RUID2_VER}" != "0" ]; then
if [ -s /usr/lib/apache/mod_ruid2.so ]; then
MODRUID2V="`${STRINGS} /usr/lib/apache/mod_ruid2.so | grep -m1 'mod_ruid2/' | awk '{print $1}' | cut -d/ -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of mod_ruid2: ${MOD_RUID2_VER}"
echo "Installed version of mod_ruid2: ${MODRUID2V}"
echo ""
fi
if [ "${MODRUID2V}" != "${MOD_RUID2_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating mod_ruid2${boldoff}"
doModRuid2
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}mod_ruid2 ${MODRUID2V} to ${MOD_RUID2_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"mod_ruid2\": {\n"
printf "\t\t\"name\": \"mod_ruid2\",\n"
printf "\t\t\"current\": \"${MODRUID2V}\",\n"
printf "\t\t\"offered\": \"${MOD_RUID2_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
fi
if [ "${CURL_OPT}" = "yes" ] && [ -e /usr/local/bin/curl ]; then
if [ -e /usr/local/bin/curl ] && [ "${CURL_VER}" != "0" ]; then
CURLV="`/usr/local/bin/curl --version | grep -m1 'libcurl' | awk '{ print $2}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of curl: ${CURL_VER}"
echo "Installed version of curl: ${CURLV}"
echo ""
fi
if [ "${CURL_VER}" != "${CURLV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating cURL${boldoff}"
doCURL
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}cURL ${CURLV} to ${CURL_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"curl\": {\n"
printf "\t\t\"name\": \"cURL\",\n"
printf "\t\t\"current\": \"${CURLV}\",\n"
printf "\t\t\"offered\": \"${CURL_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${AWSTATS_OPT}" = "yes" ] && [ "${AWSTATS_VER}" != "0" ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of AWstats: ${AWSTATS_VER}"
fi
AWSTATSV=0
if [ -e /usr/local/awstats ]; then
AWSTATSV="`ls -ld /usr/local/awstats | cut -d\> -f2 | cut -d- -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of AWstats: ${AWSTATSV}"
echo ""
fi
fi
if [ "${AWSTATS_VER}" != "${AWSTATSV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating AWstats.${boldoff}"
doawstats
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}AWstats ${AWSTATSV} to ${AWSTATS_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"awstats\": {\n"
printf "\t\t\"name\": \"AWstats\",\n"
printf "\t\t\"current\": \"${AWSTATSV}\",\n"
printf "\t\t\"offered\": \"${AWSTATS_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
if [ "${AWSTATS_PROCESS_VER}" != "0" ]; then
AWS_PROCESS_V=0
AWS_PROCESS_SH=/usr/local/directadmin/scripts/awstats_process.sh
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of awstats_process.sh: ${AWSTATS_PROCESS_VER}"
fi
if [ -s "${AWS_PROCESS_SH}" ]; then
AWS_PROCESS_V=`grep ^VERSION= ${AWS_PROCESS_SH} | cut -d= -f2`
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of awstats_process.sh: ${AWS_PROCESS_V}"
echo ""
fi
fi
if [ "${AWSTATS_PROCESS_VER}" != "${AWS_PROCESS_V}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating awstats_process.sh.${boldoff}"
doawstats_process
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}awstats_process.sh ${AWS_PROCESS_V} to ${AWSTATS_PROCESS_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"awstats_process\": {\n"
printf "\t\t\"name\": \"awstats_process.sh\",\n"
printf "\t\t\"current\": \"${AWS_PROCESS_V}\",\n"
printf "\t\t\"offered\": \"${AWSTATS_PROCESS_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${DOVECOT_OPT}" = "yes" ] && [ "${DOVECOT_VER}" != "0" ]; then
if [ -e /usr/sbin/dovecot ]; then
DOVECOTV="`/usr/sbin/dovecot --version | cut -d\ -f1`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of dovecot: ${DOVECOT_VER}"
echo "Installed version of dovecot: ${DOVECOTV}"
echo ""
fi
if [ "${DOVECOT_VER}" != "${DOVECOTV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Dovecot${boldoff}"
doDovecot
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Dovecot ${DOVECOTV} to ${DOVECOT_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"dovecot\": {\n"
printf "\t\t\"name\": \"Dovecot\",\n"
printf "\t\t\"current\": \"${DOVECOTV}\",\n"
printf "\t\t\"offered\": \"${DOVECOT_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${DOVECOT_CONF_OPT}" = "yes" ]; then
COUNT=0
if [ -e /etc/dovecot/dovecot.conf ]; then
COUNT=`head -n1 /etc/dovecot/dovecot.conf | grep -c '^#'`
fi
if [ "${COUNT}" -gt 0 ]; then
DOVECOT_CONFV="`head -n1 /etc/dovecot/dovecot.conf | cut -d'#' -f2`"
else
DOVECOT_CONFV=0
fi
if [ "${DOVECOT_CONFV}" = "" ]; then
DOVECOT_CONFV=0
fi
COUNT=0
if [ -e ${DOVECTCONFFILE} ]; then
COUNT=`head -n1 ${DOVECTCONFFILE} | grep -c '^#'`
fi
if [ "${COUNT}" -gt 0 ]; then
DOVECOT_CONF_VER="`head -n1 ${DOVECTCONFFILE} | cut -d'#' -f2`"
else
DOVECOT_CONF_VER=0
fi
if [ "${DOVECOT_CONF_VER}" != "0" ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of dovecot.conf: ${DOVECOT_CONF_VER}"
echo "Installed version of dovecot.conf: ${DOVECOT_CONFV}"
echo ""
fi
if [ "${DOVECOT_CONF_VER}" != "${DOVECOT_CONFV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating dovecot.conf${boldoff}"
doDovecotConf
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}dovecot.conf ${DOVECOT_CONFV} to ${DOVECOT_CONF_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"dovecot_conf\": {\n"
printf "\t\t\"name\": \"dovecot.conf\",\n"
printf "\t\t\"current\": \"${DOVECOT_CONFV}\",\n"
printf "\t\t\"offered\": \"${DOVECOT_CONF_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${EXIM_OPT}" = "yes" ] && [ "${EXIM_VER}" != "0" ]; then
if [ -e /usr/sbin/exim ]; then
EXIMV="`exim_version`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Exim: ${EXIM_VER}"
echo "Installed version of Exim: ${EXIMV}"
echo ""
fi
if [ "${EXIM_VER}" != "${EXIMV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Exim${boldoff}"
doExim
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Exim ${EXIMV} to ${EXIM_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"exim\": {\n"
printf "\t\t\"name\": \"Exim\",\n"
printf "\t\t\"current\": \"${EXIMV}\",\n"
printf "\t\t\"offered\": \"${EXIM_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ -x /usr/local/bin/lego ]; then
LEGOV="`/usr/local/bin/lego -v 2>/dev/null | awk '{print $3}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of lego: ${LEGO_VER}"
echo "Installed version of lego: ${LEGOV}"
echo ""
fi
if [ "${LEGO_VER}" != "${LEGOV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating lego${boldoff}"
doLego
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Lego ${LEGOV} to ${LEGO_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"lego\": {\n"
printf "\t\t\"name\": \"lego\",\n"
printf "\t\t\"current\": \"${LEGOV}\",\n"
printf "\t\t\"offered\": \"${LEGO_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -x /usr/local/bin/lua ]; then
LUAV="`/usr/local/bin/lua -v 2>/dev/null | awk '{print $2}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of lua: ${LUA_VER}"
echo "Installed version of lua: ${LUAV}"
echo ""
fi
if [ "${LUA_VER}" != "${LUAV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating lue${boldoff}"
doLua
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}lua ${LUAV} to ${LUA_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"lua\": {\n"
printf "\t\t\"name\": \"lua\",\n"
printf "\t\t\"current\": \"${LUAV}\",\n"
printf "\t\t\"offered\": \"${LUA_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -x /usr/local/bin/s-nail ]; then
SNAILV="`/usr/local/bin/s-nail -V 2>/dev/null | awk '{print $2}' | grep -m1 -o '[0-9][^,]*'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of s-nail: ${S_NAIL_VER}"
echo "Installed version of s-nail: ${SNAILV}"
echo ""
fi
if [ "${S_NAIL_VER}" != "${SNAILV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating s-nail${boldoff}"
doSnail
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}s-nail ${SNAILV} to ${S_NAIL_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"s-nail\": {\n"
printf "\t\t\"name\": \"s-nail\",\n"
printf "\t\t\"current\": \"${SNAILV}\",\n"
printf "\t\t\"offered\": \"${S_NAIL_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -x /usr/local/bin/msmtp ]; then
MSMTPV="`/usr/local/bin/msmtp --version 2>/dev/null | head -n1 | grep -m1 -o '[0-9][^,]*'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of msmtp: ${MSMTP_VER}"
echo "Installed version of msmtp: ${MSMTPV}"
echo ""
fi
if [ "${MSMTP_VER}" != "${MSMTPV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating msmtp${boldoff}"
doMsmtp
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}msmtp ${MSMTPV} to ${MSMTP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"msmtp\": {\n"
printf "\t\t\"name\": \"msmtp\",\n"
printf "\t\t\"current\": \"${MSMTPV}\",\n"
printf "\t\t\"offered\": \"${MSMTP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${EXIMCONF_OPT}" = "yes" ] && [ "${EXIM_CONF_VER}" != "0" ]; then
EXIMCONFV=`exim_conf_version`
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of exim.conf: ${EXIM_CONF_VER}"
echo "Installed version of exim.conf: ${EXIMCONFV}"
echo ""
fi
if [ "${EXIM_CONF_VER}" != "${EXIMCONFV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating exim.conf${boldoff}"
doEximConf
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}exim.conf ${EXIMCONFV} to ${EXIM_CONF_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"exim_conf\": {\n"
printf "\t\t\"name\": \"exim.conf\",\n"
printf "\t\t\"current\": \"${EXIMCONFV}\",\n"
printf "\t\t\"offered\": \"${EXIM_CONF_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${EXIMCONF_OPT}" = "yes" ] && [ "${BLOCKCRACKING_OPT}" = "yes" ] && [ "${BLOCKCRACKING_VER}" != "0" ]; then
COUNT=0
if [ -e /etc/exim.blockcracking/README.txt ]; then
COUNT=`head -n1 /etc/exim.blockcracking/README.txt | grep -c '^#'`
fi
if [ "${COUNT}" -gt 0 ]; then
BLOCKCRACKINGV="`head -n1 /etc/exim.blockcracking/README.txt | cut -d'#' -f2`"
else
BLOCKCRACKINGV=0
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of BlockCracking: ${BLOCKCRACKING_VER}"
echo "Installed version of BlockCracking: ${BLOCKCRACKINGV}"
echo ""
fi
if [ "${BLOCKCRACKING_VER}" != "${BLOCKCRACKINGV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating BlockCracking${boldoff}"
doBlockCracking
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}BlockCracking ${BLOCKCRACKINGV} to ${BLOCKCRACKING_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"blockcracking\": {\n"
printf "\t\t\"name\": \"BlockCracking\",\n"
printf "\t\t\"current\": \"${BLOCKCRACKINGV}\",\n"
printf "\t\t\"offered\": \"${BLOCKCRACKING_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${EXIMCONF_OPT}" = "yes" ] && [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ] && [ "${EASY_SPAM_FIGHTER_VER}" != "0" ]; then
COUNT=0
if [ -e /etc/exim.easy_spam_fighter/README.txt ]; then
COUNT=`head -n1 /etc/exim.easy_spam_fighter/README.txt | grep -c '^#'`
fi
if [ "${COUNT}" -gt 0 ]; then
EASY_SPAM_FIGHTERV="`head -n1 /etc/exim.easy_spam_fighter/README.txt | cut -d'#' -f2`"
else
EASY_SPAM_FIGHTERV=0
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Easy Spam Fighter: ${EASY_SPAM_FIGHTER_VER}"
echo "Installed version of Easy Spam Fighter: ${EASY_SPAM_FIGHTERV}"
echo ""
fi
if [ "${EASY_SPAM_FIGHTER_VER}" != "${EASY_SPAM_FIGHTERV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Easy Spam Fighter${boldoff}"
doEasySpamFighter
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Easy Spam Fighter ${EASY_SPAM_FIGHTERV} to ${EASY_SPAM_FIGHTER_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"easy_spam_fighter\": {\n"
printf "\t\t\"name\": \"Easy Spam Fighter\",\n"
printf "\t\t\"current\": \"${EASY_SPAM_FIGHTERV}\",\n"
printf "\t\t\"offered\": \"${EASY_SPAM_FIGHTER_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${SPAMD_OPT}" = "spamassassin" ] && [ "${SPAMASSASSIN_VER}" != "0" ]; then
if [ -e /usr/bin/spamd ]; then
SPAMASSASSINV=`/usr/bin/spamd --version | grep -m1 'version' | awk '{print $4}'`
else
SPAMASSASSINV=0
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of SpamAssassin: ${SPAMASSASSIN_VER}"
echo "Installed version of SpamAssassin: ${SPAMASSASSINV}"
echo ""
fi
if [ "${SPAMASSASSIN_VER}" != "${SPAMASSASSINV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating SpamAssassin.${boldoff}"
dospamassassin
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}SpamAssassin ${SPAMASSASSINV} to ${SPAMASSASSIN_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"spamassassin\": {\n"
printf "\t\t\"name\": \"SpamAssassin\",\n"
printf "\t\t\"current\": \"${SPAMASSASSINV}\",\n"
printf "\t\t\"offered\": \"${SPAMASSASSIN_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${SPAMD_OPT}" = "rspamd" ]; then
if [ "${RSPAMD_VER}" != "0" ]; then
#rspamd_config
if [ "${RSPAMD_CONF_VER}" != "0" ]; then
RSD_CONF_V=`rspamd_conf_version`
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Rspamd Config: ${RSPAMD_CONF_VER}"
echo "Installed version of Rspamd Config: ${RSD_CONF_V}"
echo ""
fi
if [ "${RSPAMD_CONF_VER}" != "${RSD_CONF_V}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Rspamd Config${boldoff}"
do_rspamd_conf
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Rspamd Config ${RSD_CONF_V} to ${RSPAMD_CONF_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"rspamd_conf\": {\n"
printf "\t\t\"name\": \"Rspamd Config\",\n"
printf "\t\t\"current\": \"${RSD_CONF_V}\",\n"
printf "\t\t\"offered\": \"${RSPAMD_CONF_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
fi
if [ "${CLAMAV_OPT}" = "yes" ] && [ "${CLAMAV_VER}" != "0" ]; then
CLAMAVV=0
if [ -e /usr/local/sbin/clamd ]; then
CLAMAVV=`/usr/local/sbin/clamd --version | cut -d/ -f1 | awk '{print $2}'`
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of ClamAV: ${CLAMAV_VER}"
echo "Installed version of ClamAV: ${CLAMAVV}"
echo ""
fi
if [ "${CLAMAV_VER}" != "${CLAMAVV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating ClamAV.${boldoff}"
doclamav
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}ClamAV ${CLAMAVV} to ${CLAMAV_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"clamav\": {\n"
printf "\t\t\"name\": \"ClamAV\",\n"
printf "\t\t\"current\": \"${CLAMAVV}\",\n"
printf "\t\t\"offered\": \"${CLAMAV_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${MYSQL_INST_OPT}" != "no" ] && [ -e $MYSQL_BIN ] && [ "${MYSQL_VER}" != "0" ] && [ "${MARIADB_VER}" != "0" ]; then
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
MYSQLV="`mysql_version`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of ${MYSQLNAME}: ${MYSQL_VER}"
echo "Installed version of ${MYSQLNAME}: ${MYSQLV}"
echo ""
fi
if [ "${MYSQL_VER}" != "${MYSQLV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating ${MYSQLNAME}.${boldoff}"
doMySQL
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}${MYSQLNAME} ${MYSQLV} to ${MYSQL_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"mysql\": {\n"
printf "\t\t\"name\": \"${MYSQLNAME}\",\n"
printf "\t\t\"current\": \"${MYSQLV}\",\n"
printf "\t\t\"offered\": \"${MYSQL_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
else
MYSQLV="`$MYSQL_BIN --version | awk '{ print $5 }' | cut -d , -f1 | cut -d- -f1`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of ${MYSQLNAME}: ${MARIADB_VER}"
echo "Installed version of ${MYSQLNAME}: ${MYSQLV}"
echo ""
fi
if [ "${MARIADB_VER}" != "${MYSQLV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating ${MYSQLNAME}.${boldoff}"
doMySQL
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}${MYSQLNAME} ${MYSQLV} to ${MARIADB_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"mysql\": {\n"
printf "\t\t\"name\": \"${MYSQLNAME}\",\n"
printf "\t\t\"current\": \"${MYSQLV}\",\n"
printf "\t\t\"offered\": \"${MARIADB_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
for php_release in `echo ${PHP1_RELEASE_SET}`; do
php_shortrelease="`echo ${php_release} | tr -d '.'`"
PHP_VER_VAR=PHP${php_shortrelease}_VER
PHP_VER=$(eval_var ${PHP_VER_VAR})
HAVE_FPM_CGI_VAR=HAVE_FPM${php_shortrelease}_CGI
HAVE_SUPHP_CGI_VAR=HAVE_SUPHP${php_shortrelease}_CGI
HAVE_FCGID_VAR=HAVE_FCGID${php_shortrelease}
HAVE_LSPHP_VAR=HAVE_LSPHP${php_shortrelease}
HAVE_CLI_VAR=HAVE_CLI${php_shortrelease}
HAVE_FPM_CGI=$(eval_var ${HAVE_FPM_CGI_VAR})
HAVE_SUPHP_CGI=$(eval_var ${HAVE_SUPHP_CGI_VAR})
HAVE_FCGID=$(eval_var ${HAVE_FCGID_VAR})
HAVE_LSPHP=$(eval_var ${HAVE_LSPHP_VAR})
HAVE_CLI=$(eval_var ${HAVE_CLI_VAR})
if [ "${PHP_VER}" != "0" ]; then
if [ "${HAVE_FPM_CGI}" = "yes" ] || [ "${HAVE_SUPHP_CGI}" = "yes" ] || [ "${HAVE_FCGID}" = "yes" ] || [ "${HAVE_LSPHP}" = "yes" ] || [ "${HAVE_CLI}" = "yes" ]; then
if [ -e /usr/local/php${php_shortrelease}/bin/php${php_shortrelease} ]; then
PHPV="`/usr/local/php${php_shortrelease}/bin/php${php_shortrelease} -r 'echo phpversion();'`"
elif [ -e /usr/local/bin/php ] && [ ! -L /usr/local/bin/php ]; then
PHPV="`/usr/local/bin/php -r 'echo phpversion();'`"
else
PHPV=0
fi
if [ -z "${PHPV}" ]; then
PHPV=0
fi
#Checks for general build-in PHP extensions, they have no updates, so, just let them appear after showing up
if [ -x /usr/local/php${php_shortrelease}/bin/php-config ]; then
EXTENSION_INT_EXT_DIR=`/usr/local/php${php_shortrelease}/bin/php-config --extension-dir`
#check php-imap
if [ "${PHP_IMAP_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/imap.so ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PHP-IMAP ${php_release}: ${PHP_VER}"
echo "Installed version of PHP-IMAP ${php_release}: 0"
echo ""
fi
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating PHP-IMAP ${php_release}${boldoff}"
doPHPImap ${php_release}
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}PHP-IMAP ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"php_imap ${php_release}\": {\n"
printf "\t\t\"name\": \"PHP-IMAP ${php_release}\",\n"
printf "\t\t\"current\": \"0\",\n"
printf "\t\t\"offered\": \"${PHP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
#check php-bz2
if [ "${PHP_BZ2_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/bz2.so ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PHP-Bz2 ${php_release}: ${PHP_VER}"
echo "Installed version of PHP-Bz2 ${php_release}: 0"
echo ""
fi
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating PHP-Bz2 ${php_release}${boldoff}"
doPHPBz2 ${php_release}
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}PHP-Bz2 ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"php_bz2 ${php_release}\": {\n"
printf "\t\t\"name\": \"PHP-Bz2 ${php_release}\",\n"
printf "\t\t\"current\": \"0\",\n"
printf "\t\t\"offered\": \"${PHP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
#check php-xmlrpc
if [ "${PHP_XMLRPC_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/xmlrpc.so ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PHP-XMLRPC ${php_release}: ${PHP_VER}"
echo "Installed version of PHP-XMLRPC ${php_release}: 0"
echo ""
fi
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating PHP-XMLRPC ${php_release}${boldoff}"
doPHPXmlrpc ${php_release}
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}PHP-XMLRPC ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"php_xmlrpc ${php_release}\": {\n"
printf "\t\t\"name\": \"PHP-XMLRPC ${php_release}\",\n"
printf "\t\t\"current\": \"0\",\n"
printf "\t\t\"offered\": \"${PHP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
#check php-gmp
if [ "${PHP_GMP_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/gmp.so ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PHP-GMP ${php_release}: ${PHP_VER}"
echo "Installed version of PHP-GMP ${php_release}: 0"
echo ""
fi
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating PHP-GMP ${php_release}${boldoff}"
doPHPGmp ${php_release}
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}PHP-GMP ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"php_gmp ${php_release}\": {\n"
printf "\t\t\"name\": \"PHP-GMP ${php_release}\",\n"
printf "\t\t\"current\": \"0\",\n"
printf "\t\t\"offered\": \"${PHP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
#check php-readline
if [ "${PHP_READLINE_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/readline.so ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PHP-readline ${php_release}: ${PHP_VER}"
echo "Installed version of PHP-readline ${php_release}: 0"
echo ""
fi
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating PHP-readline ${php_release}${boldoff}"
doPHPReadline ${php_release}
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}PHP-readline ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"php_readline ${php_release}\": {\n"
printf "\t\t\"name\": \"PHP-readline ${php_release}\",\n"
printf "\t\t\"current\": \"0\",\n"
printf "\t\t\"offered\": \"${PHP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
#check php-ldap
if [ "${PHP_LDAP_OPT}" = "yes" ] && [ ! -s ${EXTENSION_INT_EXT_DIR}/ldap.so ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PHP-LDAP ${php_release}: ${PHP_VER}"
echo "Installed version of PHP-LDAP ${php_release}: 0"
echo ""
fi
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating PHP-LDAP ${php_release}${boldoff}"
doPHPLDAP ${php_release}
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}PHP-LDAP ${php_release}: 0 to ${PHP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"php_ldap ${php_release}\": {\n"
printf "\t\t\"name\": \"PHP-LDAP ${php_release}\",\n"
printf "\t\t\"current\": \"0\",\n"
printf "\t\t\"offered\": \"${PHP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PHP ${php_release}: ${PHP_VER}"
echo "Installed version of PHP ${php_release}: ${PHPV}"
echo ""
fi
FPM_SECURITY_PATCH=false
if [ "${HAVE_FPM_CGI}" = "yes" ]; then
if [ "${php_release}" = "5.6" ] || [ "${php_release}" = "7.0" ] || [ "${php_release}" = "7.1" ] || [ "${php_release}" = "7.2" ]; then
if ! /usr/local/php${php_shortrelease}/bin/php${php_shortrelease} -i 2>&1 | grep -m1 -q 'PHP-FPM security patch'; then
FPM_SECURITY_PATCH=true
fi
fi
fi
if [ "${PHP_VER}" != "${PHPV}" ] || ${FPM_SECURITY_PATCH}; then
if [ "${HAVE_SUPHP_CGI}" = "yes" ]; then
BUILD_PHP_COMMAND="php_expert ${php_release} suphp"
elif [ "${HAVE_FPM_CGI}" = "yes" ]; then
BUILD_PHP_COMMAND="php_expert ${php_release} php-fpm"
elif [ "${HAVE_FCGID}" = "yes" ]; then
BUILD_PHP_COMMAND="php_expert ${php_release} fastcgi"
elif [ "${HAVE_LSPHP}" = "yes" ]; then
BUILD_PHP_COMMAND="php_expert ${php_release} lsphp"
elif [ "${HAVE_CLI}" = "yes" ]; then
BUILD_PHP_COMMAND="php_expert ${php_release} mod_php"
fi
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating PHP ${php_release}${boldoff}"
./build ${BUILD_PHP_COMMAND}
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}PHP ${php_release}: ${PHPV} to ${PHP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"${BUILD_PHP_COMMAND}\": {\n"
printf "\t\t\"name\": \"PHP ${php_release}\",\n"
printf "\t\t\"current\": \"${PHPV}\",\n"
printf "\t\t\"offered\": \"${PHP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
done
if [ "${HAVE_SUPHP_CGI}" = "yes" ] && [ "${SUPHP_VER}" != "0" ]; then
if [ -e /usr/local/suphp/sbin/suphp ]; then
SUPHPV="`/usr/local/suphp/sbin/suphp 2>&1 | grep -m1 'suPHP version' | awk '{print $3}'`"
else
SUPHPV=0
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of suPHP: ${SUPHP_VER}"
echo "Installed version of suPHP: ${SUPHPV}"
echo ""
fi
if [ "${SUPHP_VER}" != "${SUPHPV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating suPHP.${boldoff}"
doSuPhp
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}suPHP ${SUPHPV} to ${SUPHP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"suphp\": {\n"
printf "\t\t\"name\": \"suPHP\",\n"
printf "\t\t\"current\": \"${SUPHPV}\",\n"
printf "\t\t\"offered\": \"${SUPHP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${ROUNDCUBE_OPT}" = "yes" ] && [ "${ROUNDCUBE_VER}" != "0" ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of RoundCube: ${ROUNDCUBE_VER}"
fi
ROUNDCUBEV=0
if [ -e ${WWWDIR}/roundcube ]; then
ROUNDCUBEV="`roundcube_version`"
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of RoundCube: ${ROUNDCUBEV}"
echo ""
fi
fi
if [ "${ROUNDCUBE_VER}" != "${ROUNDCUBEV}" ] && [ "${PHP1_RELEASE_OPT}" != "5.3" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating RoundCube.${boldoff}"
doroundcube
WEBAPPS_UPDATED=true
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}RoundCube ${ROUNDCUBEV} to ${ROUNDCUBE_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"roundcube\": {\n"
printf "\t\t\"name\": \"RoundCube\",\n"
printf "\t\t\"current\": \"${ROUNDCUBEV}\",\n"
printf "\t\t\"offered\": \"${ROUNDCUBE_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${UNIT_OPT}" = "yes" ] && [ "${UNIT_VER}" != "0" ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of Nginx Unit: ${UNIT_VER}"
fi
UNITV=0
if [ -x /usr/sbin/unitd ]; then
UNITV="`/usr/sbin/unitd --version 2>&1 | grep '^unit version:' | awk '{print $3}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of Nginx Unit: ${UNITV}"
echo ""
fi
fi
if [ "${UNIT_VER}" != "${UNITV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Nginx Unit.${boldoff}"
doNginxUnit
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}AWstats ${UNITV} to ${UNIT_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"unit\": {\n"
printf "\t\t\"name\": \"Nginx Unit\",\n"
printf "\t\t\"current\": \"${UNITV}\",\n"
printf "\t\t\"offered\": \"${UNIT_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${PHPMYADMIN_OPT}" = "yes" ] && [ "${PHPMYADMIN_VER}" != "0" ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of phpMyAdmin: ${PHPMYADMIN_VER}"
fi
PHPMYADMINV=0
if [ -e ${WWWDIR}/phpMyAdmin ]; then
PHPMYADMINV="`ls -ld ${WWWDIR}/phpMyAdmin | cut -d\> -f2 | cut -d- -f2,3,4`"
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of phpMyAdmin: ${PHPMYADMINV}"
echo ""
fi
fi
# phpMyAdmin does not support PHP 5.3 & PHP 5.4 anymore so there will be no updates available for them
if [ "${PHP1_RELEASE_OPT}" != "5.3" ] && [ "${PHP1_RELEASE_OPT}" != "5.4" ]; then
if [ "${PHPMYADMIN_VER}" != "${PHPMYADMINV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating phpMyAdmin.${boldoff}"
dophpMyAdmin
WEBAPPS_UPDATED=true
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}phpMyAdmin ${PHPMYADMINV} to ${PHPMYADMIN_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"phpmyadmin\": {\n"
printf "\t\t\"name\": \"phpMyAdmin\",\n"
printf "\t\t\"current\": \"${PHPMYADMINV}\",\n"
printf "\t\t\"offered\": \"${PHPMYADMIN_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${PHP_IGBINARY_OPT}" = "yes" ] && [ "${IGBINARY_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of igbinary: ${IGBINARY_VER}"
fi
IGBIANRYV=0
if /usr/local/bin/php -i | grep -m1 'igbinary version' | tail -n1 | grep -m1 -q -o '[0-9.]*' 2>/dev/null; then
IGBINARYV="`/usr/local/bin/php -i | grep -m1 'igbinary version' | tail -n1 | grep -m1 -o '[0-9.]*' 2>/dev/null`"
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of igbinary: ${IGBINARYV}"
echo ""
fi
fi
if [ "${IGBINARY_VER}" != "${IGBINARYV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating igbinary.${boldoff}"
doIgbinary
WEBAPPS_UPDATED=true
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Igbinary ${IGBINARYV} to ${IGBINARY_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"php_igbinary\": {\n"
printf "\t\t\"name\": \"Igbinary\",\n"
printf "\t\t\"current\": \"${IGBINARYV}\",\n"
printf "\t\t\"offered\": \"${IGBINARY_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${IONCUBE_OPT}" = "yes" ] && [ "${IONCUBE_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of ionCube: ${IONCUBE_VER}"
fi
IONCUBEV=0
if /usr/local/bin/php -v | grep ionCube | grep -m1 -q -o ' v[^,]*'; then
IONCUBEV="`/usr/local/bin/php -v | grep ionCube | grep -m1 -o ' v[^,]*' | cut -dv -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of ionCube: ${IONCUBEV}"
echo ""
fi
fi
if [ "${IONCUBE_VER}" != "${IONCUBEV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating ionCube loader.${boldoff}"
doIoncube
WEBAPPS_UPDATED=true
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}ionCube loader ${IONCUBEV} to ${IONCUBE_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"ioncube\": {\n"
printf "\t\t\"name\": \"ionCube\",\n"
printf "\t\t\"current\": \"${IONCUBEV}\",\n"
printf "\t\t\"offered\": \"${IONCUBE_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${PHP_SNUFFLEUPAGUS_OPT}" = "yes" ] && [ "${SNUFFLEUPAGUS_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of snuffleupagus: ${SNUFFLEUPAGUS_VER}"
fi
SNUFFLEUPAGUSV=0
if /usr/local/bin/php -i | grep -m1 'snuffleupagus support' -A1 | tail -n1 | grep -m1 -q -o '[0-9.]*' 2>/dev/null; then
SNUFFLEUPAGUSV="`/usr/local/bin/php -i | grep -m1 'snuffleupagus support' -A1 | tail -n1 | grep -m1 -o '[0-9.]*' 2>/dev/null`"
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of snuffleupagus: ${SNUFFLEUPAGUSV}"
echo ""
fi
fi
if [ "${SNUFFLEUPAGUS_VER}" != "${SNUFFLEUPAGUSV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating snuffleupagus.${boldoff}"
doSnuffleupagus
WEBAPPS_UPDATED=true
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Snuffleupagus ${SNUFFLEUPAGUSV} to ${SNUFFLEUPAGUS_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"php_snuffleupagus\": {\n"
printf "\t\t\"name\": \"Snuffleupagus\",\n"
printf "\t\t\"current\": \"${SNUFFLEUPAGUSV}\",\n"
printf "\t\t\"offered\": \"${SNUFFLEUPAGUS_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${PHP_REDIS_OPT}" = "yes" ] && [ "${PHPREDIS_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PHP-Redis: ${PHPREDIS_VER}"
fi
PHPREDISV=0
if /usr/local/bin/php -i | grep -m1 -q 'Redis Version' 2>/dev/null; then
PHPREDISV="`/usr/local/bin/php -i | grep -m1 'Redis Version' | awk '{print $4}' 2>/dev/null`"
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of PHP-Redis: ${PHPREDISV}"
echo ""
fi
fi
if [ "${PHPREDIS_VER}" != "${PHPREDISV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating PHP-Redis.${boldoff}"
doPHPRedis
WEBAPPS_UPDATED=true
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}PHP-Redis ${PHPREDISV} to ${PHPREDIS_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"php_redis\": {\n"
printf "\t\t\"name\": \"PHP-Redis\",\n"
printf "\t\t\"current\": \"${PHPREDISV}\",\n"
printf "\t\t\"offered\": \"${PHPREDIS_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${PHP_PHALCON_OPT}" = "yes" ] && [ "${PHALCON_VER}" != "0" ] && [ -x /usr/local/bin/php ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of phalcon: ${PHALCON_VER}"
fi
PHALCONV="`/usr/local/bin/php -r "echo Phalcon\Version::get();" 2>/dev/null | grep -v 'error'`"
if [ -z "${PHALCONV}" ]; then
PHALCONV=0
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of phalcon: ${PHALCONV}"
echo ""
fi
if [ "${PHALCON_VER}" != "${PHALCONV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating phalcon.${boldoff}"
doPhalcon
WEBAPPS_UPDATED=true
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}phalcon ${PHALCONV} to ${PHALCON_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"php_phalcon\": {\n"
printf "\t\t\"name\": \"phalcon\",\n"
printf "\t\t\"current\": \"${PHALCONV}\",\n"
printf "\t\t\"offered\": \"${PHALCON_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${SQUIRRELMAIL_OPT}" = "yes" ] && [ "${SQUIRRELMAIL_VER}" != "0" ]; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of SquirrelMail: ${SQUIRRELMAIL_VER}"
fi
SQUIRRELMAILV=0
if [ -e ${WWWDIR}/squirrelmail ]; then
SQUIRRELMAILV="`ls -ld ${WWWDIR}/squirrelmail | cut -d\> -f2 | cut -d- -f2,3`"
if [ "${VERSIONS}" = "1" ]; then
echo "Installed version of SquirrelMail: ${SQUIRRELMAILV}"
echo ""
fi
fi
if [ "${SQUIRRELMAIL_VER}" != "${SQUIRRELMAILV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating SquirrelMail.${boldoff}"
doSquirrelmail
WEBAPPS_UPDATED=true
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}SquirrelMail ${SQUIRRELMAILV} to ${SQUIRRELMAIL_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"squirrelmail\": {\n"
printf "\t\t\"name\": \"SquirrelMail\",\n"
printf "\t\t\"current\": \"${SQUIRRELMAILV}\",\n"
printf "\t\t\"offered\": \"${SQUIRRELMAIL_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
checkSecurity ${VERSIONS}
if [ "${VERSIONS}" = "1" ]; then
echo "If you want to update all the available versions run: ${boldon}$0 update_versions${boldoff}"
elif [ "${VERSIONS}" = "0" ]; then
#update_versions 0 for success, reset to 0 from count. Compile failures would have already exited.
EXIT_CODE=0
elif [ "${VERSIONS}" = "json" ]; then
echo "}"
fi
if ${EXEC_CL_COMMANDS_ONCE} && [ "${VERSIONS}" != "2" ]; then
cagefsctl_update
elif ${WEBAPPS_UPDATED} && [ "${CLOUDLINUX_OPT}" = "yes" ] && [ "${VERSIONS}" = "2" ]; then
cagefsctl_update
fi
}
doVersions_ajax() {
echo "HTTP/1.1 200 OK"
echo "Content-Type: text/plain"
echo ""
COUNT=`doVersions 1 | grep -c 'is available'`
if [ "${COUNT}" -gt 0 ]; then
echo "document.getElementById(\"cb_updates\").innerHTML=\"${COUNT}\";"
echo "document.getElementById(\"cb_updates\").style.visibility=\"visible\";"
fi
}
####################################################
SPEED_FILE_SMALL=10.kb
SPEED_FILE_LARGE=100.kb
#max time for small file test allowed to proceed with large file test.
LARGE_TEST_MAX=35
SPEED_VERBOSE=1
BEST=0
BEST_SEVER=""
test_server() {
i=$1
VALUE=`curl -o /dev/null -w "%{speed_download}" --silent --connect-timeout 2 http://${1}/services/${2} 2>&1`
#can be MB/s or KB/s or B/s
if [ "${VALUE}" = "" ]; then
echo "$i is too slow, skipping."
continue
fi
#chop off any decimal bytes.. we dont care about 0.5 byte/second
VALUE=`echo $VALUE | cut -d. -f1`
if [ ${SPEED_VERBOSE} -eq 1 ]; then
printf "$VALUE B/s \t- $i\n"
fi
if [ "${VALUE}" -gt "${BEST}" ]; then
BEST=$VALUE
BEST_SERVER=$i
fi
}
speed_test() {
if [ ${SPEED_VERBOSE} -eq 1 ]; then
echo "Testing with file $1:"
fi
BEST=0
BEST_SERVER=""
SPEED_START=`date +%s`
for s in ${DOWNLOADSERVER_SET}; do
test_server $s $1
done
SPEED_END=`date +%s`
DURATION=`expr $SPEED_END - $SPEED_START`
if [ ${SPEED_VERBOSE} -eq 1 ]; then
echo "Total test duration: $DURATION seconds"
echo ""
fi
}
set_fastest() {
#quiet mode. Will only output the quickest server.
if [ "$1" -eq 1 ]; then
SPEED_VERBOSE=0
fi
getFile servers.txt servers
if [ "${UNOFFICIAL_MIRRORS_OPT}" = "yes" ]; then
DOWNLOADSERVER_SET="da-mirror.wpcloud.vn `awk '{ printf "%s ", $0 }' ${WORKDIR}/servers.txt`"
else
DOWNLOADSERVER_SET="${DOWNLOADSERVERS_OFFICIAL_LIST}"
fi
speed_test ${SPEED_FILE_SMALL}
#try and get a more accurate reading with larger file.
if [ "${DURATION}" -lt ${LARGE_TEST_MAX} ]; then
speed_test ${SPEED_FILE_LARGE}
else
if [ ${SPEED_VERBOSE} -eq 1 ]; then
echo "Small file test took longer than ${LARGE_TEST_MAX} seconds. Not proceeding with large file test."
fi
fi
if [ ${SPEED_VERBOSE} -eq 1 ]; then
echo "Fastest server is $BEST_SERVER at $BEST B/s"
else
echo "${BEST_SERVER}"
fi
if [ "${BEST_SERVER}" != "" ]; then
setOpt downloadserver ${BEST_SERVER}
writeLog "set_fastest set downloadserver to ${BEST_SERVER}"
else
echo "Unable to determine fastest server"
fi
}
fix_curl_link_for_yum() {
#check for broken yums on CentOS 6.
if [ -e /usr/bin/yum ]; then
BROKEN=`yum --version 2>&1 | head -n 2 | grep -m1 -c CRITICAL`
if [ "$BROKEN" -eq 1 ]; then
CURLLIB=/usr/local/lib/libcurl.so.4.2.0
if [ -e $CURLLIB ]; then
echo "*** Re-linking curl to fix the yum issue: https://help.directadmin.com/item.php?id=385 ***"
mv $CURLLIB /root/libcurl.so.4.2.0.moved
ln -s /usr/lib/libcurl.so $CURLLIB
echo "*** done curl re-link ***"
else
echo "*** yum is broken, but cannot find $CURLLIB. See https://help.directadmin.com/item.php?id=385 ***"
fi
fi
fi
}
####################################################
doRemoveSuggest() {
REMOVAL_MODE=$1
if [ "${REMOVAL_MODE}" = "json" ]; then
echo "{"
fi
if [ -e /usr/sbin/httpd ]; then
if [ "${WEBSERVER_OPT}" != "apache" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${APACHE2_VER}" != "0" ]; then
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "Apache installed, but not enabled in options.conf: './build remove_apache'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveApache2
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_apache\": {\n"
printf "\t\t\"name\": \"Apache\"\n"
printf "\t},\n"
fi
fi
fi
fi
if [ -e /usr/sbin/unitd ] && [ "${UNIT_OPT}" != "yes" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "Nginx Unit installed, but not enabled in options.conf: './build remove_unit'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveUnit
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_unit\": {\n"
printf "\t\t\"name\": \"Nginx Unit\"\n"
printf "\t},\n"
fi
fi
if [ -e /usr/sbin/nginx ]; then
if [ "${WEBSERVER_OPT}" != "nginx" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ] && [ "${NGINX_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "Nginx installed, but not enabled in options.conf: './build remove_nginx'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveNginx
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_nginx\": {\n"
printf "\t\t\"name\": \"Nginx\"\n"
printf "\t},\n"
fi
fi
fi
initHTTP2var
if [ -e /usr/local/lib/libnghttp2.a ]; then
if [ "${WEBSERVER_OPT}" != "apache" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ] && [ "${CURL_OPT}" != "yes" ] && [ "${APACHE2_VER}" != "0" ] && [ "${HTTP2}" != "1" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "Nghttp2 installed, but Apache/cURL are not enabled in options.conf: './build remove_nghttp2'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveNghttp2
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_nghttp2\": {\n"
printf "\t\t\"name\": \"Nghttp2\"\n"
printf "\t},\n"
fi
fi
fi
if [ -d /usr/local/lsws ]; then
if [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${LITESPEED_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "LiteSpeed installed, but not enabled in options.conf: './build remove_litespeed'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveLiteSpeed
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_litespeed\": {\n"
printf "\t\t\"name\": \"LiteSpeed\"\n"
printf "\t},\n"
fi
fi
fi
for php_release in `echo ${PHP1_RELEASE_SET}`; do
php_shortrelease="`echo ${php_release} | tr -d '.'`"
if [ -d /usr/local/php${php_shortrelease} ] && [ "${PHP1_RELEASE_OPT}" != "${php_release}" ] && [ "${PHP2_RELEASE_OPT}" != "${php_release}" ] && [ "${PHP3_RELEASE_OPT}" != "${php_release}" ] && [ "${PHP4_RELEASE_OPT}" != "${php_release}" ]; then
PHP_REMOVAL_VERSION_NUMBER=`getVer php${php_shortrelease}`
if [ "${PHP_REMOVAL_VERSION_NUMBER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "PHP ${php_release} installed, but not enabled in options.conf: './build remove_php ${php_release}'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemovePhp ${php_release}
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_php ${php_release}\": {\n"
printf "\t\t\"name\": \"PHP ${php_release}\"\n"
printf "\t},\n"
fi
fi
fi
done
if [ -e /usr/local/suphp/sbin ] && [ "${PHP1_MODE_OPT}" != "suphp" ] && [ "${SUPHP_VER}" != "0" ]; then
if [ "${PHP2_MODE_OPT}" != "suphp" ] && [ "${PHP3_MODE_OPT}" != "suphp" ] && [ "${PHP4_MODE_OPT}" != "suphp" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "suPHP installed, but not enabled in options.conf: './build remove_suphp'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveSuPhp
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_suphp\": {\n"
printf "\t\t\"name\": \"suPHP\"\n"
printf "\t},\n"
fi
fi
fi
if [ -e /usr/local/bin/curl ] && [ "${CURL_OPT}" = "no" ] && [ "${CURL_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "cURL installed, but not enabled in options.conf: './build remove_curl'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveCURL
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_curl\": {\n"
printf "\t\t\"name\": \"cURL\"\n"
printf "\t},\n"
fi
fi
if [ -e /usr/sbin/dovecot ] && [ "${DOVECOT_OPT}" != "yes" ] && [ "${DOVECOT_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "Dovecot installed, but not enabled in options.conf: './build remove_dovecot'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveDovecot
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_dovecot\": {\n"
printf "\t\t\"name\": \"Dovecot\"\n"
printf "\t},\n"
fi
fi
if [ -e /usr/sbin/proftpd ] && [ "${FTPD_OPT}" != "proftpd" ] && [ "${PROFTPD_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "ProFTPd installed, but not enabled in options.conf: './build remove_proftpd'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveProftpd
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_proftpd\": {\n"
printf "\t\t\"name\": \"ProFTPd\"\n"
printf "\t},\n"
fi
fi
if [ -e /usr/sbin/pure-ftpd ] && [ "${FTPD_OPT}" != "pureftpd" ] && [ "${PUREFTPD_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "Pure-FTPd installed, but not enabled in options.conf: './build remove_pureftpd'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemovePureftpd
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_pureftpd\": {\n"
printf "\t\t\"name\": \"Pure-FTPd\"\n"
printf "\t},\n"
fi
fi
if [ -d /etc/exim.easy_spam_fighter ] && [ "${EASY_SPAM_FIGHTER_OPT}" != "yes" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "Easy Spam Fighter installed, but not enabled in options.conf: './build remove_easy_spam_fighter'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveEasySpamFighter
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_easy_spam_fighter\": {\n"
printf "\t\t\"name\": \"Easy Spam Fighter\"\n"
printf "\t},\n"
fi
fi
if [ -d /etc/exim.blockcracking ] && [ "${BLOCKCRACKING_OPT}" != "yes" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "BlockCracking installed, but not enabled in options.conf: './build remove_blockcracking'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveBlockCracking
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_blockcracking\": {\n"
printf "\t\t\"name\": \"BlockCracking\"\n"
printf "\t},\n"
fi
fi
if [ -e /usr/local/bin/rspamd ] && [ "${SPAMD_OPT}" != "rspamd" ] && [ "${RSPAMD_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "Rspamd installed, but not enabled in options.conf: './build remove_rspamd'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
do_remove_rspamd
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_rspamd\": {\n"
printf "\t\t\"name\": \"Rspamd\"\n"
printf "\t},\n"
fi
fi
if [ -d /etc/exim/rspamd ] && [ "${SPAMD_OPT}" != "rspamd" ] && [ "${RSPAMD_CONF_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "Rspamd_conf installed, but not enabled in options.conf: './build remove_rspamd_conf'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
do_remove_rspamd_conf
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_rspamd_conf\": {\n"
printf "\t\t\"name\": \"Rspamd Conf\"\n"
printf "\t},\n"
fi
fi
if [ -e /usr/bin/spamd ] && [ "${SPAMD_OPT}" != "spamassassin" ] && [ "${SPAMASSASSIN_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "SpamAssassin installed, but not enabled in options.conf: './build remove_spamassassin'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveSpamassassin
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_spamassassin\": {\n"
printf "\t\t\"name\": \"SpamAssassin\"\n"
printf "\t},\n"
fi
fi
if [ -e /usr/local/sbin/clamd ] && [ "${CLAMAV_OPT}" != "yes" ] && [ "${CLAMAV_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "ClamAV installed, but not enabled in options.conf: './build remove_clamav'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveClamav
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_clamav\": {\n"
printf "\t\t\"name\": \"ClamAV\"\n"
printf "\t},\n"
fi
fi
if [ -e /var/www/html/roundcube ] && [ "${ROUNDCUBE_OPT}" != "yes" ] && [ "${ROUNDCUBE_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "RoundCube webmail installed, but not enabled in options.conf: './build remove_roundcube'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveRoundcube
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_roundcube\": {\n"
printf "\t\t\"name\": \"RoundCube\"\n"
printf "\t},\n"
fi
fi
if [ -e /var/www/html/squirrelmail ] && [ "${SQUIRRELMAIL_OPT}" != "yes" ] && [ "${SQUIRRELMAIL_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "SquirrelMail webmail installed, but not enabled in options.conf: './build remove_squirrelmail'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemoveSquirrelmail
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_squirrelmail\": {\n"
printf "\t\t\"name\": \"SquirrelMail\"\n"
printf "\t},\n"
fi
fi
if [ -e /var/www/html/phpMyAdmin ] && [ "${PHPMYADMIN_OPT}" != "yes" ] && [ "${PHPMYADMIN_VER}" != "0" ]; then
if [ "${REMOVAL_MODE}" = "1" ]; then
echo "phpMyAdmin installed, but not enabled in options.conf: './build remove_phpmyadmin'"
elif [ "${REMOVAL_MODE}" = "0" ]; then
doRemovephpMyAdmin
elif [ "${REMOVAL_MODE}" = "json" ]; then
printf "\t\"remove_phpmyadmin\": {\n"
printf "\t\t\"name\": \"phpMyAdmin\"\n"
printf "\t},\n"
fi
fi
if [ "${REMOVAL_MODE}" = "1" ]; then
echo ""
echo "If you want to remove all the suggested programs above, run: ${boldon}$0 remove_items${boldoff}"
elif [ "${REMOVAL_MODE}" = "json" ]; then
echo "}"
fi
}
####################################################
doAll() {
FORCE=1
if ${NEW_INSTALL}; then
#We need to have /etc/virtual ready for new installs of DA
createEtcVirtual
doSysbk
doBind
if [ "${CSF_OPT}" = "yes" ]; then
doCSF
fi
fi
doMajordomo
if [ ! -e /usr/include/pcre.h ] && [ ! -e /usr/local/include/pcre.h ]; then
if [ -e /etc/debian_version ]; then
apt-get -y install libpcre3-dev
else
yum -y install pcre-devel
fi
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
doApache2
if [ "${HAVE_SUPHP_CGI}" = "yes" ]; then
doSuPhp
fi
if [ "${HAVE_FCGID}" = "yes" ]; then
doModFCGID
fi
if [ "${MOD_RUID2_OPT}" = "yes" ]; then
doModRuid2
fi
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
doLiteSpeed
fi
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
doOpenLiteSpeed
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
doNginx
fi
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
doModAclr2
fi
if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${WEBSERVER_OPT}" != "nginx" ] && [ "${WEBSERVER_OPT}" != "nginx_apache" ] && [ "${MODSECURITY_VER}" != "0" ]; then
doModSecurity
fi
if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${WEBSERVER_OPT}" != "apache" ] && [ "${WEBSERVER_OPT}" != "litespeed" ] && [ "${WEBSERVER_OPT}" != "openlitespeed" ] && [ "${MODSECURITY_VER}" != "0" ]; then
doLibModSecurity
fi
if [ "${CURL_OPT}" = "yes" ] && [ "${CURL_VER}" != "0" ]; then
doCURL
elif [ ! -e /usr/include/curl/curl.h ] && [ ! -e /usr/local/include/curl/curl.h ] && [ ! -e /usr/include/x86_64-linux-gnu/curl/curl.h ] && [ ! -e /usr/include/aarch64-linux-gnu/curl/curl.h ]; then
if [ -e /etc/debian_version ]; then
apt-get -y install libcurl4-openssl-dev
else
yum -y install libcurl-devel
fi
fi
if [ "${CLOUDLINUX_OPT}" != "yes" ]; then
SKIP_BRWAP=false
if systemd-detect-virt | grep -m1 -q -E 'lxc|openvz'; then
if [ -e /dev/.lxc/proc/self/uid_map ]; then
if ! cat /dev/.lxc/proc/self/uid_map >/dev/null 2>&1; then
SKIP_BRWAP=false
else
SKIP_BRWAP=true
fi
else
SKIP_BRWAP=true
fi
fi
if ! ${SKIP_BRWAP}; then
doBubblewrap
fi
fi
if [ "${MYSQL_INST_OPT}" != "no" ]; then
doMySQL
fi
if [ "${CLAMAV_OPT}" = "yes" ] && [ "${CLAMAV_VER}" != "0" ]; then
doclamav
fi
if [ ! -e /usr/include/zstd.h ] && [ ! -e /usr/local/include/zstd.h ]; then
if [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install zstd libzstd-dev
else
if [ "${OS_CENTOS_VER}" = "7" ] ; then
yum -y install zstd libzstd-devel --enablerepo=${EPEL_REPO_NAME}
else
yum -y install zstd libzstd-devel
fi
fi
fi
doPhp n
if [ "${IMAGICK_OPT}" != "no" ]; then
doImageMagick
fi
if [ "${WEBALIZER_OPT}" = "yes" ] && [ "${WEBALIZER_VER}" != "0" ]; then
doWebalizer
fi
if [ "${AWSTATS_OPT}" = "yes" ] && [ "${AWSTATS_VER}" != "0" ]; then
doawstats
fi
if [ "${EXIM_OPT}" = "yes" ] && [ "${EXIM_VER}" != "0" ]; then
doExim
fi
if [ "${DOVECOT_OPT}" = "yes" ] && [ "${DOVECOT_VER}" != "0" ]; then
doDovecot
fi
if [ "${FTPD_OPT}" = "proftpd" ] && [ "${PROFTPD_VER}" != "0" ]; then
doProftpd
fi
if [ "${FTPD_OPT}" = "pureftpd" ] && [ "${PUREFTPD_VER}" != "0" ]; then
doPureftpd
fi
if [ "${FTPD_OPT}" = "no" ]; then
doNoFtpd
fi
if [ "${SPAMD_OPT}" = "spamassassin" ] && [ "${SPAMASSASSIN_VER}" != "0" ]; then
dospamassassin
fi
if [ "${REDIS_OPT}" = "yes" ]; then
doRedis
fi
if [ "${SPAMD_OPT}" = "rspamd" ] && [ "${SPAMASSASSIN_VER}" != "0" ]; then
doRspamd
do_rspamd_conf
fi
chown -R root:${ROOT_GRP} ${WORKDIR}
if [ "${UNIT_OPT}" = "yes" ] && [ "${UNIT_VER}" != "0" ]; then
doNginxUnit
fi
if [ "${ROUNDCUBE_OPT}" = "yes" ] && [ "${ROUNDCUBE_VER}" != "0" ]; then
doroundcube
fi
if [ "${PHPMYADMIN_OPT}" = "yes" ] && [ "${PHPMYADMIN_VER}" != "0" ]; then
dophpMyAdmin
fi
if [ "${SQUIRRELMAIL_OPT}" = "yes" ] && [ "${SQUIRRELMAIL_VER}" != "0" ]; then
doSquirrelmail
fi
if [ "${EXIMCONF_OPT}" = "yes" ]; then
doEximConf
fi
if [ "${BLOCKCRACKING_OPT}" = "yes" ]; then
doBlockCracking
fi
if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then
doEasySpamFighter
fi
if [ "${PHP_INI_OPT}" = "yes" ]; then
doPhpIni
fi
if [ "${CUSTOMBUILD_PLUGIN_OPT}" = "yes" ]; then
doCustombuildPlugin
fi
doLetsEncrypt
if [ -s /usr/local/directadmin/scripts/letsencrypt.sh ] && [ -x ${DA_BIN} ]; then
if ${DA_BIN} c | grep '^ssl=0' && ${DA_BIN} c | grep '^ssl_port=0'; then
/usr/local/directadmin/scripts/letsencrypt.sh request `hostname` >/dev/null 2>&1
fi
fi
if [ "${CRON_OPT}" = "yes" ]; then
doCron
fi
fix_curl_link_for_yum
if [ -s /usr/local/directadmin/scripts/setup.txt ]; then
if grep -m1 -q '^hostname=$' /usr/local/directadmin/scripts/setup.txt; then
echo "Fixing empty hostname in /usr/local/directadmin/scripts/setup.txt..."
perl -pi -e 's|^hostname=$|hostname=server.yourdirectadminserver.com|g' /usr/local/directadmin/scripts/setup.txt
fi
if grep -m1 -q '^ns1=ns1\.$' /usr/local/directadmin/scripts/setup.txt; then
perl -pi -e 's|^ns1=ns1\.$|ns1=ns1.yourdirectadminserver.com|g' /usr/local/directadmin/scripts/setup.txt
fi
if grep -m1 -q '^ns2=ns2\.$' /usr/local/directadmin/scripts/setup.txt; then
perl -pi -e 's|^ns2=ns2\.$|ns2=ns2.yourdirectadminserver.com|g' /usr/local/directadmin/scripts/setup.txt
fi
if grep -m1 -q '^email=admin@$' /usr/local/directadmin/scripts/setup.txt; then
perl -pi -e 's|^email=admin@$|email=admin@yourdirectadminserver.com|g' /usr/local/directadmin/scripts/setup.txt
fi
fi
printf "\n\n\n"
echo "*************************************"
echo "* *"
echo "* All parts have been installed *"
echo "* *"
echo "*************************************"
echo ""
doGrubConf
if ${NEW_INSTALL}; then
echo "action=notify&value=admin&subject=CustomBuild installation has finished&message=CustomBuild installation has finished, to check the full log please check:%0A/usr/local/directadmin/custombuild/install.txt" >> ${TASK_QUEUE}
run_dataskq
fi
}
####################################################
if [ $# -eq 2 ]; then
USER_INPUT=0
INPUT_VALUE=$2
fi
doHook ${1} pre
case "$1" in
all) doChecks; doAll;
;;
options) doChecks; options
;;
options_nobold) BOLD_OPT=no; boldon=""; boldoff=""; doChecks; options
;;
create_options) create_options
;;
used_configs) used_configs
;;
remove_nghttp2) doRemoveNghttp2
;;
apache) doChecks; doApache2
;;
majordomo) doMajordomo
;;
bind) doBind
;;
csf) doCSF
;;
sysbk) doSysbk
;;
letsencrypt) doLetsEncrypt
;;
litespeed) doChecks; doLiteSpeed
;;
openlitespeed) doChecks; doOpenLiteSpeed
;;
litespeed_license) doChecks; doLiteSpeedLicense 1
;;
litespeed_license_migrate) ${LSWS_HOME}/bin/lshttpd -r
;;
libmaxminddb) dolibmaxminddb
;;
geoipupdate) doGeoipupdate
;;
cron) doCron
;;
curl) doCURL
;;
php_imagick|imagick) doIMagick
;;
php_phalcon) doPhalcon
;;
php_psr) doPsr
;;
php_bz2) doPHPBz2
;;
php_imap) doPHPImap
;;
php_redis) doPHPRedis
;;
php_xmlrpc) doPHPXmlrpc
;;
php_gmp) doPHPGmp
;;
php_readline) doPHPReadline
;;
php_ldap) doPHPLDAP
;;
redis) doRedis
;;
imagemagick) doImageMagick
;;
nginx) doChecks; doNginx
;;
nginx_apache) doChecks; doApache2; doNginx
;;
libzip) doLibzip
;;
mod_lsapi) doModLsapi 1
;;
mod_hostinglimits) doModHostingLimits 1
;;
mod_proctitle) doModProctitle 1
;;
modsecurity) doChecks
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
doModSecurity 1
else
doLibModSecurity 1
fi
;;
modsecurity_connector) doChecks; doModSecurityConnector 1
;;
libmodsecurity) doChecks; doLibModSecurity 1
;;
modsec-sdbm-util) doModSecsdbmutil
;;
modsecurity_rules|modsecurity_ruleset) doChecks; doModSecurityRules
;;
mod_ruid2) doModRuid2
;;
mod_aclr2) doModAclr2
;;
mod_htscanner2) doModHtscanner
;;
php_htscanner2) doPHPHtscanner $2 1
;;
suhosin|php_suhosin) doSuhosin
;;
php_snuffleupagus) doSnuffleupagus
;;
php_igbinary) doIgbinary
;;
opcache|php_opcache) doOpcache
;;
mod_fcgid) doModFCGID
;;
clean) doClean
;;
clean_old_webapps) doclean_old_webapps
;;
clean_old_tarballs) doclean_old_tarballs
;;
update) doUpdate
;;
phpMyAdmin|phpmyadmin|pma) dophpMyAdmin
;;
roundcube) doroundcube
;;
squirrelmail) doSquirrelmail
;;
update_script) doUpdateScript
;;
update_data) doUpdateData
;;
rewrite_confs) doChecks; doRewriteConfs
;;
secure_php) secure_php
;;
update_da) doUpdateDA
;;
versions) doChecks; doVersions 1
;;
versions_nobold) BOLD_OPT=no; boldon=""; boldoff=""; doChecks; doVersions 1
;;
update_versions) doChecks; doVersions 0 $3
;;
update_versions_full|update_full) doChecks; doUpdate; ./build update_versions 0 full
;;
update_webapps) doVersions 2
;;
awstats) doawstats
;;
unit) doNginxUnit
;;
unit_modules) doNginxUnit_modules
;;
unit_module) doNginxUnit_module $2 $3
;;
awstats_process|awstats_process.sh) doawstats_process
;;
webalizer) doWebalizer
;;
proftpd) doChecks; doProftpd
;;
pureftpd|pure-ftpd) doChecks; doPureftpd
;;
noftpd) doChecks; doNoFtpd
;;
zend|php_zend) doZend
;;
ioncube|php_ioncube) doIoncube
;;
mysql) doChecks; doMySQL
;;
mariadb) doChecks; doMySQL
;;
compile_mysql_binary) compile_mysql_binary
;;
setup_my_cnf) setup_my_cnf
;;
s-nail|snail) doSnail
;;
msmtp) doMsmtp
;;
lua) doLua
;;
exim) doExim
;;
eximconf|exim_conf) doEximConf
;;
dovecotconf|dovecot_conf) doDovecotConf
;;
grubconf|grub_conf) doGrubConf
;;
php_extensions) doExtensionsSetup
;;
blockcracking) doBlockCracking
;;
easy_spam_fighter) doEasySpamFighter
;;
rspamd_conf) do_rspamd_conf
;;
php) doChecks; doPhp
;;
php_expert) doChecks; doPhp_build $2 $3
;;
php_ini) doChecks; doPhpIni
;;
php_cacert) ensure_curl_cacert 1
;;
suphp) doChecks; doSuPhp
;;
dovecot) doDovecot
;;
xapian) doXapian
;;
fts-xapian) doFTSXapian
;;
bubblewrap) doBubblewrap
;;
jailshell) doJailshell
;;
pigeonhole) doPigeonhole
;;
spamassassin|spamd) doChecks; dospamassassin
;;
plugin|custombuild_plugin) doCustombuildPlugin
;;
rspamd) doChecks; doRspamd
;;
netdata) doNetdata
;;
spamassassin_cron) dospamassassinCron
;;
clamav) doclamav
;;
set_fastest) set_fastest 0
;;
set_fastest_quiet) set_fastest 1
;;
set) setOpt $2 $3
;;
set_php) setPhpOpt $2 $3
;;
csfpingore) doCSFpignore
;;
composer) doComposer
;;
wp) doWP
;;
imapsync) doImapsync
;;
lego) doLego
;;
check_options) doChecks
;;
version) showVersion
;;
set_service) set_service $2 $3
;;
opt_help) allSettings $2
;;
settings_json) allSettingsJSON; #used for CustomBuild plugin only
;;
gen_help) generateHelp
;;
gen_help_json) generateHelpJSON $2; #used for CustomBuild plugin only
;;
versions_json) echo "$(doVersions json)" | perl -0p -e 's/\},\n\}/\}\n\}/'; #used for CustomBuild plugin only
;;
versions_ajax) doVersions_ajax
;;
get_versions_txt) downloadVersionsTxt; #will probably be used for CustomBuild plugin
;;
kill) doKill
;;
mysql_backup|backup_mysql) doMySQLback
;;
custom_config) customize_config $2; #used for CustomBuild plugin only
;;
set_versions_txt) set_versions $2; #used for CustomBuild plugin only
;;
show_component_config) showComponentConfig $2; #used for CustomBuild plugin only
;;
remove_customized_config) removeComponentConfig $2; #used for CustomBuild plugin only
;;
list_configs_json) listConfigsJSON; #used for CustomBuild plugin only
;;
show_file) showFile $2; #used for CustomBuild plugin only
;;
get_timezone) getTimezone
;;
#Removal functions
remove_clamav) doRemoveClamav
;;
remove_suphp) doRemoveSuPhp
;;
remove_curl) doRemoveCURL
;;
remove_unit) doRemoveUnit
;;
remove_apache) doRemoveApache2
;;
remove_nginx) doRemoveNginx
;;
remove_litespeed) doRemoveLiteSpeed
;;
remove_php) doRemovePhp $2
;;
remove_easy_spam_fighter) doRemoveEasySpamFighter
;;
remove_blockcracking) doRemoveBlockCracking
;;
remove_spamassassin) doRemoveSpamassassin
;;
remove_rspamd) do_remove_rspamd
;;
remove_rspamd_conf) do_remove_rspamd_conf
;;
remove_dovecot) doRemoveDovecot
;;
remove_proftpd) doRemoveProftpd
;;
remove_pureftpd) doRemovePureftpd
;;
remove_squirrelmail) doRemoveSquirrelmail
;;
remove_phpmyadmin) doRemovephpMyAdmin
;;
remove_roundcube) doRemoveRoundcube
;;
remove_items) doRemoveSuggest 0
;;
list_removals) doRemoveSuggest 1
;;
list_removals_json) echo "$(doRemoveSuggest json)" | perl -0p -e 's/\},\n\}/\}\n\}/'; #used for CustomBuild plugin only
;;
* ) showHelp
exit 0
;;
esac
doHook $1 post
DOCLEAN_CASE=1
case "$1" in
update) doclean_toggle ;;
update_data) doclean_toggle ;;
"") doclean_toggle ;;
gen_help_json) doclean_toggle ;;
opt_help) doclean_toggle ;;
set) doclean_toggle ;;
set_php) doclean_toggle ;;
get_versions_txt) doclean_toggle ;;
update_script) doclean_toggle ;;
versions_json) doclean_toggle ;;
list_removals) doclean_toggle ;;
list_removals_json) doclean_toggle ;;
remove_items) doclean_toggle ;;
versions_ajax) doclean_toggle ;;
gen_help) doclean_toggle ;;
version) doclean_toggle ;;
versions) doclean_toggle ;;
set_fastest) doclean_toggle ;;
set_fastest_quiet) doclean_toggle ;;
kill) doclean_toggle ;;
update_da) doclean_toggle ;;
versions_nobold) doclean_toggle ;;
list_configs_json) doclean_toggle ;;
settings_json) doclean_toggle ;;
get_timezone) doclean_toggle ;;
custom_config) doclean_toggle ;;
set_versions_txt) doclean_toggle ;;
show_component_config) doclean_toggle ;;
remove_customized_config) doclean_toggle ;;
show_file) doclean_toggle ;;
check_options) doclean_toggle ;;
esac
if [ "${CLEAN_OPT}" = "yes" ] && [ "${DOCLEAN_CASE}" = "1" ]; then
doClean
fi
if [ "${DOCLEAN_CASE}" = "1" ]; then
if [ "${CLEAN_OPT}" = "yes" ]; then
if [ ! -e ${LOCKFILE} ]; then
doClean
fi
fi
writeLog "called: $@"
fi
exit ${EXIT_CODE}