#!/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
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
VERSIONS_FILE_JEMALLOC=${WORKDIR}/mysql/versions_jemalloc.txt
VERSIONS_FILE_GALERA=${WORKDIR}/mysql/versions_galera.txt
LOCKFILE=${WORKDIR}/.custombuild
LOGFILE=${WORKDIR}/custombuild.log
PROFTPD_PREFIX=/usr
B64=0
EXEC_CL_COMMANDS_ONCE=false
CL_COMPONENT_UPDATE=false
CPU_CORES=1
DA_BIN=/usr/local/directadmin/directadmin
if [ ${OS} = "FreeBSD" ]; then
MD5SUM=/sbin/md5
else
MD5SUM=/usr/bin/md5sum
fi
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 [ "${OS}" = "FreeBSD" ]; then
if [ -d /usr/share/zoneinfo ] && [ -e /etc/localtime ]; then
MD5_LOCALTIME=`md5 /etc/localtime | awk '{print $4}'`
# we don't use 'grep -m1' here to fix: "xargs: md5: terminated with signal 13; aborting"
DATETIMEZONE="`find /usr/share/zoneinfo -type f -print0 | xargs -0 md5 | grep "${MD5_LOCALTIME}" | awk '{print $2}' | cut -d\( -f2 | cut -d\) -f1 | perl -p0 -e 's#/usr/share/zoneinfo/##'`"
fi
elif [ -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
if [ "${OS}" = "FreeBSD" ]; then
RPC=${1:-`perl -le 'print int rand(7) + 10'`}
else
RPC=`awk -v min=10 -v max=17 'BEGIN{srand(); print int(min+rand()*(max-min+1))}'`
fi
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
SYSTEMD=no
SYSTEMDDIR=/etc/systemd/system
CB_SYSTEMD=${WORKDIR}/configure/systemd
CB_CUST_SYSTEMD=${WORKDIR}/custom/systemd
if [ -d ${SYSTEMDDIR} ]; then
if [ -e /bin/systemctl ] || [ -e /usr/bin/systemctl ]; then
SYSTEMD=yes
SYSTEMD_SCRIPTS=/usr/libexec
fi
fi
HOSTNAME="`hostname -f 2>/dev/null`"
if [ -z "${HOSTNAME}" ] && [ "${OS}" != "FreeBSD" ] && [ -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"
PHP1_SHORTRELEASE_SET="`echo ${PHP1_RELEASE_SET} | tr -d '.'`"
DEBIAN_VERSION=/etc/debian_version
if [ "${OS}" = "FreeBSD" ]; then
OS_VER=`uname -r | cut -d- -f1`
OS_FREEBSD_VER=`echo ${OS_VER} | cut -d. -f1`
elif [ -e ${DEBIAN_VERSION} ]; then
OS_DEBIAN_VER=`grep -m1 -o '^[^\.]*' ${DEBIAN_VERSION}`
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`
fi
fi
installDevtoolset() {
if [ "${OS_CENTOS_VER}" = "6" ]; then
#C++11 is needed for libmodsecurity
if [ ! -d /opt/rh/devtoolset-7 ]; then
yum -y install centos-release-scl
if [ ! -s /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo ]; then
yum -y install http://mirror.centos.org/centos/6.10/extras/x86_64/Packages/centos-release-scl-7-4.el6.centos.noarch.rpm http://mirror.centos.org/centos/6.10/extras/x86_64/Packages/centos-release-scl-rh-2-4.el6.centos.noarch.rpm
fi
yum -y install devtoolset-7 --enablerepo=centos-release-scl
yum -y install devtoolset-7
fi
fi
}
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="GMP IONCUBE IMAP OPCACHE HTSCANNER IMAGICK PHALCON 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 DA_AUTOUPDATE UPDATES WEBAPPS_UPDATES"
CLOUDLINUX_SETTINGS="CLOUDLINUX CLOUDLINUX_BETA CAGEFS"
ADVANCED_SETTINGS="AUTOCONF AUTOMAKE LIBTOOL CURL NEW_PCRE SSL_CONFIGURATION"
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="7.3"
PHP1_MODE_SET="php-fpm fastcgi suphp lsphp mod_php"
if [ ${OS} = "FreeBSD" ] || [ -e ${DEBIAN_VERSION} ]; then
PHP1_MODE_DEF="php-fpm"
else
if uname -a | grep -m1 -q '\.lve' || uname -a | grep -m1 -q 'el7h'; then
PHP1_MODE_DEF="lsphp"
elif [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then
PHP1_MODE_DEF="mod_php"
else
PHP1_MODE_DEF="php-fpm"
fi
fi
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. 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_GMP_SET="${YESNO_SET}"
PHP_GMP_DEF="no"
PHP_GMP_DESC="GMP extension for PHP."
PHP_OPCACHE_SET="${YESNO_SET}"
PHP_OPCACHE_DEF="no"
PHP_OPCACHE_DESC="opCache opcode cacher for PHP."
PHP_IONCUBE_SET="${YESNO_SET}"
PHP_IONCUBE_DEF="no"
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_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 for php7."
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="no"
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."
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="apache"
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="yes"
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
if [ "${OS}" = "FreeBSD" ] || [ -e ${DEBIAN_VERSION} ]; then
MOD_RUID2_DEF="no"
else
if uname -a | grep -m1 -q '\.lve' || uname -a | grep -m1 -q 'el7h'; then
MOD_RUID2_DEF="no"
elif [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then
MOD_RUID2_DEF="yes"
else
MOD_RUID2_DEF="no"
fi
fi
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 FreeBSD or Debian 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. http://194.59.159.74/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"
elif [ "${OS_CENTOS_VER}" = "8" ]; then
MYSQL_INST_DEF="mariadb"
else
MYSQL_INST_DEF="mysql"
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"
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="2.1 4.2 4.3 4.4 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."
AUTOCONF_SET="${YESNO_SET}"
AUTOCONF_DEF="yes"
AUTOCONF_DESC="Enables management of Autoconf (package for generating configure scripts) using CustomBuild."
AUTOMAKE_SET="${YESNO_SET}"
AUTOMAKE_DEF="yes"
AUTOMAKE_DESC="Enables management of Automake (tool for automatically generating Makefile.in files) using CustomBuild."
LIBTOOL_SET="${YESNO_SET}"
LIBTOOL_DEF="yes"
LIBTOOL_DESC="Enables management of Libtool (generic library support script) using CustomBuild."
CURL_SET="${YESNO_SET}"
CURL_DEF="yes"
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/."
NEW_PCRE_SET="${YESNO_SET}"
NEW_PCRE_DEF="yes"
NEW_PCRE_DESC="Enables latest version of pcre to be compiled using CustomBuild."
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="194.59.159.74"
if [ -s ${WORKDIR}/servers.txt ]; then
DOWNLOADSERVER_SET="194.59.159.74 `awk '{ printf "%s ", $0 }' ${WORKDIR}/servers.txt`"
fi
DOWNLOADSERVER_DEF="194.59.159.74"
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."
DA_AUTOUPDATE_SET="${YESNO_SET}"
DA_AUTOUPDATE_DEF="no"
DA_AUTOUPDATE_DESC="Sets DirectAdmin to be updated automatically when the Cronjob is executed. 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."
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: 2549)"
}
if [ ! -d ${WORKDIR}/patches ]; then
mkdir -p ${WORKDIR}/patches
chmod 700 ${WORKDIR}/patches
fi
doCSFpignore() {
if [ "${OS}" != "FreeBSD" ]; then
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
fi
}
initLogfile() {
LOG_IP=localhost
if [ `who | wc -l` -gt 0 ]; then
if [ ${OS} = "FreeBSD" ]; then
LOG_IP=`env | grep -m1 "REMOTEHOST" | cut -d= -f2`
else
LOG_IP=`echo $SSH_CLIENT | cut -d' ' -f1`
fi
fi
if [ ! -e ${LOGFILE} ]; then
touch ${LOGFILE}
chmod 600 ${LOGFILE}
else
if [ ${OS} = "FreeBSD" ]; then
LOGSIZE=`stat -f %z ${LOGFILE}`
else
LOGSIZE=`stat -c %s ${LOGFILE}`
fi
#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 uname -m | grep -qE -m1 'amd64|x86_64'; then
B64=1
LD_LIBRARY_PATH=/usr/lib/apache:/usr/local/icu/lib:/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/lib64:/lib
export LD_LIBRARY_PATH
PKG_CONFIG_PATH=/usr/local/icu/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
if [ "${OS_CENTOS_VER}" = "6" ]; then
export KERBEROS_LIBS="-L/usr/lib64 -lkrb5 -lk5crypto -lgssapi_krb5"
export KERBEROS_CFLAGS="-I/usr/include"
export ONIG_LIBS="-L/usr/lib64 -lonig"
export ONIG_CFLAGS="-I/usr/include"
fi
fi
if [ ${OS} = "FreeBSD" ]; then
CPU_CORES=`/sbin/sysctl hw.ncpu | cut -d\ -f2`
MEMORY=`/sbin/sysctl hw.realmem | cut -d\ -f2`
PROFTPD_PREFIX=/usr/local
else
if [ "`cat /proc/cpuinfo | grep -F 'model name' | wc -l`" -gt 0 ]; then
CPU_CORES="`cat /proc/cpuinfo | grep -F 'model name' | wc -l`"
fi
MEMORY=`grep -m1 'MemTotal' /proc/meminfo | awk '{print $2}'`
fi
#Avoid OOM by making CB not cross-compile on boxes with low amount of memory
if [ ! -z "${MEMORY}" ]; then
if [ ${OS} = "FreeBSD" ]; then
if [ ${MEMORY} -lt 2147483648 ]; then
CPU_CORES=1
fi
elif [ ${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 [ "${OS}" = "FreeBSD" ]; then
if [ ! -d /var/lib/mysql/mysql ]; then
MYSQL_DATA=/home/mysql
fi
MYSQL_BIN=/usr/local/mysql/bin/mysql
else
if [ -e /etc/debian_version ]; then
if [ ! -d /var/lib/mysql/mysql ] && [ -d /home/mysql ]; then
MYSQL_DATA=/home/mysql
fi
MYSQL_BIN=/usr/local/mysql/bin/mysql
else
MYSQL_BIN=/usr/bin/mysql
fi
fi
#Check if mysql database exists
if [ -d ${MYSQL_DATA}/mysql ]; then
SQL_PATH_IS_EMPTY=false
else
SQL_PATH_IS_EMPTY=true
fi
if [ "${SKIP_CMD_OPTIONS}" = "0" ]; then
WGET_CONNECT_TIMEOUT="`wget --help | grep -c '\-\-read\-timeout'`"
if [ "${WGET_CONNECT_TIMEOUT}" -gt 0 ]; then
WGET_CONNECT_OPTIONS="--connect-timeout=5 --read-timeout=10 --tries=3"
else
WGET_CONNECT_OPTIONS="--timeout=10"
fi
fi
WGET_HTTPS_OPTIONS="--no-check-certificate"
MARIADB_DEF="10.4"
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"
MYSQL_SET="8.0"
MYSQL_DEF="8.0"
else
if [ "${OS_CENTOS_VER}" = "6" ]; then
#no 10.5 on centos6
MARIADB_SET="5.5 10.0 10.1 10.2 10.3 10.4"
else
MARIADB_SET="5.5 10.0 10.1 10.2 10.3 10.4 10.5"
fi
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"
if [ "${OS}" = "FreeBSD" ]; then
file_mtime="stat -f %m"
fi
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}
echo "password=${3}" >> ${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
echo "${SETTING_NAME}=$(eval_var ${DEFAULT_VALUE})"
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
echo "${SETTING_NAME}=$(eval_var ${DEFAULT_VALUE})"
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
# init.d scripts
if [ "${OS}" = "FreeBSD" ]; then
INITDDIR=/usr/local/etc/rc.d
else
INITDDIR=/etc/init.d
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}"
}
getMD5() {
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 3`
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE} | cut -d ':' -f 3`
fi
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE} | cut -d ':' -f 3`
fi
if [ "${RESULT}" = "" ]; then
RESULT=`grep -m1 ^$1: ${PATCHES_VERSIONS_FILE} | cut -d ':' -f 3`
fi
echo "${RESULT}"
}
do_exit() {
if [ "$2" != "" ]; then
echo "$2"
fi
removeLockfile
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}
}
#eg, CentOS 6.7 returns 6
da_os_major_version() {
/usr/local/directadmin/directadmin o | grep 'Compiled on' | head -n1 | cut -d. -f1 | awk '{print $4}'
}
os_license_mismatch() {
DA_OS_NAME=`/usr/local/directadmin/directadmin o | grep 'Compiled on' | head -n1 | awk '{print $3}' | cut -d\' -f2`
DA_MAJOR_OS_VER=`da_os_major_version`
if [ "${OS}" = "FreeBSD" ]; then
if [ "${DA_OS_NAME}" != "FreeBSD" ]; then
echo "${boldon}Your license OS (${DA_OS_NAME}) does not match the OS installed (FreeBSD).${boldoff}"
fi
elif [ -e ${DEBIAN_VERSION} ] && [ "${DA_OS_NAME}" != "Linux" ]; then
if [ "${OS_DEBIAN_VER}" != "${DA_MAJOR_OS_VER}" ] || [ "${DA_OS_NAME}" != "Debian" ]; then
# Hiding the warning on ubuntu
if ! gcc --version | grep -m1 -q 'ubuntu'; then
echo "${boldon}Your license OS (${DA_OS_NAME} ${DA_MAJOR_OS_VER}) does not match the OS installed (Debian ${OS_DEBIAN_VER}).${boldoff}"
fi
fi
elif [ "${DA_OS_NAME}" != "Linux" ]; then
if [ "${OS_CENTOS_VER}" != "${DA_MAJOR_OS_VER}" ] || [ "${DA_OS_NAME}" != "CentOS" ]; then
echo "${boldon}Your license OS (${DA_OS_NAME} ${DA_MAJOR_OS_VER}) does not match the OS installed (CentOS ${OS_CENTOS_VER}).${boldoff}"
fi
fi
}
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
return
fi
SERVICE_COUNT=`grep -m1 -c "^$1=" ${SERVICES}`
if [ "$2" = "delete" ]; then
if [ "${SERVICE_COUNT}" -eq 0 ]; then
return
else
perl -pi -e "s/^${1}=.*\n//" ${SERVICES}
fi
return
fi
if [ "$2" = "ON" ] || [ "$2" = "OFF" ]; then
if [ "${SERVICE_COUNT}" -eq 0 ]; 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
if [ "${SYSTEMD}" = "yes" ] && [ -e ${SYSTEMDDIR}/${SERVICE_NAME}.service ]; then
systemctl ${SERVICE_ACTION} ${SERVICE_NAME}.service
elif [ "${SYSTEMD}" = "yes" ] && [ -e /lib/systemd/system/${SERVICE_NAME}.service ]; then
systemctl ${SERVICE_ACTION} ${SERVICE_NAME}.service
else
if [ -e ${INITDDIR}/${SERVICE_NAME} ]; then
${INITDDIR}/${SERVICE_NAME} ${SERVICE_ACTION}
elif [ "${SERVICE_NAME}" = "mysqld" ]; then
SERVICE_NAME=mariadb
if [ "${SYSTEMD}" = "yes" ] && [ -e ${SYSTEMDDIR}/${SERVICE_NAME}.service ]; then
systemctl ${SERVICE_ACTION} ${SERVICE_NAME}.service
elif [ "${SYSTEMD}" = "yes" ] && [ -e /lib/systemd/system/${SERVICE_NAME}.service ]; then
systemctl ${SERVICE_ACTION} ${SERVICE_NAME}.service
else
if [ -e ${INITDDIR}/${SERVICE_NAME} ]; then
${INITDDIR}/${SERVICE_NAME} ${SERVICE_ACTION}
fi
fi
fi
fi
}
#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="194.59.159.74 files2.directadmin.com files-fr.directadmin.com files-lt.directadmin.com files-de.directadmin.com 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"
#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=${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/custombuild
WEBPATH_SERVICES=${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services
WEBPATH_BACKUP_IP=194.59.159.74
WEBPATH_BACKUP=http://${WEBPATH_BACKUP_IP}/services/custombuild
WEBPATH_SERVICES_BACKUP=http://${WEBPATH_BACKUP_IP}/services
WEBPATH_CL=https://repo.cloudlinux.com/cloudlinux/sources/da
WEBPATH_CWAF=https://waf.comodo.com
WEBPATH_LITESPEED=https://www.litespeedtech.com/packages
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'`"
#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 -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'
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
}
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
#CloudLinux
CLOUDLINUX_OPT=`getOpt cloudlinux ${CLOUDLINUX_DEF}`
CLOUDLINUX_BETA_OPT=`getOpt cloudlinux_beta ${CLOUDLINUX_BETA_DEF}`
CAGEFS_OPT=`getOpt cagefs ${CAGEFS_DEF}`
# 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}`
# Mailman is not yet supported
#MAILMAN_OPT=`getOpt mailman no`
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}`
#php_extensions.conf options
PHP_GMP_OPT=`getPhpOpt gmp ${PHP_GMP_DEF}`
PHP_HTSCANNER_OPT=`getPhpOpt htscanner ${PHP_HTSCANNER_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_OPCACHE_OPT=`getPhpOpt opcache ${PHP_OPCACHE_DEF}`
PHP_PHALCON_OPT=`getPhpOpt phalcon ${PHP_PHALCON_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}`
if [ "${OS}" = "FreeBSD" ]; then
EXIM_DEF="yes"
EXIMCONF_DEF="yes"
fi
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}`
EXIM_SRS_OPT=yes
#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}`
#Autoconf/automake/libtool
AUTOCONF_OPT=`getOpt autoconf ${AUTOCONF_DEF}`
AUTOMAKE_OPT=`getOpt automake ${AUTOMAKE_DEF}`
LIBTOOL_OPT=`getOpt libtool ${LIBTOOL_DEF}`
#Replace curl=no with curl=yes if clamav=yes is set
if [ "${CLAMAV_OPT}" = "yes" ]; then
if grep -m1 -q "^curl=no" ${OPTIONS_CONF}; then
perl -pi -e 's|^curl=no|curl=yes|g' ${OPTIONS_CONF}
fi
fi
CURL_OPT=`getOpt curl ${CURL_DEF}`
SSL_CONFIGURATION_OPT=`getOpt ssl_configuration ${SSL_CONFIGURATION_DEF}`
#on by default.. since exim is compiled by default on new installations
NEW_PCRE_OPT=`getOpt new_pcre ${NEW_PCRE_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}`
DA_AUTOUPDATE_OPT=`getOpt da_autoupdate ${DA_AUTOUPDATE_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
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH_LITESPEED}/versions.txt -O ${VERSIONS_FILE_LITESPEED} 2> /dev/null
fi
if [ ! -s ${VERSIONS_FILE_LITESPEED} ]; then
wget ${WGET_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
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH_CL}/${VERSIONS_CL} -O ${VERSIONS_FILE_CL} 2> /dev/null
fi
if [ ! -s ${VERSIONS_FILE_CL} ]; then
wget ${WGET_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
wget ${WGET_CONNECT_OPTIONS} ${WGET_HTTPS_OPTIONS} ${WEBPATH_CWAF}/doc/comodo_versions.txt -O ${VERSIONS_FILE_CWAF} 2> /dev/null
fi
if [ ! -s ${VERSIONS_FILE_CWAF} ]; then
wget ${WGET_CONNECT_OPTIONS} ${WGET_HTTPS_OPTIONS} ${WEBPATH_CWAF}/doc/comodo_versions.txt -O ${VERSIONS_FILE_CWAF} 2> /dev/null
fi
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" ]; then
if [ ! -d mysql ]; then
mkdir -p mysql
fi
if [ ! -s ${VERSIONS_FILE_JEMALLOC} ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/all/mariadb/jemalloc/jemalloc_versions.txt -O ${VERSIONS_FILE_JEMALLOC} 2> /dev/null
fi
if [ ! -s ${VERSIONS_FILE_GALERA} ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/all/mariadb/galera/galera_versions.txt -O ${VERSIONS_FILE_GALERA} 2> /dev/null
fi
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
}
doChecks() {
os_license_mismatch
doCSFpignore
if [ -s ${WORKDIR}/config.json ]; then
if grep -m1 -q 8372 ${WORKDIR}/config.json; then
rm -f ${WORKDIR}/config.json
fi
fi
DA_VERSION_IS_INSECURE=false
if [ ! -s /etc/mime.types ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/mime.types -O /etc/mime.types
fi
# Do some pre-definitions, so that we wouldn't output security in json if there are no security items
if [ -x ${DA_BIN} ] && [ -s ${DACONF_FILE} ]; then
DIRECTADMINV="`${DA_BIN} v | grep -m1 '^Version:' | grep -oE '[^ ]+$' | cut -d. -f2,3,4`"
if [ "`version_cmp $DIRECTADMINV 1.52.0`" -lt 0 ]; then
DA_VERSION_IS_INSECURE=true
if /usr/local/directadmin/directadmin c | grep -m1 -q 'email_ftp_password_change=1'; then
echo "Found DA version < 1.52.0. Setting email_ftp_password_change=0 in directadmin.conf for security purposes."
writeLog "email_ftp_password_change=0 in directadmin.conf was set for security purposes";
setVal email_ftp_password_change 0 ${DACONF_TEMPLATE_FILE}
setVal email_ftp_password_change 0 ${DACONF_FILE}
doRestartDA
fi
fi
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" ]; 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.1" ] && [ "${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 [ "${OS}" = "FreeBSD" ]; then
if [ "${OS_FREEBSD_VER}" = "11" ]; then
OFFER_MODERN_SSL_SET=false
OS_NAME="FreeBSD ${OS_FREEBSD_VER}"
fi
elif [ -e ${DEBIAN_VERSION} ]; then
if [ "${OS_DEBIAN_VER}" = "7" ] || [ "${OS_DEBIAN_VER}" = "8" ] || [ "${OS_DEBIAN_VER}" = "9" ]; then
OFFER_MODERN_SSL_SET=false
OS_NAME="Debian ${OS_DEBIAN_VER}"
fi
else
if [ "${OS_CENTOS_VER}" = "6" ] || [ "${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" ]; 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
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
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
#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
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}" = "FreeBSD" ]; then
do_exit 1 "mod_ruid2 does not support FreeBSD."
elif [ -e ${DEBIAN_VERSION} ]; then
if [ "${OS_DEBIAN_VER}" = "9" ] || [ "${OS_DEBIAN_VER}" = "10" ]; then
do_exit 1 "mod_ruid2 does not support Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=866395."
fi
elif [ "${OS_CENTOS_VER}" = "8" ]; then
do_exit 1 "mod_ruid2 does not support CentOS8."
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}" = "194.59.159.74" ]; 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
}
checkMD5() {
#$1 is the local file
#$2 is the versions.txt variable
#return values:
#1 for error, try agian
#0 for nothing to report.
if [ ! -e $MD5SUM ]; then
echo 0
return
fi
if [ ! -e "$1" ]; then
echo 1
fi
VMD5=`getMD5 $2`
if [ "$VMD5" = "" ]; then
echo 0
return
fi
if [ ${OS} = "FreeBSD" ]; then
FMD5=`$MD5SUM -q $1`
else
FMD5=`$MD5SUM $1 | cut -d\ -f1`
fi
if [ "$FMD5" = "$VMD5" ]; then
echo 0
else
echo 1
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 ${LOCAL_NAME} ]; then
DOWNLOAD_DIR_NAME="`dirname ${CWD}/${LOCAL_NAME}`"
if [ ! -d "${DOWNLOAD_DIR_NAME}" ]; then
mkdir -p "${DOWNLOAD_DIR_NAME}"
fi
printf "Downloading\t\t${LOCAL_NAME}...\n"
if [ ${OS} = "FreeBSD" ]; then
fetch -o ${CWD}/${LOCAL_NAME} ${WEBPATH}/${1}
else
wget ${WGET_CONNECT_OPTIONS} -O ${CWD}/${LOCAL_NAME} ${WEBPATH}/${1}
fi
if [ ! -s ${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}"
if [ ${OS} = "FreeBSD" ]; then
fetch -o ${CWD}/${LOCAL_NAME} ${WEBPATH_BACKUP}/${1}
else
wget ${WGET_CONNECT_OPTIONS} -O ${CWD}/${LOCAL_NAME} ${WEBPATH_BACKUP}/${1}
fi
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=194.59.159.74
case "${DOWNLOADSERVER_OPT}" in
194.59.159.74) SET_DL=${WEBPATH_BACKUP_IP}
;;
194.59.159.74) SET_DL=${WEBPATH_BACKUP_IP}
;;
194.59.159.74) SET_DL=194.59.159.74
;;
194.59.159.74) SET_DL=194.59.159.74
;;
194.59.159.74) SET_DL=194.59.159.74
;;
194.59.159.74) SET_DL=194.59.159.74
;;
194.59.159.74) SET_DL=194.59.159.74
;;
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=${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/custombuild
WEBPATH_SERVICES=${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services
sleep 2
fi
fi
fi
elif [ "${2}" = "" ]; then
if [ "${JSON_CASE}" -eq 0 ]; then
printf "Downloading\t\t$1...\n"
fi
if [ ${OS} = "FreeBSD" ]; then
fetch -o ${CWD}/${LOCAL_NAME} ${WEBPATH}/${1}
else
wget ${WGET_CONNECT_OPTIONS} -O ${CWD}/${LOCAL_NAME} ${WEBPATH}/${1}
fi
fi
if [ "$2" != "" ]; then
M=`checkMD5 ${LOCAL_NAME} ${2}`
if [ "$M" != "0" ]; then
if [ "${JSON_CASE}" -eq 0 ]; then
echo ""
echo "${boldon}*** MD5 Checksum for ${LOCAL_NAME} Failed. Redownloading...***${boldoff}"
echo ""
fi
#we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop.
rm -f ${LOCAL_NAME}
getFile ${1} "" ${3}
M=`checkMD5 ${LOCAL_NAME} ${2}`
if [ "$M" != "0" ]; then
echo ""
echo ""
echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}"
echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded."
echo "Install continuing with this possibly corrupted file. (it may also be fine)"
echo ""
echo ""
elif [ "${JSON_CASE}" -eq 0 ]; then
echo "MD5 Checksum on ${LOCAL_NAME} passed."
fi
fi
fi
}
downloadVersionsTxt() {
if [ ${OS} = "FreeBSD" ]; then
fetch -o ./versions.txt ${WEBPATH}/versions.txt 2> /dev/null
else
wget ${WGET_CONNECT_OPTIONS} -O ./versions.txt ${WEBPATH}/versions.txt 2> /dev/null
fi
if [ ! -s ./versions.txt ]; then
echo "Could not get versions.txt from ${WEBPATH}. Trying backup."
if [ ${OS} = "FreeBSD" ]; then
fetch -o ./versions.txt ${WEBPATH_BACKUP}/versions.txt 2> /dev/null
else
wget ${WGET_CONNECT_OPTIONS} -O ./versions.txt ${WEBPATH_BACKUP}/versions.txt 2> /dev/null
fi
if [ -s ./versions.txt ]; then
echo "Ok, that worked. Please try using a different mirror."
echo "./build set_fastest"
echo "https://help.directadmin.com/item.php?id=305"
echo ""
echo "Using ${WEBPATH_BACKUP} for the remainder of this run."
sleep 10
WEBPATH=${WEBPATH_BACKUP}
else
do_exit 1 "Unable to download versions.txt from any mirror"
fi
fi
#because the versions.txt has the md5 for is, saves us re-downloading it if we already have the latest.
getFile patches_versions.txt patches_versions
if [ "${WEBSERVER_OPT}" = "litespeed" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH_LITESPEED}/versions.txt -O ${VERSIONS_FILE_LITESPEED} 2> /dev/null
if [ ! -s ${VERSIONS_FILE_LITESPEED} ]; then
getFile versions_litespeed.txt versions_litespeed
fi
fi
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH_CL}/${VERSIONS_CL} -O ${VERSIONS_FILE_CL} 2> /dev/null
if [ ! -s ${VERSIONS_FILE_CL} ]; then
getFile versions_cl.txt versions_cl
fi
fi
if [ "${MODSECURITY_OPT}" = "yes" ] && [ "${MODSECURITY_RULESET_OPT}" = "comodo" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WGET_HTTPS_OPTIONS} ${WEBPATH_CWAF}/doc/comodo_versions.txt -O ${VERSIONS_FILE_CWAF} 2> /dev/null
if [ ! -s ${VERSIONS_FILE_CWAF} ]; then
getFile versions_cwaf.txt versions_cwaf
fi
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" ]; then
if [ ! -d mysql ]; then
mkdir -p mysql
fi
getFile all/mariadb/jemalloc/jemalloc_versions.txt jemalloc_versions mysql/versions_jemalloc.txt
getFile all/mariadb/galera/galera_versions.txt galera_versions mysql/versions_galera.txt
fi
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
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
getMD5CL() {
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 3`
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CL} | cut -d ':' -f 3`
fi
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CL} | cut -d ':' -f 3`
fi
echo "${RESULT}"
}
getMD5CWAF() {
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 3`
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CWAF} | cut -d ':' -f 3`
fi
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_CWAF} | cut -d ':' -f 3`
fi
echo "${RESULT}"
}
getMD5LSWS() {
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 3`
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_LITESPEED} | cut -d ':' -f 3`
fi
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_LITESPEED} | cut -d ':' -f 3`
fi
echo "${RESULT}"
}
getMD5Jemalloc() {
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 3`
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_JEMALLOC} | cut -d ':' -f 3`
fi
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_JEMALLOC} | cut -d ':' -f 3`
fi
echo "${RESULT}"
}
getMD5Galera() {
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 3`
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_GALERA} | cut -d ':' -f 3`
fi
else
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_GALERA} | cut -d ':' -f 3`
fi
echo "${RESULT}"
}
checkMD5CL() {
#$1 is the local file
#$2 is the versions_cl.txt or versions_litespeed.txt variable
#return values:
#1 for error, try agian
#0 for nothing to report.
if [ ! -e $MD5SUM ]; then
echo 0
return
fi
if [ ! -e "$1" ]; then
echo 1
fi
VMD5=`getMD5CL $2`
if [ "$VMD5" = "" ]; then
echo 0
return
fi
FMD5=`$MD5SUM $1 | cut -d\ -f1`
if [ "$FMD5" = "$VMD5" ]; then
echo 0
else
echo 1
fi
}
checkMD5CWAF() {
#$1 is the local file
#$2 is the versions_cwaf.txt
#return values:
#1 for error, try agian
#0 for nothing to report.
if [ ! -e $MD5SUM ]; then
echo 0
return
fi
if [ ! -e "$1" ]; then
echo 1
fi
VMD5=`getMD5CWAF $2`
if [ "$VMD5" = "" ]; then
echo 0
return
fi
FMD5=`$MD5SUM $1 | cut -d\ -f1`
if [ "$FMD5" = "$VMD5" ]; then
echo 0
else
echo 1
fi
}
checkMD5LSWS() {
#$1 is the local file
#$2 is the versions_cl.txt or versions_litespeed.txt variable
#return values:
#1 for error, try agian
#0 for nothing to report.
if [ ! -e $MD5SUM ]; then
echo 0
return
fi
if [ ! -e "$1" ]; then
echo 1
fi
VMD5=`getMD5LSWS $2`
if [ "$VMD5" = "" ]; then
echo 0
return
fi
FMD5=`$MD5SUM $1 | cut -d\ -f1`
if [ "$FMD5" = "$VMD5" ]; then
echo 0
else
echo 1
fi
}
getFileCL() {
cd ${CWD}
if [ ! -s ${1} ]; then
printf "Downloading\t\t$1...\n"
wget ${WGET_CONNECT_OPTIONS} -O ${CWD}/${1} ${WEBPATH_CL}/${1}
tar xzf ${1} --no-same-owner
fi
if [ "$#" -eq 2 ]; then
M=`checkMD5CL ${1} ${2}`
if [ "$M" != "0" ]; then
echo ""
echo "${boldon}*** MD5 Checksum for $1 Failed. Redownloading...***${boldoff}"
echo ""
#we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop.
rm -f $1
getFileCL $1
tar xzf ${1} --no-same-owner
M=`checkMD5CL ${1} ${2}`
if [ "$M" != "0" ]; then
echo ""
echo ""
echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}"
echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded."
echo "Install continuing with this possibly corrupted file. (it may also be fine)"
echo ""
echo ""
fi
fi
fi
}
getFileCWAF() {
cd ${CWD}
if [ ! -s ${1} ]; then
printf "Downloading\t\t$1...\n"
wget ${WGET_CONNECT_OPTIONS} ${WGET_HTTPS_OPTIONS} -O ${CWD}/${1} "${WEBPATH_CWAF}/api/da_vendor?file=${1}"
fi
if [ "$#" -eq 2 ]; then
M=`checkMD5CWAF ${1} ${2}`
if [ "$M" != "0" ]; then
echo ""
echo "${boldon}*** MD5 Checksum for $1 Failed. Redownloading...***${boldoff}"
echo ""
#we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop.
rm -f $1
getFileCWAF $1
M=`checkMD5CWAF ${1} ${2}`
if [ "$M" != "0" ]; then
echo ""
echo ""
echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}"
echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded."
echo "Install continuing with this possibly corrupted file. (it may also be fine)"
echo ""
echo ""
fi
fi
fi
}
getFileLSWS() {
cd ${CWD}
if [ ! -s ${1} ]; then
printf "Downloading\t\t$1...\n"
wget ${WGET_CONNECT_OPTIONS} -O ${CWD}/${1} ${WEBPATH_LITESPEED}/${LITESPEED_REPO}/${1}
fi
if [ "$#" -eq 2 ]; then
M=`checkMD5LSWS ${1} ${2}`
if [ "$M" != "0" ]; then
echo ""
echo "${boldon}*** MD5 Checksum for $1 Failed. Redownloading...***${boldoff}"
echo ""
#we will call it recursively but will *not* pass $2 for the md5 cus it would get stuck in a loop.
rm -f $1
getFileLSWS $1
tar xzf ${1} --no-same-owner
M=`checkMD5LSWS ${1} ${2}`
if [ "$M" != "0" ]; then
echo ""
echo ""
echo "${boldon}*** MD5 Checksum for $1 failed *again*.***${boldoff}"
echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded."
echo "Install continuing with this possibly corrupted file. (it may also be fine)"
echo ""
echo ""
fi
fi
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}"
}
getVerJemalloc() {
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_JEMALLOC} | cut -d ':' -f 2 | cut -d '-' -f1`
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_jemalloc.txt!"
RESULT="0"
fi
echo "${RESULT}"
}
getFilenameJemalloc() {
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_JEMALLOC} | cut -d ':' -f 4`
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 4`
fi
fi
if [ "${RESULT}" = "" ]; then
>&2 echo "ERROR: version of $1 not found in versions_jemalloc.txt!"
RESULT="0"
fi
echo "${RESULT}"
}
getVerGalera() {
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_GALERA} | cut -d ':' -f 2 | cut -d '-' -f1`
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_galera.txt!"
RESULT="0"
fi
echo "${RESULT}"
}
getFilenameGalera() {
RESULT=`grep -m1 ^$1: ${VERSIONS_FILE_GALERA} | cut -d ':' -f 4`
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 4`
fi
fi
if [ "${RESULT}" = "" ]; then
>&2 echo "ERROR: version of $1 not found in versions_galera.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
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`
DIRECTADMIN_VER=`getVer directadmin`
NGHTTP2_VER=`getVer nghttp2`
APACHE2_VER=`getVer apache2.4`
AP2_MINOR_VER=`echo ${APACHE2_VER} | cut -d. -f3`
# Minimal required version of Apache 2.4
if [ "${AP2_MINOR_VER}" -lt 9 ]; then
do_exit 1 "Minimal required version of Apache is 2.4.9. Please uncustomize your versions.txt file."
fi
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`
PIGZ_VER=`getVer pigz`
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
if [ "${MYSQL_OPT}" = "5.0" ]; then
MYSQL_VER=`getVer mysql5.0`
MYSQL_REL=`getVer mysql5.0_release`
elif [ "${MYSQL_OPT}" = "5.1" ]; then
MYSQL_VER=`getVer mysql5.1`
MYSQL_REL=`getVer mysql5.1_release`
elif [ "${MYSQL_OPT}" = "5.5" ]; then
MYSQL_VER=`getVer mysql5.5`
MYSQL_REL=`getVer mysql5.5_release`
elif [ "${MYSQL_OPT}" = "5.6" ]; then
MYSQL_VER=`getVer mysql5.6`
MYSQL_REL=`getVer mysql5.6_release`
if [ "${OS}" != "FreeBSD" ] && [ ! -s ${DEBIAN_VERSION} ]; then
if [ "${OS_CENTOS_VER}" = "5" ]; then
MYSQL_VER=5.6.36
fi
fi
elif [ "${MYSQL_OPT}" = "5.7" ]; then
MYSQL_VER=`getVer mysql5.7`
if [ "${OS}" = "FreeBSD" ] && [ "`version_cmp ${MYSQL_VER} 5.7.27 'freebsd mysql ver check'`" -ge 0 ]; then
#there is no 5.7.30 pack for FreeBSD, 5.7.27 is latest
MYSQL_VER=5.7.27
fi
MYSQL_REL=`getVer mysql5.7_release`
elif [ "${MYSQL_OPT}" = "8.0" ]; then
MYSQL_VER=`getVer mysql8.0`
MYSQL_REL=`getVer mysql8.0_release`
else
MYSQL_VER=0
MYSQL_REL=0
fi
if [ "$MYSQL_REL" = "" ]; then
MYSQL_REL=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`
else
MARIADB_VER=0
fi
fi
PCRE_VER=`getVer pcre`
if [ "$NEW_PCRE_OPT" = "yes" ]; then
PCRE_VER=`getVer pcre_current`
fi
PCRE2_VER=`getVer pcre2`
CURL_VER=`getVer curl`
ZLIB_VER=`getVer zlib-current`
MCRYPT_VER=`getVer mcrypt`
MHASH_VER=`getVer mhash`
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.1" ]; then
DOVECOT_SHORTREL=21
PIGEONHOLE_VER=`getVer pigeonhole21`
elif [ "${DOVECOT_REL}" = "2.2" ]; then
DOVECOT_SHORTREL=22
PIGEONHOLE_VER=`getVer pigeonhole22`
elif [ "${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`
LIBSRS_ALT_VER=`getVer libsrs_alt`
LIBSPF2_VER=`getVer libspf2`
if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ]; then
EXIM_CONF_VER=`getVer exim_conf_2`
EXIM_PL_VER=`getVer exim_pl_2`
elif [ "${EXIMCONF_RELEASE_OPT}" = "4.2" ]; then
EXIM_CONF_VER=`getVer exim_conf_4`
EXIM_PL_VER=`getVer exim_pl_4`
elif [ "${EXIMCONF_RELEASE_OPT}" = "4.3" ]; then
EXIM_CONF_VER=`getVer exim_conf_43`
EXIM_PL_VER=`getVer exim_pl_43`
elif [ "${EXIMCONF_RELEASE_OPT}" = "4.4" ]; then
EXIM_CONF_VER=`getVer exim_conf_44`
EXIM_PL_VER=`getVer exim_pl_44`
elif [ "${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`
AUTOCONF_VER=`getVer autoconf`
AUTOMAKE_VER=`getVer automake`
M4_VER=`getVer m4`
HELP2MAN_VER=`getVer help2man`
LIBTOOL_VER=`getVer libtool`
LIBXML2_VER=`getVer libxml2-current`
LIBXSLT_VER=`getVer libxslt`
LIBMAGIC_VER=`getVer libmagic`
LIBSODIUM_VER=`getVer libsodium`
LIBWEBP_VER=`getVer libwebp`
LIBZIP_VER=`getVer libzip`
COMPOSER_VER=`getVer composer`
if [ "${OS}" = "FreeBSD" ]; then
LEGO_VER=`getVer lego_freebsd`
elif [ "${OS_CENTOS_VER}" = "6" ] && [ "${B64}" = "0" ]; then
LEGO_VER=`getVer lego_386`
else
LEGO_VER=`getVer lego`
fi
FREETYPE_VER=`getVer freetype`
ICONV_VER=`getVer iconv`
ICU_VER=`getVer icu4c`
IMAGICK_VER=`getVer imagick`
IMAGEMAGICK_VER=`getVer imagemagick`
CLAMAV_VER=`getVer clamav`
ZSTD_VER=`getVer zstd`
# Mailman is not yet supported
#MAILMAN_VER=`getVer mailman`
AWSTATS_VER=`getVer awstats`
AWSTATS_PROCESS_VER=`getVer awstats_process`
UNIT_VER=`getVer unit`
SUHOSIN_VER=`getVer suhosin`
OPCACHE_VER=`getVer zendopcache`
PSR_VER=`getVer psr`
PHALCON_VER=`getVer phalcon`
SNUFFLEUPAGUS_VER=`getVer snuffleupagus`
IMAP_VER=`getVer imap`
if [ "${B64}" = "1" ]; then
IONCUBE_VER=`getVer ioncube_loaders_lin_x86-64`
else
IONCUBE_VER=`getVer ioncube_loaders_lin_x86`
fi
FBSD4_IONCUBE_VER=`getVer ioncube_loaders_fre_4_x86`
PNG_VER=`getVer libpng_current`
LIBMAXMINDDB_VER=`getVer libmaxminddb`
GEOIPUPDATE_VER=`getVer geoipupdate`
RAGEL_VER=`getVer ragel`
LUAJIT_VER=`getVer luajit`
GLIB_VER=`getVer glib`
# Applications versions
PHPMYADMIN_REMOTE_PATCH=pma_auth_logging.patch
if [ "${PHPMYADMIN_VER_OPT}" = "5" ]; then
PHPMYADMIN_VER=`getVer phpmyadmin5`
elif [ "${PHPMYADMIN_VER_OPT}" = "4" ]; then
PHPMYADMIN_VER=`getVer phpmyadmin4`
else
PHPMYADMIN_VER=`getVer phpmyadmin3`
fi
SQUIRRELMAIL_LOCALE_VER=`getVer squirrelmail_locale`
SQUIRRELMAIL_LOGGER_VER=`getVer squirrel_logger`
if [ "$OS" = "FreeBSD" ]; then
OPENLITESPEED_VER=`getVer openlitespeed_src`
else
OPENLITESPEED_VER=`getVer openlitespeed`
fi
LITESPEED_VER=no
LETSENCRYPT_VER=`getVer letsencrypt_sh`
CPANEL_TO_DA_VER=`getVer cpanel_to_da`
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-i386-linux"
fi
LITESPEED_VER=`getVerLSWS ${LITESPEED_VER_NAME}`
if [ "${OS}" = "FreeBSD" ]; then
LSWS_OS="freebsd"
else
LSWS_OS="linux"
fi
if [ "${B64}" = "1" ]; then
LITESPEED_NAME="lsws-${LITESPEED_VER}-ent-x86_64-${LSWS_OS}"
else
LITESPEED_NAME="lsws-${LITESPEED_VER}-ent-i386-${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 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 LibXML2
LIBXML2_CONFIGURE=configure/libxml2/configure.libxml2
if [ -e custom/libxml2/configure.libxml2 ]; then
LIBXML2_CONFIGURE=custom/libxml2/configure.libxml2
fi
# Variable for LibXSLT
LIBXSLT_CONFIGURE=configure/libxslt/configure.libxslt
if [ -e custom/libxslt/configure.libxslt ]; then
LIBXSLT_CONFIGURE=custom/libxslt/configure.libxslt
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
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
if [ ${OS} = "FreeBSD" ]; then
ROOT_GRP=wheel
fi
USER_INPUT=0
INPUT_VALUE=d
if [ ${OS} = "FreeBSD" ]; then
OS_VER=`uname -r | cut -d- -f1`
elif [ -e /etc/fedora-release ]; then
OS=fedora
if [ "`cat /etc/fedora-release | awk '{ print $1, $2 }'`" = "Fedora Core" ]; then
OS_VER=`cat /etc/fedora-release | awk '{ print $4 }'`
elif [ "`cat /etc/fedora-release | awk '{ print $1, $2 }'`" = "Fedora release" ]; then
OS_VER=`cat /etc/fedora-release | awk '{ print $3 }'`
fi
elif [ -e ${DEBIAN_VERSION} ]; then
OS_VER=3.1
else
OS_VER=`cat /etc/redhat-release | cut -d\ -f5`
if [ "${OS_VER}" = "" ]; then
OS_VER=`cat /etc/redhat-release | cut -d\ -f1`
fi
fi
MAINVER=""
if [ "${OS}" = "FreeBSD" ]; then
MAINVER=`echo ${OS_VER} | cut -d. -f1`
if [ -e /usr/sbin/pkg ]; then
PKG_INSTALL="pkg install -y"
else
PKG_INSTALL="pkg_add -r"
fi
if [ ${MAINVER} -eq 10 ]; then
GCCVER=48
export CC=gcc${GCCVER}
export CXX=g++${GCCVER}
export CPP=cpp${GCCVER}
if [ ! -e /usr/local/bin/gcc${GCCVER} ]; then
${PKG_INSTALL} gcc${GCCVER}
fi
if [ ! -e /usr/local/bin/gcc${GCCVER} ]; then
do_exit 1 "Unable to find GCC on the system: /usr/local/bin/gcc${GCCVER}"
fi
if [ -e /etc/libmap.conf ]; then
perl -pi -e "s|gcc44|gcc${GCCVER}|g" /etc/libmap.conf
fi
# Fixes: /usr/lib/libstdc++.so.6: version GLIBCXX_3.4.15 required by /usr/local/mysql/bin/mysqld not found
if [ ! -h /usr/lib/libstdc++.so.6 ]; then
if [ -e /usr/lib/libstdc++.so.6 ]; then
mv -f /usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6.backup
fi
ln -sf /usr/local/lib/gcc${GCCVER}/libstdc++.so.6 /usr/lib/libstdc++.so.6
fi
fi
if [ ${MAINVER} -gt 10 ]; then
export CC=clang
export CPP=clang-cpp
export CXX=clang++
export WITH_LIBCPLUSPLUS=yes
fi
if [ ${MAINVER} -ge 10 ]; then
# Fixes apache OpenSSL problem: /usr/include/openssl/bn.h:603:1: error: unknown type name 'CRYPTO_THREADID'
if [ ! -d /usr/local/openssl ]; then
${PKG_INSTALL} openssl
fi
fi
case "${MAINVER}" in
4) IONCUBE_VER=$FBSD4_IONCUBE_VER
IONCUBENAME=ioncube_loaders_fre_4_x86
;;
5) IONCUBENAME=ioncube_loaders_fre_4_x86
;;
6) IONCUBENAME=ioncube_loaders_fre_6_x86
;;
7) IONCUBENAME=ioncube_loaders_fre_7_x86
if [ ${B64} -eq 1 ]; then
IONCUBENAME=ioncube_loaders_fre_7_x86-64
fi
;;
8) IONCUBENAME=ioncube_loaders_fre_8_x86-64
;;
9) if [ ${B64} -eq 1 ]; then
IONCUBENAME=ioncube_loaders_fre_9_x86-64
else
IONCUBENAME=ioncube_loaders_fre_9_x86
fi
;;
10) if [ ${B64} -eq 1 ]; then
IONCUBENAME=ioncube_loaders_fre_9_x86-64
else
IONCUBENAME=ioncube_loaders_fre_9_x86
fi
;;
11) IONCUBENAME=ioncube_loaders_fre_11_x86-64
;;
12) IONCUBENAME=ioncube_loaders_fre_11_x86-64
;;
esac
else
if [ ${B64} -eq 1 ]; then
IONCUBENAME=ioncube_loaders_lin_x86-64
ZENDNAME_PHP53=ZendGuardLoader-php-5.3-linux-glibc23-x86_64
ZENDNAME_PHP53_MD5=ZendGuard64
ZENDNAME_PHP54=ZendGuardLoader-70429-PHP-5.4-linux-glibc23-x86_64
ZENDNAME_PHP54_MD5=ZendGuard54_64
ZENDNAME_PHP55=zend-loader-php5.5-linux-x86_64
ZENDNAME_PHP55_MD5=zend_loader_php55_64
ZENDNAME_PHP56=zend-loader-php5.6-linux-x86_64
ZENDNAME_PHP56_MD5=zend_loader_php56_64
else
IONCUBENAME=ioncube_loaders_lin_x86
ZENDNAME_PHP53=ZendGuardLoader-php-5.3-linux-glibc23-i386
ZENDNAME_PHP53_MD5=ZendGuard32
ZENDNAME_PHP54=ZendGuardLoader-70429-PHP-5.4-linux-glibc23-i386
ZENDNAME_PHP54_MD5=ZendGuard54_32
ZENDNAME_PHP55=zend-loader-php5.5-linux-i386
ZENDNAME_PHP55_MD5=zend_loader_php55_32
ZENDNAME_PHP56=zend-loader-php5.6-linux-i386
ZENDNAME_PHP56_MD5=zend_loader_php56_32
fi
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
JPEG_VER=`getVer jpgsrc`
JPEGFILE=jpegsrc.v${JPEG_VER}.tar.gz
JPEGDIR=jpeg-${JPEG_VER}
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}-[0-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 nghttp2 ${NGHTTP2_VER} tar.gz
clean_tarball apr ${APR_VER} tar.gz
clean_tarball apr-util ${APR_UTIL_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 ${RSPAMD_VER} tar.gz
clean_tarball ragel ${RAGEL_VER} tar.gz
clean_tarball glib ${GLIB_VER} tar.xz
clean_tarball LuaJIT ${LUAJIT_VER} tar.gz
clean_tarball libmagic ${LIBMAGIC_VER} tar.gz
clean_tarball rspamd_conf ${RSPAMD_CONF_VER} tar.gz
fi
clean_tarball curl ${CURL_VER} tar.gz
clean_tarball pcre ${PCRE_VER} tar.gz
clean_tarball pcre2 ${PCRE2_VER} tar.gz
clean_tarball zlib ${ZLIB_VER} tar.gz
clean_tarball libpng ${PNG_VER} tar.gz
clean_tarball libwebp ${LIBWEBP_VER} tar.gz
clean_tarball libmaxminddb ${LIBMAXMINDDB_VER} tar.gz
clean_tarball geoipupdate ${GEOIPUPDATE_VER} tar.gz
clean_tarball libmcrypt ${MCRYPT_VER} tar.gz
clean_tarball mhash ${MHASH_VER} tar.gz
clean_tarball freetype ${FREETYPE_VER} tar.gz
clean_tarball libiconv ${ICONV_VER} tar.gz
clean_tarball libsodium ${LIBSODIUM_VER} tar.gz
clean_tarball libxslt ${LIBXSLT_VER} tar.gz
clean_tarball libxml2 ${LIBXML2_VER} tar.gz
clean_tarball libzip ${LIBZIP_VER} tar.gz
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_IMAP_OPT}" = "yes" ]; then
clean_tarball imap ${IMAP_VER} tgz
fi
if [ "${EXIM_SRS_OPT}" = "yes" ]; then
clean_tarball libsrs_alt ${LIBSRS_ALT_VER} tar.bz2
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
clean_tarball icu4c ${ICU_VER}-src tgz
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 zstd ${ZSTD_VER} tar.gz
clean_tarball xapian-core ${XAPIAN_CORE_VER} tar.xz
clean_tarball bubblewrap ${BUBBLEWRAP_VER} tar.xz
clean_tarball autoconf ${AUTOCONF_VER} tar.gz
clean_tarball automake ${AUTOMAKE_VER} tar.gz
clean_tarball m4 ${M4_VER} tar.gz
clean_tarball help2man ${HELP2MAN_VER} tar.xz
clean_tarball libtool ${LIBTOOL_VER} tar.gz
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
clean_tarball pigz ${PIGZ_VER} tar.gz
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 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 pigz-${PIGZ_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}
if [ "${UNIT_OPT}" = "yes" ]; then
rm -rf unit-${UNIT_VER}
fi
rm -rf zstd-${ZSTD_VER}
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 help2man-${HELP2MAN_VER}
if [ "${EXIM_SRS_OPT}" = "yes" ]; then
rm -rf libsrs_alt-${LIBSRS_ALT_VER}
fi
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 [ "${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 nghttp2-${NGHTTP2_VER}
rm -rf pcre-${PCRE_VER}
rm -rf pcre2-${PCRE2_VER}
rm -rf zlib-${ZLIB_VER}
rm -rf ${JPEGDIR}
rm -rf libpng-${PNG_VER}
rm -rf libwebp-${LIBWEBP_VER}
rm -rf libmaxminddb-${LIBMAXMINDDB_VER}
rm -rf geoipupdate-${GEOIPUPDATE_VER}
rm -rf libmcrypt-${MCRYPT_VER}
rm -rf mhash-${MHASH_VER}
rm -rf freetype-${FREETYPE_VER}
rm -rf libiconv-${ICONV_VER}
rm -rf libsodium-${LIBSODIUM_VER}
rm -rf libxslt-${LIBXSLT_VER}
rm -rf libxml2-${LIBXML2_VER}
rm -rf libzip-${LIBZIP_VER}
rm -rf icu4c-${ICU_VER}-src
rm -rf icu
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 autoconf-${AUTOCONF_VER}
rm -rf m4-${M4_VER}
rm -rf dovecot-${DOVECOT_REL}-pigeonhole-${PIGEONHOLE_VER}
rm -rf automake-${AUTOMAKE_VER}
rm -rf libtool-${LIBTOOL_VER}
rm -rf Mail-SpamAssassin-${SPAMASSASSIN_VER}
rm -rf rspamd-${RSPAMD_VER}
rm -rf ragel-${RAGEL_VER}
rm -rf libmagic-${LIBMAGIC_VER}
rm -rf LuaJIT-${LUAJIT_VER}
rm -rf glib-${GLIB_VER}
rm -rf clamav-${CLAMAV_VER}
# Mailman is not yet supported
# rm -rf mailman-${MAILMAN_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_ioncube php_imagick php_imap php_opcache php_phalcon php_psr php_snuffleupagus php_suhosin php_xmlrpc php_zend"
BUILD_PHP_EXT_DESC="Install/update PHP extensions"
BUILD_PHP_EXT_REQADD=""
BUILD_COMP_SET="apache autoconf automake awstats awstats_process bubblewrap clamav composer curl cpanel_to_da dovecot exim freetype geoipupdate glib iconv icu imagemagick jailshell ragel lego libjpeg libmagic libmaxminddb libmodsecurity libpng libspf2 libsrs_alt libsodium libtool libxml2 libxslt libzip litespeed lua luajit libwebp m4 mcrypt mhash mod_lsapi mod_proctitle mod_aclr2 mod_ruid2 mod_htscanner2 mod_fcgid modsecurity modsecurity_rules msmtp mysql netdata nginx nginx_apache openlitespeed pigeonhole pigz pcre pcre2 php proftpd pureftpd rspamd snail spamassassin suphp unit webalizer zlib zstd"
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 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 todovecot 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 [ "${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 [ "${AUTOCONF_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}autoconf "
fi
if [ "${AUTOMAKE_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}automake "
fi
if [ "${LIBTOOL_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}libtool "
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 [ "${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}glib libmagic luajit spamassassin rspamd ragel "
elif [ "${SPAMD_OPT}" = "rspamd" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}spamassassin "
else
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}glib libmagic luajit rspamd ragel "
fi
if [ "${EXIM_OPT}" = "no" ]; then
BUILD_COMP_SKIP="${BUILD_COMP_SKIP}exim "
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_AUTOCONF_NAME="Build autoconf"
COMP_AUTOCONF_DESC="Install/update autoconf."
COMP_AUTOCONF_VER="Version ${AUTOCONF_VER}."
COMP_AUTOMAKE_NAME="Build automake"
COMP_AUTOMAKE_DESC="Install/update automake."
COMP_AUTOMAKE_VER="Version ${AUTOMAKE_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_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_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_CPANEL_TO_DA_NAME="Build cpanel_to_da"
COMP_CPANEL_TO_DA_DESC="Install/update cPanel to DirectAdmin script."
COMP_CPANEL_TO_DA_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_FREETYPE_NAME="Build Freetype"
COMP_FREETYPE_DESC="Install/update Freetype."
COMP_FREETYPE_VER="Version ${FREETYPE_VER}."
COMP_PHP_GMP_NAME="Build gmp"
COMP_PHP_GMP_DESC="Install/update gmp extension for PHP."
COMP_PHP_GMP_VER=""
COMP_ICONV_NAME="Build iconv"
COMP_ICONV_DESC="Install/update iconv."
COMP_ICONV_VER="Version ${ICONV_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_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_ICU_NAME="Build ICU"
COMP_ICU_DESC="Install/update ICU."
COMP_ICU_VER="Version ${ICU_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_LIBJPEG_NAME="Build libjpeg"
COMP_LIBJPEG_DESC="Install/update libjpeg."
COMP_LIBJPEG_VER="Version ${JPEG_VER}."
COMP_LIBPNG_NAME="Build libpng"
COMP_LIBPNG_DESC="Install/update libpng."
COMP_LIBPNG_VER="Version ${PNG_VER}."
COMP_LIBWEBP_NAME="Build libpwebp"
COMP_LIBWEBP_DESC="Install/update libwebp."
COMP_LIBWEBP_VER="Version ${LIBWEBP_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}."
COMP_LIBSRS_ALT_NAME="Build libsrs_alt"
COMP_LIBSRS_ALT_DESC="Install/update libsrs_alt."
COMP_LIBSRS_ALT_VER="Version ${LIBSRS_ALT_VER}."
COMP_LIBSODIUM_NAME="Build libsodium"
COMP_LIBSODIUM_DESC="Install/update libsodium."
COMP_LIBSODIUM_VER="Version ${LIBSODIUM_VER}."
COMP_LIBTOOL_NAME="Build libtool"
COMP_LIBTOOL_DESC="Install/update libtool."
COMP_LIBTOOL_VER="Version ${LIBTOOL_VER}."
COMP_LIBXML2_NAME="Build libxml2"
COMP_LIBXML2_DESC="Install/update libxml2."
COMP_LIBXML2_VER="Version ${LIBXML2_VER}."
COMP_LIBXSLT_NAME="Build libxslt"
COMP_LIBXSLT_DESC="Install/update libxslt."
COMP_LIBXSLT_VER="Version ${LIBXSLT_VER}."
COMP_LIBZIP_NAME="Build libzip"
COMP_LIBZIP_DESC="Install/update libzip."
COMP_LIBZIP_VER="Version ${LIBZIP_VER}."
COMP_LIBMAGIC_NAME="Build libmagic"
COMP_LIBMAGIC_DESC="Install/update libmagic needed for Rspamd."
COMP_LIBMAGIC_VER="Version ${LIBMAGIC_VER}."
COMP_M4_NAME="Build m4"
COMP_M4_DESC="Install/update m4."
COMP_M4_VER="Version ${M4_VER}."
COMP_MCRYPT_NAME="Build mcrypt"
COMP_MCRYPT_DESC="Install/update mcrypt."
COMP_MCRYPT_VER="Version ${MCRYPT_VER}."
COMP_MHASH_NAME="Build mhash"
COMP_MHASH_DESC="Install/update mhash."
COMP_MHASH_VER="Version ${MHASH_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_PIGZ_NAME="Build pigz"
COMP_PIGZ_DESC="Install/update pigz."
COMP_PIGZ_VER="Version ${PIGZ_VER}."
COMP_RAGEL_NAME="Build ragel"
COMP_RAGEL_DESC="Install/update ragel (needed for compilation of Rspamd)."
COMP_RAGEL_VER="Version ${RAGEL_VER}."
COMP_LUAJIT_NAME="Build luajit"
COMP_LUAJIT_DESC="Install/update luajit (needed for Rspamd)."
COMP_LUAJIT_VER="Version ${LUAJIT_VER}."
COMP_GLIB_NAME="Build glib"
COMP_GLIB_DESC="Install/update glib (needed for Rspamd)."
COMP_GLIB_VER="Version ${GLIB_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_PCRE_NAME="Build PCRE"
COMP_PCRE_DESC="Install/update PCRE."
COMP_PCRE_VER="Version ${PCRE_VER}."
COMP_PCRE2_NAME="Build PCRE2"
COMP_PCRE2_DESC="Install/update PCRE2."
COMP_PCRE2_VER="Version ${PCRE2_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_ZLIB_NAME="Build zlib"
COMP_ZLIB_DESC="Install/update zlib."
COMP_ZLIB_VER="Version ${ZLIB_VER}."
COMP_ZSTD_NAME="Build zstd"
COMP_ZSTD_DESC="Install/update zstandard lossless compression algorithm, targeting real-time compression scenarios at zlib-level and better compression."
COMP_ZSTD_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_NAME="Display options.conf settings"
COMP_OPTIONS_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_TODOVECOT_NAME="Convert mbox to Maildir"
COMP_TODOVECOT_DESC="Converts all emails from mbox format to Maildir. todovecot() function is called."
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 d : do the default action"
printf " | %-55s %-2s|\n" " $0 y : answer yes to all questions"
printf " | %-55s %-2s|\n" " $0 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}"
}
####################################################
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 '' >> ${HOSTCONF}
if [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
echo '' >> ${HOSTCONF}
echo "AddHandler \"proxy:unix:/usr/local/php${PHP1_SHORTRELEASE}/sockets/webapps.sock|fcgi://localhost\" .inc .php .php5 .php${PHP1_SHORTRELEASE} .phtml" >> ${HOSTCONF}
echo ' ' >> ${HOSTCONF}
fi
if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then
echo '' >> ${HOSTCONF}
echo "AddHandler application/x-httpd-php .php" >> ${HOSTCONF}
echo ' ' >> ${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 ' ' >> ${HOSTCONF}
echo ' suPHP_Engine On' >> ${HOSTCONF}
echo ' suPHP_UserGroup webapps webapps' >> ${HOSTCONF}
echo ' ' >> ${HOSTCONF}
echo ' ' >> ${HOSTCONF}
echo ' RUidGid webapps webapps' >> ${HOSTCONF}
echo ' ' >> ${HOSTCONF}
echo ' ' >> ${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 ' ' >> ${HOSTCONF}
if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then
echo ' ' >> ${HOSTCONF}
echo " php_admin_value session.save_path ${APP_TMP}" >> ${HOSTCONF}
echo " php_admin_value upload_tmp_dir ${APP_TMP}" >> ${HOSTCONF}
echo ' ' >> ${HOSTCONF}
echo ' ' >> ${HOSTCONF}
echo " php_admin_value session.save_path ${APP_TMP}" >> ${HOSTCONF}
echo " php_admin_value upload_tmp_dir ${APP_TMP}" >> ${HOSTCONF}
echo ' ' >> ${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 ' ' >> ${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 ' ' >> ${HOSTCONF}
echo ' Options +ExecCGI' >> ${HOSTCONF}
echo ' AddHandler fcgid-script .php' >> ${HOSTCONF}
echo ' ' >> ${HOSTCONF}
echo ' ' >> ${HOSTCONF}
fi
echo ' ' >> ${HOSTCONF}
# Do not show authentication logs for public
echo '' >> ${HOSTCONF}
echo ' Require all denied' >> ${HOSTCONF}
echo ' ' >> ${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
if [ "${ZEND_OPT}" = "yes" ]; then
if [ "${OS}" = "FreeBSD" ]; then
echo "Zend Guard Loader: ${boldon}not supported on FreeBSD${boldoff}"
else
echo "Zend Guard Loader: ${boldon}yes${boldoff}"
fi
else
echo "Zend Guard Loader: ${boldon}no${boldoff}"
fi
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
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 [ "${OS}" != "FreeBSD" ] && [ "${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
}
####################################################
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 [ "${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_LIBXML2_WRITE=${PLUGIN_PATH}/libxml2/configure.clamav
CUSTOMIZE_LIBXSLT_WRITE=${PLUGIN_PATH}/libxslt/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}" = "libxml2" ]; then
COMPONENT=${ARGUMENT}
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.libxml2
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${CUSTOMIZE_LIBXML2_WRITE} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ "${ARGUMENT}" = "libxslt" ]; then
COMPONENT=${ARGUMENT}
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.libxslt
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${CUSTOMIZE_LIBXSLT_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 '^ap2_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^suphp_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^fastcgi_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^fpm_php[0-9][0-9]$'` -eq 1 ] ; then
EXTENSION=`echo ${ARGUMENT} | cut -d_ -f2`
COMPONENT=`echo ${ARGUMENT} | cut -d_ -f1`
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.${EXTENSION}
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${PLUGIN_PATH}/${COMPONENT}/configure.${EXTENSION} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ `echo ${ARGUMENT} | grep -c '^litespeed_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^litespeed_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^litespeed_php[0-9][0-9]$'` -eq 1 ] || [ `echo ${ARGUMENT} | grep -c '^litespeed_php[0-9][0-9]$'` -eq 1 ] ; then
EXTENSION=`echo ${ARGUMENT} | cut -d_ -f2`
COMPONENT=`echo ${ARGUMENT} | cut -d_ -f1`
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.${EXTENSION}
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${PLUGIN_PATH}/${COMPONENT}/configure.${EXTENSION} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
if [ "${ARGUMENT}" = "fastcgi_php53" ] || [ "${ARGUMENT}" = "fastcgi_php54" ] || [ "${ARGUMENT}" = "fastcgi_php55" ] || [ "${ARGUMENT}" = "fastcgi_php56" ] || [ "${ARGUMENT}" = "fastcgi_php70" ]; then
EXTENSION=`echo ${ARGUMENT} | cut -d_ -f2`
COMPONENT=`echo ${ARGUMENT} | cut -d_ -f1`
CONF_PATH=${WORKDIR}/custom/${COMPONENT}
CONF_FILE=${CONF_PATH}/configure.${EXTENSION}
if [ ! -s ${CONF_FILE} ]; then
mkdir -p ${CONF_PATH}
touch ${CONF_FILE}
fi
cat ${PLUGIN_PATH}/${COMPONENT}/configure.${EXTENSION} > ${CONF_FILE}
chmod 700 ${CONF_FILE}
fi
}
####################################################
initConfigsJSON() {
NUM_OF_SECTIONS=0
AVAIL_CONFIGS=" "
PLUGIN_PATH=/usr/local/directadmin/plugins/custombuild/configure
MOD_PHP_CONFIGURE_ENDING="_CONFIGURE"
FPM_CONFIGURE_ENDING="_CONFIGURE_FPM"
FASTCGI_CONFIGURE_ENDING="_CONFIGURE_FCGI"
SUPHP_CONFIGURE_ENDING="_CONFIGURE_SUPHP"
LSPHP_CONFIGURE_ENDING="_CONFIGURE_LSPHP"
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 [ "${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}"
#LibXML2
AVAIL_CONFIGS="${AVAIL_CONFIGS}libxml2 "
CUSTOMIZE_LIBXML2_DESC="LibXML2 configuration file"
CUSTOMIZE_LIBXML2_READ="${WORKDIR}/${LIBXML2_CONFIGURE}"
#LibXSLT
AVAIL_CONFIGS="${AVAIL_CONFIGS}libxslt "
CUSTOMIZE_LIBXSLT_DESC="LibXSLT configuration file"
CUSTOMIZE_LIBXSLT_READ="${WORKDIR}/${LIBXSLT_CONFIGURE}"
if [ "${PHP1_MODE_OPT}" = "mod_php" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}ap2_php${PHP1_SHORTRELEASE} "
eval `echo "CUSTOMIZE_AP2_PHP${PHP1_SHORTRELEASE}_DESC=\"PHP ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default) configuration file\""`
READ_VAR="PHP${PHP1_SHORTRELEASE}${MOD_PHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_AP2_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_AP2_PHP${PHP1_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
elif [ "${PHP1_MODE_OPT}" = "lsphp" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}litespeed_php${PHP1_SHORTRELEASE} "
eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP1_SHORTRELEASE}_DESC=\"PHP ${PHP1_RELEASE_OPT} as ${PHP1_MODE_OPT} (default) configuration file\""`
READ_VAR="PHP${PHP1_SHORTRELEASE}${LSPHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_LITESPEED_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_LITESPEED_PHP${PHP1_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
elif [ "${PHP1_MODE_OPT}" = "fastcgi" ] || [ "${PHP1_MODE_OPT}" = "suphp" ] || [ "${PHP1_MODE_OPT}" = "php-fpm" ]; then
MODE_OPT="${PHP1_MODE_OPT}"
if [ "${MODE_OPT}" = "php-fpm" ]; then
MODE_OPT="fpm"
fi
MODE_UPPERCASE=`echo ${MODE_OPT} | tr "[a-z]" "[A-Z]"`
READ_VAR="${MODE_UPPERCASE}_CONFIGURE_ENDING"
ENDING_VAR=$(eval_var ${READ_VAR})
AVAIL_CONFIGS="${AVAIL_CONFIGS}${MODE_OPT}_php${PHP1_SHORTRELEASE} "
eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP1_SHORTRELEASE}_DESC=\"PHP ${PHP1_RELEASE_OPT} as ${MODE_OPT} (default) configuration file\""`
READ_VAR="PHP${PHP1_SHORTRELEASE}${ENDING_VAR}"
eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_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_${MODE_UPPERCASE}_PHP${PHP1_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
fi
if [ "${PHP2_RELEASE_OPT}" != "no" ]; then
if [ "${PHP2_MODE_OPT}" = "mod_php" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}ap2_php${PHP2_SHORTRELEASE} "
eval `echo "CUSTOMIZE_AP2_PHP${PHP2_SHORTRELEASE}_DESC=\"PHP ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP2_SHORTRELEASE}${MOD_PHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_AP2_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_AP2_PHP${PHP2_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
elif [ "${PHP2_MODE_OPT}" = "lsphp" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}litespeed_php${PHP2_SHORTRELEASE} "
eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP2_SHORTRELEASE}_DESC=\"PHP ${PHP2_RELEASE_OPT} as ${PHP2_MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP2_SHORTRELEASE}${LSPHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_LITESPEED_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_LITESPEED_PHP${PHP2_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
elif [ "${PHP2_MODE_OPT}" = "fastcgi" ] || [ "${PHP2_MODE_OPT}" = "suphp" ] || [ "${PHP2_MODE_OPT}" = "php-fpm" ]; then
MODE_OPT="${PHP2_MODE_OPT}"
if [ "${MODE_OPT}" = "php-fpm" ]; then
MODE_OPT="fpm"
fi
MODE_UPPERCASE=`echo ${MODE_OPT} | tr "[a-z]" "[A-Z]"`
READ_VAR="${MODE_UPPERCASE}_CONFIGURE_ENDING"
ENDING_VAR=$(eval_var ${READ_VAR})
AVAIL_CONFIGS="${AVAIL_CONFIGS}${MODE_OPT}_php${PHP2_SHORTRELEASE} "
eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP2_SHORTRELEASE}_DESC=\"PHP ${PHP2_RELEASE_OPT} as ${MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP2_SHORTRELEASE}${ENDING_VAR}"
eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_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_${MODE_UPPERCASE}_PHP${PHP2_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
fi
fi
if [ "${PHP3_RELEASE_OPT}" != "no" ]; then
if [ "${PHP3_MODE_OPT}" = "mod_php" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}ap2_php${PHP3_SHORTRELEASE} "
eval `echo "CUSTOMIZE_AP2_PHP${PHP3_SHORTRELEASE}_DESC=\"PHP ${PHP3_RELEASE_OPT} as ${PHP3_MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP3_SHORTRELEASE}${MOD_PHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_AP2_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_AP2_PHP${PHP3_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
elif [ "${PHP3_MODE_OPT}" = "lsphp" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}litespeed_php${PHP3_SHORTRELEASE} "
eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP3_SHORTRELEASE}_DESC=\"PHP ${PHP3_RELEASE_OPT} as ${PHP3_MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP3_SHORTRELEASE}${LSPHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_LITESPEED_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_LITESPEED_PHP${PHP3_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
elif [ "${PHP3_MODE_OPT}" = "fastcgi" ] || [ "${PHP3_MODE_OPT}" = "suphp" ] || [ "${PHP3_MODE_OPT}" = "php-fpm" ]; then
MODE_OPT="${PHP3_MODE_OPT}"
if [ "${MODE_OPT}" = "php-fpm" ]; then
MODE_OPT="fpm"
fi
MODE_UPPERCASE=`echo ${MODE_OPT} | tr "[a-z]" "[A-Z]"`
READ_VAR="${MODE_UPPERCASE}_CONFIGURE_ENDING"
ENDING_VAR=$(eval_var ${READ_VAR})
AVAIL_CONFIGS="${AVAIL_CONFIGS}${MODE_OPT}_php${PHP3_SHORTRELEASE} "
eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP3_SHORTRELEASE}_DESC=\"PHP ${PHP3_RELEASE_OPT} as ${MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP3_SHORTRELEASE}${ENDING_VAR}"
eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_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_${MODE_UPPERCASE}_PHP${PHP3_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
fi
fi
if [ "${PHP4_RELEASE_OPT}" != "no" ]; then
if [ "${PHP4_MODE_OPT}" = "mod_php" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}ap2_php${PHP4_SHORTRELEASE} "
eval `echo "CUSTOMIZE_AP2_PHP${PHP4_SHORTRELEASE}_DESC=\"PHP ${PHP4_RELEASE_OPT} as ${PHP4_MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP4_SHORTRELEASE}${MOD_PHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_AP2_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_AP2_PHP${PHP4_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
elif [ "${PHP4_MODE_OPT}" = "lsphp" ]; then
AVAIL_CONFIGS="${AVAIL_CONFIGS}litespeed_php${PHP4_SHORTRELEASE} "
eval `echo "CUSTOMIZE_LITESPEED_PHP${PHP4_SHORTRELEASE}_DESC=\"PHP ${PHP4_RELEASE_OPT} as ${PHP4_MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP4_SHORTRELEASE}${LSPHP_CONFIGURE_ENDING}"
eval `echo "CUSTOMIZE_LITESPEED_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_LITESPEED_PHP${PHP4_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
elif [ "${PHP4_MODE_OPT}" = "fastcgi" ] || [ "${PHP4_MODE_OPT}" = "suphp" ] || [ "${PHP4_MODE_OPT}" = "php-fpm" ]; then
MODE_OPT="${PHP4_MODE_OPT}"
if [ "${MODE_OPT}" = "php-fpm" ]; then
MODE_OPT="fpm"
fi
MODE_UPPERCASE=`echo ${MODE_OPT} | tr "[a-z]" "[A-Z]"`
READ_VAR="${MODE_UPPERCASE}_CONFIGURE_ENDING"
ENDING_VAR=$(eval_var ${READ_VAR})
AVAIL_CONFIGS="${AVAIL_CONFIGS}${MODE_OPT}_php${PHP4_SHORTRELEASE} "
eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_PHP${PHP4_SHORTRELEASE}_DESC=\"PHP ${PHP4_RELEASE_OPT} as ${MODE_OPT} (additional) configuration file\""`
READ_VAR="PHP${PHP4_SHORTRELEASE}${ENDING_VAR}"
eval `echo "CUSTOMIZE_${MODE_UPPERCASE}_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_${MODE_UPPERCASE}_PHP${PHP4_SHORTRELEASE}_WRITE=\"${PLUGIN_PATH}/${PLUGIN_WRITE}\""`
fi
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
}
####################################################
addNginxToAccess() {
# Check for nginx user in access group
if grep -m1 -q "^access" /etc/group; then
if ! grep -m1 "^access" /etc/group | grep -q nginx; then
usermod -G access nginx
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=700
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 [ "${OS}" = "FreeBSD" ]; then
/usr/sbin/pw groupadd ${APPUSER} 2> /dev/null
/usr/sbin/pw useradd -g ${APPUSER} -n ${APPUSER} -b ${WWWDIR} -s /sbin/nologin 2> /dev/null
elif [ -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
####################################################
checkLibz() {
LIBZ1=/usr/lib/libz.so
LIBZ2=/usr/lib64/libz.so
LIBZ3=/lib/x86_64-linux-gnu/libz.so.1
LIBZ4=/usr/lib/i386-linux-gnu/libz.so
LIBZ5=/lib/i386-linux-gnu/libz.so.1
if [ ! -e ${LIBZ1} ] && [ ! -e ${LIBZ2} ] && [ ! -e ${LIBZ3} ] && [ ! -e ${LIBZ4} ] && [ ! -e ${LIBZ5} ]; then
echo "Cannot find zlib, as installed by package manager (${LIBZ1} or ${LIBZ2} or ${LIBZ3} or ${LIBZ4} or ${LIBZ5})"
echo "Please install zlib via your package manager"
echo ""
if [ ${OS} = "FreeBSD" ]; then
echo "pkg install zlib"
elif [ -e ${DEBIAN_VERSION} ]; then
echo "apt-get install zlib1g zlib1g-dev"
else
echo "yum install zlib zlib-devel"
fi
do_exit 0
fi
return
}
####################################################
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
}
freebsd_add_newsyslog() {
NSL=/etc/newsyslog.conf
if grep -q ${1} $NSL; then
echo "${1} is already in ${NSL}"
return
fi
echo -e "$1\t$2\t600\t4\t*\t@T00\t$3\t$4" >> ${NSL}
}
freebsd_set_newsyslog() {
NSL_L=$1
NSL_V=$2
NSL=/etc/newsyslog.conf
if ! grep -q ${NSL_L} $NSL; then
echo -e "${NSL_L}\t${NSL_V}\t600\t4\t*\t@T00\t-" >> $NSL
fi
#replace whatever we may have with whatever we need, eg:
#/var/www/html/roundcube/logs/errors webapps:webapps 600 4 * @T00 -
#/var/www/html/roundcube/logs/errors apache:apache 600 4 * @T00 -
#/var/www/html/roundcube/logs/errors 600 4 * @T00 -
perl -pi -e "s|^${NSL_L}\s+webapps:webapps\s+|${NSL_L}\t${NSL_V}\t|" ${NSL}
perl -pi -e "s|^${NSL_L}\s+apache:apache\s+|${NSL_L}\t${NSL_V}\t|" ${NSL}
perl -pi -e "s|^${NSL_L}\s+600\s+|${NSL_L}\t${NSL_V}\t600\t|" ${NSL}
}
ensure_webapps_logrotate() {
if [ ${OS} = "FreeBSD" ]; then
#by default it sets each log to webapps:webapps.
#swap it to apache:apache if needed
#else swap it to webapps:webapps from apache:apache.. or nothing
NSL_VALUE=webapps:webapps
if [ "${PHP1_MODE_OPT}" = "mod_php" ] && [ "${MOD_RUID2_OPT}" = "no" ]; then
NSL_VALUE=apache:apache
fi
freebsd_set_newsyslog /var/www/html/roundcube/logs/errors ${NSL_VALUE}
freebsd_set_newsyslog /var/www/html/squirrelmail/data/squirrelmail_access_log ${NSL_VALUE}
freebsd_set_newsyslog /var/www/html/phpMyAdmin/log/auth.log ${NSL_VALUE}
return
fi
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_41_MYSQL_55_DROP=4.0.10.6-all-languages
PMA_45_PHP_55_DROP=4.4.15-all-languages
if [ "`version_cmp ${PHPMYADMIN_VER} 4.1.0 'pma ver check'`" -ge 0 ]; then
#4.1.0 need php 5.3.. which we have.. and mysql 5.5+
if [ ! -s "$MYSQL_BIN" ]; then
echo "${boldon}phpMyAdmin requires mysqld. Cannot find $MYSQL_BIN${boldoff}"
return
fi
MYSQLV="`mysql_version`"
if [ "`version_cmp ${MYSQLV} 5.5.0 'pma mysql check'`" -lt 0 ]; then
echo "${boldon}phpMyAdmin ${PHPMYADMIN_VER} requires ${MYSQLNAME} 5.5+, but ${MYSQLV} is installed${boldoff}"
echo "${boldon}Dropping phpMyAdmin version down to ${PMA_41_MYSQL_55_DROP}${boldoff}"
PHPMYADMIN_VER=${PMA_41_MYSQL_55_DROP}
#prevent md5 lookup
PHPMYADMIN_VER_OPT=old
PHPMYADMIN_REMOTE_PATCH=pma_auth_logging.patch
fi
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.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}
wget ${WGET_CONNECT_OPTIONS} -O ${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
if [ ${OS} = "FreeBSD" ]; then
PMA_CONF_MD5=`/sbin/md5 -q ${PMA_MAIN_CONFIG}`
else
PMA_CONF_MD5=`/usr/bin/md5sum ${PMA_MAIN_CONFIG} | cut -d\ -f1`
fi
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}/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}
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 '' > ${PMAHTA}
echo ' Require all denied' >> ${PMAHTA}
echo ' ' >> ${PMAHTA}
echo '' >> ${PMAHTA}
echo ' Deny from all' >> ${PMAHTA}
echo ' ' >> ${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
wget ${WGET_CONNECT_OPTIONS} -O ${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
wget ${WGET_CONNECT_OPTIONS} -O ${LOCALEFILE} ${WEBPATH_SERVICES}/all/squirrelmail/locales/all_locales-${SQUIRRELMAIL_LOCALE_VER}.tar.gz
fi
if [ ! -s ${LOGGERFILE} ]; then
wget ${WGET_CONNECT_OPTIONS} -O ${LOGGERFILE} ${WEBPATH_SERVICES}/all/squirrelmail/squirrel_logger/squirrel_logger-${SQUIRRELMAIL_LOGGER_VER}.tar.gz
fi
M=`checkMD5 $TARFILE ${SQUIRRELMAIL_VER_NAME}`
if [ "$M" != "0" ]; then
echo ""
echo "${boldon}*** MD5 Checksum for $TARFILE Failed. Redownloading...***${boldoff}"
echo ""
wget ${WGET_CONNECT_OPTIONS} -O ${TARFILE} ${WEBPATH_SERVICES}/all/squirrelmail-${SQUIRRELMAIL_VER}.tar.gz
M=`checkMD5 $TARFILE ${SQUIRRELMAIL_VER_NAME}`
if [ "$M" != "0" ]; then
echo ""
echo ""
echo "${boldon}*** MD5 Checksum for $TARFILE failed *again*.***${boldoff}"
echo "The md5 checksum value may be incorrect, or a wrong file is being downloaded."
echo "Install continuing with this possibly corrupted file. (it may also be fine)"
echo ""
echo ""
fi
fi
M=`checkMD5 ${LOCALEFILE} squirrelmail_locale`
if [ "$M" != "0" ]; then
echo "${boldon}*** MD5 Checksum for $LOCALEFILE Failed. Redownloading...***${boldoff}"
wget ${WGET_CONNECT_OPTIONS} -O ${LOCALEFILE} ${WEBPATH_SERVICES}/all/squirrelmail/locales/all_locales-${SQUIRRELMAIL_LOCALE_VER}.tar.gz
fi
M=`checkMD5 ${LOGGERFILE} squirrel_logger`
if [ "$M" != "0" ]; then
echo "${boldon}*** MD5 Checksum for ${LOGGERFILE} Failed. Redownloading...***${boldoff}"
wget ${WGET_CONNECT_OPTIONS} -O ${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.0" ] || [ "${MYSQLV}" = "5.1" ] || [ "${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" ]; 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/custombuild
wget -O 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
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
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 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 [ ${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=/usr/local/directadmin/conf/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`
if [ "$DASSL" -eq 1 ]; then
/usr/bin/perl -pi -e "s|\['password_directadmin_host'] = 'tcp://localhost'|\['password_directadmin_host'] = 'ssl://localhost'|" 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
wget ${WGET_CONNECT_OPTIONS} -O mime.types https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types 2> /dev/null
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
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
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}
wget ${WGET_CONNECT_OPTIONS} -O ${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 '^5'; 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
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=/usr/local/directadmin/conf/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=/usr/local/directadmin/conf/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"
}
####################################################
doLibspf2() {
quitIfLocked doLibspf2
cd ${CWD}
getFile libspf2-${LIBSPF2_VER}.tar.gz libspf2
tar xzf libspf2-${LIBSPF2_VER}.tar.gz --no-same-owner
cd libspf2-${LIBSPF2_VER}
perl -pi -e 's|www.openspf.org|www.open-spf.org|g' ./src/include/spf.h
./configure --prefix=/usr/local
while echo "Trying to make libspf2"; 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
/sbin/ldconfig
removeLockfile
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "libspf2 installation complete."
writeLog "libspf2 ${LIBSPF2_VER} installed"
}
####################################################
doLibsrsAlt() {
quitIfLocked doLibsrsAlt
cd ${CWD}
getFile libsrs_alt-${LIBSRS_ALT_VER}.tar.bz2 libsrs_alt
tar xjf libsrs_alt-${LIBSRS_ALT_VER}.tar.bz2 --no-same-owner
cd libsrs_alt-${LIBSRS_ALT_VER}
./configure --prefix=/usr/local
while echo "Trying to make libsrs_alt"; 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
/sbin/ldconfig
removeLockfile
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
echo "libsrs_alt installation complete."
writeLog "libsrs_alt ${LIBSRS_ALT_VER} installed"
}
####################################################
ensure_keep_environment()
{
EXIMV="`exim_version`"
#this might be the current exim.conf, or the exim.conf being installed.
#set by whichever is calling the function.
FOR_EXIM_CONF_VER=$1
if [ "${FOR_EXIM_CONF_VER}" != "2.1" ] && [ "${FOR_EXIM_CONF_VER}" != "4.2" ]; then
#for newer exim.conf files with exim.variables.conf:
#remove variables from the default that don't work with older versions of exim.
if [ "`version_cmp ${EXIMV} 4.86.2 'exim ver for keep_environment'`" -lt 0 ]; then
echo "Exim ${EXIMV} is older than 4.86.2. Removing variable keep_environment.";
perl -pi -e 's/^keep_environment=.*$\n//' /etc/exim.variables.conf.default
perl -pi -e 's/^keep_environment=.*$\n//' /etc/exim.variables.conf
fi
else
#older exim.conf files without extra files.
#remove variables from the exim.conf that don't work with older versions of exim.
if [ "`version_cmp ${EXIMV} 4.86.2 'exim ver for keep_environment'`" -lt 0 ]; then
echo "Exim ${EXIMV} is older than 4.86.2. Removing variable keep_environment from /etc/exim.conf.";
perl -pi -e 's/^keep_environment=/#keep_environment=/' /etc/exim.conf
else
#else enable the feature, if available.
echo "Exim ${EXIMV} is at least 4.86.2.";
COUNT_KEEP_ENV=`grep -c 'keep_environment' /etc/exim.conf`
if [ "${COUNT_KEEP_ENV}" -gt 0 ]; then
echo "Uncommenting variable keep_environment in /etc/exim.conf.";
perl -pi -e 's/^#keep_environment=/keep_environment=/' /etc/exim.conf
else
echo "Adding variable keep_environment to /etc/exim.conf.";
perl -pi -e 's/^perl_startup/keep_environment=PWD\nperl_startup/' /etc/exim.conf
fi
fi
fi
}
ensurepopb4smtp(){
#pop before smtp
if [ "${OS}" = "FreeBSD" ]; then
if [ ! -s /usr/local/etc/rc.d/da-popb4smtp ]; then
cp -f /usr/local/directadmin/data/templates/da-popb4smtp /usr/local/etc/rc.d/da-popb4smtp
chmod 755 /usr/local/etc/rc.d/da-popb4smtp
/usr/local/etc/rc.d/da-popb4smtp start
fi
else
if [ "${SYSTEMD}" = "yes" ]; then
if [ ! -s /etc/systemd/system/da-popb4smtp.service ]; then
cp -f /usr/local/directadmin/scripts/da-popb4smtp.service /etc/systemd/system/da-popb4smtp.service
systemctl daemon-reload
systemctl enable da-popb4smtp.service
systemctl start da-popb4smtp.service
fi
elif [ ! -s /etc/init.d/da-popb4smtp ]; then
cp -f /usr/local/directadmin/data/templates/da-popb4smtp /etc/init.d/da-popb4smtp
chmod 755 /etc/init.d/da-popb4smtp
if [ -e /etc/debian_version ]; then
update-rc.d da-popb4smtp defaults
/etc/init.d/da-popb4smtp start
else
/sbin/chkconfig da-popb4smtp reset
/sbin/service da-popb4smtp start
fi
fi
fi
}
doLua(){
getFile lua/lua-${LUA_VER}.tar.gz lua lua-${LUA_VER}.tar.gz
getFile patches/liblua_so.patch liblua_so.patch
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
elif [ ${OS} != "FreeBSD" ]; then
yum -y install readline-devel
else
pkg -y install readline
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
if [ "${OS}" = "FreeBSD" ]; then
make freebsd install
else
make linux install
fi
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
if [ "${OS}" = "FreeBSD" ]; then
gmake CONFIG=MAXIMAL all
else
make CONFIG=MAXIMAL all
fi
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
if [ "${OS}" = "FreeBSD" ]; then
gmake -j${CPU_CORES}
else
make -j${CPU_CORES}
fi
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"
}
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 [ "`version_cmp ${EXIM_VER} 4.94 'exim ver for 4.94 and up'`" -ge 0 ] && [ "${EXIMCONF_OPT}" != "yes" ] && [ -s /etc/exim.conf ]; then
if ! grep -m1 -q local_part_data /etc/exim.conf; then
echo "You cannot update Exim to a newer version that 4.94, because you do not have configuration updates set in options.conf file and exim.conf seems to be old (no local_part_data or domain_data directives)."
return
fi
elif [ "`version_cmp ${EXIM_VER} 4.94 'exim ver for 4.94 and up'`" -ge 0 ] && [ "${EXIMCONF_OPT}" = "yes" ] && [ "`version_cmp ${EXIMCONF_RELEASE_OPT} 4.5 'exim conf for 4.4 and lower'`" -lt 0 ]; then
echo "You cannot update Exim to a newer version that 4.94, because there is too old eximconf_release set in the options.conf file (4.5 is required)."
return
elif [ "${OS}" != "FreeBSD" ] && lsattr -la /etc/exim.conf 2>/dev/null | grep -m1 -q "Immutable"; then
if ! grep -m1 -q local_part_data /etc/exim.conf; then
echo "You cannot update Exim to a newer version that 4.94, because you have chattr immutable flag set for /etc/exim.conf."
return
fi
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"
elif [ ${OS} != "FreeBSD" ]; then
echo "yum install db4-devel perl-ExtUtils-Embed"
fi
do_exit 0
fi
getFile exim-${EXIM_VER}.tar.gz exim
getFile exim_boot exim_boot
getFile exim_freebsd exim_boot_freebsd
getFile exim_debian exim_boot_debian
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 [ "${OS}" = "FreeBSD" ]; then
if ! grep -m1 -q '^sendmail_enable="NONE"$' /etc/rc.conf; then
/usr/bin/perl -pi -e 's/sendmail_enable=\"YES\"/sendmail_enable=\"NONE\"/' /etc/rc.conf
/usr/bin/perl -pi -e 's/sendmail_enable=\"NO\"/sendmail_enable=\"NONE\"/' /etc/rc.conf
fi
elif [ -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 ' >> 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 [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then
if [ "${LIBSPF2_VER}" != "0" ] && [ ! -e /usr/local/include/spf2/spf.h ]; then
doLibspf2
fi
fi
if [ "${EXIM_SRS_OPT}" = "yes" ]; then
if [ "${LIBSRS_ALT_VER}" != "0" ] && [ ! -e /usr/local/include/srs_alt.h ]; then
doLibsrsAlt
fi
fi
quitIfLocked doExim
EXIM_SYS_FILE_PATCH=exim-sys-file-freebsd.patch
if [ ${OS} = "FreeBSD" ]; then
addUserGroup mail mail 12 12
getFile patches/${EXIM_SYS_FILE_PATCH} ${EXIM_SYS_FILE_PATCH}
fi
EXIM_C_2274=exim.c.bug-2274.patch
if [ "${EXIM_VER}" = "4.91" ]; then
getFile patches/${EXIM_C_2274} ${EXIM_C_2274}
fi
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}
# 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
#wget ${WGET_CONNECT_OPTIONS} -O Local/Makefile ${WEBPATH}/Makefile
cd ${CWD}
getFile Makefile '' exim-${EXIM_VER}/Local/Makefile
cd exim-${EXIM_VER}
if [ "`version_cmp ${EXIM_VER} 4.93 'exim ver for 4.93 and up'`" -ge 0 ]; then
echo "Making Makefile changes for 4.93+"
perl -pi -e 's/^CFLAGS=(.*)$/CFLAGS=$1 -std=gnu99/' Local/Makefile
echo "USE_OPENSSL=yes" >> Local/Makefile
fi
fi
# Solve on CentOS8: /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" ]; 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/local/include/spf2/spf.h ]; then
if [ "`version_cmp ${EXIM_VER} 4.91`" -ge 0 ]; then
echo "SUPPORT_SPF=yes" >> Local/Makefile
else
echo "EXPERIMENTAL_SPF=yes" >> Local/Makefile
fi
echo "CFLAGS += -DSPF -I/usr/local/include" >> Local/Makefile
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 [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_DEBIAN_VER}" = "7" ]; then
echo "LDFLAGS += -lrt" >> Local/Makefile
fi
if [ -e /usr/local/include/srs_alt.h ]; then
echo "EXPERIMENTAL_SRS=yes " >> Local/Makefile
echo "LDFLAGS += -lsrs_alt" >> Local/Makefile
fi
if [ ${OS} = "FreeBSD" ]; then
echo "Patching exim for DTYPE_NONE error with sys/file.h..."
patch -p0 < ../patches/${EXIM_SYS_FILE_PATCH}
fi
if [ "${EXIM_VER}" = "4.91" ]; then
echo "Patching for exim.c bug 2274:"
echo "https://bugs.exim.org/show_bug.cgi?id=2274"
patch -p0 < ../patches/${EXIM_C_2274}
fi
while echo "Trying to make exim..."; do
#reported multiple cores issue, happened in 2010, trying again: https://www.directadmin.com/forum/showthread.php?p=181950&posted=1#post181950
if [ "${OS}" = "FreeBSD" ]; then
C_INCLUDE_PATH=/usr/kerberos/include make
else
C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}
fi
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
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.conf $WEBPATH/exim.conf
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.pl $WEBPATH/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
wget ${WGET_CONNECT_OPTIONS} -O /etc/system_filter.exim ${WEBPATH}/system_filter.exim
fi
fi
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
ECV=`exim_conf_version`
EC_MAJ_V=`echo $ECV | cut -d. -f1,2`
ensure_keep_environment ${EC_MAJ_V}
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/exim ]; then
echo "Removing ${INITDDIR}/exim..."
rm -f ${INITDDIR}/exim
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
else
if [ ! -e ${INITDDIR}/exim ]; then
if [ "${OS}" = "FreeBSD" ]; then
cp ${CWD}/exim_freebsd ${INITDDIR}/exim
chmod 755 ${INITDDIR}/exim
elif [ -e /etc/debian_version ]; then
cp ${CWD}/exim_debian ${INITDDIR}/exim
chmod 755 ${INITDDIR}/exim
update-rc.d exim defaults
else
cp ${CWD}/exim_boot ${INITDDIR}/exim
chmod 755 ${INITDDIR}/exim
/sbin/chkconfig exim on
fi
fi
fi
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
if [ ${OS} = "FreeBSD" ]; then
freebsd_add_newsyslog /var/log/exim/paniclog mail:mail -
freebsd_add_newsyslog /var/log/exim/exim_paniclog mail:mail -
freebsd_add_newsyslog /var/log/exim/rejectlog mail:mail -
freebsd_add_newsyslog /var/log/exim/exim_rejectlog mail:mail -
freebsd_add_newsyslog /var/log/exim/processlog mail:mail -
freebsd_add_newsyslog /var/log/exim/exim_processlog mail:mail -
freebsd_add_newsyslog /var/log/exim/mainlog mail:mail - /var/run/exim.pid
freebsd_add_newsyslog /var/log/exim/exim_mainlog mail:mail - /var/run/exim.pid
fi
echo "Exim ${EXIM_VER} Installed."
writeLog "Exim ${EXIM_VER} installed"
if [ "${SPAMD_OPT}" = "no" ]; then
if [ "${SYSTEMD}" = "yes" ] && [ -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 [ "${SYSTEMD}" = "yes" ] && [ -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
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 /usr/local/bin/mail ] && [ /usr/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 [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ] || [ "${EXIMCONF_RELEASE_OPT}" = "4.2" ]; then
echo "${boldon}WARNING:${boldoff} Your exim.conf version might be incompatible with BlockCracking. Please make sure that your exim.conf release is 4.3 or higher."
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
#the !verify = recipient "hold" option is only available after exim 4.90.
if [ "`version_cmp ${BLOCKCRACKING_VER} 1.10 'BC verify hold check'`" -ge 0 ]; then
EXIMV=`exim_version`
if [ "`version_cmp ${EXIMV} 4.90 'BC verify hold check'`" -le 0 ]; then
echo "Exim version ${EXIMV} too old for the 'hold' callout option. Recommend exim be updated, but removing hold for now"
perl -pi -e 's/,hold$//' /etc/exim.blockcracking/variables.conf
fi
fi
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 [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ] || [ "${EXIMCONF_RELEASE_OPT}" = "4.2" ]; then
echo "${boldon}WARNING:${boldoff} Your exim.conf version might be incompatible with Easy Spam Fighter. Please make sure that your exim.conf release is 4.3 or higher."
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"
}
####################################################
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`
if [ "`version_cmp ${EXIMV} 4.94 'Exim <4.94 config incompatibility check'`" -lt 0 ] && [ "`version_cmp ${EXIM_CONF_VER} 4.5.24 'Exim conf >4.5.23 incompatibility check'`" -ge 0 ]; then
if [ "${EXIMCONF_RELEASE_OPT}" = "4.5" ]; then
EXIM_CONF_VER=4.5.23
fi
echo "Downgrading exim configuration version to ${EXIM_CONF_VER} as the newest one requires exim 4.94 or newer."
elif [ "`version_cmp ${EXIMV} 4.94 'Exim <4.94 config incompatibility check'`" -ge 0 ] && [ "`version_cmp ${EXIM_CONF_VER} 4.5.24 'Exim conf >4.5.23 incompatibility check'`" -lt 0 ]; then
if [ "${EXIMCONF_RELEASE_OPT}" != "4.5" ]; then
do_exit 1 "You cannot update Exim configuration files, because eximconf_release=4.5 is required for exim 4.94+."
fi
EXIM_CONF_VER=4.5.24
echo "Selecting exim.conf 4.5.24 automatically, as older versions are not supported with exim 4.94 and newer."
fi
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.conf.cb20 ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/SpamBlocker/${EXIM_CONF_VER}/exim.conf-SpamBlockerTechnology-v${EXIM_CONF_VER}.txt
#Don't overwrite exim.conf if wget failed (empty exim.conf file)
if [ -s /etc/exim.conf.cb20 ]; then
mv -f /etc/exim.conf.cb20 /etc/exim.conf
else
rm -f /etc/exim.conf.cb20
echo "Download of /etc/exim.conf failed"
fi
#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
wget ${WGET_CONNECT_OPTIONS} -O /etc/system_filter.exim ${WEBPATH}/system_filter.exim
fi
#Download additional files for exim.conf
if [ "${EXIMCONF_RELEASE_OPT}" != "2.1" ] && [ "${EXIMCONF_RELEASE_OPT}" != "4.2" ]; then
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.strings.conf.cb20 ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/SpamBlocker/${EXIM_CONF_VER}/exim.strings.conf
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.variables.conf.cb20 ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/SpamBlocker/${EXIM_CONF_VER}/exim.variables.conf.default
EXIM_CONF_MERGED=/etc/exim.variables.conf.merged
EXIM_CONF_DEFAULT=/etc/exim.variables.conf.default
EXIM_CONF_CUSTOM=/etc/exim.variables.conf.custom
if [ -s /etc/exim.strings.conf.cb20 ]; then
mv -f /etc/exim.strings.conf.cb20 /etc/exim.strings.conf
else
rm -f /etc/exim.strings.conf.cb20
echo "Download of /etc/exim.strings.conf failed"
fi
if [ -s /etc/exim.variables.conf.cb20 ]; then
mv -f /etc/exim.variables.conf.cb20 ${EXIM_CONF_DEFAULT}
#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
else
rm -f /etc/exim.variables.conf.cb20
echo "Download of ${EXIM_CONF_DEFAULT} failed"
fi
if [ -s ${EXIM_CONF_DEFAULT} ]; then
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 0`
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
EXIM_SRS_CONF=/etc/exim.srs.conf
EXIM_SRS_FORWARD_CONF=/etc/exim.srs.forward.conf
if [ "${EXIM_SRS_OPT}" = "yes" ]; then
if [ ! -s ${EXIM_SRS_CONF} ]; then
echo -n "hide srs_config = " > ${EXIM_SRS_CONF}
/usr/bin/openssl rand -base64 48 >> ${EXIM_SRS_CONF}
fi
if [ ! -e ${EXIM_SRS_FORWARD_CONF} ]; then
echo "srs = forward" > ${EXIM_SRS_FORWARD_CONF}
fi
fi
else
#older exim.conf file changes:
if [ -s /etc/exim.conf ]; then
if [ "${IPV6}" = "0" ]; then
perl -pi -e 's|disable_ipv6=false|disable_ipv6=true|' /etc/exim.conf
else
perl -pi -e 's|disable_ipv6=true|disable_ipv6=false|' /etc/exim.conf
fi
fi
fi
ensure_keep_environment ${EXIMCONF_RELEASE_OPT}
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.pl.cb20 ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.pl.${EXIM_PL_VER}
if [ -s /etc/exim.pl.cb20 ]; then
mv -f /etc/exim.pl.cb20 /etc/exim.pl
else
rm -f /etc/exim.pl.cb20
echo "Download of /etc/exim.pl failed"
fi
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 [ "${DOVECOT_OPT}" = "yes" ] && [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ]; then
cd ${WORKDIR}
if [ -e exim.conf.dovecot.patch ]; then
patch -d/ -p0 < exim.conf.dovecot.patch
fi
fi
if [ "${PIGEONHOLE_OPT}" = "yes" ]; then
cd ${WORKDIR}
if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ]; then
getFile patches/exim.conf.pigeonhole.patch eximpigeonholepatch
cd /etc
patch -p0 < ${WORKDIR}/patches/exim.conf.pigeonhole.patch
cd ${WORKDIR}
else
perl -pi -e 's#transport = virtual_localdelivery#transport = dovecot_lmtp_udp#' /etc/exim.conf
fi
else
#we have LMTP enabled by default for 4.3+
if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ] || [ "${EXIMCONF_RELEASE_OPT}" = "4.2" ]; then
perl -pi -e 's#transport = dovecot_lmtp_udp#transport = virtual_localdelivery#' /etc/exim.conf
fi
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
wget ${WGET_CONNECT_OPTIONS} -O /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`
if [ "`version_cmp ${EXIMV} 4.94 'exim ver for <4.94'`" -lt 0 ]; then
LATEST_DKIM_VER=1.3
else
LATEST_DKIM_VER=`getVer exim_dkim_conf`
fi
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
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.dkim.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.dkim.conf
fi
fi
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
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.clamav.load.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.load.conf
fi
if [ ! -s /etc/exim.clamav.conf ]; then
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.clamav.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.conf
fi
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" ] && [ "${SYSTEMD}" = "yes" ]; 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
if [ "${OS}" = "FreeBSD" ] && [ "${MARIADB_OPT}" = "10.3" ]; then
#https://jira.mariadb.org/browse/MDEV-20248
MARIADB_JEMALLOC_HELPER_PATCH=mariadb-10.3-jemalloc_helper.h-patch
getFile patches/${MARIADB_JEMALLOC_HELPER_PATCH} ${MARIADB_JEMALLOC_HELPER_PATCH}
fi
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}
if [ -s plugin/auth_pam/testing/pam_mariadb_mtr.c ] && [ "${OS}" = "FreeBSD" ]; then
perl -pi -e 's|\(uint\)|(unsigned int)|g' plugin/auth_pam/testing/pam_mariadb_mtr.c
fi
if [ -s plugin/auth_pam/mapper/pam_user_map.c ] && [ "${OS}" = "FreeBSD" ]; then
perl -pi -e 's|security/pam_ext.h|security/pam_appl.h|g' plugin/auth_pam/mapper/pam_user_map.c
fi
CFLAGS=-DHAVE_BROKEN_REALPATH
if [ "${OS}" != "FreeBSD" ]; then
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 /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
fi
if [ -e /etc/debian_version ] || [ "${OS}" = "FreeBSD" ]; then
if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ]; then
echo "Cannot find cmake, please install it."
if [ -e /etc/debian_version ]; then
echo "apt-get install cmake"
elif [ "${OS}" = "FreeBSD" ]; then
echo "${PKG_INSTALL} cmake"
fi
echo "If your package manager is not working, see: https://help.directadmin.com/item.php?id=494"
return
fi
if [ ! -x /usr/local/bin/pkg-config ]; then
pkg install -y pkgconf
fi
if [ ! -s /usr/local/include/libunwind.h ]; then
pkg install -y libunwind
fi
fi
if [ ! -z "${MARIADB_JEMALLOC_HELPER_PATCH}" ]; then
if [ -s ../patches/${MARIADB_JEMALLOC_HELPER_PATCH} ]; then
patch -p0 < ../patches/${MARIADB_JEMALLOC_HELPER_PATCH}
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
if [ "${OS}" = "FreeBSD" ] && [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
#Otherwise compilation fails with unknown ld option -plugin
CMAKE_APPEND=" -DPLUGIN_TOKUDB=NO -DPLUGIN_ROCKSDB=NO -DWITHOUT_MROONGA=YES -DFORCE_INSOURCE_BUILD=1"
fi
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_ZLIB=system -DWITH_EXTRA_CHARSETS=all${CMAKE_APPEND}
fi
echo "Done. Making ${MYSQLSRC}..."
while echo "Trying to make ${MYSQLSRC}..."; 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 "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
PIGZ_DA_OPT=`getDA_Opt pigz`
PIGZ_BIN=`getDA_Opt pigz_bin /usr/local/bin/pigz`
if [ ! -z "${PIGZ_DA_OPT}" ]; then
if [ ${PIGZ_DA_OPT} -gt 0 ] && [ "${PIGZ_BIN}" != "" ] && [ -e "${PIGZ_BIN}" ]; then
GZIP_BIN="${PIGZ_BIN} -p ${PIGZ_DA_OPT}"
else
GZIP_BIN="gzip"
fi
else
GZIP_BIN="gzip"
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_BIN} > ${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
fi
}
ensure_libnuma() {
if [ ! -e /usr/lib/libnuma.so.1 ] && [ ! -e /usr/lib/i386-linux-gnu/libnuma.so.1 ] && [ ! -e /usr/lib64/libnuma.so.1 ] && [ ! -e /lib64/libnuma.so.1 ] && [ ! -e /lib/libnuma.so.1 ] && [ ! -e /lib/i386-linux-gnu/libnuma.so.1 ] && [ ! -e /usr/lib/x86_64-linux-gnu/libnuma.so.1 ]; then
if [ "${OS}" = "FreeBSD" ]; then
echo "There is no libnuma for FreeBSD kernel."
elif [ -e /etc/debian_version ]; then
echo "Cannot find libnuma.so.1, installing using apt-get..."
apt-get -y install libnuma-dev libnuma1
else
echo "Cannot find libnuma.so.1, installing using yum..."
yum -y install numactl-devel
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}
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
perl -pi -e "s|^mysql\=.*$|mysql=${MYSQLPASSWORD}|g" /usr/local/directadmin/scripts/setup.txt
fi
fi
if [ -z "${SQL_PATH_IS_SETUP}" ]; then
if ${SQL_PATH_IS_EMPTY}; then
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 [ "${OS}" = "FreeBSD" ] || [ -s /etc/debian_version ]; 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
/usr/sbin/mysqld --initialize-insecure --user=mysql --basedir=${MYSQL_BASEDIR_PATH} --datadir=${MYSQL_DATA}
else
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=${MYSQL_BASEDIR_PATH} --datadir=${MYSQL_DATA}
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
else
ROOT_PASS_SET=false
fi
fi
control_service mysqld start
sleep 5
MYSQL_ROOT_PASS=""
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" ] && [ "${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
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.0" ] || [ "${MYSQLV}" = "5.1" ] || [ "${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" ]; 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" ] && [ "${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
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_MILESTONE=`getDA_Opt mysql_milestone_16 0`
MYSQL_USE_NEW_USER_METHODS=`getDA_Opt mysql_use_new_user_methods 0`
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
if [ "${MYSQL_OPT}" = "5.5" ] || [ "${MYSQL_OPT}" = "5.6" ]; then
if [ "${MYSQL_MILESTONE}" = "1" ]; then
echo "Setting mysql_milestone_16=0 in directadmin.conf."
setVal mysql_milestone_16 0 ${DACONF_TEMPLATE_FILE}
setVal mysql_milestone_16 0 ${DACONF_FILE}
doRestartDA
fi
elif [ "${MYSQL_MILESTONE}" = "0" ]; then
echo "Setting mysql_milestone_16=1 in directadmin.conf."
setVal mysql_milestone_16 1 ${DACONF_TEMPLATE_FILE}
setVal mysql_milestone_16 1 ${DACONF_FILE}
doRestartDA
fi
if [ "${MYSQL_OPT}" = "8.0" ] && [ "${MYSQL_USE_NEW_USER_METHODS}" = "0" ]; then
echo "Setting mysql_use_new_user_methods=1 in directadmin.conf."
setVal mysql_use_new_user_methods 1 ${DACONF_TEMPLATE_FILE}
setVal mysql_use_new_user_methods 1 ${DACONF_FILE}
doRestartDA
fi
elif [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
if [ "${MYSQL_MILESTONE}" = "1" ]; then
echo "Setting mysql_milestone_16=0 in directadmin.conf."
setVal mysql_milestone_16 0 ${DACONF_TEMPLATE_FILE}
setVal mysql_milestone_16 0 ${DACONF_FILE}
doRestartDA
fi
if [ "${MARIADB_OPT}" != "5.5" ] && [ "${MARIADB_OPT}" != "10.0" ] && [ "${MARIADB_OPT}" != "10.1" ] && [ "${MYSQL_USE_NEW_USER_METHODS}" = "0" ]; then
echo "Setting mysql_use_new_user_methods=1 in directadmin.conf."
setVal mysql_use_new_user_methods 1 ${DACONF_TEMPLATE_FILE}
setVal mysql_use_new_user_methods 1 ${DACONF_FILE}
doRestartDA
fi
fi
if [ ${OS} = "FreeBSD" ]; then
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
MYSQLURL=${WEBPATH_SERVICES}/all/mariadb/${MARIADB_OPT}/${MARIADB_VER}
MYSQLPACK=mariadb-${MARIADB_VER}
#attempt the download? There are no FreeBSD binaries for MariaDB. Maybe it's already in the dir.
BINPACK=`ls $MYSQLPACK-*i386.tar.gz $MYSQLPACK-*i686.tar.gz $MYSQLPACK-*i486.tar.gz $MYSQLPACK-*x86_64.tar.gz 2>/dev/null | head -n 1`
elif [ "${MYSQL_INST_OPT}" = "mysql" ]; then
MYSQLPACK=mysql-${MYSQL_VER}
if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then
#mysql-5.7.27-freebsd12-x86_64.tar.gz
MYSQLURL=${WEBPATH_SERVICES}/all/mysql/${MYSQL_OPT}/${MYSQL_VER}/64-bit
BINPACK=${MYSQLPACK}-freebsd${OS_FREEBSD_VER}-x86_64.tar.gz
if ls ${MYSQLPACK}-freebsd${OS_FREEBSD_VER}*-x86_64.tar.gz >/dev/null 2>&1; then
BINPACK=`ls ${MYSQLPACK}-freebsd${OS_FREEBSD_VER}*-x86_64.tar.gz | head -n1 >/dev/null 2>&1`
if [ ! -s "${BINPACK}" ]; then
rm -f "${BINPACK}"
BINPACK=`ls ${MYSQLPACK}-freebsd${OS_FREEBSD_VER}*-x86_64.tar.gz | head -n1 >/dev/null 2>&1`
fi
fi
else
MYSQLURL=${WEBPATH_SERVICES}/all/mysql
#there is no pre-compiled freebse 12 binary
BINPACK=`ls $MYSQLPACK-*i386.tar.gz $MYSQLPACK-*i686.tar.gz $MYSQLPACK-*i486.tar.gz $MYSQLPACK-*x86_64.tar.gz 2>/dev/null | head -n 1`
fi
fi
if [ "${MYSQL_FORCE_COMPILE_OPT}" = "yes" ]; then
BINPACK=""
else
if [ "${BINPACK}" != "" ]; then
#attempt the download.
if [ ! -s ${BINPACK} ]; then
wget ${WGET_CONNECT_OPTIONS} -O ${BINPACK} ${MYSQLURL}/${BINPACK}
if [ $? -ne 0 ]; then
echo "Failed to download ${MYSQLURL}/${MYSQLPACK}.tar.gz. Reverting to compile..."
BINPACK=""
rm -f ${BINPACK_MD5} 2>/dev/null
fi
fi
BINPACK_MD5=${BINPACK}.md5
wget ${WGET_CONNECT_OPTIONS} -O ${BINPACK_MD5} ${MYSQLURL}/${BINPACK_MD5}
if [ ! -s ${BINPACK_MD5} ]; then
#nothing to check against.
rm -f ${BINPACK_MD5};
fi
if [ "${BINPACK}" != "" ] && [ -s ${BINPACK} ] && [ "${BINPACK_MD5}" != "" ] && [ -s ${BINPACK_MD5} ]; then
#md5sum check
M_BIN_MD5=`${MD5SUM} -q ${BINPACK}`
M_BIN_MD5_CHECK=`cat ${BINPACK_MD5} | cut -d\ -f1`
if [ "${M_BIN_MD5}" != "${M_BIN_MD5_CHECK}" ]; then
echo "${boldon}md5 check on ${BINPACK} failed ('${M_BIN_MD5}' != '${M_BIN_MD5_CHECK}'. Reverting to compile.${boldoff}"
BINPACK=""
else
echo "md5 check on ${BINPACK} passed."
fi
fi
fi
fi
if [ "$BINPACK" = "" ]; then
compile_mysql_binary
fi
#make sure were back
cd ${CWD}
BINPACK=`ls $MYSQLPACK-*i386.tar.gz $MYSQLPACK-*i686.tar.gz $MYSQLPACK-*i486.tar.gz $MYSQLPACK-*x86_64.tar.gz 2>/dev/null | head -n 1`
if [ "$BINPACK" = "" ]; then
do_exit 1 "Cannot find $MYSQLPACK package for installation"
fi
if [ ! -s ${BINPACK} ]; then
do_exit 1 "Cannot find ${BINPACK} for installation"
fi
echo "Stopping mysqld ..."
control_service mysqld stop
echo "Installing ${BINPACK}..."
#we need the non tar.gz form .. but its not basic it has freebsd and i386 and stuff we need
#since we know the name of the file, we can get its contents which will tell us.
MYSQLPACK=`tar tzf ${BINPACK} | head -n 1 | cut -d/ -f1`
cd /usr/local
tar xzf ${CWD}/${BINPACK} --no-same-owner
if [ $? -ne 0 ]; then
do_exit 1 "Failed to extract: ${BINPACK}. Exiting..."
fi
if [ ! -d ${MYSQLPACK} ]; then
do_exit 1 "${MYSQLPACK} does not exist. Exiting..."
fi
if [ -s ${BINPACK} ]; then
rm -f ${BINPACK}
fi
if [ -L mysql ]; then
rm -f mysql
fi
ln -s ${MYSQLPACK} mysql
cd mysql
if [ -e my.cnf ]; then
mv -f my.cnf my.cnf.orig
fi
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/$MYSQLPACK
rm -rf data
ln -s ${MYSQL_DATA} ./data
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:mysql /usr/local/bin/${i}
fi
};
done
if [ ! -s ${INITDDIR}/mysqld ]; then
getFile mysqld_freebsd mysqld_boot_freebsd
cp ${CWD}/mysqld_freebsd ${INITDDIR}/mysqld
chmod 755 ${INITDDIR}/mysqld
fi
setup_my_cnf
if ! ${SQL_PATH_IS_EMPTY}; then
control_service mysqld start
MYSQLPATH="`echo ${PATH} | grep /usr/local/mysql/bin | wc -l`"
if [ "${MYSQLPATH}" -eq 0 ]; then
export PATH=${PATH}:/usr/local/mysql/bin
fi
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 ! ${SKIP_MYSQL_UPGRADE}; then
if [ -e /usr/local/mysql/bin/mysql_upgrade ]; then
/usr/local/mysql/bin/mysql_upgrade --defaults-extra-file=${DA_MY_CNF}
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
if [ -e /usr/local/mysql/bin/mysqlcheck ] && [ "${MYSQL_OPT}" = "5.1" ] && [ "${MYSQL_INST_OPT}" != "mariadb" ]; then
/usr/local/mysql/bin/mysqlcheck --defaults-extra-file=${DA_MY_CNF} ${MYSQLCHECK_ARGS}
fi
if [ ! -e /usr/local/mysql/bin/mysqld ] && [ -e /usr/local/mysql/libexec/mysqld ]; then
ln -s ../libexec/mysqld /usr/local/mysql/bin/mysqld
fi
fi
if ${SQL_PATH_IS_EMPTY}; then
setup_mysql_root_user
fi
set_service mysqld ON
echo "Done ${MYSQLPACK}."
writeLog "${MYSQLPACK} installed"
elif [ -e /etc/debian_version ]; then
if [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
#libsystemd-daemon0 and /lib/x86_64-linux-gnu/libsystemd-daemon.so.0
#LINUX_STR=linux-systemd
#if [ "${SYSTEMD}" != "yes" ] || [ "${MARIADB_OPT}" = "5.5" ] || [ "${MARIADB_OPT}" = "10.0" ] || [ "${MARIADB_OPT}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ]; then
if [ "${MARIADB_OPT}" = "10.5" ]; then
LINUX_STR=linux
else
LINUX_STR=linux-glibc_214
fi
if [ -e /etc/debian_version ]; then
if grep -m1 -q '^7' /etc/debian_version; then
LINUX_STR=linux
fi
fi
MACHINE=i686
if [ "${B64}" = "1" ]; then
MACHINE=x86_64
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
#debian needs libnuma1 now, as well: libnuma-dev libnuma1
ensure_libnuma
# Galera package in bundled with mariadb bintar, no need for a separate galera bintar
# if ([ "${MARIADB_OPT}" = "10.1" ] or 10.2) && [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
# #Galera has the same 1st column as libjemalloc, so we use LIBJEMALLOC_REL here too
# GALERA_VER=`getVerGalera bintar_${MACHINE}`
# GALERA_MD5=`getMD5Galera bintar_${MACHINE}`
# GALERA_FILE=`getFilenameGalera bintar_${MACHINE}`
# GALERA_FOLDER=`echo ${GALERA_FILE} | perl -p0 -e 's#\.tar\.gz##g'`
# fi
# if [ ! -s ${GALERA_FILE} ]; then
# wget ${WGET_CONNECT_OPTIONS} -O ${GALERA_FILE} ${WEBPATH_SERVICES}/all/mariadb/galera/${GALERA_VER}/${GALERA_FILE}
# if [ $? -ne 0 ]; then
# do_exit 1 "Failed to download ${WEBPATH_SERVICES}/all/mariadb/galera/${GALERA_VER}/${GALERA_FILE}. Exiting..."
# fi
# fi
cd /usr/local
if [ "${MYSQL_FORCE_COMPILE_OPT}" != "yes" ]; then
if [ ! -s ${MYSQLPACK}.tar.gz ]; then
wget ${WGET_CONNECT_OPTIONS} -O ${MYSQLPACK}.tar.gz ${MYSQLURL}/${MYSQLPACK}.tar.gz
if [ $? -ne 0 ]; then
do_exit 1 "Failed to download ${MYSQLURL}/${MYSQLPACK}.tar.gz. Exiting..."
fi
fi
fi
if [ ! -s "${MYSQLPACK}.tar.gz" ]; then
MYSQL_FORCE_COMPILE_OPT=yes
fi
if [ "${MYSQL_FORCE_COMPILE_OPT}" = "yes" ]; then
echo "Attempting to compile a package from source..."
cd ${CWD}
compile_mysql_binary
cd ${CWD}
if [ ! -s ${MYSQLPACK}.tar.gz ]; 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}-*i386.tar.gz ${PACK_PRE}-*i686.tar.gz ${PACK_PRE}-*i486.tar.gz ${PACK_PRE}-*x86_64.tar.gz 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
fi
# Galera package in bundled with mariadb bintar, no need for a separate galera bintar
# if ([ "${MARIADB_OPT}" = "10.1" ] or 10.2) && [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
# echo "Installing galera package..."
# tar -C /usr/lib -xzf ${WORKDIR}/${GALERA_FILE} --strip 3 ${GALERA_FOLDER}/usr/lib64
# tar -C /usr/bin -xzf ${WORKDIR}/${GALERA_FILE} --strip 3 ${GALERA_FOLDER}/usr/bin
# tar -C /usr/share -xzf ${WORKDIR}/${GALERA_FILE} --strip 3 ${GALERA_FOLDER}/usr/share
# rm -f ${WORKDIR}/${GALERA_FILE}
# echo "Galera package has been installed"
# fi
mv -f ${MYSQLPACK}.tar.gz /usr/local
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 tzf ${MYSQLPACK}.tar.gz | 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 [ "${SYSTEMD}" = "yes" ]; then
MYSQL_SYSTEMD=${CB_SYSTEMD}/mysqld.service.debian
if [ -e ${CB_CUST_SYSTEMD}/mysqld.service.debian ]; then
MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mysqld.service.debian
fi
#if ([ "${MARIADB_OPT}" = "10.1" ] or 10.2) && [ "${MYSQL_INST_OPT}" = "mariadb" ]; then
# MYSQL_SYSTEMD=${CB_SYSTEMD}/mariadb.service
# if [ -e ${CB_CUST_SYSTEMD}/mariadb.service ]; then
# MYSQL_SYSTEMD=${CB_CUST_SYSTEMD}/mariadb.service
# fi
#fi
cp -pf ${MYSQL_SYSTEMD} ${SYSTEMDDIR}/mysqld.service
if [ -L ${SYSTEMDDIR}/mariadb.service ]; then
rm -f ${SYSTEMDDIR}/mariadb.service
fi
systemctl daemon-reload
systemctl enable mysqld.service
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
fi
backup_libmysqlclient
tar xzf ${MYSQLPACK}.tar.gz --no-same-owner
if [ $? -ne 0 ]; then
do_exit 1 "Failed to extract: ${MYSQLPACK}.tar.gz. Exiting..."
fi
rm -f mysql ${MYSQLPACK}.tar.gz
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
rm -rf data
ln -s ${MYSQL_DATA} ./data
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
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
if [ -e /usr/local/mysql/bin/mysqlcheck ] && [ "${MYSQL_OPT}" = "5.1" ] && [ "${MYSQL_INST_OPT}" != "mariadb" ]; then
/usr/local/mysql/bin/mysqlcheck --defaults-extra-file=${DA_MY_CNF} ${MYSQLCHECK_ARGS}
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
ensure_libnuma
if [ "${MYSQL_INST_OPT}" = "mysql" ]; then
if [ "${OS_CENTOS_VER}" = "5" ] && [ "${MYSQL_OPT}" = "5.7" ]; then
do_exit 1 "CentOS5 is EOL, so, MySQL 5.7 is not supported on it"
elif [ "${OS_CENTOS_VER}" = "5" ] && [ "${MYSQL_OPT}" = "8.0" ]; then
do_exit 1 "CentOS5 is EOL, so, MySQL 8.0 is not supported on it"
fi
MYSQL_NAME=MySQL
NEW_RPM_FORMAT=0
if [ "${OS_CENTOS_VER}" = "6" ]; then
MYSQL_EXT_OS=el6
elif [ "${OS_CENTOS_VER}" = "7" ]; then
MYSQL_EXT_OS=el7
elif [ "${OS_CENTOS_VER}" = "8" ]; then
MYSQL_EXT_OS=el8
fi
if [ "${B64}" = "0" ]; then
MYSQLURL=all/mysql/${MYSQL_OPT}/${MYSQL_VER}/32-bit
if [ "${MYSQL_OPT}" = "5.1" ]; then
MYSQL_EXT=glibc23.i386
elif [ "${MYSQL_OPT}" = "5.5" ]; then
if [ "`version_cmp ${MYSQL_VER} 5.5.58 'mysql 5.5.58 glibc vs el6 check'`" -ge 0 ]; then
MYSQL_EXT=${MYSQL_EXT_OS}.i686
NEW_RPM_FORMAT=1
else
MYSQL_EXT=linux2.6.i386
fi
elif [ "${MYSQL_OPT}" = "5.6" ]; then
if [ "`version_cmp ${MYSQL_VER} 5.6.38 'mysql 5.6.38 glibc vs el6 check'`" -ge 0 ]; then
MYSQL_EXT=${MYSQL_EXT_OS}.i686
NEW_RPM_FORMAT=1
else
MYSQL_EXT=linux_glibc2.5.i386
fi
else
MYSQL_EXT=${MYSQL_EXT_OS}.i686
MYSQL_NAME=mysql-community
NEW_RPM_FORMAT=1
fi
if [ "${NEW_RPM_FORMAT}" = "0" ]; then
MYSQLURL=all/mysql/${MYSQL_VER}
fi
else
MYSQLURL=all/mysql/${MYSQL_OPT}/${MYSQL_VER}/64-bit
if [ "${MYSQL_OPT}" = "5.1" ]; then
MYSQL_EXT=glibc23.x86_64
elif [ "${MYSQL_OPT}" = "5.5" ]; then
if [ "`version_cmp ${MYSQL_VER} 5.5.58 'mysql 5.5.58 glibc vs el6 check'`" -ge 0 ]; then
MYSQL_EXT=${MYSQL_EXT_OS}.x86_64
NEW_RPM_FORMAT=1
else
MYSQL_EXT=linux2.6.x86_64
fi
elif [ "${MYSQL_OPT}" = "5.6" ]; then
if [ "`version_cmp ${MYSQL_VER} 5.6.38 'mysql 5.5.38 glibc vs el6 check'`" -ge 0 ]; then
MYSQL_EXT=${MYSQL_EXT_OS}.x86_64
NEW_RPM_FORMAT=1
else
MYSQL_EXT=linux_glibc2.5.x86_64
NEW_RPM_FORMAT=1
fi
else
MYSQL_EXT=${MYSQL_EXT_OS}.x86_64
MYSQL_NAME=mysql-community
NEW_RPM_FORMAT=1
fi
if [ "${NEW_RPM_FORMAT}" = "0" ]; then
MYSQLURL=all/mysql/64-bit/${MYSQL_VER}
fi
fi
MYSQLCLIENT=${MYSQL_NAME}-client-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm
MYSQLDEVEL=${MYSQL_NAME}-devel-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm
MYSQLSERVER=${MYSQL_NAME}-server-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm
MYSQLSHARED=${MYSQL_NAME}-shared-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm
if [ "${MYSQL_OPT}" = "5.7" ] || [ "${MYSQL_OPT}" = "8.0" ]; then
MYSQLLIBS=${MYSQL_NAME}-libs-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm
if [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then
MYSQLLIBSCOMPAT=${MYSQL_NAME}-libs-compat-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm
fi
MYSQLCOMMON=${MYSQL_NAME}-common-${MYSQL_VER}-${MYSQL_REL}.$MYSQL_EXT.rpm
fi
else
MYSQLURL=all/mariadb/${MARIADB_OPT}/${MARIADB_VER}
if [ "${OS_CENTOS_VER}" = "5" ]; then
if [ "${B64}" = "0" ]; then
LIBJEMALLOC_REL="centos5_32"
else
LIBJEMALLOC_REL="centos5_64"
fi
elif [ "${OS_CENTOS_VER}" = "6" ]; then
if [ "${MARIADB_OPT}" = "10.4" ]; then
do_exit 1 "MariaDB 10.4 does not support CentOS6."
elif [ "${MARIADB_OPT}" = "10.5" ]; then
do_exit 1 "MariaDB 10.5 does not support CentOS6."
fi
if [ "${B64}" = "0" ]; then
LIBJEMALLOC_REL="centos6_32"
RPM_FILE_LIST="centos6-32.txt"
else
LIBJEMALLOC_REL="centos6_64"
RPM_FILE_LIST="centos6-64.txt"
fi
elif [ "${OS_CENTOS_VER}" = "7" ]; then
LIBJEMALLOC_REL="centos7_64"
RPM_FILE_LIST="centos7-64.txt"
else
LIBJEMALLOC_REL="centos8_64"
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}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ]; then
if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ] || [ "${OS_CENTOS_VER}" = "7" ]; then
LIBJEMALLOC_VER=`getVerJemalloc ${LIBJEMALLOC_REL}`
LIBJEMALLOC_MD5=`getMD5Jemalloc ${LIBJEMALLOC_REL}`
LIBJEMALLOC_FILE=`getFilenameJemalloc ${LIBJEMALLOC_REL}`
LIBJEMALLOC_DEV_MD5=`getMD5Jemalloc ${LIBJEMALLOC_REL}`
LIBJEMALLOC_DEV_FILE=`getFilenameJemalloc ${LIBJEMALLOC_REL}_dev`
fi
#Galera has the same 1st column as libjemalloc, so we use LIBJEMALLOC_REL here too
if [ "${OS_CENTOS_VER}" = "6" ]; then
GALERA_VER=26.4.3
GALERA_MD5=0609cff586f98d85aa7ad60ceb8c3e99
GALERA_FILE=galera-4-26.4.3-1.rhel6.el6.x86_64.rpm
else
GALERA_VER=`getVerGalera ${LIBJEMALLOC_REL}`
GALERA_MD5=`getMD5Galera ${LIBJEMALLOC_REL}`
GALERA_FILE=`getFilenameGalera ${LIBJEMALLOC_REL}`
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}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ] || [ "${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}" = "10.1" ] || [ "${MARIADB_OPT}" = "10.2" ] || [ "${MARIADB_OPT}" = "10.3" ] || [ "${MARIADB_OPT}" = "10.4" ] || [ "${MARIADB_OPT}" = "10.5" ]; then
if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ] || [ "${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}" = "6" ] || [ "${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" ]; then
FILE10=${SQL_PATH}/${MYSQLBACKUP}
fi
fi
if ${MYSQL57_8x_SET}; then
FILE7=${SQL_PATH}/${MYSQLLIBS}
if [ "${OS_CENTOS_VER}" = "6" ] || [ "${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" ]; 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
elif [ "${OS_CENTOS_VER}" = "6" ]; then
CENTOS6_DEPS="boost-program-options perl-Compress-Raw-Bzip2 perl-Compress-Raw-Zlib perl-DBI lsof nmap compat-readline5"
if ! rpm -q --quiet ${CENTOS6_DEPS}; then
yum -y install ${CENTOS6_DEPS}
fi
fi
fi
if ${MYSQL57_8x_SET}; then
checkFile ${FILE7}
if [ "${OS_CENTOS_VER}" = "6" ] || [ "${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" ]; then
if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ] || [ "${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
#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" ]; 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" ]; 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" ]; 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" ]; 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
if [ "${SYSTEMD}" = "yes" ]; then
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" ]; 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
systemctl daemon-reload
systemctl enable ${MYSQL_SYSTEMD_NAME}
fi
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e /etc/rc.d/init.d/mysql ]; then
/sbin/chkconfig --del mysql
rm -f /etc/rc.d/init.d/mysql
fi
else
if [ -e /etc/rc.d/init.d/mysql ]; then
/sbin/chkconfig --del mysql
mv -f /etc/rc.d/init.d/mysql /etc/rc.d/init.d/mysqld
/sbin/chkconfig --add mysqld
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/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=/usr/local/directadmin/conf/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=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.user MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.db MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.tables_priv MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.columns_priv MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.procs_priv MODIFY User CHAR(80) BINARY NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.proc MODIFY definer CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.event MODIFY definer CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.proxies_priv MODIFY User CHAR(80) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/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=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.proxies_priv MODIFY Grantor CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.servers MODIFY Username CHAR(80) NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.procs_priv MODIFY Grantor CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/my.cnf mysql -e "ALTER TABLE mysql.tables_priv MODIFY Grantor CHAR(141) COLLATE utf8_bin NOT NULL DEFAULT '';"
${MYSQL_BIN} --defaults-extra-file=/usr/local/directadmin/conf/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 [ ${OS} = "FreeBSD" ] || [ -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 #//\#include #' ${MY_GLOBAL}
fi
fi
}
####################################################
doSuPhp() {
getFile suphp-${SUPHP_VER}.tar.gz suphp_current
getFile patches/suphp_calling_user.patch suphp_calling_user.patch
getFile patches/suphp_script_name.patch suphp_script_name.patch
getFile patches/suphp_attachment.patch suphp_attachment.patch
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
#only freebsd 7 seemed affected with this, thus added.
chmod 755 config/install-sh
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() {
SM=/usr/sbin/sendmail
MW=/usr/sbin/mailwrapper
LINK_TO_EXIM="ln -sf exim ${SM}"
if [ "$OS" = "FreeBSD" ] && [ -x ${MW} ]; then
MC=/etc/mail/mailer.conf
T=${MC}.temp
E=`grep -m1 -c exim ${MC}`
if [ "${E}" -eq 0 ]; then
cp -f ${MC} ${MC}.backup
wget ${WGET_CONNECT_OPTIONS} -O ${T} ${WEBPATH_SERVICES}/mailer.conf
if [ ! -s ${T} ]; then
${LINK_TO_EXIM}
return
fi
cp -f ${T} ${MC}
fi
L=`readlink $SM`
if [ "${L}" = "exim" ]; then
ln -sf ${MW} ${SM}
fi
return
fi
${LINK_TO_EXIM}
}
####################################################
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 [ "$OS" = "FreeBSD" ]; then
OS_EXT=fre
if [ "${ZEND_OPT}" = "yes" ]; then
echo "Zend Guard loader does not support FreeBSD."
fi
fi
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 [ "${IMAGICK_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=imagick.so|;extension=imagick.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_SNUFFLEUPAGUS_OPT}" = "yes" ]; then
perl -pi -e 's|^extension=snuffleupagus.so|;extension=snuffleupagus.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" ]; 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" ]; then
if [ "${HAVE_CLI}" = "no" ]; then
#FreeBSD 10 fix
if [ -e ${EXTENSION_INT_EXT_DIR}/libhtscanner.so.0.0 ]; then
ln -sf ${EXTENSION_INT_EXT_DIR}/libhtscanner.so.0.0 ${EXTENSION_INT_EXT_DIR}/htscanner.so
fi
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 [ "${IONCUBE_OPT}" = "yes" ]; then
if [ "${EXTENSION_INT_RELEASE}" != "8.0" ]; 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}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ] && [ "${EXTENSION_INT_RELEASE}" != "7.0" ] && [ "${EXTENSION_INT_RELEASE}" != "7.1" ]; 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_GMP_OPT}" = "yes" ]; then
echo "extension=gmp.so" >> ${EXTENSION_INT_EXT_INI}
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_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 restart
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
if [ "$OS" != "FreeBSD" ]; then
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_INT_MD5=${ZENDNAME_PHP53_MD5}
ZEND_TARBALL_FORMAT=1
elif [ "$1" = "5.4" ]; then
ZEND_INT_FILENAME=${ZENDFILE_GUARD54}
ZEND_INT_ZENDNAME=${ZENDNAME_PHP54}
ZEND_INT_LONGVER="$1"
ZEND_INT_MD5=${ZENDNAME_PHP54_MD5}
ZEND_TARBALL_FORMAT=1
elif [ "$1" = "5.5" ]; then
ZEND_INT_FILENAME=${ZENDFILE_GUARD55}
ZEND_INT_ZENDNAME=${ZENDNAME_PHP55}
ZEND_INT_LONGVER="$1"
ZEND_INT_MD5=${ZENDNAME_PHP55_MD5}
ZEND_TARBALL_FORMAT=0
elif [ "$1" = "5.6" ]; then
ZEND_INT_FILENAME=${ZENDFILE_GUARD56}
ZEND_INT_ZENDNAME=${ZENDNAME_PHP56}
ZEND_INT_LONGVER="$1"
ZEND_INT_MD5=${ZENDNAME_PHP56_MD5}
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} ${ZEND_INT_MD5}
fi
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
if [ "$OS" = "FreeBSD" ]; then
echo "Zend Guard loader does not support FreeBSD."
else
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
fi
}
####################################################
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 restart
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" ]; 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" ]; 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}
cmake CMakeLists.txt
make install
if [ ! -s /etc/httpd/conf/extra/modhostinglimits.conf ]; then
wget ${WGET_CONNECT_OPTIONS} -O /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
}
####################################################
doPCRE2() {
getFile pcre2-${PCRE2_VER}.tar.gz pcre2
quitIfLocked doPCRE2
cd ${CWD}
FILE=${CWD}/pcre2-${PCRE2_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
chmod -R 755 pcre2-${PCRE2_VER}
cd pcre2-${PCRE2_VER}
echo "Configuring pcre2-${PCRE2_VER}..."
./configure --enable-jit
echo "Done. Making pcre2-${PCRE2_VER}..."
while echo "Trying to make PCRE2..."; 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 pcre2-${PCRE2_VER}..."
make install
echo "Done pcre2."
writeLog "pcre2 ${PCRE2_VER} installed"
ldconfig
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doPCRE() {
if [ "$NEW_PCRE_OPT" = "yes" ]; then
getFile pcre-${PCRE_VER}.tar.gz pcre_current
else
getFile pcre-${PCRE_VER}.tar.gz pcre
fi
quitIfLocked doPCRE
cd ${CWD}
FILE=${CWD}/pcre-${PCRE_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
chmod -R 755 pcre-${PCRE_VER}
cd pcre-${PCRE_VER}
echo "Configuring pcre-${PCRE_VER}..."
./configure --enable-utf8 --enable-unicode-properties --enable-jit
echo "Done. Making pcre-${PCRE_VER}..."
while echo "Trying to make PCRE..."; do
make CFLAGS=-fpic CPPFLAGS=-I/usr/kerberos/include
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 pcre-${PCRE_VER}..."
make install
echo "Done pcre."
writeLog "pcre ${PCRE_VER} installed"
if [ "${OS}" = "FreeBSD" ]; then
if [ ${MAINVER} -ge 10 ] && [ ! -e /usr/local/lib/libpcre.so.0 ] && [ -e /usr/local/lib/libpcre.so ]; then
ln -sf /usr/local/lib/libpcre.so /usr/local/lib/libpcre.so.0
fi
fi
/sbin/ldconfig
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doSqlite() {
SQLITE_VER=`getVer sqlite`
getFile sqlite/sqlite-autoconf-${SQLITE_VER}.tar.gz sqlite sqlite-autoconf-${SQLITE_VER}.tar.gz
quitIfLocked doSqlite
cd ${CWD}
FILE=${CWD}/sqlite-autoconf-${SQLITE_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd sqlite-autoconf-${SQLITE_VER}
echo "Configuring sqlite-autoconf-${SQLITE_VER}..."
./configure
echo "Done. Making sqlite-autoconf-${SQLITE_VER}..."
while echo "Trying to make sqlite..."; 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 sqlite-autoconf-${SQLITE_VER}..."
make install
echo "Done sqlite-autoconf."
writeLog "sqlite ${SQLITE_VER} installed"
/sbin/ldconfig
removeLockfile
cd ${CWD}
rm -f sqlite-autoconf-${SQLITE_VER}.tar.gz
}
####################################################
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
if [ "${OS}" = "FreeBSD" ]; then
FCGID_SCRIPT_NAME="fcgid_freebsd"
else
FCGID_SCRIPT_NAME="fcgid"
fi
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() {
if [ "${OS_CENTOS_VER}" = "6" ]; then
installDevtoolset
fi
#$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
if [ ! -e /usr/local/lib/libxml2.so ] && [ ! -e /usr/lib/libxml2.so ] && [ "${LIBXML2_VER}" != "0" ]; then
doLibxml2
fi
if [ ! -e /usr/local/lib/libxslt.so ] && [ ! -e /usr/lib/libxslt.so ] && [ "${LIBXSLT_VER}" != "0" ]; then
doLibxslt
fi
if [ ! -e /usr/local/lib/libsodium.so ] && [ ! -e /usr/lib/libsodium.so ] && [ "${LIBSODIUM_VER}" != "0" ]; then
doLibsodium
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
checkLibz
doApache2
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ ! -d ${NGINXCONF} ]; then
checkLibz
doNginx
fi
fi
#pcre2 is needed by PHP >=7.3
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 ] && [ "${PCRE2_VER}" != "0" ]; then
doPCRE2
fi
fi
#sqlite, libzip and oniguruma are needed by PHP >=7.4
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
if [ ! -e /usr/local/lib/libzip.so ] && [ ! -e /usr/local/lib64/libzip.so ] && [ "${LIBZIP_VER}" != "0" ]; then
doLibzip
fi
if [ ! -e /usr/include/sqlite3.h ] && [ ! -e /usr/local/include/sqlite3.h ]; then
if [ "${OS}" = "FreeBSD" ]; then
echo "Cannot find /usr/local/include/sqlite3.h, installing using apt-get..."
pkg install -y sqlite3
elif [ -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
if [ ! -e /usr/include/oniguruma.h ] && [ ! -e /usr/local/include/oniguruma.h ]; then
if [ "${OS}" = "FreeBSD" ]; then
echo "Cannot find /usr/local/include/oniguruma.h, installing using apt-get..."
pkg install -y oniguruma
elif [ -e /etc/debian_version ]; then
echo "Cannot find /usr/include/oniguruma.h, installing using apt-get..."
apt-get -y install libonig-dev
else
echo "Cannot find /usr/include/oniguruma.h, installing using yum..."
if [ "${OS_CENTOS_VER}" = "8" ]; then
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
yum -y install oniguruma-devel --enablerepo=cloudlinux-PowerTools
else
yum -y install oniguruma-devel --enablerepo=PowerTools
fi
else
yum -y install oniguruma-devel
fi
fi
fi
if [ "${OS_CENTOS_VER}" = "6" ] && [ ! -e /usr/local/lib/libsqlite3.so ]; then
doSqlite
fi
fi
#autoconf 2.64+ is needed by PHP >=7.2
if [ ! -e /usr/local/bin/autoconf ] && [ "${AUTOCONF_OPT}" = "yes" ]; then
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
NEEDED_AUTOCONF_MINORV=64
if [ "${INT_RELEASE}" != "7.2" ]; then
NEEDED_AUTOCONF_MINORV=68
fi
if [ "${AUTOCONF_VER}" != "0" ]; then
CURRENT_AUTOCONF_MINORV=`autoconf --version | grep -m1 -o '[0-9]\.[0-9]*' | cut -d'.' -f2`
if [ ${CURRENT_AUTOCONF_MINORV} -lt ${NEEDED_AUTOCONF_MINORV} ]; then
doAutoconf
fi
fi
fi
fi
#libwebp is compiled-in as of PHP 7.0
if [ ! -e /usr/local/include/webp/types.h ] && [ "${LIBWEBP_VER}" != "0" ]; then
if [ "${INT_RELEASE}" != "5.3" ] && [ "${INT_RELEASE}" != "5.4" ] && [ "${INT_RELEASE}" != "5.5" ] && [ "${INT_RELEASE}" != "5.6" ]; then
doLibWebp
fi
fi
if ${INT_MAIN_VERSION}; then
doRewriteCLPhpHandler
fi
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${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" ]; then
if [ ! -s /etc/logrotate.d/php-fpm ] && [ ${OS} != "FreeBSD" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/php-fpm.logrotate -O /etc/logrotate.d/php-fpm
fi
#We need USR1 to re-read the logs
#if grep -m1 -q USR1 /etc/logrotate.d/php-fpm; then
# perl -pi -e 's|USR1|USR2|g' /etc/logrotate.d/php-fpm
#fi
if [ ${OS} = "FreeBSD" ]; then
echo "Ensuring /usr/local/php${SHORT_RELEASE}/var/log/php-fpm.log in /etc/newsyslog.conf"
freebsd_add_newsyslog /usr/local/php${SHORT_RELEASE}/var/log/php-fpm.log '' - "/var/run/php-fpm${SHORT_RELEASE}.pid\t30"
fi
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 [ "${ICU_VER}" != "0" ]; then
if [ ! -d /usr/local/icu/lib ]; then
removeLockfile
doICU
fi
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
getFile patches/multi-sapi-5.3.29.patch multi-sapi-5.3.29.patch
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
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.3" ]; then
getFile patches/php_mysqlnd_sha2_auth.patch php_mysqlnd_sha2_auth.patch
fi
if [ "${HAVE_FPM_CGI}" = "yes" ]; then
getFile patches/fpm-quota-chown.patch fpm-quota-chown.patch
fi
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
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
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=7.4
fi
wget ${WGET_CONNECT_OPTIONS} ${WGET_HTTPS_OPTIONS} https://www.litespeedtech.com/packages/lsapi/php-litespeed-${PHP_LSAPI_VER}.tgz -O php-litespeed-${PHP_LSAPI_VER}.tgz 2> /dev/null
cd sapi
mv litespeed litespeed_orig
tar xzf ../php-litespeed-${PHP_LSAPI_VER}.tgz --no-same-owner
mv -f litespeed/*.h litespeed_orig/
mv -f litespeed/*.c litespeed_orig/
rm -rf litespeed
mv litespeed_orig litespeed
# Not needed for LiteSpeed, not sure about CloudLinux mod_lsapi. Breaks compilation on FreeBSD, because end-result is LDFLAGS += -lpthreadnlitespeed: $(SAPI_LITESPEED_PATH)
# sed -i.old '1s;^;LDFLAGS += -lpthread\n;' litespeed/Makefile.frag
cd ../
elif [ "${INT_MODE}" = "lsphp" ] && [ "${CLOUDLINUX_OPT}" = "yes" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WGET_HTTPS_OPTIONS} 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
mv -f litespeed/*.h litespeed_orig/
mv -f litespeed/*.c litespeed_orig/
rm -rf litespeed
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}
if [ ${OS} = "FreeBSD" ]; then
AUTOCONF213="/usr/local/bin/autoconf-2.13"
else
AUTOCONF213="/usr/bin/autoconf-2.13"
fi
if [ "${INT_RELEASE}" = "5.3" ]; then
if [ ! -e ${AUTOCONF213} ]; then
if [ ${OS} = "FreeBSD" ]; then
${PKG_INSTALL} install -y autoconf213
elif [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install autoconf2.13
else
if [ "${OS_CENTOS_VER}" = "8" ]; then
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
yum -y install autoconf213 --enablerepo=cloudlinux-PowerTools
else
yum -y install autoconf213 --enablerepo=PowerTools
fi
else
yum -y install autoconf213
fi
fi
fi
if [ -e ${AUTOCONF213} ]; then
touch ac*
${AUTOCONF213}
fi
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 ]; then
patch -p1 --fuzz=1 < ../fpm-lve-php7.0_autoconf.dl.v2.patch.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 [ "${HAVE_FPM_CGI}" = "yes" ] && [ -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})
if [ "${OS}" = "FreeBSD" ]; then
#Bugfix for https://bugs.php.net/bug.php?id=68114
if [ "${INT_RELEASE}" = "5.3" ] || [ "${INT_RELEASE}" = "5.4" ]; then
if ! grep -q -m1 'ac_cv_decimal_fp_supported=no' ${CONF_FILE}; then
perl -pi -e 's#./configure \\#./configure ac_cv_decimal_fp_supported=no \\#' ${CONF_FILE}
fi
fi
#not sure who had this added or suggested it, but there is no with-intl PHP configuration option at all
#if [ -e "/usr/local/lib/libintl.a" ]; then
#FreeBSD 11.1, with gcc5 throws
#/usr/bin/ld: undefined reference to symbol `_ZSt20__throw_length_errorPKc@@GLIBCXX_3.4' (try adding -lstdc++)
#//usr/lib/libstdc++.so.6: could not read symbols: Bad value
#changing from --enable-intl to --with-intl=/usr/local fixes that.
#perl -pi -e 's#--enable-intl$#--with-intl=/usr/local#' ${CONF_FILE}
#fi
fi
# 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" ] && [ "${OS}" != "FreeBSD" ] && [ "${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 #./configure --with-apxs2 #' ${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
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
#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" ] && [ "${SYSTEMD}" = "yes" ] && [ -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
#Patch is only needed for PHP 5.3 now
if [ "${OS}" = "FreeBSD" ] && [ "${INT_RELEASE}" = "5.3" ]; then
echo "Patching fpm_sockets.c for https://bugs.php.net/bug.php?id=63983"
perl -pi -e 's|info.tcpi_sacked|info.__tcpi_sacked|' sapi/fpm/fpm/fpm_sockets.c
perl -pi -e 's|info.tcpi_unacked|info.__tcpi_unacked|' sapi/fpm/fpm/fpm_sockets.c
fi
#Enable systemd support for PHP
if [ "${INT_MODE}" = "php-fpm" ] && [ "${SYSTEMD}" = "yes" ]; then
if ! grep -m1 -q 'with-fpm-systemd' ${CONF_FILE}; then
perl -pi -e 's#--enable-fpm \\#--enable-fpm \\\n\t--with-fpm-systemd \\#' ${CONF_FILE}
fi
if ! grep -m1 -q 'with-fpm-systemd' ${CONF_FILE}; then
perl -pi -e 's#"--enable-fpm" \\#--enable-fpm \\\n\t"--with-fpm-systemd" \\#' ${CONF_FILE}
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
NEW_ICU=true
if [ "${OS}" = "FreeBSD" ]; then
MAINVER=`echo ${OS_VER} | cut -d. -f1`
if [ ${MAINVER} -le 10 ]; then
NEW_ICU=false
fi
elif [ -e ${DEBIAN_VERSION} ]; then
if grep -m1 -q '^7' ${DEBIAN_VERSION}; then
NEW_ICU=false
fi
else
if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ]; then
NEW_ICU=false
fi
fi
if ${NEW_ICU}; then
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "${CONF_FILE}"
else
CXXFLAGS="-std=c++11 -DU_USING_ICU_NAMESPACE=1" ${CONF_FILE}
fi
else
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "${CONF_FILE}"
else
${CONF_FILE}
fi
fi
else
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "${CONF_FILE}"
else
${CONF_FILE}
fi
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 [ "${SYSTEMD}" = "yes" ] && [ "${INT_RELEASE}" = "5.3" ]; then
sed -i '/EXTRA_LIBS = /s|$| -lstdc++|' Makefile
fi
# Fixes problems like "undefined reference to `icu_51::Locale::~Locale()'", because of lib mismatch (--with-icu-dir is /usr/local/icu, but in Makefile /usr/local/lib takes precedence)
if [ "${OS}" = "FreeBSD" ]; then
perl -pi -e 's#-L/usr/local/lib -L/usr/local/icu/lib#-L/usr/local/icu/lib -L/usr/local/lib#' Makefile
fi
if [ "${INT_RELEASE}" = "5.3" ]; then
perl -pi -e 's| \@\$\(INSTALL\)|\t\@\$\(INSTALL\)|g' Makefile
fi
while echo "Trying to make php..."; do
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}"
else
C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}
fi
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
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "make install"
else
make install
fi
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
if [ "${EXTENSION_INT_RELEASE}" != "5.3" ] && [ "${EXTENSION_INT_RELEASE}" != "5.4" ] && [ "${EXTENSION_INT_RELEASE}" != "5.5" ] && [ "${EXTENSION_INT_RELEASE}" != "5.6" ] && [ "${EXTENSION_INT_RELEASE}" != "7.0" ] && [ "${EXTENSION_INT_RELEASE}" != "7.1" ]; 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_GMP_OPT}" = "yes" ]; then
doPHPGmp ${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 [ "${INT_MODE}" != "mod_php" ]; then
if [ "${HTSCANNER_OPT}" = "yes" ]; then
doPHPHtscanner ${INT_RELEASE} 1
fi
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" ]; 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}
cp -f ${CWD}/php-fpm.conf.${SHORT_RELEASE} /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf
fi
if [ ! -s /usr/local/php${SHORT_RELEASE}/etc/php-fpm.conf ]; then
getFile php-fpm.conf.${SHORT_RELEASE} php-fpm-conf-${SHORT_RELEASE}
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
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/php-fpm${SHORT_RELEASE} ]; then
echo "Removing ${INITDDIR}/php-fpm${SHORT_RELEASE}..."
rm -f ${INITDDIR}/php-fpm${SHORT_RELEASE}
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
if [ "${CLAMAV_OPT}" = "yes" ] && [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ]; 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
else
if [ ! -s ${INITDDIR}/php-fpm${SHORT_RELEASE} ]; then
cd ${CWD}
if [ "${OS}" = "FreeBSD" ]; then
getFile php-fpm.freebsd
cp ${CWD}/php-fpm.freebsd ${INITDDIR}/php-fpm${SHORT_RELEASE}
chmod 755 ${INITDDIR}/php-fpm${SHORT_RELEASE}
elif [ -e /etc/debian_version ]; then
getFile php-fpm.debian
cp ${CWD}/php-fpm.debian ${INITDDIR}/php-fpm${SHORT_RELEASE}
chmod 755 ${INITDDIR}/php-fpm${SHORT_RELEASE}
update-rc.d php-fpm${SHORT_RELEASE} defaults
else
getFile php-fpm
cp ${CWD}/php-fpm ${INITDDIR}/php-fpm${SHORT_RELEASE}
chmod 755 ${INITDDIR}/php-fpm${SHORT_RELEASE}
/sbin/chkconfig php-fpm${SHORT_RELEASE} on
fi
perl -pi -e "s|53|${SHORT_RELEASE}|" ${INITDDIR}/php-fpm${SHORT_RELEASE}
fi
fi
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|\$SERVER_ROOT/usr/local/bin/lsphp |/usr/local/bin/lsphp |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/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
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
}
doPigz() {
if [ ! -e /usr/local/lib_da/lib/libz.a ]; then
doZlib
fi
cd ${CWD}
getFile pigz-${PIGZ_VER}.tar.gz pigz
FILE=${CWD}/pigz-${PIGZ_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd pigz-${PIGZ_VER}
if [ -e /usr/local/lib_da/lib/libz.a ]; then
perl -pi -e 's#-lz##' Makefile
perl -pi -e 's#-lm#-lm /usr/local/lib_da/lib/libz.a#' Makefile
fi
echo "Installing pigz-${PIGZ_VER}..."
while echo "Trying to make pigz-${PIGZ_VER}..."; do
if [ "$OS" = "FreeBSD" ]; then
MAKE_BIN="/usr/local/bin/gmake"
else
MAKE_BIN="make"
fi
if [ -e /usr/local/lib_da/lib/libz.a ]; then
${MAKE_BIN} CFLAGS="-I/usr/local/lib_da/include/" -j ${CPU_CORES}
else
${MAKE_BIN} -j ${CPU_CORES}
fi
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 pigz-${PIGZ_VER}..."
mv -f pigz /usr/local/bin/pigz
mv -f unpigz /usr/local/bin/unpigz
echo "Enabling pigz in directadmin.conf to use ${CPU_CORES} CPU core(s)."
setVal pigz ${CPU_CORES} ${DACONF_TEMPLATE_FILE}
setVal pigz ${CPU_CORES} ${DACONF_FILE}
doRestartDA
echo "pigz-${PIGZ_VER} has been installed successfully."
writeLog "pigz ${PIGZ_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
M=`getMD5 ${CURL_CACERT_PATH} curl_cacert`
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 ..."
wget ${WGET_CONNECT_OPTIONS} -O ${SSL_CA} ${WEBPATH_SERVICES}/all/ssl/server.ca
if [ ! -s ${SSL_CA} ]; then
echo "Trying server.ca from backup services url..."
wget ${WGET_CONNECT_OPTIONS} -O ${SSL_CA} ${WEBPATH_SERVICES_BACKUP}/all/ssl/server.ca
if [ ! -s ${SSL_CA} ]; then
echo "server.ca download failed."
if [ -s ${SSL_CRT} ]; then
echo "Copying main server.crt to server.ca just as a valid read value so apache can start up"
cp -f ${SSL_CRT} ${SSL_CA}
fi
fi
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 [ "${OS}" = "FreeBSD" ]; then
CP_FLAGS="-f"
fi
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 [ ${OS} = "FreeBSD" ]; then
return
fi
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 [ ${OS} = "FreeBSD" ]; then
PW=/usr/sbin/pw
ADD_UID=
ADD_GID=
if [ "${3}" != "" ]; then
ADD_UID="-u ${3}"
fi
if [ "${4}" != "" ]; then
ADD_GID="-g ${4}"
fi
if ! /usr/bin/grep -q "^${2}:" < /etc/group; then
${PW} groupadd ${2} ${ADD_GID}
fi
if ! /usr/bin/id ${1} > /dev/null 2>&1; then
${PW} useradd -g ${2} -n ${1} -s /sbin/nologin ${ADD_UID}
fi
elif [ -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
}
####################################################
hideFrontpage() {
if [ -e ${DACONF_TEMPLATE_FILE} ] && [ "`grep -m1 -c frontpage_on ${DACONF_TEMPLATE_FILE}`" = "0" ]; then
echo "frontpage_on=0" >> ${DACONF_TEMPLATE_FILE}
fi
if [ -e ${DACONF_FILE} ] && [ "`grep -m1 -c frontpage_on ${DACONF_FILE}`" = "0" ]; then
echo "frontpage_on=0" >> ${DACONF_FILE}
if [ -e /usr/local/directadmin/data ]; then
echo "action=directadmin&value=reload" >> ${TASK_QUEUE}
fi
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
#same thing, for freebsd
if [ -e /usr/include/sys/select.h ]; then
perl -pi -e 's/FD_SETSIZE.*1024U/FD_SETSIZE 32768U/' /usr/include/sys/select.h
fi
if [ ${OS} != "FreeBSD" ]; then
NUMBER=`cat /proc/sys/fs/file-max`
if [ ${NUMBER} -lt 131072 ]; then
echo "131072" > /proc/sys/fs/file-max
fi
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
if [ "`/usr/local/directadmin/dataskq h | grep -c '\-\-linked-ips'`" -gt "0" ]; then
#2 will tokenize the httpd-vhosts.conf
/usr/local/directadmin/dataskq --linked-ips=2
fi
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
if [ "`/usr/local/directadmin/dataskq h | grep -c '\-\-linked-ips'`" -gt "0" ]; then
#4 will tokenize the httpd-vhosts.conf
/usr/local/directadmin/dataskq --linked-ips=4
fi
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
if [ "`/usr/local/directadmin/dataskq h | grep -c '\-\-linked-ips'`" -gt "0" ]; then
#3 will tokenize the nginx-vhosts.conf
/usr/local/directadmin/dataskq --linked-ips=3
fi
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
initHTTP2var
if [ "${HTTP2}" = "1" ]; then
if [ ! -s /usr/local/lib/libnghttp2.so ]; then
echo "Cannot find libnghttp2.so. Installing nghttp2.";
doNghttp2
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
}
####################################################
doMCrypt() {
getFile libmcrypt-${MCRYPT_VER}.tar.gz mcrypt
quitIfLocked doMCrypt
cd ${CWD}
FILE=${CWD}/libmcrypt-${MCRYPT_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
chmod -R 755 libmcrypt-${MCRYPT_VER}
cd libmcrypt-${MCRYPT_VER}
echo "Configuring libmcrypt-${MCRYPT_VER}..."
./configure --enable-ltdl-install
echo "Done. Making libmcrypt-${MCRYPT_VER}..."
while echo "Trying to make mCrypt..."; do
make CFLAGS=-fpic
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 mcrypt-${MCRYPT_VER}..."
make install
echo "Done mcrypt."
writeLog "mcrypt ${MCRYPT_VER} installed"
if [ -d ${WORKDIR}/libmcrypt-${MCRYPT_VER}/libltdl ]; then
echo "Doing extra /libltdl for mcrypt.."
cd libltdl
./configure --enable-ltdl-install
make
make install
echo "Done extra /libltdl for mcrypt."
fi
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doMHash() {
getFile mhash-${MHASH_VER}.tar.gz mhash
quitIfLocked doMHash
cd ${CWD}
FILE=${CWD}/mhash-${MHASH_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
chmod -R 755 mhash-${MHASH_VER}
cd mhash-${MHASH_VER}
echo "Configuring mhash-${MHASH_VER}..."
./configure
echo "Done. Making mhash-${MHASH_VER}..."
while echo "Trying to make mHash..."; 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 mhash-${MHASH_VER}..."
make install
echo "Done mhash."
writeLog "mhash ${MHASH_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doFreeType() {
getFile freetype-${FREETYPE_VER}.tar.gz freetype
quitIfLocked doFreeType
if [ "${OS}" = "FreeBSD" ] && [ ! -e /usr/local/bin/gmake ]; then
cd /usr/ports/devel/gmake
make
make install
make clean
if [ ! -e /usr/local/bin/gmake ]; then
${PKG_INSTALL} gmake
fi
rehash
fi
cd ${CWD}
FILE=${CWD}/freetype-${FREETYPE_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd freetype-${FREETYPE_VER}
DISABLE_HARFBUZZ=
if [ -e /usr/include/harfbuzz/hb-version.h ]; then
if grep -q -m1 'HB_VERSION_STRING "0\.9\.' /usr/include/harfbuzz/hb-version.h; then
DISABLE_HARFBUZZ="--with-harfbuzz=no"
fi
fi
echo "Configuring freetype-${FREETYPE_VER}..."
./configure ${DISABLE_HARFBUZZ} --enable-freetype-config
echo "Done. Making freetype-${FREETYPE_VER}..."
while echo "Trying to make FreeType..."; do
if [ "${OS}" = "FreeBSD" ]; then
/usr/local/bin/gmake
else
make
fi
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 freetype-${FREETYPE_VER}..."
if [ "${OS}" = "FreeBSD" ]; then
/usr/local/bin/gmake install
else
make install
fi
#fix for freetype.h path change: https://forum.directadmin.com/showthread.php?t=47795
if [ -e /usr/local/include/freetype2/freetype.h ] && [ ! -e /usr/local/include/freetype2/freetype/freetype.h ]; then
echo "Linking freetype/freetype.h to freetype.h"
mkdir -p /usr/local/include/freetype2/freetype
ln -s ../freetype.h /usr/local/include/freetype2/freetype/freetype.h
fi
#FreeType 2.5.2+ doesn't cleanup it's old ft2build.h.
if [ "`version_cmp ${FREETYPE_VER} 2.5.1 'freetype ver check'`" -ge 0 ]; then
FT_BUILD_OLD=/usr/local/include/ft2build.h
FT_BUILD_NEW=/usr/local/include/freetype2/ft2build.h
if [ -e ${FT_BUILD_OLD} ] && [ -e ${FT_BUILD_NEW} ]; then
echo "Removing old header: ${FT_BUILD_OLD}"
rm -f ${FT_BUILD_OLD}
fi
fi
echo "Done FreeType."
writeLog "FreeType ${FREETYPE_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
ICU_DOWNGRADED=0
downgradeICUver() {
if [ "${ICU_VER}" != "58_2" ]; then
DOWNGRADE_ICU=false
if [ "${OS}" = "FreeBSD" ]; then
MAINVER=`echo ${OS_VER} | cut -d. -f1`
if [ ${MAINVER} -le 10 ]; then
DOWNGRADE_ICU=true
fi
elif [ -e ${DEBIAN_VERSION} ]; then
if grep -m1 -q '^7' ${DEBIAN_VERSION}; then
DOWNGRADE_ICU=true
fi
else
if [ "${OS_CENTOS_VER}" = "5" ] || [ "${OS_CENTOS_VER}" = "6" ]; then
DOWNGRADE_ICU=true
fi
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
DOWNGRADE_ICU=true
fi
if ${DOWNGRADE_ICU}; then
if [ -s ${VERSIONS_FILE_CUSTOM} ]; then
if ! grep -m1 -q '^icu4c:' ${VERSIONS_FILE_CUSTOM}; then
ICU_VER="58_2"
ICU_DOWNGRADED=1
fi
else
ICU_VER="58_2"
ICU_DOWNGRADED=1
fi
fi
fi
}
doICU() {
# Downgrade ICU to 58_2 on OS not supporting C++11 std
downgradeICUver
if [ "${OS_CENTOS_VER}" = "6" ]; then
installDevtoolset
fi
if [ "${ICU_DOWNGRADED}" = "1" ]; then
#to prevent md5 lookup on wrong version.
getFile icu4c-${ICU_VER}-src.tgz
else
getFile icu4c-${ICU_VER}-src.tgz icu4c
fi
quitIfLocked doICU
# Fix icu digitlst.cpp:67:13: fatal error: xlocale.h: No such file or directory
if [ ! -e /usr/include/xlocale.h ] && [ -e /usr/include/locale.h ]; then
ln -s /usr/include/locale.h /usr/include/xlocale.h
fi
cd ${CWD}
FILE=${CWD}/icu4c-${ICU_VER}-src.tgz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd icu/source
mkdir -p /usr/local/icu
echo "Configuring icu-${ICU_VER}..."
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "./configure --prefix=/usr/local/icu --enable-rpath"
else
./configure --prefix=/usr/local/icu --enable-rpath
fi
echo "Done. Making icu-${ICU_VER}..."
while echo "Trying to make icu..."; do
if [ "$OS" = "FreeBSD" ]; then
/usr/local/bin/gmake -j ${CPU_CORES}
elif [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "make -j ${CPU_CORES}"
else
make -j ${CPU_CORES}
fi
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 icu4c-${ICU_VER}..."
if [ ! -d test/testdata ]; then
mkdir -p ./test/testdata
fi
if [ -e ./data/rules.mk ] && [ ! -e ./test/testdata/rules.mk ]; then
cp -pf ./data/rules.mk ./test/testdata/rules.mk
fi
if [ "$OS" = "FreeBSD" ]; then
/usr/local/bin/gmake install
elif [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "make install"
else
make install
fi
ln -sf /usr/local/icu/bin/icu-config /usr/local/bin/icu-config
echo "Done ICU."
writeLog "ICU ${ICU_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doIconv() {
getFile libiconv-${ICONV_VER}.tar.gz iconv
quitIfLocked doIconv
cd ${CWD}
FILE=${CWD}/libiconv-${ICONV_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd libiconv-${ICONV_VER}
echo "Configuring iconv-${ICONV_VER}..."
./configure --prefix=/usr/local --enable-extra-encodings
echo "Done. Making iconv-${ICONV_VER}..."
while echo "Trying to make iconv..."; do
make
#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 iconv-${ICONV_VER}..."
make install
echo "Done iconv."
writeLog "iconv ${ICONV_VER} installed"
removeLockfile
cd ${CWD}
if [ ! -e /usr/lib/libiconv.so.2 ] && [ -e /usr/local/lib/libiconv.so.2 ]; then
ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
fi
/sbin/ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doImageMagick() {
if [ "${IMAGICK_OPT}" != "yes" ]; then
do_exit 1 "You cannot install ImageMagick, because you do not have imagick=yes set in options.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}..."
./configure --prefix=/usr/local
echo "Done. Making ImageMagick-${IMAGEMAGICK_VER}..."
while echo "Trying to make imagemagick..."; do
if [ "$OS" = "FreeBSD" ]; then
gmake -j ${CPU_CORES}
else
make -j ${CPU_CORES}
fi
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}..."
if [ "$OS" = "FreeBSD" ]; then
gmake install
else
make install
fi
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
}
####################################################
installIMagick() {
if [ -z $1 ] || [ "$1" = "no" ] || [ ! -x /usr/local/php$1/bin/phpize ]; then
return
fi
echo "Installing imagick-${IMAGICK_VER} PHP extension for PHP $1..."
getFile imagick/imagick-${IMAGICK_VER}.tgz imagick imagick-${IMAGICK_VER}.tgz
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
if [ "${OS}" = "FreeBSD" ]; then
CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure --with-php-config=/usr/local/php$1/bin/php-config
else
./configure --with-php-config=/usr/local/php$1/bin/php-config
fi
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
if [ "${OS}" = "FreeBSD" ]; then
CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure --with-php-config=/usr/local/php${PHP_EXT_SHORTRELEASE}/bin/php-config
else
./configure --with-php-config=/usr/local/php${PHP_EXT_SHORTRELEASE}/bin/php-config ${4}
fi
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" ]; 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" ]; 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..."
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}
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
if [ "${OS}" = "FreeBSD" ]; then
CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure --with-php-config=/usr/local/php$3/bin/php-config
else
./configure --with-php-config=/usr/local/php$3/bin/php-config
fi
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
UNSUPPORTED_VERSIONS="53 54 55 56 70 71"
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}
}
doPhalcon() {
cd ${CWD}
if [ "${PHP_PHALCON_OPT}" = "yes" ]; then
doPsr
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
UNSUPPORTED_VERSIONS="53 54 55 56 70 71"
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 [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then
if [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage pam-devel` -ne 0 ]; then
yum -y install pam-devel
ldconfig
fi
fi
elif [ "${OS}" != "FreeBSD" ]; then
if [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libpam0g-dev` -ne 0 ]; then
apt-get -y install libpam0g-dev
ldconfig
fi
fi
fi
UW_PATCH=1006_openssl1.1_autoverify.patch
wget -O ${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 [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then
if [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage gmp-devel` -ne 0 ]; then
yum -y install gmp-devel
ldconfig
fi
fi
elif [ "${OS}" != "FreeBSD" ]; then
if [ -x /usr/bin/dpkg-query ]; then
if [ `checkDebianPackage libgmp-dev` -ne 0 ]; then
apt-get -y install libgmp-dev
ldconfig
fi
fi
elif [ "${OS}" = "FreeBSD" ] && [ ! -e /usr/local/include/gmp.h ]; then
pkg install -y gmp
ldconfig
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
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}
}
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=""
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}
}
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}" = "XMLRPC" ]; then
doPHPXmlrpc
elif [ "${setting}" = "GMP" ]; then
doPHPGmp
elif [ "${setting}" = "PHALCON" ]; then
doPhalcon
elif [ "${setting}" = "IMAGICK" ]; then
doIMagick
elif [ "${setting}" = "IONCUBE" ]; then
doIoncube
elif [ "${setting}" = "SNUFFLEUPAGUS" ]; then
doSnuffleupagus
elif [ "${setting}" = "OPCACHE" ]; then
doOpcache
elif [ "${setting}" = "ZEND" ]; then
doZend
fi
fi
}
done
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
cagefsctl_update
fi
}
####################################################
doLibxslt() {
getFile libxslt-${LIBXSLT_VER}.tar.gz libxslt
quitIfLocked doLibxslt
cd ${CWD}
FILE=${CWD}/libxslt-${LIBXSLT_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd libxslt-${LIBXSLT_VER}
echo "Configuring libxslt-${LIBXSLT_VER}..."
${CWD}/${LIBXSLT_CONFIGURE}
echo "Done. Making libxslt-${LIBXSLT_VER}..."
while echo "Trying to make libxslt..."; 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 libxslt-${LIBXSLT_VER}..."
make install
echo "Done libxslt."
writeLog "libxslt ${LIBXSLT_VER} installed"
removeLockfile
cd ${CWD}
/sbin/ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doLibmagic() {
getFile libmagic-${LIBMAGIC_VER}.tar.gz libmagic
quitIfLocked doLibmagic
cd ${CWD}
FILE=${CWD}/libmagic-${LIBMAGIC_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd libmagic-${LIBMAGIC_VER}
echo "Configuring libmagic-${LIBMAGIC_VER}..."
./configure --prefix=/usr/local
echo "Done. Making libmagic-${LIBMAGIC_VER}..."
while echo "Trying to make libmagic..."; 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 libmagic-${LIBMAGIC_VER}..."
make install
echo "Done libmagic."
writeLog "libmagic ${LIBMAGIC_VER} installed"
removeLockfile
cd ${CWD}
/sbin/ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doZlib() {
quitIfLocked doZlib
cd ${CWD}
getFile zlib-${ZLIB_VER}.tar.gz zlib-current
tar xzf zlib-${ZLIB_VER}.tar.gz --no-same-owner
cd zlib-${ZLIB_VER}
./configure --prefix=/usr/local/lib_da
while echo "Trying to make libz..."; 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 "zlib ${ZLIB_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doLibxml2() {
getFile libxml2-${LIBXML2_VER}.tar.gz libxml2-current
quitIfLocked doLibxml2
cd ${CWD}
FILE=${CWD}/libxml2-${LIBXML2_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd libxml2-${LIBXML2_VER}
echo "Configuring libxml2-${LIBXML2_VER}..."
#fix for this bug on FreeBSD 6:
#https://forums.freebsd.org/showthread.php?t=20273
if [ "${OS}" = "FreeBSD" ] && [ "${MAINVER}" = "6" ]; then
echo "Patching configure to address this bug:"
echo "https://forums.freebsd.org/showthread.php?t=20273"
perl -pi -e 's/WIN32_EXTRA_PYTHON_LIBADD=\"/#WIN32_EXTRA_PYTHON_LIBADD=\"/' configure
fi
#for old systems that still have /usr/local/lib/libz.so.
#they need to compile against it, as it will be found first at binary runtime.
if [ -s /usr/local/lib/libz.so ]; then
perl -pi -e 's#with-zlib=/usr$#with-zlib=/usr/local#' ${CWD}/${LIBXML2_CONFIGURE}
fi
${CWD}/${LIBXML2_CONFIGURE}
#causes "/usr/local/bin/ld: cannot find -liconv"
# if [ "${OS}" = "FreeBSD" ]; then
# if [ ${MAINVER} -ge 10 ]; then
# if ! grep -m1 -q 'without-iconv' ${CWD}/${LIBXML2_CONFIGURE}; then
# perl -pi -e 's#./configure#./configure --without-iconv#' ${CWD}/${LIBXML2_CONFIGURE}
# fi
# fi
# fi
echo "Done. Making libxml2-${LIBXML2_VER}..."
while echo "Trying to make libxml2..."; do
#make -j ${CPU_CORES}
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 libxml2-${LIBXML2_VER}..."
make install
echo "Done libxml2. It is recommended to reinstall libxslt after update of libxml2."
writeLog "libxml2 ${LIBXML2_VER} installed"
removeLockfile
cd ${CWD}
/sbin/ldconfig
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
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 +x /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
}
####################################################
doLego() {
cd ${WORKDIR}
if [ "${OS}" = "FreeBSD" ]; then
LEGO_FILENAME=lego_v${LEGO_VER}_freebsd_amd64.tar.gz
getFile lego/${LEGO_FILENAME} lego_freebsd ${LEGO_FILENAME}
elif [ "${OS_CENTOS_VER}" = "6" ] && [ "${B64}" = "0" ]; then
LEGO_FILENAME=lego_v${LEGO_VER}_linux_386.tar.gz
getFile lego/${LEGO_FILENAME} lego_386 ${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=3.8.0
getFile lego/dnsproviders-${DNSPROVIDERS_VER}.json dnsproviders dnsproviders.json
mv -f dnsproviders.json ${DNSPROVIDERS_JSON}
chmod 600 ${DNSPROVIDERS_JSON}
chown diradmin:diradmin ${DNSPROVIDERS_JSON}
echo "Lego ${LEGO_VER} Installed."
writeLog "Lego ${LEGO_VER} installed"
}
doLibzip() {
getFile libzip-${LIBZIP_VER}.tar.gz libzip
quitIfLocked doLibzip
if [ -e /etc/debian_version ]; then
CMAKE_NAME="cmake"
elif [ "${OS}" = "FreeBSD" ]; then
CMAKE_NAME="cmake"
elif [ "${OS_CENTOS_VER}" = "6" ] || [ "${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}"
elif [ "${OS}" = "FreeBSD" ]; then
echo "${PKG_INSTALL} ${CMAKE_NAME}"
else
yum -y install ${CMAKE_NAME}
fi
fi
elif [ ! -e /usr/bin/cmake3 ]; then
yum -y install epel-release
yum -y install ${CMAKE_NAME} --enablerepo=epel
fi
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
elif [ "${OS}" = "FreeBSD" ]; then
pkg -y install libuv
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
}
####################################################
doM4() {
cd ${CWD}
getFile m4-${M4_VER}.tar.gz m4
quitIfLocked doM4
cd ${CWD}
FILE=${CWD}/m4-${M4_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
M4_P1=0001-fflush-adjust-to-glibc-2.28-libio.h-removal.patch
M4_P2=0002-fflush-be-more-paranoid-about-libio.h-change.patch
getFile patches/${M4_P1} ${M4_P1}
getFile patches/${M4_P2} ${M4_P2}
cd m4-${M4_VER}
if [ -e ${WORKDIR}/patches/${M4_P1} ]; then
echo "Patching M4 for glibc-2.28"
echo "https://github.com/buildroot/buildroot/commit/c48f8a64626c60bd1b46804b7cf1a699ff53cdf3"
patch -p1 < ${WORKDIR}/patches/${M4_P1}
patch -p1 < ${WORKDIR}/patches/${M4_P2}
fi
echo "Configuring m4-${M4_VER}..."
./configure --prefix=/usr/local
echo "Done. Making m4-${M4_VER}..."
while echo "Trying to make m4..."; do
LANG=c 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 m4-${M4_VER}..."
LANG=c make install
echo "Done m4"
writeLog "m4 ${M4_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doAutoconf() {
if [ "${AUTOCONF_OPT}" != "yes" ]; then
do_exit 1 "You cannot install autoconf, because you do not have it set in options.conf file."
fi
cd ${CWD}
getFile autoconf-${AUTOCONF_VER}.tar.gz autoconf
quitIfLocked doAutoconf
cd ${CWD}
FILE=${CWD}/autoconf-${AUTOCONF_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd autoconf-${AUTOCONF_VER}
echo "Configuring autoconf-${AUTOCONF_VER}..."
./configure --prefix=/usr/local
echo "Done. Making autoconf-${AUTOCONF_VER}..."
while echo "Trying to make autoconf..."; do
LANG=c 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 autoconf-${AUTOCONF_VER}..."
LANG=c make install
echo "Done Autoconf"
writeLog "Autoconf ${AUTOCONF_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doAutomake() {
if [ "${AUTOMAKE_OPT}" != "yes" ]; then
do_exit 1 "You cannot install automake, because you do not have it set in options.conf file."
fi
cd ${CWD}
getFile automake-${AUTOMAKE_VER}.tar.gz automake
quitIfLocked doAutomake
cd ${CWD}
FILE=${CWD}/automake-${AUTOMAKE_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd automake-${AUTOMAKE_VER}
echo "Configuring automake-${AUTOMAKE_VER}..."
./configure --prefix=/usr/local
echo "Done. Making automake-${AUTOMAKE_VER}..."
while echo "Trying to make automake..."; do
LANG=c 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 automake-${AUTOMAKE_VER}..."
LANG=c make install
echo "Done Automake"
writeLog "Automake ${AUTOMAKE_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doHelp2Man() {
cd ${CWD}
getFile help2man-${HELP2MAN_VER}.tar.xz help2man
quitIfLocked doHelp2Man
cd ${CWD}
FILE=${CWD}/help2man-${HELP2MAN_VER}.tar.xz
checkFile ${FILE}
echo "Extracting ..."
tar xJf ${FILE} --no-same-owner
echo "Done."
cd help2man-${HELP2MAN_VER}
echo "Configuring help2man-${HELP2MAN_VER}..."
./configure --prefix=/usr/local
echo "Done. Making help2man-${HELP2MAN_VER}..."
while echo "Trying to make help2man..."; do
if [ "$OS" = "FreeBSD" ]; then
LANG=c gmake
else
LANG=c make
fi
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 help2man-${HELP2MAN_VER}..."
if [ "$OS" = "FreeBSD" ]; then
LANG=c gmake install
else
LANG=c make install
fi
echo "Done Help2Man"
writeLog "Help2Man ${HELP2MAN_VER} installed"
removeLockfile
cd ${CWD}
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
}
####################################################
doLibtool() {
if [ "${LIBTOOL_OPT}" != "yes" ]; then
do_exit 1 "You cannot install libtool, because you do not have it set in options.conf file."
fi
cd ${CWD}
getFile libtool-${LIBTOOL_VER}.tar.gz libtool
quitIfLocked doLibtool
cd ${CWD}
FILE=${CWD}/libtool-${LIBTOOL_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd libtool-${LIBTOOL_VER}
echo "Configuring libtool-${LIBTOOL_VER}..."
./configure --prefix=/usr/local
echo "Done. Making libtool-${LIBTOOL_VER}..."
while echo "Trying to make libtool..."; do
LANG=c 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 libtool-${LIBTOOL_VER}..."
LANG=c make install
#because the programmers of libtool decided not to actually show the true version
#we have to change the version to make it accurate so things match
if ! grep -m1 -q ${LIBTOOL_VER} /usr/local/bin/libtool; then
perl -pi -e "s/2.2.6/${LIBTOOL_VER}/" /usr/local/bin/libtool
fi
echo "Done Libtool"
writeLog "Libtool ${LIBTOOL_VER} installed"
removeLockfile
cd ${CWD}
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
PREFIX=/usr
LIBPATH=/usr/lib
INCPATH=/usr/include
if [ ${OS} = "FreeBSD" ]; then
PREFIX=/usr/local
LIBPATH=/usr/local/lib
INCPATH=/usr/local/include
fi
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}
getFile patches/awstats_url.patch awstats_url_patch
#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}
if [ "`version_cmp ${AWSTATS_VER} 7.3 'awstats ver check'`" -lt 0 ]; then
#patch the url bug
echo "Patching awstats_buildstaticpages.pl to fix url bug..."
cd ${REALPATH}/tools
cp -f ${WORKDIR}/patches/awstats_url.patch ./awstats_url.patch
if [ ! -s awstats_url.patch ]; then
echo "Error with awstats_url.patch. File is missing or empty"
echo "This will cause url issues in the static awstats output."
else
patch -p0 < awstats_url.patch
fi
fi
#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
if [ "${OS}" = "FreeBSD" ]; then
UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=python${UNIT_COMPONENT_VER} --config=/usr/local/bin/python3-config"
else
UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=python${UNIT_COMPONENT_VER} --config=/usr/bin/python3-config"
fi
elif [ "${UNIT_COMPONENT}" = "perl" ]; then
UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=${UNIT_COMPONENT} --${UNIT_COMPONENT}=${UNIT_COMPONENT}"
elif [ "${UNIT_COMPONENT}" = "ruby" ]; then
UNIT_COMPONENT_ADDITIONAL_FLAGS="--module=${UNIT_COMPONENT}${UNIT_COMPONENT_VER} --${UNIT_COMPONENT}=${UNIT_COMPONENT}"
fi
./configure ${UNIT_COMPONENT} ${UNIT_COMPONENT_ADDITIONAL_FLAGS}
if [ "${UNIT_COMPONENT}" = "go" ]; then
if [ -d /root/go/src/unit.nginx.org ]; then
rm -rf /root/go/src/unit.nginx.org
fi
make ${UNIT_COMPONENT}-install
elif [ "${UNIT_COMPONENT}" = "nodejs" ]; then
make node-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
#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 [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then
if [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage epel-release` -ne 0 ]; then
yum -y install epel-release
fi
if [ "${OS_CENTOS_VER}" = "6" ]; then
APPENDED_PACKAGES=" python3-devel"
fi
MISSING_PACKAGES=" "
for package in golang 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 [ ! -z "${MISSING_PACKAGES}" ]; then
yum -y install ${MISSING_PACKAGES}
fi
fi
elif [ -e ${DEBIAN_VERSION} ]; then
if [ -x /usr/bin/dpkg-query ]; then
MISSING_PACKAGES=" "
for package in golang hg-fast-export libperl-dev python3-dev; 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
if [ "${OS}" = "FreeBSD" ]; then
if [ ! -x /usr/local/bin/go ]; then
pkg install -y go
fi
fi
#Install golang helpers for ability to compile go with nginx-unit module
doNginxUnit_module go
if [ -x /usr/bin/perl ] || [ -x /usr/local/bin/perl ]; then
doNginxUnit_module perl
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 [ -s /usr/include/ruby.h ] || [ -s /usr/local/include/ruby.h ]; 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 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
npm install -g --unsafe-perm unit-http
doNginxUnit_module nodejs
fi
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 unit.boot unit_boot
getFile unit.boot.freebsd unit_boot_freebsd
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}
#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}
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/unit ]; then
echo "Removing ${INITDDIR}/unit..."
rm -f ${INITDDIR}/unit
fi
#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
else
if [ ${OS} = "FreeBSD" ]; then
cp -f ${CWD}/unit.boot.freebsd /usr/local/etc/rc.d/unit
chmod 755 /usr/local/etc/rc.d/unit
#we don't officially support any debian withhout systemd
elif [ ! -e /etc/debian_version ]; then
cp -f ${CWD}/unit.boot /etc/rc.d/init.d/unit
chmod 755 /etc/rc.d/init.d/unit
/sbin/chkconfig unit on
fi
fi
if [ ! -e /etc/logrotate.d/unit ] && [ ${OS} != "FreeBSD" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/unit.logrotate -O /etc/logrotate.d/unit
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 ..
if [ ${OS} = "FreeBSD" ]; then
fetch -o ./${NAME}.tar.gz ${WEBPATH}/${CUSTOMBUILD_OPT}/${NAME}.tar.gz
else
wget ${WGET_CONNECT_OPTIONS} -O ./${NAME}.tar.gz ${WEBPATH}/${CUSTOMBUILD_OPT}/${NAME}.tar.gz
if [ ! -s ./${NAME}.tar.gz ]; then
echo "${boldon}Fileserver might be down, using the backup file server..${boldoff}"
wget ${WGET_CONNECT_OPTIONS} -O ./${NAME}.tar.gz ${WEBPATH_BACKUP}/${CUSTOMBUILD_OPT}/${NAME}.tar.gz
fi
fi
if [ -s ${NAME}.tar.gz ]; then
echo "Extracting ${NAME}.tar.gz..."
tar xzf ${NAME}.tar.gz --no-same-owner
if [ $? -ne 0 ]; then
echo "Unable to extract ${NAME}.tar.gz."
fi
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
}
####################################################
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 '' >> ${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 ' ' >> ${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
if [ "${SYSTEMD}" = "yes" ]; then
systemctl restart php-fpm${PHP1_SHORTRELEASE}.service
systemctl enable php-fpm${PHP1_SHORTRELEASE}.service
else
${INITDDIR}/php-fpm${PHP1_SHORTRELEASE} restart
if [ ${OS} = "FreeBSD" ]; then
${INITDDIR}/php-fpm${PHP1_SHORTRELEASE} restart
elif [ -e /etc/debian_version ]; then
update-rc.d php-fpm${PHP1_SHORTRELEASE} defaults
else
/sbin/chkconfig php-fpm${PHP1_SHORTRELEASE} on
fi
fi
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
if [ "${SYSTEMD}" = "yes" ]; then
systemctl restart php-fpm${PHP2_SHORTRELEASE}.service
systemctl enable php-fpm${PHP2_SHORTRELEASE}.service
else
${INITDDIR}/php-fpm${PHP2_SHORTRELEASE} restart
if [ ${OS} = "FreeBSD" ]; then
${INITDDIR}/php-fpm${PHP2_SHORTRELEASE} restart
elif [ -e /etc/debian_version ]; then
update-rc.d php-fpm${PHP2_SHORTRELEASE} defaults
else
/sbin/chkconfig php-fpm${PHP2_SHORTRELEASE} on
fi
fi
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
if [ "${SYSTEMD}" = "yes" ]; then
systemctl restart php-fpm${PHP3_SHORTRELEASE}.service
systemctl enable php-fpm${PHP3_SHORTRELEASE}.service
else
${INITDDIR}/php-fpm${PHP3_SHORTRELEASE} restart
if [ ${OS} = "FreeBSD" ]; then
${INITDDIR}/php-fpm${PHP3_SHORTRELEASE} restart
elif [ -e /etc/debian_version ]; then
update-rc.d php-fpm${PHP3_SHORTRELEASE} defaults
else
/sbin/chkconfig php-fpm${PHP3_SHORTRELEASE} on
fi
fi
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
if [ "${SYSTEMD}" = "yes" ]; then
systemctl restart php-fpm${PHP4_SHORTRELEASE}.service
systemctl enable php-fpm${PHP4_SHORTRELEASE}.service
else
${INITDDIR}/php-fpm${PHP4_SHORTRELEASE} restart
if [ ${OS} = "FreeBSD" ]; then
${INITDDIR}/php-fpm${PHP4_SHORTRELEASE} restart
elif [ -e /etc/debian_version ]; then
update-rc.d php-fpm${PHP4_SHORTRELEASE} defaults
else
/sbin/chkconfig php-fpm${PHP4_SHORTRELEASE} on
fi
fi
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
if [ "${SYSTEMD}" = "yes" ]; then
systemctl stop php-fpm${php_shortrelease}.service 2> /dev/null
systemctl disable php-fpm${php_shortrelease}.service 2> /dev/null
if [ -e ${INITDDIR}/php-fpm${php_shortrelease} ]; then
rm -f ${INITDDIR}/php-fpm${php_shortrelease}
fi
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
else
if [ -e ${INITDDIR}/php-fpm${php_shortrelease} ]; then
if [ -e /etc/debian_version ]; then
update-rc.d php-fpm${php_shortrelease} remove
elif [ -e /sbin/chkconfig ]; then
/sbin/chkconfig php-fpm${php_shortrelease} off
fi
${INITDDIR}/php-fpm${php_shortrelease} stop
fi
set_service php-fpm${php_shortrelease} delete
rm -f ${INITDDIR}/php-fpm${php_shortrelease}
fi
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 "" >> ${SUPHP_HTTPD}
echo '' >> ${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 ' ' >> ${SUPHP_HTTPD}
echo " " >> ${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 "" >> ${SUPHP_HTTPD}
echo " " >> ${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}
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}
#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
#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}
#protect other places
printf '\tlocation ~ /roundcube/(bin|SQL|config|logs|temp)/ {\n' >> ${NW}
printf '\t\tdeny all;\n' >> ${NW}
printf '\t}\n' >> ${NW}
printf '\tlocation ~ /phpMyAdmin/log/ {\n' >> ${NW}
printf '\t\tdeny all;\n' >> ${NW}
printf '\t}\n' >> ${NW}
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}
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
#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/(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}
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
if [ ${OS} = "FreeBSD" ]; then
FMD5=`$MD5SUM -q ${DHF}`
else
FMD5=`$MD5SUM ${DHF} | cut -d\ -f1`
fi
else
FMD5=""
fi
if [ "${MD5}" != "${FMD5}" ]; then
wget ${WGET_CONNECT_OPTIONS} -q -O ${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() {
DEFAULT_HTTP2=1
if [ "${OS_CENTOS_VER}" = "6" ]; then
DEFAULT_HTTP2=0
elif [ "${OS_CENTOS_VER}" = "7" ]; then
#Only CentOS 7.3 started to support ALPN (OpenSSL 1.0.2k)
OPENSSL_H=/usr/include/openssl/ssl.h
if [ -e ${OPENSSL_H} ]; then
if ! grep -m1 -q alpn_client_proto_list_len ${OPENSSL_H}; then
DEFAULT_HTTP2=0
fi
fi
fi
HTTP2=`getDA_Opt http2 ${DEFAULT_HTTP2}`
}
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 ] && [ "${DEFAULT_HTTP2}" = "1" ]; 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
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" ]; then
if ! grep -m1 -q 'ProtocolsHonorOrder' ${PHPMODULES}; then
echo 'ProtocolsHonorOrder On' >> ${PHPMODULES}
echo 'Protocols h2 h2c http/1.1' >> ${PHPMODULES}
fi
fi
fi
}
set_ProxyFCGIBackendType() {
# Needed only for apache 2.4.26 + PHP-FPM
AP2_CURRENT_MINOR_VER="`/usr/sbin/httpd -v | grep -m1 'Server version:' | awk '{ print $3 }' | cut -d/ -f2 | cut -d. -f3`"
if [ "${HAVE_FPM_CGI}" = "yes" ] && [ "${AP2_CURRENT_MINOR_VER}" -eq 26 ]; then
if ! grep -m1 -q 'ProxyFCGIBackendType' ${PHPMODULES}; then
echo 'ProxyFCGIBackendType GENERIC' >> ${PHPMODULES}
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 [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
set_ProxyFCGIBackendType
fi
if [ "`version_cmp ${APACHE2_VER} 2.4.43`" -lt 0 ]; then
if [ "${SYSTEMD}" = "yes" ] && [ -e /usr/lib/apache/mod_systemd.so ]; then
set_LoadModule systemd_module mod_systemd.so
fi
elif [ -s ${PHPMODULES} ]; then
if grep -m1 -q mod_systemd ${PHPMODULES}; then
sed -i "/^mod_systemd/d" ${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 [ "${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
# 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 php7_module libphp7.so
else
set_LoadModule php5_module libphp5.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=""
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_CIPHERSUITE="$(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 ! 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
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:MEDIUM:+TLSv1:!SSLv2:!SSLv3"
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
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"
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"
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"
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
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 [ "${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
#CentOS 5 needs -TLSv1 removed from httpd-ssl.conf.
if [ "${OS_CENTOS_VER}" = "5" ]; then
echo "CentOS 5 needs TLSv1, clearing '-TLSv1' from exlude list."
perl -pi -e 's/SSLProtocol All (.*) -TLSv1/SSLProtocol All $1/' ${APCONFDIR}/extra/httpd-ssl.conf
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
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}
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
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 '' >> /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 ' ' >> /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
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
echo "Restarting apache."
control_service httpd restart
elif [ "${WEBSERVER_OPT}" = "litespeed" ]; then
echo "Restarting litespeed."
control_service litespeed restart
#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}
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=nginx" >> ${TASK_QUEUE}
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
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 "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() {
if [ "$OS" = "FreeBSD" ]; then
CRONFILE=$WORKDIR/sa-update
else
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
fi
if [ "${SA_UPDATE_OPT}" = "no" ] && [ "$OS" = "FreeBSD" ]; then
if grep -m1 -q $CRONFILE /etc/crontab; then
grep -v $CRONFILE /etc/crontab > /etc/crontab.tmp
if [ ! -s /etc/crontab.tmp ]; then
echo "/etc/crontab.tmp doesn't exist or is size 0. Aborting"
exit 3
fi
mv -f /etc/crontab.tmp /etc/crontab
chmod 644 /etc/crontab
fi
fi
if [ "${SA_UPDATE_OPT}" != "no" ]; then
echo "Installing sa-update cronjob..."
getFile sa-update.sh sa-update-sh
if [ "$OS" = "FreeBSD" ]; then
if [ ! -e /etc/crontab ]; then
echo "You cannot run cronjob, because you do not have /etc/crontab."
fi
elif [ ! -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}
#for freebsd, we have to add it to /etc/crontab
if [ "$OS" = "FreeBSD" ]; then
if grep -q ${CRONFILE} /etc/crontab; then
cp -f /etc/crontab /etc/crontab.back
STR="perl -pi -e 's#.*${CRONFILE}\n##' /etc/crontab"
eval $STR
fi
if [ "${SA_UPDATE_OPT}" = "daily" ]; then
echo "02 4 * * * root ${CRONFILE}" >> /etc/crontab
elif [ "${SA_UPDATE_OPT}" = "weekly" ]; then
echo "02 4 * * 0 root ${CRONFILE}" >> /etc/crontab
elif [ "${SA_UPDATE_OPT}" = "monthly" ]; then
echo "02 4 1 * * root ${CRONFILE}" >> /etc/crontab
fi
fi
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}
if [ "$OS" = "FreeBSD" ]; then
CRONFILE=$WORKDIR/cronfile
else
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
fi
if [ "${CRON_OPT}" != "yes" ]; then
rm -f ${CRONFILE}
if [ "$OS" = "FreeBSD" ]; then
if grep -m1 -q $CRONFILE /etc/crontab; then
grep -v $CRONFILE /etc/crontab > /etc/crontab.tmp
if [ ! -s /etc/crontab.tmp ]; then
echo "/etc/crontab.tmp doesn't exist or is size 0. Aborting"
exit 3
fi
mv -f /etc/crontab.tmp /etc/crontab
chmod 644 /etc/crontab
fi
fi
do_exit 1 "You cannot run cronjob, because you do not have it set in options.conf file."
fi
if [ "$OS" = "FreeBSD" ]; then
if [ ! -e /etc/crontab ]; then
echo "You cannot run cronjob, because you do not have /etc/crontab."
fi
elif [ ! -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" ] || [ "${DA_AUTOUPDATE_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" ] && [ "${DA_AUTOUPDATE_OPT}" = "yes" ]; then
echo './build update_da' >> ${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}
#for freebsd, we have to add it to /etc/crontab
if [ "$OS" = "FreeBSD" ]; then
if grep -q $CRONFILE /etc/crontab; then
cp -f /etc/crontab /etc/crontab.back
STR="perl -pi -e 's#.*${CRONFILE}\n##' /etc/crontab"
eval $STR
fi
if [ "${CRON_FREQUENCY_OPT}" = "daily" ]; then
echo "02 4 * * * root $CRONFILE" >> /etc/crontab
elif [ "${CRON_FREQUENCY_OPT}" = "weekly" ]; then
echo "02 4 * * 0 root $CRONFILE" >> /etc/crontab
elif [ "${CRON_FREQUENCY_OPT}" = "monthly" ]; then
echo "02 4 1 * * root $CRONFILE" >> /etc/crontab
fi
fi
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
getFile dovecot.boot dovecot_boot
getFile dovecot.boot.freebsd dovecot_boot_freebsd
getFile dovecot.boot.debian dovecot_boot_debian
getFile dovecot.conf dovecot_conf
getFile exim.conf.dovecot.patch eximdovecotpatch
}
####################################################
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
getFile nginx.boot nginx_boot
getFile nginx.boot.freebsd nginx_boot_freebsd
getFile nginx.boot.debian nginx_boot_debian
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}
getFile nghttp2-${NGHTTP2_VER}.tar.gz nghttp2
getFile httpd_2 httpd_2_boot
getFile httpd_2_freebsd httpd_2_boot_freebsd
getFile httpd_2_debian httpd_2_boot_debian
fi
fi
getFile apr-${APR_VER}.tar.gz apr
getFile apr-util-${APR_UTIL_VER}.tar.gz apr-util
if [ "${EXIM_SRS_OPT}" = "yes" ]; then
if [ "${LIBSRS_ALT_VER}" != "0" ]; then
getFile libsrs_alt-${LIBSRS_ALT_VER}.tar.bz2 libsrs_alt
fi
fi
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 [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; 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" ]; then
getFile curl-${CURL_VER}.tar.gz curl
fi
if [ "${PCRE_VER}" != "0" ]; then
if [ "$NEW_PCRE_OPT" = "yes" ]; then
getFile pcre-${PCRE_VER}.tar.gz pcre_current
else
getFile pcre-${PCRE_VER}.tar.gz pcre
fi
fi
if [ "${PCRE2_VER}" != "0" ]; then
getFile pcre2-${PCRE2_VER}.tar.gz pcre2
fi
if [ "${MCRYPT_VER}" != "0" ]; then
getFile libmcrypt-${MCRYPT_VER}.tar.gz mcrypt
fi
if [ "${MHASH_VER}" != "0" ]; then
getFile mhash-${MHASH_VER}.tar.gz mhash
fi
if [ "${FREETYPE_VER}" != "0" ]; then
getFile freetype-${FREETYPE_VER}.tar.gz freetype
fi
if [ "${ICONV_VER}" != "0" ]; then
getFile libiconv-${ICONV_VER}.tar.gz iconv
fi
if [ "${LIBWEBP_VER}" != "0" ]; then
getFile libwebp/libwebp-${LIBWEBP_VER}.tar.gz libwebp libwebp-${LIBWEBP_VER}.tar.gz
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_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 [ "${LIBSODIUM_VER}" != "0" ]; then
getFile libsodium-${LIBSODIUM_VER}.tar.gz libsodium
fi
if [ "${LIBXML2_VER}" != "0" ]; then
getFile libxml2-${LIBXML2_VER}.tar.gz libxml2-current
fi
if [ "${LIBZIP_VER}" != "0" ]; then
getFile libzip-${LIBZIP_VER}.tar.gz libzip
fi
if [ "${LIBXSLT_VER}" != "0" ]; then
getFile libxslt-${LIBXSLT_VER}.tar.gz libxslt
fi
if [ "${ICU_VER}" != "0" ]; then
getFile icu4c-${ICU_VER}-src.tgz icu4c
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
# Mailman is not yet supported
# if [ "${MAILMAN_OPT}" = "yes" ]; then
# getFile mailman-${MAILMAN_VER}.tgz mailman
# 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
getFile proftpd proftpd_boot
getFile proftpd_freebsd proftpd_boot_freebsd
getFile proftpd_debian proftpd_boot_debian
fi
if [ "${SPAMD_OPT}" = "rspamd" ]; then
if [ "${RSPAMD_VER}" != "0" ]; then
getFile rspamd-${RSPAMD_VER}.tar.gz rspamd
fi
getFile rspamd spamd_boot
getFile rspamd_freebsd rspamd_boot_freebsd
getFile rspamd_debian rspamd_boot_debian
fi
if [ "${FTPD_OPT}" = "pureftpd" ]; then
if [ "${PUREFTPD_VER}" != "0" ]; then
getFile pure-ftpd-${PUREFTPD_VER}.tar.gz pureftpd
fi
getFile pure-ftpd pure-ftpd_boot
getFile pure-ftpd_freebsd pure-ftpd_boot_freebsd
getFile pure-ftpd_debian pure-ftpd_boot_debian
fi
if [ "${ZEND_OPT}" = "yes" ] && [ "${OS}" != "FreeBSD" ]; 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} ${ZENDNAME_PHP53_MD5}
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} ${ZENDNAME_PHP54_MD5}
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 [ "${SUPHP_VER}" != "0" ]; then
getFile suphp-${SUPHP_VER}.tar.gz suphp_current
fi
if [ "${EXIM_OPT}" = "yes" ]; then
if [ "${EXIM_VER}" != "0" ]; then
getFile exim-${EXIM_VER}.tar.gz exim
fi
getFile exim_boot exim_boot
getFile exim_freebsd exim_boot_freebsd
getFile exim_debian exim_boot_debian
fi
if [ "${DOVECOT_OPT}" = "yes" ]; then
updateDovecot
fi
if [ "${AUTOCONF_VER}" != "0" ]; then
getFile autoconf-${AUTOCONF_VER}.tar.gz autoconf
fi
if [ "${AUTOMAKE_VER}" != "0" ]; then
getFile automake-${AUTOMAKE_VER}.tar.gz automake
fi
if [ "${M4_VER}" != "0" ]; then
getFile m4-${M4_VER}.tar.gz m4
fi
if [ "${LIBTOOL_VER}" != "0" ]; then
getFile libtool-${LIBTOOL_VER}.tar.gz libtool
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
}
####################################################
doLibJpeg() {
cd ${CWD}
getFile ${JPEGFILE}
tar xzf ${JPEGFILE} --no-same-owner
cd ${JPEGDIR}
./configure
while echo "Trying to make libjpeg..."; 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
make install
writeLog "${JPEGFILE} installed"
}
####################################################
doLibsodium() {
quitIfLocked doLibsodium
cd ${CWD}
getFile libsodium-${LIBSODIUM_VER}.tar.gz libsodium_current
tar xzf libsodium-${LIBSODIUM_VER}.tar.gz --no-same-owner
cd libsodium-${LIBSODIUM_VER}
./configure --prefix=/usr/local
while echo "Trying to make libsodium"; 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
mkdir -p /usr/local/include/libsodium >/dev/null 2>&1
make install
writeLog "libsodium ${LIBSODIUM_VER} installed"
removeLockfile
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
}
####################################################
doLibWebp() {
quitIfLocked doLibWebp
cd ${CWD}
getFile libwebp/libwebp-${LIBWEBP_VER}.tar.gz libwebp libwebp-${LIBWEBP_VER}.tar.gz
tar xzf libwebp-${LIBWEBP_VER}.tar.gz --no-same-owner
cd libwebp-${LIBWEBP_VER}
./configure --prefix=/usr/local
while echo "Trying to make libwebp"; 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
writeLog "libwebp ${LIBWEBP_VER} installed"
ldconfig
removeLockfile
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
}
####################################################
doLibPng() {
quitIfLocked doLibPng
cd ${CWD}
getFile libpng-${PNG_VER}.tar.gz libpng_current
tar xzf libpng-${PNG_VER}.tar.gz --no-same-owner
cd libpng-${PNG_VER}
./configure --prefix=/usr/local
while echo "Trying to make libpng"; 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
mkdir -p /usr/local/include/libpng >/dev/null 2>&1
make install
writeLog "libpng ${PNG_VER} installed"
removeLockfile
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
cd ${CWD}
}
####################################################
dogeoipupdateCron() {
CRONFILE=/etc/cron.weekly/libmaxminddb-update
echo "Installing libmaxminddb-update cronjob..."
if [ "$OS" = "FreeBSD" ]; then
if [ ! -e /etc/crontab ]; then
echo "You cannot run cronjob, because you do not have /etc/crontab."
fi
elif [ ! -d /etc/cron.weekly ]; then
do_exit 1 "You cannot run cronjob, because you do not have /etc/cron.weekly directory."
fi
#for freebsd, we have to add it to /etc/crontab
if [ "$OS" = "FreeBSD" ]; then
if ! grep -m1 -q '/usr/local/bin/geoipupdate' /etc/crontab; then
echo '40 7 * * 3 root if [ -x /usr/local/bin/geoipupdate ]; then /usr/local/bin/geoipupdate; fi' >> /etc/crontab
fi
else
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}
fi
}
####################################################
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}
}
####################################################
doRagel() {
quitIfLocked doRagel
cd ${CWD}
getFile ragel-${RAGEL_VER}.tar.gz ragel
tar xzf ragel-${RAGEL_VER}.tar.gz --no-same-owner
cd ragel-${RAGEL_VER}
./configure --prefix=/usr/local
while echo "Trying to make ragel"; 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 "ragel ${RAGEL_VER} installed"
removeLockfile
cd ${CWD}
}
####################################################
doLuaJIT() {
quitIfLocked doLuaJIT
cd ${CWD}
getFile LuaJIT-${LUAJIT_VER}.tar.gz luajit
tar xzf LuaJIT-${LUAJIT_VER}.tar.gz --no-same-owner
cd LuaJIT-${LUAJIT_VER}
while echo "Trying to make LuaJIT"; 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 "LuaJIT ${LUAJIT_VER} installed"
removeLockfile
cd ${CWD}
}
####################################################
doGlib() {
quitIfLocked doGlib
cd ${CWD}
if [ ! -e /usr/include/x86_64-linux-gnu/ffi.h ] && [ ! -e /usr/lib64/libffi.so ] && [ ! -e /usr/include/ffi.h ] && [ ! -e /usr/local/include/ffi.h ]; then
echo "Cannot find libffi, installing..."
if [ -e /etc/debian_version ]; then
apt-get -y install libffi-dev
elif [ "${OS}" = "FreeBSD" ]; then
${PKG_INSTALL} -y libffi
else
yum -y install libffi-devel
fi
fi
if [ "${NEW_PCRE_OPT}" = "no" ]; then
echo "New PCRE version is needed. Please run './build set new_pcre yes; ./build pcre; ./build set exim yes; ./build exim"
exit 1
fi
getFile glib-${GLIB_VER}.tar.xz glib
tar xJf glib-${GLIB_VER}.tar.xz --no-same-owner
cd glib-${GLIB_VER}
./configure --prefix=/usr/local --with-libiconv=gnu --disable-selinux --disable-libmount --disable-gtk-doc-html --disable-xattr --disable-dtrace --disable-systemtap
while echo "Trying to make glib"; do
if [ "${OS}" = "FreeBSD" ]; then
gmake -j ${CPU_CORES}
else
make -j ${CPU_CORES}
fi
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
if [ "${OS}" = "FreeBSD" ]; then
gmake install
else
make install
fi
if [ -e /usr/local/lib/glib-2.0/include/glibconfig.h ] && [ ! -e /usr/local/include/glibconfig.h ]; then
ln -s /usr/local/lib/glib-2.0/include/glibconfig.h /usr/local/include/glibconfig.h
fi
writeLog "glib ${GLIB_VER} installed"
removeLockfile
cd ${CWD}
}
####################################################
convert() {
#delete old modules
#backup httpd.conf
#copy httpd.conf ssl.conf
#insert all Include lines
#tokenize the |IP|
cd ${CWD}
rm -rf /usr/lib/apache/*
if [ "`grep -m1 -c 'Port 80' /etc/httpd/conf/httpd.conf`" = "1" ]; then
mv -f ${HTTPDCONF} ${HTTPDCONF}.1.3.backup
if [ ! -e ${APCONFDIR}/httpd.conf ]; then
do_exit 1 "cannot find httpd.conf in ${APCONFDIR} directory"
fi
if [ ! -e ${APCONFDIR}/extra/httpd-ssl.conf ]; then
do_exit 1 "cannot find ssl.conf in the ${NAME} directory"
fi
cp -rf ${APCONFDIR} ${HTTPDDIR}
cp -rf ${HTTPDCONF}.1.3.backup/ssl.key ${HTTPDCONF}
cp -rf ${HTTPDCONF}.1.3.backup/ssl.crt ${HTTPDCONF}
cp -f ${APCONFDIR}/httpd.conf ${HTTPD_CONF}
cp -f ${APCONFDIR}/extra/httpd-mpm.conf ${HTTPDCONF}/extra/httpd-mpm.conf
if [ "${APCUSTOMCONFDIR}" != "0" ]; then
cp -rf ${APCUSTOMCONFDIR} ${HTTPDDIR}
fi
#tokenize the IP and ports
tokenize_IP
tokenize_ports
#add all the Include lines
doVhosts
cd ${CWD}
#check directadmin.conf file
if [ -s ${DACONF_FILE} ] && [ "`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
if [ -s ${DACONF_TEMPLATE_FILE} ] && [ "`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 [ "${OS}" = "FreeBSD" ]; then
cp -f httpd_2_freebsd /usr/local/etc/rc.d/httpd
chmod 755 /usr/local/etc/rc.d/httpd
else
if [ "${SYSTEMD}" = "yes" ]; then
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
if [ "${CLAMAV_OPT}" = "yes" ]; then
if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] || [ "${MODSECURITY_UPLOADSCAN_OPT}" = "yes" ]; 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
fi
systemctl daemon-reload
systemctl enable httpd.service
else
if [ -e /etc/debian_version ]; then
cp -f httpd_2_debian /etc/init.d/httpd
else
cp -f httpd_2 /etc/init.d/httpd
fi
chmod 755 /etc/init.d/httpd
/sbin/chkconfig httpd on
fi
fi
perl -pi -e 's/`grep -m1 apache_ver= ${DACONF_FILE}`/apache_ver=2.0/' ${DACONF_FILE}
perl -pi -e 's/`grep -m1 apache_ver= ${DACONF_TEMPLATE_FILE}`/apache_ver=2.0/' ${DACONF_TEMPLATE_FILE}
doRestartDA
echo "action=rewrite&value=ips" >> ${TASK_QUEUE}
echo "action=rewrite&value=httpd" >> ${TASK_QUEUE}
echo "action=directadmin&value=reload" >> ${TASK_QUEUE}
run_dataskq
writeLog "Converted Apache 1.3 to 2.x"
else
echo "$HTTPD_CONF seems to already be converted"
fi
}
doNghttp2() {
getFile nghttp2-${NGHTTP2_VER}.tar.gz nghttp2
quitIfLocked doNghttp2
set64
cd ${CWD}
FILE=${CWD}/nghttp2-${NGHTTP2_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ${FILE}..."
tar xzf ${FILE} --no-same-owner
cd nghttp2-${NGHTTP2_VER}
setFDSETSIZE
#configure
echo "Configuring nghttp2-${NGHTTP2_VER}"
./configure --enable-lib-only
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure nghttp2.\n"
do_exit 1
fi
echo "Done Configuration."
while echo "Trying to make nghttp2..."; 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 nghttp2..."
make install
cd ${CWD}
writeLog "nghttp2 ${NGHTTP2_VER} installed"
removeLockfile
}
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
#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 [ "${SYSTEMD}" = "yes" ]; then
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
fi
if [ ! -s /usr/include/expat.h ] && [ ! -s /usr/local/include/expat.h ]; then
if [ "${OS}" = "FreeBSD" ]; then
pkg install -y expat
elif [ -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
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
if [ "${AP2_MINOR_VER}" -ge 31 ]; then
perl -pi -e 's|NOT_IN_DIR_LOC_FILE|NOT_IN_DIR_CONTEXT|g' patches/mod_suexec_directory.patch
fi
getFile patches/suexec-safe.patch suexec-safe.patch
getFile patches/sdbm_private.patch sdbm_private.patch
fi
getFile httpd_2 httpd_2_boot
getFile httpd_2_freebsd httpd_2_boot_freebsd
getFile httpd_2_debian httpd_2_boot_debian
initHTTP2var
if [ "${HTTP2}" = "1" ]; then
if [ ! -s /usr/local/lib/libnghttp2.so ]; then
echo "Cannot find libnghttp2.so. Installing nghttp2.";
doNghttp2
fi
fi
quitIfLocked doApache2
if [ "${OS}" = "FreeBSD" ] && [ -e /sbin/kldload ]; then
if [ ! -e /boot/loader.conf ]; then
touch /boot/loader.conf
chmod 444 /boot/loader.conf
fi
if ! grep -q -m1 '^accf_http_load="YES"$' /boot/loader.conf; then
/sbin/kldload accf_http
echo 'accf_http_load="YES"' >> /boot/loader.conf
fi
if ! grep -q -m1 '^accf_data_load="YES"$' /boot/loader.conf; then
/sbin/kldload accf_data
echo 'accf_data_load="YES"' >> /boot/loader.conf
fi
fi
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 /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
if [ -e /etc/httpd/conf/httpd.conf ]; then
if [ "`grep -m1 -c 'ServerType standalone' /etc/httpd/conf/httpd.conf`" -ne 0 ]; then
convert
fi
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/local/bin/pcre-config ]; then
removeLockfile
doPCRE
fi
if [ ! -d /var/log/httpd/domains ]; then
mkdir -p /var/log/httpd/domains
chmod 711 /var/log/httpd
fi
addUserGroup apache apache
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}
else
PATCH_NAME=harden-symlinks.patch.${APACHE2_VER}
getFile ${PATCH_NAME} harden-symlinks-patch
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 ..
else
patch -p0 < ${PATCH_NAME}
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" ] && [ "${SYSTEMD}" = "yes" ]; then
echo "Enabling mod_systemd..."
# Not needed for apache 2.4.43 and higher
if [ "`version_cmp ${APACHE2_VER} 2.4.43`" -lt 0 ]; then
if [ -e ../configure/systemd/dependencies/httpd-2.4.10-systemd.patch ]; then
patch -p1 < ../configure/systemd/dependencies/httpd-2.4.10-systemd.patch
fi
fi
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
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
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
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/httpd ]; then
echo "Removing ${INITDDIR}/httpd..."
rm -f ${INITDDIR}/httpd
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
if [ -s ${PHPMODULES} ]; then
if grep -m1 -q mod_systemd ${PHPMODULES}; then
sed -i "/^mod_systemd/d" ${PHPMODULES}
fi
fi
chmod 644 ${SYSTEMDDIR}/httpd.service
if [ "${CLAMAV_OPT}" = "yes" ]; then
if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] || [ "${MODSECURITY_UPLOADSCAN_OPT}" = "yes" ]; 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
fi
systemctl daemon-reload
systemctl enable httpd.service
else
if [ ${OS} = "FreeBSD" ]; then
cp -f ${CWD}/httpd_2_freebsd /usr/local/etc/rc.d/httpd
chmod 755 /usr/local/etc/rc.d/httpd
elif [ -e /etc/debian_version ]; then
cp -f ${CWD}/httpd_2_debian /etc/init.d/httpd
chmod 755 /etc/init.d/httpd
update-rc.d httpd defaults
else
cp -f ${CWD}/httpd_2 /etc/rc.d/init.d/httpd
chmod 755 /etc/rc.d/init.d/httpd
/sbin/chkconfig httpd on
fi
fi
fi
fi
#Disable nginx & litespeed when switching to apache
if [ "${WEBSERVER_OPT}" = "apache" ]; then
if [ "${SYSTEMD}" = "yes" ]; 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
else
if [ ${OS} = "FreeBSD" ]; then
if [ -e /usr/local/etc/rc.d/nginx ]; then
rm -f /usr/local/etc/rc.d/nginx
fi
if [ -e /usr/local/etc/rc.d/litespeed ]; then
rm -f /etc/init.d/litespeed
fi
elif [ -e /etc/debian_version ]; then
if [ -e /etc/init.d/nginx ]; then
update-rc.d nginx remove
rm -f /etc/init.d/nginx
fi
if [ -e /etc/init.d/litespeed ]; then
update-rc.d litespeed remove
rm -f /etc/init.d/litespeed
fi
else
if [ -e /etc/rc.d/init.d/nginx ]; then
/sbin/chkconfig nginx off
rm -f /etc/rc.d/init.d/nginx
fi
if [ -e /etc/rc.d/init.d/litespeed ]; then
/sbin/chkconfig litespeed off
rm -f /etc/rc.d/init.d/litespeed
fi
fi
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
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
#hide frontpage from the interface to avoid confusion
hideFrontpage
#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 "Apache is functioning normally" > ${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 ] && [ ${OS} != "FreeBSD" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/apache.logrotate -O /etc/logrotate.d/apache
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
elif [ "${WEBSERVER_OPT}" = "litespeed" ] && [ -e ${INITDDIR}/litespeed ]; then
echo "Restarting litespeed."
control_service litespeed restart
fi
writeLog "Apache ${APACHE2_VER} installed"
removeLockfile
}
####################################################
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
if [ -e ${INITDDIR}/httpd ]; then
if [ -e /etc/debian_version ]; then
update-rc.d httpd remove
elif [ ${OS} != "FreeBSD" ]; then
/sbin/chkconfig httpd off
fi
echo "Removing ${INITDDIR}/httpd..."
rm -f ${INITDDIR}/httpd
fi
if [ "${SYSTEMD}" = "yes" ]; then
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
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
wget ${WGET_CONNECT_OPTIONS} -O ${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 restart
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
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
if [ "${SYSTEMD}" = "yes" ]; then
chmod 644 ${SYSTEMDDIR}/litespeed.service
systemctl daemon-reload
systemctl enable litespeed.service
fi
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
wget -O ${PLUGIN_DIR}/images/admin_icon.svg https://www.litespeedtech.com/images/logos/lsws-icon.svg
echo 'LiteSpeed WebAdmin Console ' > ${PLUGIN_DIR}/hooks/admin_img.html
echo 'LiteSpeed WebAdmin Console ' > ${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 [ "${SYSTEMD}" = "yes" ]; 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
else
if [ ${OS} = "FreeBSD" ]; then
if [ -e /usr/local/etc/rc.d/nginx ]; then
rm -f /usr/local/etc/rc.d/nginx
fi
if [ -e /usr/local/etc/rc.d/httpd ]; then
rm -f /usr/local/etc/rc.d/httpd
fi
elif [ -e /etc/debian_version ]; then
if [ -e /etc/init.d/nginx ]; then
update-rc.d nginx remove
rm -f /etc/init.d/nginx
fi
if [ -e /etc/init.d/httpd ]; then
update-rc.d httpd remove
rm -f /etc/init.d/httpd
fi
else
if [ -e /etc/rc.d/init.d/nginx ]; then
/sbin/chkconfig nginx off
rm -f /etc/rc.d/init.d/nginx
fi
if [ -e /etc/rc.d/init.d/httpd ]; then
/sbin/chkconfig httpd off
rm -f /etc/rc.d/init.d/httpd
fi
fi
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
echo "Restarting litespeed."
control_service litespeed restart
#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
if [ -e ${INITDDIR}/litespeed ]; then
if [ -e /etc/debian_version ]; then
update-rc.d litespeed remove
elif [ ${OS} != "FreeBSD" ]; then
/sbin/chkconfig litespeed off
fi
echo "Removing ${INITDDIR}/litespeed..."
rm -f ${INITDDIR}/litespeed
fi
if [ -e ${INITDDIR}/lsws ]; then
if [ -e /etc/debian_version ]; then
update-rc.d lsws remove
elif [ ${OS} != "FreeBSD" ]; then
/sbin/chkconfig lsws off
fi
echo "Removing ${INITDDIR}/lsws..."
rm -f ${INITDDIR}/lsws
fi
if [ "${SYSTEMD}" = "yes" ]; then
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
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/nginx/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/proundcube/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 [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ] && [ "${OS_CENTOS_VER}" = "8" ]; then
if [ -x /usr/bin/rpm ]; then
if [ `checkRPMPackage libnsl` -ne 0 ]; then
yum -y install libnsl
fi
fi
fi
if [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; 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
if [ ! -d /var/www/html ]; then
mkdir -p /var/www/html
fi
set64
addUserGroup lsadm lsadm
addUserGroup apache 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 [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; 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 [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; 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 [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; 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
if [ "${OS}" = "FreeBSD" ]; then
#gmake could be used in the future, if problems occur
make -j ${CPU_CORES}
else
make -j ${CPU_CORES}
fi
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 [ "${OS}" = "FreeBSD" ] || [ "${B64}" = "0" ]; then
echo "Installing OpenLiteSpeed ${OPENLITESPEED_VER}..."
if [ "${OS}" = "FreeBSD" ]; then
#gmake could be used in the future, if problems occur
make install
else
make install
fi
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 [ "${OS}" = "FreeBSD" ]; 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
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/litespeed ]; then
echo "Removing ${INITDDIR}/litespeed..."
rm -f ${INITDDIR}/litespeed
fi
#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
else
if [ ${OS} != "FreeBSD" ]; then
if [ ! -s ${LSWS_HOME}/admin/misc/lsws.rc ] && [ -s /usr/local/lsws/admin/misc/lsws.rc.in ]; then
sed "s:%LSWS_CTRL%:${LSWS_HOME}/bin/lswsctrl:" "/usr/local/lsws/admin/misc/lsws.rc.in" > "${LSWS_HOME}/admin/misc/lsws.rc"
fi
elif [ -e ${CWD}/openlitespeed-${OPENLITESPEED_VER}/dist/admin/misc/lsws.rc.in ]; then
sed "s:%LSWS_CTRL%:${LSWS_HOME}/bin/lswsctrl:" "${CWD}/openlitespeed-${OPENLITESPEED_VER}/dist/admin/misc/lsws.rc.in" > "${LSWS_HOME}/admin/misc/lsws.rc"
fi
/usr/local/lsws/admin/misc/rc-inst.sh
if [ -e /etc/debian_version ]; then
if [ -e /etc/init.d/lsws ]; then
ln -sf /etc/init.d/lsws /etc/init.d/litespeed
fi
update-rc.d litespeed defaults
elif [ ${OS} != "FreeBSD" ]; then
if [ -e /etc/rc.d/init.d/lsws ]; then
ln -sf /etc/rc.d/init.d/lsws /etc/rc.d/init.d/litespeed
fi
/sbin/chkconfig litespeed on
elif [ ${OS} = "FreeBSD" ]; then
if [ -e /usr/local/etc/rc.d/lsws.sh ]; then
ln -sf /usr/local/etc/rc.d/lsws.sh /usr/local/etc/rc.d/litespeed
fi
fi
fi
#Disable nginx & apache when switching to openlitespeed
if [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
if [ "${SYSTEMD}" = "yes" ]; 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
else
if [ ${OS} = "FreeBSD" ]; then
if [ -e /usr/local/etc/rc.d/nginx ]; then
rm -f /usr/local/etc/rc.d/nginx
fi
if [ -e /usr/local/etc/rc.d/httpd ]; then
rm -f /etc/init.d/httpd
fi
elif [ -e /etc/debian_version ]; then
if [ -e /etc/init.d/nginx ]; then
update-rc.d nginx remove
rm -f /etc/init.d/nginx
fi
if [ -e /etc/init.d/httpd ]; then
update-rc.d httpd remove
rm -f /etc/init.d/httpd
fi
else
if [ -e /etc/rc.d/init.d/nginx ]; then
/sbin/chkconfig nginx off
rm -f /etc/rc.d/init.d/nginx
fi
if [ -e /etc/rc.d/init.d/httpd ]; then
/sbin/chkconfig httpd off
rm -f /etc/rc.d/init.d/httpd
fi
fi
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 "OpenLiteSpeed is functioning normally" > ${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 ] && [ ${OS} != "FreeBSD" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/apache.logrotate -O /etc/logrotate.d/apache
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 restart
#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 '0 ' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|0 |1 |g' /usr/local/lsws/conf/httpd_config.xml
fi
if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's||\n /tmp |g' /usr/local/lsws/conf/httpd_config.xml
fi
if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's||\n /var/log/httpd/modsec_audit.log |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 '1 ' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|1 |0 |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
wget ${WGET_HTTPS_OPTIONS} -O cwaf_client_install.sh https://waf.comodo.com/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 restart
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/local/lib/libxml2.so ] && [ "${LIBXML2_VER}" != "0" ]; then
echo "Installing latest version of LibXML2 to provide /usr/local/lib/libxml2.so for ModSecurity."
doLibxml2
fi
if [ ! -e /usr/local/lib/libxslt.so ] && [ "${LIBXSLT_VER}" != "0" ]; then
echo "Installing latest version of LibXSLT to provide /usr/local/lib/libxslt.so for ModSecurity."
doLibxslt
fi
if [ ! -e /usr/include/lua.h ] && [ ! -e /usr/local/include/lua.h ]; then
if [ "${OS}" != "FreeBSD" ] && [ ! -e /etc/debian_version ]; then
if [ "${OS_CENTOS_VER}" = "8" ]; then
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
yum -y install lua-devel --enablerepo=cloudlinux-PowerTools
else
yum -y install lua-devel --enablerepo=PowerTools
fi
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/local/lib/libyajl.so ]; then
if [ ${OS} = "FreeBSD" ]; then
${PKG_INSTALL} install -y autoconf213
elif [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install libyajl-dev
else
if [ "${OS_CENTOS_VER}" = "6" ] && [ "${B64}" = "1" ]; then
yum -y install ${WEBPATH}/yajl/yajl-2.1.0-4.el6.x86_64.rpm ${WEBPATH}/yajl/yajl-devel-2.1.0-4.el6.x86_64.rpm
elif [ "${OS_CENTOS_VER}" = "8" ]; then
if [ "${CLOUDLINUX_OPT}" = "yes" ]; then
yum -y install yajl-devel --enablerepo=cloudlinux-PowerTools
else
yum -y install yajl-devel --enablerepo=PowerTools
fi
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 [ "${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 '0 ' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's|0 |1 |g' /usr/local/lsws/conf/httpd_config.xml
fi
if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's||\n /tmp |g' /usr/local/lsws/conf/httpd_config.xml
fi
if ! grep -m1 -q '' /usr/local/lsws/conf/httpd_config.xml; then
perl -pi -e 's||\n /var/log/httpd/modsec_audit.log |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 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 restart
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 '' >> /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 ' ' >> /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/local/lib/libxml2.so ] && [ "${LIBXML2_VER}" != "0" ]; then
echo "Installing latest version of LibXML2 to provide /usr/local/lib/libxml2.so for LibModSecurity."
doLibxml2
fi
if [ ! -e /usr/local/lib/libxslt.so ] && [ "${LIBXSLT_VER}" != "0" ]; then
echo "Installing latest version of LibXSLT to provide /usr/local/lib/libxslt.so for LibModSecurity."
doLibxslt
fi
if [ ! -e /usr/lib64/libyajl.so ] && [ ! -e /usr/lib/x86_64-linux-gnu/libyajl.so ] && [ ! -e /usr/local/lib/libyajl.so ]; then
if [ ${OS} = "FreeBSD" ]; then
${PKG_INSTALL} install -y autoconf213
elif [ -e ${DEBIAN_VERSION} ]; then
apt-get -y install libyajl-dev
else
if [ "${OS_CENTOS_VER}" = "6" ] && [ "${B64}" = "1" ]; then
yum -y install ${WEBPATH}/yajl/yajl-2.1.0-4.el6.x86_64.rpm ${WEBPATH}/yajl/yajl-devel-2.1.0-4.el6.x86_64.rpm
else
yum -y install yajl-devel
fi
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
if [ "${OS_CENTOS_VER}" = "6" ]; then
installDevtoolset
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}..."
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "${CWD}/${MODSECURITY_CONFIGURE}"
else
${CWD}/${MODSECURITY_CONFIGURE}
fi
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
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "make -j ${CPU_CORES}"
else
make -j ${CPU_CORES}
fi
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 restart
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 restart
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
getFile nginx.boot nginx_boot
getFile nginx.boot.freebsd nginx_boot_freebsd
getFile nginx.boot.debian nginx_boot_debian
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
addNginxToAccess
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 [ ! -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}"
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "${CWD}/${NGINX_CONFIGURE}"
else
${CWD}/${NGINX_CONFIGURE}
fi
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
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}"
else
C_INCLUDE_PATH=/usr/kerberos/include make -j ${CPU_CORES}
fi
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}
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/nginx ]; then
echo "Removing ${INITDDIR}/nginx..."
rm -f ${INITDDIR}/nginx
fi
#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
else
if [ ${OS} = "FreeBSD" ]; then
cp -f ${CWD}/nginx.boot.freebsd /usr/local/etc/rc.d/nginx
chmod 755 /usr/local/etc/rc.d/nginx
elif [ -e /etc/debian_version ]; then
cp -f ${CWD}/nginx.boot.debian /etc/init.d/nginx
chmod 755 /etc/init.d/nginx
update-rc.d nginx defaults
else
cp -f ${CWD}/nginx.boot /etc/rc.d/init.d/nginx
chmod 755 /etc/rc.d/init.d/nginx
/sbin/chkconfig nginx on
fi
fi
#Disable httpd & litespeed, when switching to nginx
if [ "${WEBSERVER_OPT}" = "nginx" ]; then
if [ "${SYSTEMD}" = "yes" ]; 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
else
if [ ${OS} = "FreeBSD" ]; then
if [ -e /usr/local/etc/rc.d/httpd ]; then
rm -f /usr/local/etc/rc.d/httpd
fi
if [ -e /usr/local/etc/rc.d/litespeed ]; then
rm -f /etc/init.d/litespeed
fi
if [ -e /usr/local/etc/rc.d/lsws ]; then
rm -f /etc/init.d/lsws
fi
elif [ -e /etc/debian_version ]; then
if [ -e /etc/init.d/httpd ]; then
update-rc.d httpd remove
rm -f /etc/init.d/httpd
fi
if [ -e /etc/init.d/litespeed ]; then
update-rc.d litespeed remove
rm -f /etc/init.d/litespeed
fi
if [ -e /etc/init.d/lsws ]; then
update-rc.d lsws remove
rm -f /etc/init.d/lsws
fi
else
if [ -e /etc/rc.d/init.d/httpd ]; then
/sbin/chkconfig httpd off
rm -f /etc/rc.d/init.d/httpd
fi
if [ -e /etc/rc.d/init.d/litespeed ]; then
/sbin/chkconfig litespeed off
rm -f /etc/rc.d/init.d/litespeed
fi
if [ -e /etc/rc.d/init.d/lsws ]; then
/sbin/chkconfig lsws off
rm -f /etc/rc.d/init.d/lsws
fi
fi
fi
fi
#Disable litespeed, when switching to nginx_apache
if [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${SYSTEMD}" = "yes" ]; 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
else
if [ ${OS} = "FreeBSD" ]; then
if [ -e /usr/local/etc/rc.d/litespeed ]; then
rm -f /etc/init.d/litespeed
fi
if [ -e /usr/local/etc/rc.d/lsws ]; then
rm -f /etc/init.d/lsws
fi
elif [ -e /etc/debian_version ]; then
if [ -e /etc/init.d/litespeed ]; then
update-rc.d litespeed remove
rm -f /etc/init.d/litespeed
fi
if [ -e /etc/init.d/lsws ]; then
update-rc.d lsws remove
rm -f /etc/init.d/lsws
fi
else
if [ -e /etc/rc.d/init.d/litespeed ]; then
/sbin/chkconfig litespeed off
rm -f /etc/rc.d/init.d/litespeed
fi
if [ -e /etc/rc.d/init.d/lsws ]; then
/sbin/chkconfig lsws off
rm -f /etc/rc.d/init.d/lsws
fi
fi
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
tokenize_IP
tokenize_ports
if [ "${MODSECURITY_OPT}" = "yes" ]; then
doModSecurityRules norestart
fi
mkdir -p ${WWWDIR}
if [ ! -e ${WWWDIR}/index.html ]; then
echo "Nginx is functioning normally" > ${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 ] && [ ${OS} != "FreeBSD" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/nginx.logrotate -O /etc/logrotate.d/nginx
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
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
if [ -e ${INITDDIR}/nginx ]; then
if [ -e /etc/debian_version ]; then
update-rc.d nginx remove
elif [ ${OS} != "FreeBSD" ]; then
/sbin/chkconfig nginx off
fi
echo "Removing ${INITDDIR}/nginx..."
rm -f ${INITDDIR}/nginx
fi
if [ "${SYSTEMD}" = "yes" ]; then
echo "Disabling nginx in systemd..."
if [ -e ${SYSTEMDDIR}/nginx.service ]; then
systemctl disable nginx.service
rm -f ${SYSTEMDDIR}/nginx.service
systemctl daemon-reload
fi
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 ]; 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
if [ "${SYSTEMD}" != "yes" ]; then
echo "Your OS does not support Linux namespaces for user isolation."
return
elif [ "${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
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
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=2 server-wide
if [ -s ${DACONF_FILE} ]; then
if ! grep -q -m1 'jail=0' ${DACONF_FILE}; then
setVal jail 2 ${DACONF_TEMPLATE_FILE}
setVal jail 2 ${DACONF_FILE}
doRestartDA
fi
fi
writeLog "bubblewrap ${BUBBLEWRAP_VER} installed"
removeLockfile
cd ${CWD}
doJailshell
}
####################################################
convertToDovecot() {
updateDovecot
if [ "${DOVECOT_OPT}" != "yes" ]; then
do_exit 1 "You cannot convert to Dovecot, because you do not have it set in options.conf file."
fi
#patch exim.conf
if [ -e /etc/exim.conf ] && [ "`grep -m1 -c maildir_format /etc/exim.conf`" -eq 0 ]; then
echo "To Dovecot: Patching /etc/exim.conf to maildir"
patch -d/ -p0 < ${CWD}/exim.conf.dovecot.patch
fi
#uninstall old services and restart exim
if [ "${OS}" = "FreeBSD" ]; then
/usr/local/etc/rc.d/directadmin restart
/usr/local/etc/rc.d/exim restart
perl -pi -e 's/^imap/#imap/' /etc/inetd.conf
killall -HUP inetd
/usr/local/etc/rc.d/vm-pop3d stop
cat /usr/local/etc/rc.d/boot.sh | grep -v vm-pop3d > /usr/local/etc/rc.d/boot.sh.new
mv -f /usr/local/etc/rc.d/boot.sh /usr/local/etc/rc.d/boot.sh.old
mv -f /usr/local/etc/rc.d/boot.sh.new /usr/local/etc/rc.d/boot.sh
chmod 755 /usr/local/etc/rc.d/boot.sh
elif [ -e /etc/debian_version ]; then
control_service exim restart
control_service directadmin restart
perl -pi -e 's/^imap/#imap/' /etc/inetd.conf
killall -HUP inetd
control_service vm-pop3d stop 2> /dev/null
chmod 0 /etc/init.d/vm-pop3d 2> /dev/null
else
control_service exim restart
control_service directadmin restart
rm -f /etc/xinetd.d/imap
killall -HUP xinetd
control_service vm-pop3d stop 2> /dev/null
/sbin/chkconfig vm-pop3d off 2> /dev/null
fi
killall -9 vm-pop3d 2> /dev/null
set_service vm-pop3d delete
echo "Adding conversion command to the task.queue ..."
echo "action=convert&value=todovecot" >> ${TASK_QUEUE}
echo "Executing the task.queue cotents now, please be patient ..."
run_dataskq d
echo "Restarting dovecot."
control_service dovecot restart
echo "Restarting exim."
control_service exim restart
echo "Done."
writeLog "Converted to dovecot"
}
####################################################
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
if [ "${OS}" = "FreeBSD" ]; then
gmake -j ${CPU_CORES}
else
make -j ${CPU_CORES}
fi
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
if [ "${OS}" = "FreeBSD" ]; then
gmake install
else
make install
fi
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 [ "${OS}" = "FreeBSD" ]; then
echo "Cannot find /usr/local/include/sqlite3.h, installing using apt-get..."
pkg install -y sqlite3
elif [ -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
if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ]; then
COUNT="`grep -m1 -c dovecot_lmtp_udp /etc/exim.conf`"
getFile patches/exim.conf.pigeonhole.patch exim.conf.pigeonhole.patch
if [ "${COUNT}" -eq 0 ] && [ -e ${WORKDIR}/patches/exim.conf.pigeonhole.patch ]; then
cd /etc
patch -p0 < ${WORKDIR}/patches/exim.conf.pigeonhole.patch
fi
fi
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
if [ "`version_cmp ${DOVECOT_VER} 2.3.0 'dovecot-ce check'`" -ge 0 ]; then
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
if [ ${OS} = "FreeBSD" ]; then
DH_FILE_SIZE=`stat -f %z ${SSL_DH}`
else
DH_FILE_SIZE=`stat -c %s ${SSL_DH}`
fi
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
else
#dovecot version older than 2.3.0?
if [ "`version_cmp ${DOVECOT_VER} 2.3.0 'dovecot-ce check'`" -lt 0 ]; then
echo "Old version of dovecot: ${DOVECOT_VER}, removing ssl_dh from ${D_SSL}"
if [ -s ${D_SSL} ]; then
perl -pi -e 's/ssl_dh =.*\n//' ${D_SSL}
perl -pi -e 's/ssl_min_protocol =.*\n//' ${D_SSL}
fi
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
#dovecot version older than 2.3.11?
if [ "`version_cmp ${DOVECOT_VER} 2.3.11 'dovecot zstd support check'`" -lt 0 ]; then
if grep -m1 -q 'zlib_save = zstd' /etc/dovecot/conf.d/90-zlib.conf; then
perl -pi -e 's/zlib_save = zstd/zlib_save = gz/' /etc/dovecot/conf.d/90-zlib.conf
fi
fi
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 [ "${OS}" = "FreeBSD" ]; then
DC=/etc/dovecot.conf
if [ -L /etc/dovecot.conf ]; then
DC=${DOVECOT_CONFIG}
fi
perl -pi -e 's/driver = shadow/driver = passwd/' ${DC}
perl -pi -e 's/passdb shadow/passdb passwd/' ${DC}
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
wget ${WGET_CONNECT_OPTIONS} -O /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 0`
if [ "${MAIL_SNI_OPT}" -ge 1 ]; then
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
if [ "${MAIL_SNI_OPT}" -ge 1 ]; then
echo "action=rewrite&value=mail_sni" >> ${TASK_QUEUE}
fi
run_dataskq
echo '!include_try /etc/dovecot/conf/sni/*.conf' > /etc/dovecot/conf.d/95-sni.conf
else
rm -f /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() {
if [ ${OS} = "FreeBSD" ]; then
#by default it sets each log to webapps:webapps.
#swap it to apache:apache if needed
#else swap it to webapps:webapps from apache:apache.. or nothing
NSL_VALUE=root:${ROOT_GRP}
freebsd_set_newsyslog /var/log/dovecot-lmtp-errors.log ${NSL_VALUE}
freebsd_set_newsyslog /var/log/dovecot-lmtp.log ${NSL_VALUE}
return
fi
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
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
# fi
if [ "`version_cmp ${DOVECOT_VER} 2.3.0 'dovecot-ce check'`" -eq 0 ] && [ -d dovecot-ce-${DOVECOT_VER} ]; then
cd dovecot-ce-${DOVECOT_VER}
else
cd dovecot-${DOVECOT_VER}
fi
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}
if [ "${SYSTEMD}" = "no" ]; then
perl -pi -e 's#--with-systemdsystemunitdir=/etc/systemd/system##' ${CONF_FILE}
fi
#CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib added because at least on freebsd it was unable to find sodium.h on make time
CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ${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
if [ "${OS}" = "FreeBSD" ]; then
gmake -j ${CPU_CORES}
else
make -j ${CPU_CORES}
fi
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
# downgradeICUver
# if [ ${ICU_DOWNGRADED} -eq 0 ] && [ ! -e /usr/lib/dovecot/lib21_fts_xapian_plugin.a ] && [ ! -e /usr/lib64/dovecot/lib21_fts_xapian_plugin.a ]; then
# echo "Installing xapian and fts-xapian for FTS in dovecot..."
# doFTSXapian
# 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
INST_VER=`echo "$DOVECOT_VER" | cut -d. -f1`
if [ "$INST_VER" = "2" ] && [ ! -e ${DOVECOT_CONFIG} ]; then
INST_CONF=1
fi
if [ "$INST_VER" = "2" ] && [ "$CONF_VER" != "2.0" ]; then
INST_CONF=1
fi
if [ "$INST_VER" = "1" ] && [ "$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
else
getFile dovecot.conf
mv -f ${CWD}/dovecot.conf /etc/dovecot.conf
fi
fi
if [ "${OS}" = "FreeBSD" ]; then
DC=/etc/dovecot.conf
if [ -L /etc/dovecot.conf ]; then
DC=${DOVECOT_CONFIG}
fi
perl -pi -e 's/driver = shadow/driver = passwd/' ${DC}
perl -pi -e 's/passdb shadow/passdb passwd/' ${DC}
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 grep -q dovecot_lmtp_udp /etc/exim.conf; then
#we have LMTP enabled by default for 4.3+
if [ "${EXIMCONF_RELEASE_OPT}" = "2.1" ] || [ "${EXIMCONF_RELEASE_OPT}" = "4.2" ]; then
perl -pi -e 's#transport = dovecot_lmtp_udp#transport = virtual_localdelivery#' /etc/exim.conf
echo "Restarting exim"
control_service exim restart
fi
fi
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
#install the boot scripts.
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/dovecot ]; then
echo "Removing ${INITDDIR}/dovecot..."
rm -f ${INITDDIR}/dovecot
fi
# 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
else
if [ "${OS}" = "FreeBSD" ]; then
if [ ! -e /usr/local/etc/rc.d/dovecot ]; then
cp ${CWD}/dovecot.boot.freebsd /usr/local/etc/rc.d/dovecot
chmod 755 /usr/local/etc/rc.d/dovecot
echo "./dovecot \$1" >> /usr/local/etc/rc.d/boot.sh
fi
elif [ -e /etc/debian_version ]; then
if [ ! -e /etc/init.d/dovecot ]; then
cp ${CWD}/dovecot.boot.debian /etc/init.d/dovecot
chmod 755 /etc/init.d/dovecot
update-rc.d dovecot defaults
fi
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
else
if [ ! -e /etc/init.d/dovecot ]; then
cp ${CWD}/dovecot.boot /etc/init.d/dovecot
chmod 755 /etc/init.d/dovecot
/sbin/chkconfig dovecot on
fi
fi
fi
ensure_dovecot_logrotate
if ! ${EXEC_CL_COMMANDS_ONCE}; then
cagefsctl_update
else
CL_COMPONENT_UPDATE=true
fi
/sbin/ldconfig
echo "Restarting dovecot."
if [ "${SYSTEMD}" = "yes" ]; then
systemctl daemon-reload
fi
control_service dovecot restart
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
if [ -e ${INITDDIR}/dovecot ]; then
if [ -e /etc/debian_version ]; then
update-rc.d dovecot remove
elif [ "${OS}" != "FreeBSD" ]; then
/sbin/chkconfig dovecot off
fi
echo "Removing ${INITDDIR}/dovecot..."
rm -f ${INITDDIR}/dovecot
fi
if [ "${SYSTEMD}" = "yes" ]; then
echo "Disabling dovecot in systemd..."
systemctl disable dovecot.service
rm -f ${SYSTEMDDIR}/dovecot.service
systemctl daemon-reload
fi
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"
}
####################################################
doLibs() {
downloadMake Digest
downloadMake Digest-SHA1
downloadMake HTML-Parser
downloadMake Storable
downloadMake Net-DNS
downloadMake Net-IP
downloadMake Net-CIDR
downloadMake DB_File
downloadMake Mail-SPF
downloadMake Sys-Hostname-Long
downloadMake Net-SSLeay
downloadMake IO-Socket-SSL
downloadMake URI
}
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 [ "${OS}" != "FreeBSD" ] && [ ! -e ${DEBIAN_VERSION} ]; then
if [ -x /usr/bin/rpm ]; then
if ! rpm -q --quiet epel-release; then
yum -y install epel-release
fi
if [ "${OS_CENTOS_VER}" = "6" ]; then
PACKAGES="perl-Archive-Tar perl-Digest-SHA perl-Encode-Detect perl-HTML-Parser perl-IO-Socket-SSL perl-IO-Zlib perl-Mail-DKIM perl-Mail-SPF perl-Net-DNS perl-NetAddr-IP perl-Time-HiRes perl-interpreter perl-libs perl-libwww-perl perl-version perl-DBI perl-Digest-SHA perl-ExtUtils-MakeMaker perl-IO-Socket-INET6 pyzor"
elif [ "${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
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
if [ "${OS}" = "FreeBSD" ]; then
#https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=220474
#T11874
getFile patches/spamd-unescaped-left-brace-in-regex.patch spamd-unescaped-left-brace-in-regex.patch
fi
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}
#doLibs
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}
if [ "`version_cmp ${SPAMASSASSIN_VER} 3.4.1 'spamc patch'`" -le 0 ]; then
echo "patching spamc/configure.pl for revision=1782717... version.h.pl"
patch -p0 < ../patches/spamc-configure-version-h.patch
fi
if [ "${OS}" = "FreeBSD" ]; then
echo "patching spamd for https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=220474"
patch -p1 < ../patches/spamd-unescaped-left-brace-in-regex.patch
fi
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
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/spamassassin ]; then
echo "Removing ${INITDDIR}/spamassassin..."
rm -f ${INITDDIR}/spamassassin
fi
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
fi
removeLockfile
cd ${CWD}
dospamassassinCron
## we need to change how it's started.
if [ -e ${INITDDIR}/exim ]; then
perl -pi -e 's#/usr/bin/spamd -d -a -c -m 5#/usr/bin/spamd -d -c -m 15#' ${INITDDIR}/exim
fi
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."
if [ "${SYSTEMD}" = "yes" ]; then
systemctl restart spamassassin.service
set_service spamd ON
else
/usr/bin/spamd --pidfile /var/run/spamd.pid -d -c -m 15 --ipv4
fi
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
wget ${WGET_CONNECT_OPTIONS} -O /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 [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/spamassassin ]; then
echo "Removing ${INITDDIR}/spamassassin..."
rm -f ${INITDDIR}/spamassassin
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
fi
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
if [ "$OS" = "FreeBSD" ]; then
CRONFILE=$WORKDIR/sa-update
if grep -m1 -q $CRONFILE /etc/crontab; then
grep -v $CRONFILE /etc/crontab > /etc/crontab.tmp
if [ ! -s /etc/crontab.tmp ]; then
echo "/etc/crontab.tmp doesn't exist or is size 0. Aborting"
exit 3
fi
mv -f /etc/crontab.tmp /etc/crontab
chmod 644 /etc/crontab
fi
else
#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
fi
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 [ "`version_cmp ${EXIMCONF_RELEASE_OPT} 4.5 'exim.conf ver check for ACL spam check'`" -lt 0 ]; then
do_exit 1 "Rspamd needs exim.conf release 4.5 or higher."
fi
if [ "${B64}" != "1" ]; then
do_exit 1 "Rspamd only supports 64-bit systems."
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
wget ${WGET_HTTPS_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
elif [ "${OS}" = "FreeBSD" ]; then
pkg install -y rspamd
if [ $? -ne 0 ]; then
do_exit 1 "Pkg failed to install rspamd."
fi
else
if ! rpm -q --quiet epel-release; then
yum -y install epel-release
fi
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
#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
if [ "${SYSTEMD}" = "yes" ]; then
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
else
if [ -e ${INITDDIR}/rspamd ]; then
if [ "${OS}" = "FreeBSD" ]; then
chmod 755 ${INITDDIR}/rspamd
elif [ -e /etc/debian_version ]; then
chmod 755 ${INITDDIR}/rspamd
update-rc.d rspamd defaults
else
chmod 755 ${INITDDIR}/rspamd
/sbin/chkconfig rspamd on
fi
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
#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
if [ "${OS}" = "FreeBSD" ]; then
#ensure it's in the /etc/rc.conf
if ! grep -m1 -q '^rspamd_enable=' /etc/rc.conf; then
echo 'rspamd_enable="YES"' >> /etc/rc.conf
else
/usr/bin/perl -pi -e 's/^rspamd_enable=.*/rspamd_enable="YES"/' /etc/rc.conf
fi
fi
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 ] && [ ${OS} != "FreeBSD" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/rspamd.logrotate -O /etc/logrotate.d/rspamd
fi
writeLog "Rspamd has been installed successfully."
}
doRspamd_compile() {
if [ "${SPAMD_OPT}" != "rspamd" ]; then
do_exit 1 "Rspamd is not set in options.conf."
fi
if [ "`version_cmp ${EXIMCONF_RELEASE_OPT} 4.5 'exim.conf ver check for ACL spam check'`" -lt 0 ]; then
do_exit 1 "Rspamd needs exim.conf release 4.5 or higher."
fi
addUserGroup _rspamd _rspamd
if [ ! -e /usr/include/sqlite3.h ] && [ ! -e /usr/local/include/sqlite3.h ]; then
echo "Cannot find sqlite, installing..."
if [ -e /etc/debian_version ]; then
apt-get -y install libsqlite3-dev
elif [ "${OS}" = "FreeBSD" ]; then
${PKG_INSTALL} -y sqlite3
else
yum -y install sqlite-devel
fi
fi
if [ ! -e /usr/include/gettext-po.h ] && [ ! -e /usr/local/include/gettext-po.h ]; then
echo "Cannot find gettext, installing..."
if [ -e /etc/debian_version ]; then
apt-get -y install gettext
elif [ "${OS}" = "FreeBSD" ]; then
${PKG_INSTALL} -y gettext
else
yum -y install gettext
fi
fi
if [ ! -e /usr/local/cmake ] && [ ! -e /usr/local/bin/cmake ] && [ ! -e /usr/bin/cmake ]; then
echo "Cannot find cmake, installing..."
if [ -e /etc/debian_version ]; then
apt-get -y install cmake
elif [ "${OS}" = "FreeBSD" ]; then
${PKG_INSTALL} -y cmake
else
yum -y install cmake
fi
fi
if [ ! -e /usr/include/event.h ] && [ ! -e /usr/local/include/event.h ]; then
echo "Cannot find libevent, installing..."
if [ -e /etc/debian_version ]; then
apt-get -y install libevent-dev
elif [ "${OS}" = "FreeBSD" ]; then
${PKG_INSTALL} -y libevent
else
yum -y install libevent-devel
fi
fi
if [ ! -e /usr/local/bin/ragel ]; then
doRagel
fi
if [ ! -e /usr/local/bin/luajit ]; then
doLuaJIT
fi
if [ ! -e /usr/local/lib/glib-2.0/include/glibconfig.h ]; then
doGlib
fi
if [ ! -e /usr/local/include/magic.h ]; then
doLibmagic
fi
getFile rspamd-${RSPAMD_VER}.tar.gz rspamd
quitIfLocked doRspamd
if [ ! -e ${WORKDIR}/rspamd-${RSPAMD_VER}.tar.gz ]; then
do_exit 1 "File rspamd-${RSPAMD_VER}.tar.gz does not exist. Try running ${boldon}./build update.${boldoff}"
fi
echo "Installing rspamd ${RSPAMD_VER}.tar.gz..."
cd ${CWD}
FILE=${CWD}/rspamd-${RSPAMD_VER}.tar.gz
checkFile ${FILE}
echo "Extracting ..."
tar xzf ${FILE} --no-same-owner
echo "Done."
cd rspamd-${RSPAMD_VER}
echo "Configuring rspamd ${RSPAMD_VER}..."
ICU_DIR=""
if [ -d /usr/local/icu ]; then
ICU_DIR=-DICU_ROOT_DIR=/usr/local/icu
else
echo "Cannot find /usr/local/icu. If you get a compile error, try './build icu'"
fi
#Fann is still experimental in RSpamd, so we turn it off
cmake CMakeLists.txt -DENABLE_FANN=OFF -DCONFDIR=/etc/rspamd
if [ $? -ne 0 ]; then
printf "\n*** There was an error while trying to configure rspamd.\n"
do_exit 1
fi
echo "Done Configuration."
#/usr/local/src/rspamd-1.6.3/contrib/lgpl/guniscript.h:98:3: error: redeclaration of enumerator ‘G_UNICODE_SCRIPT_CUNEIFORM’
echo '#include ' > contrib/lgpl/guniscript.h
while echo "Trying to make rspamd..."; 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
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/rspamd ]; then
echo "Removing ${INITDDIR}/rspamd..."
rm -f ${INITDDIR}/rspamd
fi
echo "Enabling rspamd in systemd..."
if [ -e ${CB_CUST_SYSTEMD}/rspamd.service ]; then
cp -f ${CB_CUST_SYSTEMD}/rspamd.service ${SYSTEMDDIR}/rspamd.service
else
cp -f ${CB_SYSTEMD}/rspamd.service ${SYSTEMDDIR}/rspamd.service
fi
chmod 644 ${SYSTEMDDIR}/rspamd.service
systemctl daemon-reload
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
else
if [ ! -e ${INITDDIR}/rspamd ]; then
if [ "${OS}" = "FreeBSD" ]; then
cp ${CWD}/rspamd_freebsd ${INITDDIR}/rspamd
chmod 755 ${INITDDIR}/rspamd
elif [ -e /etc/debian_version ]; then
cp ${CWD}/rspamd_debian ${INITDDIR}/rspamd
chmod 755 ${INITDDIR}/rspamd
else
cp ${CWD}/rspamd ${INITDDIR}/rspamd
chmod 755 ${INITDDIR}/rspamd
fi
fi
fi
if [ -e /usr/bin/spamd ]; then
doRemoveSpamassassin
fi
killall -9 spamd >/dev/null 2>&1
removeLockfile
cd ${CWD}
mkdir -p /var/log/rspamd
echo "Restarting rspamd."
control_service rspamd restart
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
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 ] && [ ${OS} != "FreeBSD" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/rspamd.logrotate -O /etc/logrotate.d/rspamd
fi
writeLog "Rspamd ${RSPAMD_VER} installed"
}
doNetdata() {
if [ "${OS}" = "FreeBSD" ]; then
wget -q -O netdata.sh https://my-netdata.io/kickstart.sh && bash ./netdata.sh --dont-wait --disable-telemetry && rm -f netdata.sh
else
wget -q -O netdata.sh https://my-netdata.io/kickstart-static64.sh && bash ./netdata.sh --dont-wait --disable-telemetry && rm -f netdata.sh
fi
if [ -s ${WORKDIR}/custom/netdata/netdata.conf ]; then
cp -pf ${WORKDIR}/custom/netdata/netdata.conf /opt/netdata/etc/netdata/netdata.conf
else
printf "[web]\nbind to = unix:/var/run/netdata/netdata.sock\n[global]\nprocess scheduling policy = keep\nOOM score = keep\n" > /opt/netdata/etc/netdata/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
}
dozstd() {
if [ "${OS_CENTOS_VER}" = "6" ]; then
installDevtoolset
fi
quitIfLocked dozstd
if [ -d /etc/cagefs/conf.d ]; then
echo '[zstd]' > /etc/cagefs/conf.d/zstd.cfg
echo 'comment=zstd' >> /etc/cagefs/conf.d/zstd.cfg
echo 'paths=/usr/local/bin/zstd, /usr/local/bin/zstdmt, /usr/local/bin/unzstd, /usr/local/bin/zstdcat' >> /etc/cagefs/conf.d/zstd.cfg
fi
cd ${CWD}
getFile zstd/zstd-${ZSTD_VER}.tar.gz zstd zstd-${ZSTD_VER}.tar.gz
tar xzf zstd-${ZSTD_VER}.tar.gz --no-same-owner
cd zstd-${ZSTD_VER}
if [ "${OS}" = "FreeBSD" ]; then
gmake -j${CPU_CORES} install
else
if [ "${OS_CENTOS_VER}" = "6" ] && [ -d /opt/rh/devtoolset-7 ]; then
scl enable devtoolset-7 "make -j${CPU_CORES} install"
else
make -j${CPU_CORES} install
fi
fi
if [ $? -ne 0 ]; then
do_exit 1
fi
ldconfig
cd ${WORKDIR}
removeLockfile
echo "zstd ${ZSTD_VER} installed"
writeLog "zstd ${ZSTD_VER} installed"
}
do_remove_rspamd() {
if [ "${SPAMD_OPT}" = "rspamd" ]; then
do_exit 1 "Cannot remove Rspamd because it is enabled in options.conf."
fi
#Using package manager
# for f in `echo 'rspamd rspamd-${RSPAMD_VER} rspamc rspamc-${RSPAMD_VER} rspamadm rspamadm-${RSPAMD_VER} rspamd_stats'`; do
# remove_file /usr/local/bin/$f
# done
if [ -e /etc/debian_version ]; then
apt-get -y purge rspamd
elif [ "${OS}" = "FreeBSD" ]; then
pkg delete rspamd
else
yum -y remove rspamd
fi
if [ -e ${INITDDIR}/rspamd ]; then
remove_file ${INITDDIR}/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
if [ ! -x /usr/local/bin/curl ]; then
echo "cURL is needed for ClamAV, building latest version of it..."
doCURL
fi
getFile clamav-${CLAMAV_VER}.tar.gz clamav
getFile clamd
getFile clamd_freebsd
getFile clamd_debian
getFile freshclam
getFile freshclam_freebsd
getFile freshclam_debian
if [ "${CLAMAV_EXIM_OPT}" = "yes" ]; then
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.clamav.load.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.clamav.load.conf
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.clamav.conf ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/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} ..."
${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
if [ "${OS}" = "FreeBSD" ]; then
make CPPFLAGS=-I/usr/kerberos/include LDFLAGS=-liconv -j ${CPU_CORES}
else
make CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES}
fi
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
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/clamd ]; then
echo "Removing ${INITDDIR}/clamd..."
rm -f ${INITDDIR}/clamd
fi
if [ -e ${INITDDIR}/freshclam ]; then
echo "Removing ${INITDDIR}/freshclam..."
rm -f ${INITDDIR}/freshclam
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
if [ "${SUHOSIN_PHP_UPLOADSCAN_OPT}" = "yes" ] || [ "${MODSECURITY_UPLOADSCAN_OPT}" = "yes" ]; 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
else
#install the boot scripts.
if [ ! -e ${INITDDIR}/clamd ]; then
if [ "${OS}" = "FreeBSD" ]; then
cp ${CWD}/clamd_freebsd ${INITDDIR}/clamd
chmod 755 ${INITDDIR}/clamd
elif [ -e /etc/debian_version ]; then
cp ${CWD}/clamd_debian ${INITDDIR}/clamd
chmod 755 ${INITDDIR}/clamd
update-rc.d clamd defaults
else
cp ${CWD}/clamd ${INITDDIR}/clamd
chmod 755 ${INITDDIR}/clamd
/sbin/chkconfig clamd on
fi
fi
if [ ! -e ${INITDDIR}/freshclam ]; then
if [ "${OS}" = "FreeBSD" ]; then
cp ${CWD}/freshclam_freebsd ${INITDDIR}/freshclam
chmod 755 ${INITDDIR}/freshclam
elif [ -e /etc/debian_version ]; then
cp ${CWD}/freshclam_debian ${INITDDIR}/freshclam
chmod 755 ${INITDDIR}/freshclam
update-rc.d freshclam defaults
else
cp ${CWD}/freshclam ${INITDDIR}/freshclam
chmod 755 ${INITDDIR}/freshclam
/sbin/chkconfig freshclam on
fi
fi
perl -pi -e 's#/usr/sbin/clamd#/usr/local/sbin/clamd#' ${INITDDIR}/clamd
perl -pi -e 's#/usr/bin/freshclam#/usr/local/bin/freshclam#' ${INITDDIR}/freshclam
fi
if [ "${OS}" != "FreeBSD" ]; then
if [ ! -d /var/run/clamd ]; then
mkdir /var/run/clamd
fi
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}
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 ..."
make uninstall
removeLockfile
ldconfig
cd ${CWD}
echo "Removing clamav/freshclam from services.status..."
set_service clamd delete
set_service freshclam delete
if [ -e ${INITDDIR}/clamd ]; then
control_service clamd stop
if [ -e /etc/debian_version ]; then
update-rc.d clamd remove
elif [ "${OS}" != "FreeBSD" ]; then
/sbin/chkconfig clamd off
fi
echo "Removing ${INITDDIR}/clamd..."
rm -f ${INITDDIR}/clamd
fi
if [ -e ${INITDDIR}/freshclam ]; then
control_service freshclam stop
if [ -e /etc/debian_version ]; then
update-rc.d freshclam remove
elif [ "${OS}" != "FreeBSD" ]; then
/sbin/chkconfig freshclam off
fi
echo "Removing ${INITDDIR}/freshclam..."
rm -f ${INITDDIR}/freshclam
fi
if [ -e ${SYSTEMDDIR}/clamd.service ] && [ "${SYSTEMD}" = "yes" ]; then
echo "Removing clamd systemd script..."
systemctl disable clamd.service
rm -f ${SYSTEMDDIR}/clamd.service
systemctl daemon-reload
fi
if [ -e ${SYSTEMDDIR}/freshclam.service ] && [ "${SYSTEMD}" = "yes" ]; then
echo "Removing freshclam systemd script..."
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"
}
####################################################
# Mailman is not yet supported
#domailman() {
# if [ "${MAILMAN_OPT}" = "no" ]; then
# do_exit 1 "Mailman is not set in options.conf."
# fi
#
# getFile mailman-${MAILMAN_VER}.tgz mailman
# getFile mailman
# getFile mailman_freebsd
# getFile mailman_debian
#
# quitIfLocked mailman
# touch ${WORKDIR}/.custombuild
#
# if [ ! -s ${WORKDIR}/mailman-${MAILMAN_VER}.tgz ]; then
# do_exit 1 "File mailman-${MAILMAN_VER}.tgz does not exist. Try running ${boldon}./build update.${boldoff}"
# fi
#
# echo "Installing mailman ${MAILMAN_VER} ..."
#
# MM_CFG=1
# if [ ! -e /usr/local/mailman/Mailman/mm_cfg.py ]; then
# MM_CFG=0
# fi
#
# #Mailman requirements
# addUserGroup mailman mailman
# mkdir -p /usr/local/mailman
# chown mailman:mailman /usr/local/mailman
# chmod 02775 /usr/local/mailman
#
# cd ${CWD}
# FILE=${CWD}/mailman-${MAILMAN_VER}.tgz
# checkFile ${FILE}
# echo "Extracting ..."
# tar xzf ${FILE} --no-same-owner
# echo "Done."
# cd mailman-${MAILMAN_VER}
#
# echo "Configuring Mailman ${MAILMAN_VER} ..."
#
# ./configure --with-cgi-gid=apache
# if [ $? -ne 0 ]; then
# echo -e "\n*** There was an error while trying to configure mailman.\n"
# do_exit 1
# fi
# echo "Done Configuration."
#
# while echo "Trying to make mailman..."; do
# make CPPFLAGS=-I/usr/kerberos/include -j ${CPU_CORES}
#
# if [ $? -ne 0 ]; then
# if [ ${USER_INPUT} -eq 1 ]; then
# echo -e "\n*** The make has failed, do you want 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"
#
# echo "Installing ..."
#
# make install
# removeLockfile
# ldconfig
# cd ${CWD}
#
# #install the boot scripts.
# if [ ! -e ${INITDDIR}/mailmanctl ]; then
# if [ "${OS}" = "FreeBSD" ]; then
# cp ${CWD}/mailmanctl_freebsd ${INITDDIR}/mailmanctl
# chmod 755 ${INITDDIR}/mailmanctl
# elif [ -e /etc/debian_version ]; then
# cp ${CWD}/mailmanctl_debian ${INITDDIR}/mailmanctl
# chmod 755 ${INITDDIR}/mailmanctl
# update-rc.d mailmanctl defaults
# else
# cp ${CWD}/mailmanctl ${INITDDIR}/mailmanctl
# chmod 755 ${INITDDIR}/mailmanctl
# /sbin/chkconfig mailmanctl on
# fi
# fi
#
# # It's up to you how to use the file (DA should manage it)
# # if [ ${MM_CFG} -eq 0 ]; then
# # echo 'DEFAULT_EMAIL_HOST = \'mail.domain.com\'' >> ${MM_CFG}
# # echo 'DEFAULT_URL_HOST = \'www.domain.com\'' >> ${MM_CFG}
# # echo 'IMAGE_LOGOS = \'/mailman_images/\'' >> ${MM_CFG}
# # echo 'add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)' >> ${MM_CFG}
# # echo 'VIRTUAL_HOSTS = {\'www.example.com\': \'example.com\',' >> ${MM_CFG}
# # echo ' \'www.example2.com\': \'example2.com\'}' >> ${MM_CFG}
# # echo '#Syntax is {virt ":" real "," virt ":" real}' >> ${MM_CFG}
# # fi
#
# #Changes for suexec (fixing "error: directory is writable by others")
# chmod 755 /usr/local/mailman/cgi-bin
# chmod u-s,g-s /usr/local/mailman/cgi-bin/*
# chmod 777 /usr/local/mailman/logs
# chown -R mailman:mailman /usr/local/mailman
#
# RANDOM_PASS="`perl -le'print map+(A..Z,a..z,0..9)[rand 62],0..7'`"
# DA_HOSTNAME=${HOSTNAME}
#
# #Create a mailman list
# /usr/local/mailman/bin/newlist -q -e ${DA_HOSTNAME} mailman mailman@${DA_HOSTNAME} ${RANDOM_PASS}
# echo "Password of the mailman mailing list: ${RANDOM_PASS}"
# #Apply template to the sitelist
# /usr/local/mailman/bin/config_list -i /usr/local/mailman/data/sitelist.cfg mailman
#
# #Add mailman mailing list to /etc/aliases (required by mailman)
# COUNT_MAILMAN=`grep -c mailman /etc/aliases`
# if [ ${COUNT_MAILMAN} -eq 0 ]; then
# echo '## mailman mailing list' >> /etc/aliases
# echo 'mailman: "|/usr/local/mailman/mail/mailman post mailman"' >> /etc/aliases
# echo 'mailman-admin: "|/usr/local/mailman/mail/mailman admin mailman"' >> /etc/aliases
# echo 'mailman-bounces: "|/usr/local/mailman/mail/mailman bounces mailman"' >> /etc/aliases
# echo 'mailman-confirm: "|/usr/local/mailman/mail/mailman confirm mailman"' >> /etc/aliases
# echo 'mailman-join: "|/usr/local/mailman/mail/mailman join mailman"' >> /etc/aliases
# echo 'mailman-leave: "|/usr/local/mailman/mail/mailman leave mailman"' >> /etc/aliases
# echo 'mailman-owner: "|/usr/local/mailman/mail/mailman owner mailman"' >> /etc/aliases
# echo 'mailman-request: "|/usr/local/mailman/mail/mailman request mailman"' >> /etc/aliases
# echo 'mailman-subscribe: "|/usr/local/mailman/mail/mailman subscribe mailman"' >> /etc/aliases
# echo 'mailman-unsubscribe: "|/usr/local/mailman/mail/mailman unsubscribe mailman"' >> /etc/aliases
# fi
#
## Needs an exception in DA binary to function, because the process is python, which is calling mailmanctl
## set_service mailmanctl ON
#
# echo "Restarting Exim."
# ${INITDDIR}/exim restart
#
# echo "Restarting Mailman."
# ${INITDDIR}/mailman restart
#
# echo "Done Mailman."
#
#}
####################################################
doPhp() {
#PHP 5.3/5.4 latest supported version of ICU is 58_2
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
downgradeICUver
ICU4CV="`echo ${ICU_VER} | tr '_' '.'`"
if [ "${ICU4CV}" != "0" ]; then
CURRENT_ICU4C="`grep -m1 'define U_ICU_VERSION ' /usr/local/icu/include/unicode/uvernum.h | cut -d'\"' -f2`"
if [ "${ICU4CV}" != "${CURRENT_ICU4C}" ]; then
echo "Downgrading ICU for PHP 5.3/5.4..."
doICU
fi
fi
fi
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 [ "${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"
}
####################################################
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
addUserGroup ftp ftp
getFile proftpd-${PROFTPD_VER}.tar.gz proftpd
getFile proftpd proftpd_boot
getFile proftpd_freebsd proftpd_boot_freebsd
getFile proftpd_debian proftpd_boot_debian
quitIfLocked doProftpd
# Setting a new temp dir (in case /tmp is noexec,nosuid)
if [ "${OS}" = "FreeBSD" ]; then
TDIR=/root/.pkg.tmp
mkdir -p $TDIR
setenv PKG_TMPDIR $TDIR
fi
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 [ -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
#swap prefix for freebsd
if [ "$OS" = "FreeBSD" ]; then
perl -pi -e "s#prefix=/usr #prefix=$PROFTPD_PREFIX #" ${CWD}/${PROFTPD_CONFIGURE}
if [ "${PROFTPD_CONFIGURE}" = "configure/proftpd/configure.proftpd" ]; then
perl -pi -e 's/enable-nls/disable-nls/' ${CWD}/${PROFTPD_CONFIGURE}
fi
fi
echo "Configuring proftpd-${PROFTPD_VER}..."
${CWD}/${PROFTPD_CONFIGURE}
echo "Done. Making proftpd-${PROFTPD_VER}..."
while echo "Trying to make ProFTPD..."; do
if [ "${OS}" = "FreeBSD" ]; then
/usr/local/bin/gmake -j ${CPU_CORES}
else
make -j ${CPU_CORES}
fi
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}..."
if [ "${OS}" = "FreeBSD" ]; then
/usr/local/bin/gmake install
else
make install
fi
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
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/proftpd ]; then
echo "Removing ${INITDDIR}/proftpd..."
rm -f ${INITDDIR}/proftpd
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
systemctl daemon-reload
fi
fi
mkdir -p /run/proftpd
else
if [ ! -e ${INITDDIR}/proftpd ]; then
if [ "${OS}" = "FreeBSD" ]; then
cp ${CWD}/proftpd_freebsd ${INITDDIR}/proftpd
chmod 755 ${INITDDIR}/proftpd
elif [ -e /etc/debian_version ]; then
mkdir -p /var/run/proftpd
mkdir -p /var/lock/subsys
cp ${CWD}/proftpd_debian ${INITDDIR}/proftpd
chmod 755 ${INITDDIR}/proftpd
else
mkdir -p /var/run/proftpd
cp ${CWD}/proftpd ${INITDDIR}/proftpd
chmod 755 ${INITDDIR}/proftpd
fi
fi
if [ -e ${INITDDIR}/proftpd ]; then
if [ "${OS}" = "FreeBSD" ]; then
if [ -e ${INITDDIR}/pure-ftpd ]; then
rm -f ${INITDDIR}/pure-ftpd
fi
elif [ -e /etc/debian_version ]; then
update-rc.d proftpd defaults
if [ -e ${INITDDIR}/pure-ftpd ]; then
update-rc.d -f pure-ftpd remove
fi
else
/sbin/chkconfig proftpd on
if [ -e ${INITDDIR}/pure-ftpd ]; then
/sbin/chkconfig pure-ftpd off
fi
fi
fi
fi
killall -9 pure-ftpd >/dev/null 2>&1
echo "Done proftpd."
writeLog "Proftpd ${PROFTPD_VER} installed"
removeLockfile
# Removing the temp dir
if [ "${OS}" = "FreeBSD" ]; then
rm -rf $TDIR
unsetenv PKG_TMPDIR
fi
# 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##\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 '' >> /etc/proftpd.clamav.conf
echo 'LoadModule mod_clamav.c' >> /etc/proftpd.clamav.conf
echo ' ' >> /etc/proftpd.clamav.conf
echo '' >> /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 ' ' >> /etc/proftpd.clamav.conf
else
echo '' > /etc/proftpd.clamav.conf
fi
doSslConfigurationFtp
if [ ! -e /etc/logrotate.d/proftpd ] && [ ${OS} != "FreeBSD" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/proftpd.logrotate -O /etc/logrotate.d/proftpd
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
if [ -e ${INITDDIR}/proftpd ]; then
if [ -e /etc/debian_version ]; then
update-rc.d proftpd remove
elif [ "${OS}" != "FreeBSD" ]; then
/sbin/chkconfig proftpd off
fi
echo "Removing ${INITDDIR}/proftpd..."
rm -f ${INITDDIR}/proftpd
fi
if [ "${SYSTEMD}" = "yes" ]; then
echo "Disabling proftpd in systemd..."
systemctl disable proftpd.service
rm -f ${SYSTEMDDIR}/proftpd.service
systemctl daemon-reload
fi
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
addUserGroup ftp ftp
getFile pure-ftpd-${PUREFTPD_VER}.tar.gz pureftpd
getFile pure-ftpd pure-ftpd_boot
getFile pure-ftpd_freebsd pure-ftpd_boot_freebsd
getFile pure-ftpd_debian pure-ftpd_boot_debian
getFile patches/pure-ftpd-logjam.patch pure-ftpd-logjam.patch
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
if [ "${OS}" = "FreeBSD" ]; then
/usr/local/bin/gmake -j ${CPU_CORES}
else
make -j ${CPU_CORES}
fi
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
START_SCRIPT_UPLOADSCAN=1
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}
if [ "${SYSTEMD}" = "yes" ]; then
START_SCRIPT_UPLOADSCAN=1
else
START_SCRIPT_UPLOADSCAN=`grep -m1 -c "${PATH_TO_UPLOADSCAN}" ${INITDDIR}/pure-ftpd`
fi
perl -pi -e 's|^CallUploadScript no|CallUploadScript yes|' /etc/pure-ftpd.conf
if [ "${SYSTEMD}" = "yes" ]; then
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
fi
else
rm -f ${PATH_TO_UPLOADSCAN}
perl -pi -e 's|^CallUploadScript yes|CallUploadScript no|' /etc/pure-ftpd.conf
if [ "${SYSTEMD}" = "yes" ] && [ -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
START_SCRIPT_PURE_CERTD=1
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}
if [ "${SYSTEMD}" = "yes" ]; then
START_SCRIPT_PURE_CERTD=1
else
START_SCRIPT_PURE_CERTD=`grep -m1 -c "CERTD_SOCK" ${INITDDIR}/pure-ftpd`
fi
if [ "${SYSTEMD}" = "yes" ]; then
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
fi
if [ "${SYSTEMD}" = "yes" ]; then
if [ -e ${INITDDIR}/pure-ftpd ]; then
echo "Removing ${INITDDIR}/pure-ftpd..."
rm -f ${INITDDIR}/pure-ftpd
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
else
if [ ! -e ${INITDDIR}/pure-ftpd ] || [ ${START_SCRIPT_UPLOADSCAN} -eq 0 ] || [ ${START_SCRIPT_PURE_CERTD} -eq 0 ]; then
if [ "${OS}" = "FreeBSD" ]; then
cp ${CWD}/pure-ftpd_freebsd ${INITDDIR}/pure-ftpd
chmod 755 ${INITDDIR}/pure-ftpd
elif [ -e /etc/debian_version ]; then
cp ${CWD}/pure-ftpd_debian ${INITDDIR}/pure-ftpd
chmod 755 ${INITDDIR}/pure-ftpd
else
cp ${CWD}/pure-ftpd ${INITDDIR}/pure-ftpd
chmod 755 ${INITDDIR}/pure-ftpd
fi
fi
if [ -e ${INITDDIR}/pure-ftpd ]; then
if [ "${OS}" = "FreeBSD" ]; then
if [ -e ${INITDDIR}/proftpd ]; then
rm -f ${INITDDIR}/proftpd
fi
elif [ -e /etc/debian_version ]; then
update-rc.d pure-ftpd defaults
if [ -e ${INITDDIR}/proftpd ]; then
update-rc.d -f proftpd remove
fi
else
/sbin/chkconfig pure-ftpd on
if [ -e ${INITDDIR}/proftpd ]; then
/sbin/chkconfig proftpd off
fi
fi
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 ] && [ ${OS} != "FreeBSD" ]; then
wget ${WGET_CONNECT_OPTIONS} ${WEBPATH}/pure-ftpd.logrotate -O /etc/logrotate.d/pure-ftpd
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
if [ -e ${INITDDIR}/pure-ftpd ]; then
if [ -e /etc/debian_version ]; then
update-rc.d pure-ftpd remove
elif [ "${OS}" != "FreeBSD" ]; then
/sbin/chkconfig pure-ftpd off
fi
echo "Removing ${INITDDIR}/pure-ftpd..."
rm -f ${INITDDIR}/pure-ftpd
fi
if [ "${SYSTEMD}" = "yes" ]; then
echo "Disabling pure-ftpd in systemd..."
systemctl disable pure-ftpd.service
rm -f ${SYSTEMDDIR}/pure-ftpd.service
systemctl daemon-reload
rm -f /usr/libexec/pureftpd_startscript
fi
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"
}
####################################################
doRemoveNghttp2() {
initHTTP2var
if [ "${WEBSERVER_OPT}" = "apache" ] && [ "${WEBSERVER_OPT}" = "nginx_apache" ] && [ "${HTTP2}" = "1" ]; then
do_exit 1 "Cannot remove Nghttp2, because it is enabled in options.conf file (Apache or Nginx_Apache is selected as a webserver)."
fi
if [ "${CURL_OPT}" = "yes" ] && [ "${HTTP2}" = "1" ]; then
do_exit 1 "Cannot remove Nghttp2, because it is enabled in options.conf file (cURL is enabled)."
fi
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"
}
####################################################
doCPanelToDA() {
cd ${CWD}
CPANEL_TO_DA_DIR=/usr/local/directadmin/scripts/cpanel_to_da
CPANEL_TO_DA_SH=${CPANEL_TO_DA_DIR}/cpanel_to_da.sh
CPANEL_TO_DA_ROUNDCUBE=${CPANEL_TO_DA_DIR}/cpanel_da_roundcube.php
CPANEL_TO_DA_SQL_PARSER=${CPANEL_TO_DA_DIR}/php_sql_parser.tar.gz
CPANEL_SQLITE_TO_DA_ROUNDCUBE=${CPANEL_TO_DA_DIR}/cpanel_sqlite_da_roundcube.php
if [ ! -d "${CPANEL_TO_DA_DIR}" ]; then
mkdir -p "${CPANEL_TO_DA_DIR}"
chmod 700 "${CPANEL_TO_DA_DIR}"
fi
PHP_SQL_PARSER_VER=`getVer cpanel_php_sql_parser`
CPANEL_TO_DA_ROUNDCUBE_VER=`getVer cpanel_da_roundcube`
CPANEL_SQLITE_TO_DA_ROUNDCUBE_VER=`getVer cpanel_sqlite_da_roundcube`
getFile all/cpanel-conversion/cpanel_to_da-${CPANEL_TO_DA_VER}.sh cpanel_to_da cpanel_to_da.sh
getFile all/cpanel-conversion/cpanel_da_roundcube-${CPANEL_TO_DA_ROUNDCUBE_VER}.php cpanel_da_roundcube cpanel_da_roundcube.php
getFile all/cpanel-conversion/cpanel_sqlite_da_roundcube-${CPANEL_SQLITE_TO_DA_ROUNDCUBE_VER}.php cpanel_sqlite_da_roundcube cpanel_sqlite_da_roundcube.php
getFile all/cpanel-conversion/php_sql_parser-${PHP_SQL_PARSER_VER}.tar.gz cpanel_php_sql_parser php_sql_parser.tar.gz
mv -f ${CWD}/cpanel_to_da.sh ${CPANEL_TO_DA_SH}
mv -f ${CWD}/cpanel_da_roundcube.php ${CPANEL_TO_DA_ROUNDCUBE}
mv -f ${CWD}/cpanel_sqlite_da_roundcube.php ${CPANEL_SQLITE_TO_DA_ROUNDCUBE}
mv -f ${CWD}/php_sql_parser.tar.gz ${CPANEL_TO_DA_SQL_PARSER}
chown diradmin:diradmin ${CPANEL_TO_DA_SH} ${CPANEL_TO_DA_ROUNDCUBE}
chmod 700 ${CPANEL_TO_DA_SH} ${CPANEL_TO_DA_ROUNDCUBE}
tar xzf ${CPANEL_TO_DA_SQL_PARSER} --no-same-owner -C ${CPANEL_TO_DA_DIR}
echo "cPanel to DirectAdmin conversion script version ${CPANEL_TO_DA_VER} has been installed."
writeLog "cPanel to DirectAdmin conversion script update requested"
}
####################################################
exim_chunking_advertise_hosts_insecure() {
if [ ! -s /usr/sbin/exim ] || [ ! -s /etc/exim.conf ]; then
echo 0;
return;
fi
EXIMV="`exim_version`"
if [ "`version_cmp ${EXIMV} 4.90 'exim_chunking_advertise_hosts_insecure'`" -ge 0 ]; then
echo 0;
return;
fi
F=
if [ -s /etc/exim.conf ]; then
C=`grep -c chunking_advertise_hosts /etc/exim.conf`
if [ "$C" -gt 0 ]; then
F=/etc/exim.conf
fi
fi
if [ "${HAVE_CHUNKING_A_H}" = "0" ] && [ -s /etc/exim.variables.conf ]; then
C=`grep -c chunking_advertise_hosts /etc/exim.variables.conf`
if [ "$C" -gt 0 ]; then
F=/etc/exim.variables.conf
fi
fi
if [ "${F}" = "" ]; then
echo "Cannot find 'chunking_advertise_hosts=' in your /etc/exim.conf nor your /etc/exim.variables.conf. Either update to exim 4.90, update the exim.conf, or add 'chunking_advertise_hosts=' to your exim.conf"
return;
fi
#we have chunking_advertise_hosts. See if it's set correctly.
C=`grep chunking_advertise_hosts $F | grep -c '*'`
if [ "${C}" -eq 0 ]; then
echo 0
return;
fi
echo "chunking_advertise_hosts should be an empty value in $F, but is currently set to chunking_advertise_hosts=*"
return;
}
####################################################
checkSecurity() {
EMAIL_FTP_PASSWORD_CHANGE=`getDA_Opt email_ftp_password_change 1`
if [ "$EMAIL_FTP_PASSWORD_CHANGE" -gt 0 ] && [ $(is_os_eol) -eq 1 ]; then
DA_VERSION_IS_INSECURE=true
else
DA_VERSION_IS_INSECURE=false
fi
EXIM_PL_IS_INSECURE=false
if [ -s /etc/exim.pl ]; then
C=`grep -c safe_name /etc/exim.pl`
if [ "$C" = "0" ]; then
EXIM_PL_IS_INSECURE=true
fi
fi
EXIM_CHUNKING_IS_INSECURE=false
EXIM_CHUNKING_CHECK=`exim_chunking_advertise_hosts_insecure`
if [ "${EXIM_CHUNKING_CHECK}" != "0" ]; then
EXIM_CHUNKING_IS_INSECURE=true;
fi
LIST_JSON_SECURITY=false
if ${EXIM_PL_IS_INSECURE} || ${DA_VERSION_IS_INSECURE} || ${EXIM_CHUNKING_IS_INSECURE}; 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
#DA 1.52.0 - https://www.directadmin.com/features.php?id=2036
if [ -x ${DA_BIN} ] && ${DA_VERSION_IS_INSECURE}; then
if [ "$EMAIL_FTP_PASSWORD_CHANGE" -gt 0 ] && [ $(is_os_eol) -eq 1 ]; then
if [ "${VERSIONS}" = "json" ]; then
if [ "${SECURITY_ITEM_ADDED}" -eq 1 ]; then
echo ","
fi
SECURITY_ITEM_ADDED=1
printf "\t\t\"DirectAdmin 2036\": {\n"
printf "\t\t\t\"name\": \"Security fix for E-Mail Password change\",\n"
printf "\t\t\t\"description\": \"Your version of DirectAdmin cannot be updated. Set email_ftp_password_change=0\",\n"
printf "\t\t\t\"url\": \"https://www.directadmin.com/features.php?id=2036\"\n"
printf "\t\t}"
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Security update is available.${boldoff}: Your version of DirectAdmin cannot be updated. Set email_ftp_password_change=0 in your directadmin.conf: https://www.directadmin.com/features.php?id=2036"
echo ""
elif [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Setting email_ftp_password_change=0 in the directadmin.conf.${boldoff}"
echo ""
setVal email_ftp_password_change 0 ${DACONF_TEMPLATE_FILE}
setVal email_ftp_password_change 0 ${DACONF_FILE}
if [ -s ${DACONF_FILE} ]; then
control_service directadmin restart
fi
fi
else
if [ "${VERSIONS}" = "json" ]; then
if [ "${SECURITY_ITEM_ADDED}" -eq 1 ]; then
echo ","
fi
SECURITY_ITEM_ADDED=1
printf "\t\t\"DirectAdmin 2036\": {\n"
printf "\t\t\t\"name\": \"Security fix for E-Mail Password change\",\n"
printf "\t\t\t\"description\": \"Update your DirectAdmin version to 1.52.0 or higher.\",\n"
printf "\t\t\t\"url\": \"https://www.directadmin.com/features.php?id=2036\"\n"
printf "\t\t}"
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Security update is available.${boldoff}: Update DirectAdmin to 1.52.0 or higher: https://www.directadmin.com/features.php?id=2036"
echo ""
elif [ "${VERSIONS}" = "0" ]; then
AUTO_UPDATE=1;
if [ -s /usr/local/directadmin/data/admin/admin.conf ]; then
C=`grep -c auto_update=no /usr/local/directadmin/data/admin/admin.conf`
if [ "${C}" -gt 0 ]; then
AUTO_UPDATE=0
fi
fi
DA_1520_UPDATE_CHECK=/root/.update_da_1520
if [ -s ${DA_1520_UPDATE_CHECK} ] || [ "${AUTO_UPDATE}" = "0" ]; then
echo "${boldon}Security Issue${boldoff}: Update DirectAdmin to 1.52.0 was already attempted, but failed. Disabling email_ftp_password_change.${boldoff}"
echo ""
setVal email_ftp_password_change 0 ${DACONF_TEMPLATE_FILE}
setVal email_ftp_password_change 0 ${DACONF_FILE}
if [ -s ${DACONF_FILE} ]; then
control_service directadmin restart
fi
else
echo 1 > ${DA_1520_UPDATE_CHECK}
if [ -s ${DACONF_FILE} ]; then
doUpdateDA
else
#save it for later:
echo "${boldon}Updating DirectAdmin once install is complete.${boldoff}"
echo "action=update&value=program" >> ${TASK_QUEUE}
fi
fi
fi
fi
fi
#exim.pl - https://forum.directadmin.com/showthread.php?t=55502
if [ -s /etc/exim.pl ]; then
if ${EXIM_PL_IS_INSECURE}; then
if [ "${VERSIONS}" = "json" ]; then
if [ "${SECURITY_ITEM_ADDED}" -eq 1 ]; then
echo ","
fi
SECURITY_ITEM_ADDED=1
printf "\t\t\"DirectAdmin 55502\": {\n"
printf "\t\t\t\"name\": \"Security fix for exim.pl\",\n"
printf "\t\t\t\"description\": \"Update your exim.pl version for better filtering.\",\n"
printf "\t\t\t\"url\": \"https://forum.directadmin.com/showthread.php?t=55502\"\n"
printf "\t\t}"
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Security update is available.${boldoff}: Update your exim.pl version for better filtering: https://forum.directadmin.com/showthread.php?t=55502"
echo ""
elif [ "${VERSIONS}" = "0" ]; then
EPL_VER=`exim_pl_version`
if [ "${EPL_VER}" = "0" ] || [ "${EPL_VER}" = "" ]; then
echo ""
echo "${boldon}*** Unable to determine the ${EPL} version. Manual update required. ***${boldoff}"
echo "https://forum.directadmin.com/showthread.php?t=55502"
echo ""
elif [ "${EXIMCONF_OPT}" != "yes" ]; then
echo ""
echo "${boldon}*** Unable to update the exim.pl because of option eximconf=no. Manual update required. ***${boldoff}"
echo "https://forum.directadmin.com/showthread.php?t=55502"
echo ""
else
wget ${WGET_CONNECT_OPTIONS} -O /etc/exim.pl.cb20 ${DOWNLOADSERVER_SCHEME}://${DOWNLOADSERVER_OPT}/services/exim.pl.${EXIM_PL_VER}
if [ -s /etc/exim.pl.cb20 ]; then
EPL_BACK=/etc/exim.pl.${EPL_VER}.55502.backup
if [ ! -s ${EPL_BACK} ]; then
cp -f /etc/exim.pl ${EPL_BACK}
fi
mv -f /etc/exim.pl.cb20 /etc/exim.pl
chmod 755 /etc/exim.pl
control_service exim restart
else
rm -f /etc/exim.pl.cb20
echo "${boldon}*** Download of /etc/exim.pl failed ***${boldoff}"
fi
fi
fi
fi
fi
#chunking_advertise_hosts exim < 4.90
#https://lists.gt.net/exim/announce/108962
#https://forum.directadmin.com/showthread.php?t=55603
if ${EXIM_CHUNKING_IS_INSECURE}; then
#we eigher have /etc/exim.variables.conf, or we don't.
HAVE_CHUNKING_A_H=0
F=
if [ -s /etc/exim.conf ]; then
C=`grep -c chunking_advertise_hosts /etc/exim.conf`
if [ "$C" -gt 0 ]; then
F=/etc/exim.conf
HAVE_CHUNKING_A_H=1
fi
fi
if [ "${HAVE_CHUNKING_A_H}" = "0" ] && [ -s /etc/exim.variables.conf ]; then
C=`grep -c chunking_advertise_hosts /etc/exim.variables.conf`
if [ "$C" -gt 0 ]; then
F=/etc/exim.variables.conf
HAVE_CHUNKING_A_H=1
fi
fi
S=
if [ "${HAVE_CHUNKING_A_H}" = "0" ]; then
S="Cannot find 'chunking_advertise_hosts=' in your /etc/exim.conf nor your /etc/exim.variables.conf. Either update to exim 4.89.1, update the exim.conf, or add 'chunking_advertise_hosts=' to your exim.conf"
else
#we have it, but need to make sure it's correct.
C=`grep chunking_advertise_hosts $F | grep -c '*'`
if [ "${C}" -gt 0 ]; then
S="chunking_advertise_hosts should be an empty value in $F, but is currently set to chunking_advertise_hosts=*"
fi
fi
EXIMV="`exim_version`"
if [ "`version_cmp ${EXIMV} 4.88 'exim 4.88 ver srs check to set chunking_advertise_hosts='`" -ge 0 ]; then
EXIM_SUPPORT_CHUNKING=1
else
EXIM_SUPPORT_CHUNKING=0
S="${S}. NOTE Only exim 4.88 and higher supports chunking_advertise_hosts. You have ${EXIMV}"
fi
if [ "${S}" != "" ]; then
if [ "${VERSIONS}" = "json" ]; then
if [ "${SECURITY_ITEM_ADDED}" -eq 1 ]; then
echo ","
fi
SECURITY_ITEM_ADDED=1
printf "\t\t\"Exim 55603\": {\n"
printf "\t\t\t\"name\": \"Disable Chunking Security Vulnerability\",\n"
printf "\t\t\t\"description\": \"${S}\",\n"
printf "\t\t\t\"url\": \"https://forum.directadmin.com/showthread.php?t=55603\"\n"
printf "\t\t}"
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Security update is available.${boldoff}: ${S}: https://forum.directadmin.com/showthread.php?t=55603"
echo ""
elif [ "${VERSIONS}" = "0" ]; then
if [ "${EXIMCONF_OPT}" != "yes" ]; then
echo ""
echo "${boldon}*** Unable to set 'chunking_advertise_hosts=' to set because of option eximconf=no. Manual fix required. ***${boldoff}"
echo "https://forum.directadmin.com/showthread.php?t=55603"
echo ""
else
if [ "${HAVE_CHUNKING_A_H}" = "0" ]; then
if [ "${EXIM_SUPPORT_CHUNKING}" = "0" ]; then
echo "Exim version ${EXIMV} does not support chunking_advertise_hosts= so you must update the exim version.";
elif [ -s /etc/exim.variables.conf ]; then
echo "chunking_advertise_hosts=" >> /etc/exim.variables.conf
else
perl -pi -e 's/^message_body_visible/chunking_advertise_hosts=\nmessage_body_visible/' /etc/exim.conf
fi
else
#we have it, but it's wrong. Swap * with blank value in $F.
B=$F.pre_55603_chunking_advertise_hosts_fix
if [ ! -e $B ]; then
/bin/cp -f $F $B
fi
perl -pi -e 's/chunking_advertise_hosts[ \t]*=[ \t]*\*/chunking_advertise_hosts=/' ${F}
fi
fi
fi
fi
fi
if [ "${VERSIONS}" = "json" ] && ${LIST_JSON_SECURITY}; then
printf "\n\t},\n"
fi
}
####################################################
ensure_not_debian_bind9_boot() {
if [ "${SYSTEMD}" != "yes" ]; then
return;
fi
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 [ ${OS} = "FreeBSD" ]; then
pkg -y upgrade
elif [ -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
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} ] && [ "${DIRECTADMIN_VER}" != "0" ]; then
DOWNGRADE_CASE=false
DIRECTADMINV="`${DA_BIN} v | grep -m1 '^Version:' | grep -oE '[^ ]+$' | cut -d. -f2,3,4`"
if [ "`version_cmp ${DIRECTADMIN_VER} $DIRECTADMINV`" -lt 0 ]; then
DOWNGRADE_CASE=true
fi
if ! ${DOWNGRADE_CASE}; then
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of DirectAdmin: ${DIRECTADMIN_VER}"
echo "Installed version of DirectAdmin: ${DIRECTADMINV}"
echo ""
fi
if [ "${DIRECTADMIN_VER}" != "${DIRECTADMINV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "3" ]; then
doUpdateDA
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}DirectAdmin ${DIRECTADMINV} to ${DIRECTADMIN_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"update_da\": {\n"
printf "\t\t\"name\": \"DirectAdmin\",\n"
printf "\t\t\"current\": \"${DIRECTADMINV}\",\n"
printf "\t\t\"offered\": \"${DIRECTADMIN_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
elif [ $(is_os_eol) -eq 1 ] && [ "${DIRECTADMIN_VER}" != "0" ]; then
echo "${boldon}Unable to find any updates for DirectAdmin, because OS used is EOL.${boldoff}"
echo ""
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
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 [ -e /usr/local/directadmin/scripts/cpanel_to_da/cpanel_to_da.sh ]; then
if grep -q -m1 'VERSION=' /usr/local/directadmin/scripts/cpanel_to_da/cpanel_to_da.sh; then
CPANEL_TO_DAV="`grep -m1 'VERSION=' /usr/local/directadmin/scripts/cpanel_to_da/cpanel_to_da.sh | cut -d'=' -f2`"
else
CPANEL_TO_DAV="0"
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of cPanel to DirectAdmin conversion script: ${CPANEL_TO_DA_VER}"
echo "Installed version of cPanel to DirectAdmin conversion script: ${CPANEL_TO_DAV}"
echo ""
fi
if [ "${CPANEL_TO_DA_VER}" != "${CPANEL_TO_DAV}" ]; then
if [ "${VERSIONS}" = "0" ] || [ "${VERSIONS}" = "2" ]; then
echo "${boldon}Updating cPanel to DirectAdmin conversion script${boldoff}"
doCPanelToDA
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}cPanel to DirectAdmin conversion script ${CPANEL_TO_DAV} to ${CPANEL_TO_DA_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"cpanel_to_da\": {\n"
printf "\t\t\"name\": \"cPanel to DirectAdmin conversion script\",\n"
printf "\t\t\"current\": \"${CPANEL_TO_DAV}\",\n"
printf "\t\t\"offered\": \"${CPANEL_TO_DA_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -x /usr/bin/bwrap ]; 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
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 [ "${AUTOCONF_OPT}" = "yes" ] && [ "${AUTOCONF_VER}" != "0" ]; then
if [ -e /usr/local/bin/autoconf ]; then
AUTOCONFV="`/usr/local/bin/autoconf --version | grep -m1 '(GNU Autoconf)' | awk '{ print $4 }'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of autoconf: ${AUTOCONF_VER}"
echo "Installed version of autoconf: ${AUTOCONFV}"
echo ""
fi
if [ "${AUTOCONF_VER}" != "${AUTOCONFV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating autoconf${boldoff}"
doAutoconf
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Autoconf ${AUTOCONFV} to ${AUTOCONF_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"autoconf\": {\n"
printf "\t\t\"name\": \"Autoconf\",\n"
printf "\t\t\"current\": \"${AUTOCONFV}\",\n"
printf "\t\t\"offered\": \"${AUTOCONF_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ "${AUTOMAKE_OPT}" = "yes" ] && [ "${AUTOMAKE_VER}" != "0" ]; then
if [ -e /usr/local/bin/automake ]; then
AUTOMAKEV="`/usr/local/bin/automake --version | grep -m1 '(GNU automake)' | awk '{ print $4 }'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of automake: ${AUTOMAKE_VER}"
echo "Installed version of automake: ${AUTOMAKEV}"
echo ""
fi
if [ "${AUTOMAKE_VER}" != "${AUTOMAKEV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating automake${boldoff}"
doAutomake
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Automake ${AUTOMAKEV} to ${AUTOMAKE_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"automake\": {\n"
printf "\t\t\"name\": \"Automake\",\n"
printf "\t\t\"current\": \"${AUTOMAKEV}\",\n"
printf "\t\t\"offered\": \"${AUTOMAKE_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
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\": \"${IMAGEMAGICK_AUTOMAKEV}\",\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 [ "${LIBTOOL_OPT}" = "yes" ] && [ "${LIBTOOL_VER}" != "0" ]; then
if [ -e /usr/local/bin/libtool ]; then
LIBTOOLV="`/usr/local/bin/libtool --version | grep -m1 '(GNU libtool)' | awk '{ print $4 }'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of libtool: ${LIBTOOL_VER}"
echo "Installed version of libtool: ${LIBTOOLV}"
echo ""
fi
if [ "${LIBTOOL_VER}" != "${LIBTOOLV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating libtool${boldoff}"
doLibtool
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Libtool ${LIBTOOLV} to ${LIBTOOL_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"libtool\": {\n"
printf "\t\t\"name\": \"Libtool\",\n"
printf "\t\t\"current\": \"${LIBTOOL_AUTOMAKEV}\",\n"
printf "\t\t\"offered\": \"${LIBTOOL_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ -s /usr/local/include/libpng16/png.h ] && [ "${PNG_VER}" != "0" ]; then
LIBPNGV="`grep -m1 'define PNG_LIBPNG_VER_STRING' /usr/local/include/libpng16/png.h | cut -d'\"' -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of libpng: ${PNG_VER}"
echo "Installed version of libpng: ${LIBPNGV}"
echo ""
fi
if [ "${LIBPNGV}" != "${PNG_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating libpng${boldoff}"
doLibPng
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Libpng ${LIBPNGV} to ${PNG_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"libpng\": {\n"
printf "\t\t\"name\": \"Libpng\",\n"
printf "\t\t\"current\": \"${LIBPNGV}\",\n"
printf "\t\t\"offered\": \"${PNG_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -s /usr/local/lib/pkgconfig/libwebp.pc ] && [ "${LIBWEBP_VER}" != "0" ]; then
LIBWEBPV="`grep -m1 Version /usr/local/lib/pkgconfig/libwebp.pc | awk '{print $2}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of libwebp: ${LIBWEBP_VER}"
echo "Installed version of libwebp: ${LIBWEBPV}"
echo ""
fi
if [ "${LIBWEBPV}" != "${LIBWEBP_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating libwebp${boldoff}"
doLibWebp
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Libwebp ${LIBWEBPV} to ${LIBWEBP_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"libwebp\": {\n"
printf "\t\t\"name\": \"Libwebp\",\n"
printf "\t\t\"current\": \"${LIBWEBPV}\",\n"
printf "\t\t\"offered\": \"${LIBWEBP_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -s /usr/local/include/nghttp2/nghttp2ver.h ] && [ "${NGHTTP2_VER}" != "0" ]; then
NGHTTP2V="`grep -m1 'define NGHTTP2_VERSION' /usr/local/include/nghttp2/nghttp2ver.h | cut -d'\"' -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of nghttp2: ${NGHTTP2_VER}"
echo "Installed version of nghttp2: ${NGHTTP2V}"
echo ""
fi
if [ "${NGHTTP2V}" != "${NGHTTP2_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating nghttp2${boldoff}"
doNghttp2
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Nghttp2 ${NGHTTP2V} to ${NGHTTP2_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"nghttp2\": {\n"
printf "\t\t\"name\": \"Nghttp2\",\n"
printf "\t\t\"current\": \"${NGHTTP2V}\",\n"
printf "\t\t\"offered\": \"${NGHTTP2_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${EASY_SPAM_FIGHTER_OPT}" = "yes" ]; then
if [ -s /usr/local/include/spf2/spf_lib_version.h ] && [ "${LIBSPF2_VER}" != "0" ]; then
SPF_LIB_VERSION_MAJOR="`grep -m1 'SPF_LIB_VERSION_MAJOR' /usr/local/include/spf2/spf_lib_version.h | awk '{print $3}'`"
SPF_LIB_VERSION_MINOR="`grep -m1 'SPF_LIB_VERSION_MINOR' /usr/local/include/spf2/spf_lib_version.h | awk '{print $3}'`"
SPF_LIB_VERSION_PATCH="`grep -m1 'SPF_LIB_VERSION_PATCH' /usr/local/include/spf2/spf_lib_version.h | awk '{print $3}'`"
LIBSPF2V="${SPF_LIB_VERSION_MAJOR}.${SPF_LIB_VERSION_MINOR}.${SPF_LIB_VERSION_PATCH}"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of libspf2: ${LIBSPF2_VER}"
echo "Installed version of libspf2: ${LIBSPF2V}"
echo ""
fi
if [ "${LIBSPF2V}" != "${LIBSPF2_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating libspf2${boldoff}"
doLibspf2
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Libspf2 ${LIBSPF2V} to ${LIBSPF2_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"libspf2\": {\n"
printf "\t\t\"name\": \"Libspf2\",\n"
printf "\t\t\"current\": \"${LIBSPF2V}\",\n"
printf "\t\t\"offered\": \"${LIBSPF2_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
#When libsrs2 becomes supported in Exim, we could have it versioned
# if [ -s /usr/local/include/srs2.h ] && [ "${LIBSRS2_VER}" != "0" ]; then
# SRS_VERSION_MAJOR="`grep -m1 'SRS_VERSION_MAJOR' /usr/local/include/srs2.h | awk '{print $3}'`"
# SRS_VERSION_MINOR="`grep -m1 'SRS_VERSION_MINOR' /usr/local/include/srs2.h | awk '{print $3}'`"
# SRS_VERSION_PATCHLEVEL="`grep -m1 'SRS_VERSION_PATCHLEVEL' /usr/local/include/srs2.h | awk '{print $3}'`"
# LIBSRS2V="${SRS_VERSION_MAJOR}.${SRS_VERSION_MINOR}.${SRS_VERSION_PATCHLEVEL}"
# if [ "${VERSIONS}" = "1" ]; then
# echo "Latest version of libsrs2: ${LIBSRS2_VER}"
# echo "Installed version of libsrs2: ${LIBSRS2V}"
# echo ""
# fi
# if [ "${LIBSRS2V}" != "${LIBSRS2_VER}" ]; then
# if [ "${VERSIONS}" = "0" ]; then
# echo "${boldon}Updating libsrs2${boldoff}"
# doLibsrs2
# elif [ "${VERSIONS}" = "1" ]; then
# echo "${boldon}Libsrs2 ${LIBSRS2V} to ${LIBSRS2_VER} update is available.${boldoff}"
# echo ""
# elif [ "${VERSIONS}" = "json" ]; then
# printf "\t\"libsrs2\": {\n"
# printf "\t\t\"name\": \"Libsrs2\",\n"
# printf "\t\t\"current\": \"${LIBSRS2V}\",\n"
# printf "\t\t\"offered\": \"${LIBSRS2_VER}\"\n"
# printf "\t},\n"
# fi
# fi
# 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 [ -s ${STRINGS} ]; then
# /usr/local/include/jpeglib.h cannot be used, because it shows 9c as "Compatibility version 9.0"
if [ -s /usr/local/lib/libjpeg.a ] && [ "${JPEG_VER}" != "0" ]; then
#JPEGV="`grep -m1 'define JPEG_LIB_VERSION' /usr/local/include/jpeglib.h | awk '{print $6}'`"
JPEGV="`strings /usr/local/lib/libjpeg.a | grep '^[0-9][a-z][ ]*[0-9]*-[A-Za-z]*-[0-9]*$' | awk '{print $1}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of libjpeg: ${JPEG_VER}"
echo "Installed version of libjpeg: ${JPEGV}"
echo ""
fi
if [ "${JPEGV}" != "${JPEG_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating libjpeg${boldoff}"
doLibJpeg
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Libjpeg ${JPEGV} to ${JPEG_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"libjpeg\": {\n"
printf "\t\t\"name\": \"Libjpeg\",\n"
printf "\t\t\"current\": \"${JPEGV}\",\n"
printf "\t\t\"offered\": \"${JPEG_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 [ -e /usr/local/icu/include/unicode/uvernum.h ]; then
# Downgrade ICU to 58_2 on OS not supporting C++11 std
downgradeICUver
ICU4CV="`echo ${ICU_VER} | tr '_' '.'`"
if [ "${ICU4CV}" != "0" ]; then
CURRENT_ICU4C="`grep -m1 'define U_ICU_VERSION ' /usr/local/icu/include/unicode/uvernum.h | cut -d'\"' -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of ICU4C: ${ICU4CV}"
echo "Installed version of ICU4C: ${CURRENT_ICU4C}"
echo ""
fi
if [ "${ICU4CV}" != "${CURRENT_ICU4C}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating ICU4C${boldoff}"
doICU
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}ICU4C ${CURRENT_ICU4C} to ${ICU4CV} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"icu\": {\n"
printf "\t\t\"name\": \"icu4c\",\n"
printf "\t\t\"current\": \"${CURRENT_ICU4C}\",\n"
printf "\t\t\"offered\": \"${ICU4CV}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
fi
if [ -e /usr/local/include/sodium/version.h ] && [ "${LIBSODIUM_VER}" != "0" ]; then
LIBSODIUMV="`grep -m1 SODIUM_VERSION_STRING /usr/local/include/sodium/version.h | cut -d'\"' -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of libsodium: ${LIBSODIUM_VER}"
echo "Installed version of libsodium: ${LIBSODIUMV}"
echo ""
fi
if [ "${LIBSODIUM_VER}" != "${LIBSODIUMV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating libsodium${boldoff}"
doLibsodium
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}libsodium ${LIBSODIUMV} to ${LIBSODIUM_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"libsodium\": {\n"
printf "\t\t\"name\": \"libsodium\",\n"
printf "\t\t\"current\": \"${LIBSODIUMV}\",\n"
printf "\t\t\"offered\": \"${LIBSODIUM_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -e /usr/local/include/libxml2/libxml/xmlversion.h ] && [ "${LIBXML2_VER}" != "0" ]; then
LIBXML2V="`grep -m1 'define LIBXML_DOTTED_VERSION' /usr/local/include/libxml2/libxml/xmlversion.h | cut -d'\"' -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of libxml2: ${LIBXML2_VER}"
echo "Installed version of libxml2: ${LIBXML2V}"
echo ""
fi
if [ "${LIBXML2_VER}" != "${LIBXML2V}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating libxml2${boldoff}"
doLibxml2
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}libxml2 ${LIBXML2V} to ${LIBXML2_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"libxml2\": {\n"
printf "\t\t\"name\": \"libXML2\",\n"
printf "\t\t\"current\": \"${LIBXML2V}\",\n"
printf "\t\t\"offered\": \"${LIBXML2_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -e /usr/local/include/libxslt/xsltconfig.h ] && [ "${LIBXSLT_VER}" != "0" ]; then
LIBXSLTV="`grep -m1 'define LIBXSLT_DOTTED_VERSION' /usr/local/include/libxslt/xsltconfig.h | cut -d'\"' -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of libxslt: ${LIBXSLT_VER}"
echo "Installed version of libxslt: ${LIBXSLTV}"
echo ""
fi
if [ "${LIBXSLT_VER}" != "${LIBXSLTV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating libxslt${boldoff}"
doLibxslt
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}libxslt ${LIBXSLTV} to ${LIBXSLT_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"libxslt\": {\n"
printf "\t\t\"name\": \"libXSLT\",\n"
printf "\t\t\"current\": \"${LIBXSLTV}\",\n"
printf "\t\t\"offered\": \"${LIBXSLT_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
# uncomment if PHP 7.4 or higher drops built-in libzip
# if [ -e /usr/local/include/libzip/libxml/xmlversion.h ] && [ "${LIBZIP_VER}" != "0" ]; then
# #check how version is really defined in libzip file
# #LIBZIPV="`grep -m1 'define LIBZIB_DOTTED_VERSION' /usr/local/include/libzip.h | cut -d'\"' -f2`"
# if [ "${VERSIONS}" = "1" ]; then
# echo "Latest version of libzip: ${LIBZIP_VER}"
# echo "Installed version of libzip: ${LIBZIPV}"
# echo ""
# fi
# if [ "${LIBZIP_VER}" != "${LIBZIPV}" ]; then
# if [ "${VERSIONS}" = "0" ]; then
# echo "${boldon}Updating libzip${boldoff}"
# doLibzip
# elif [ "${VERSIONS}" = "1" ]; then
# echo "${boldon}libzip ${LIBZIPV} to ${LIBZIP_VER} update is available.${boldoff}"
# echo ""
# elif [ "${VERSIONS}" = "json" ]; then
# printf "\t\"libzip\": {\n"
# printf "\t\t\"name\": \"libzip\",\n"
# printf "\t\t\"current\": \"${LIBZIPV}\",\n"
# printf "\t\t\"offered\": \"${LIBZIP_VER}\"\n"
# printf "\t},\n"
# fi
# EXIT_CODE=$((EXIT_CODE+1))
# fi
# fi
if [ -e /usr/local/bin/iconv ] && [ "${ICONV_VER}" != "0" ]; then
ICONVV="`/usr/local/bin/iconv --version | head -n1 | awk '{print $4}' | tr -d ')'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of iconv: ${ICONV_VER}"
echo "Installed version of iconv: ${ICONVV}"
echo ""
fi
if [ "${ICONV_VER}" != "${ICONVV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating iconv${boldoff}"
doIconv
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}iconv ${ICONVV} to ${ICONV_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"iconv\": {\n"
printf "\t\t\"name\": \"iconv\",\n"
printf "\t\t\"current\": \"${ICONVV}\",\n"
printf "\t\t\"offered\": \"${ICONV_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -e /usr/local/bin/pigz ] && [ "${PIGZ_VER}" != "0" ]; then
#Zlib which is used for pigz only
if [ -e /usr/local/lib_da/include/zlib.h ] && [ "${ZLIB_VER}" != "0" ]; then
ZLIBV="`grep 'define ZLIB_VERSION' /usr/local/lib_da/include/zlib.h | cut -d'"' -f2`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of zlib: ${ZLIB_VER}"
echo "Installed version of zlib: ${ZLIBV}"
echo ""
fi
if [ "${ZLIB_VER}" != "${ZLIBV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating Zlib${boldoff}"
doZlib
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Zlib ${ZLIBV} to ${ZLIB_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"zlib\": {\n"
printf "\t\t\"name\": \"Zlib\",\n"
printf "\t\t\"current\": \"${ZLIBV}\",\n"
printf "\t\t\"offered\": \"${ZLIB_VER}\"\n"
printf "\t},\n"
fi
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
#Pigz
PIGZV="`/usr/local/bin/pigz --version 2>&1 | awk '{print $2}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of pigz: ${PIGZ_VER}"
echo "Installed version of pigz: ${PIGZV}"
echo ""
fi
if [ "${PIGZ_VER}" != "${PIGZV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating pigz${boldoff}"
doPigz
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}pigz ${PIGZV} to ${PIGZ_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"pigz\": {\n"
printf "\t\t\"name\": \"pigz\",\n"
printf "\t\t\"current\": \"${PIGZV}\",\n"
printf "\t\t\"offered\": \"${PIGZ_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -e /usr/local/bin/m4 ] && [ "${M4_VER}" != "0" ]; then
M4V="`/usr/local/bin/m4 --version | head -n1 | awk '{print $4}' | tr -d ')'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of m4: ${M4_VER}"
echo "Installed version of m4: ${M4V}"
echo ""
fi
if [ "${M4_VER}" != "${M4V}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating m4${boldoff}"
doM4
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}m4 ${M4V} to ${M4_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"m4\": {\n"
printf "\t\t\"name\": \"M4\",\n"
printf "\t\t\"current\": \"${M4V}\",\n"
printf "\t\t\"offered\": \"${M4_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -e /usr/local/bin/pcre-config ] && [ "${PCRE_VER}" != "0" ]; then
PCREV="`/usr/local/bin/pcre-config --version`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PCRE: ${PCRE_VER}"
echo "Installed version of PCRE: ${PCREV}"
echo ""
fi
if [ "${PCRE_VER}" != "${PCREV}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating PCRE${boldoff}"
doPCRE
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}PCRE ${PCREV} to ${PCRE_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"pcre\": {\n"
printf "\t\t\"name\": \"PCRE\",\n"
printf "\t\t\"current\": \"${PCREV}\",\n"
printf "\t\t\"offered\": \"${PCRE_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -e /usr/local/bin/pcre2-config ] && [ "${PCRE2_VER}" != "0" ]; then
PCRE2V="`/usr/local/bin/pcre2-config --version`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PCRE2: ${PCRE2_VER}"
echo "Installed version of PCRE2: ${PCRE2V}"
echo ""
fi
if [ "${PCRE2_VER}" != "${PCRE2V}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating PCRE2${boldoff}"
doPCRE2
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}PCRE2 ${PCRE2V} to ${PCRE2_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"pcre2\": {\n"
printf "\t\t\"name\": \"PCRE2\",\n"
printf "\t\t\"current\": \"${PCRE2V}\",\n"
printf "\t\t\"offered\": \"${PCRE2_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${CURL_OPT}" = "yes" ]; 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 [ -e /usr/local/bin/freetype-config ] && [ "${FREETYPE_VER}" != "0" ]; then
FREETYPEV="`/usr/local/bin/freetype-config --ftversion`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of FreeType: ${FREETYPE_VER}"
echo "Installed version of FreeType: ${FREETYPEV}"
echo ""
fi
#if [ "${FREETYPE_VER}" != "${FREETYPEV}" ]; then
if [ "`version_cmp ${FREETYPE_VER} ${FREETYPEV} 'doVersions::freetype'`" != "0" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating FreeType${boldoff}"
doFreeType
echo "It is recommended to run \"$0 php n\" after FreeType update."
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}FreeType ${FREETYPEV} to ${FREETYPE_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"freetype\": {\n"
printf "\t\t\"name\": \"FreeType\",\n"
printf "\t\t\"current\": \"${FREETYPEV}\",\n"
printf "\t\t\"offered\": \"${FREETYPE_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
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/composer ]; then
COMPOSERV="`COMPOSER_HOME=/root /usr/local/bin/composer -V 2>/dev/null | awk '{print $3}'`"
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 [ -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 [ -s /usr/local/bin/ragel ] && [ "${RAGEL_VER}" != "0" ]; then
RAGELV="`/usr/local/bin/ragel -v | grep -o 'version.*' | awk '{print $2}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of ragel: ${RAGEL_VER}"
echo "Installed version of ragel: ${RAGELV}"
echo ""
fi
if [ "${RAGELV}" != "${RAGEL_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating ragel${boldoff}"
doRagel
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Ragel ${RAGELV} to ${RAGEL_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"ragel\": {\n"
printf "\t\t\"name\": \"Ragel\",\n"
printf "\t\t\"current\": \"${RAGELV}\",\n"
printf "\t\t\"offered\": \"${RAGEL_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -s /usr/local/bin/luajit ] && [ "${LUAJIT_VER}" != "0" ]; then
LUAJITV="`/usr/local/bin/luajit -v | awk '{print $2}'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of LuaJIT: ${LUAJIT_VER}"
echo "Installed version of LuaJIT: ${LUAJITV}"
echo ""
fi
if [ "${LUAJITV}" != "${LUAJIT_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating LuaJIT${boldoff}"
doLuaJIT
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}LuaJIT ${LUAJITV} to ${LUAJIT_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"luajit\": {\n"
printf "\t\t\"name\": \"LuaJIT\",\n"
printf "\t\t\"current\": \"${LUAJITV}\",\n"
printf "\t\t\"offered\": \"${LUAJIT_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ -s /usr/local/lib/glib-2.0/include/glibconfig.h ] && [ "${GLIB_VER}" != "0" ]; then
GLIBV="`grep -A2 'GLIB_MAJOR_VERSION' /usr/local/lib/glib-2.0/include/glibconfig.h | awk '{print $3}' | perl -p0 -e 's|\n|.|g' | perl -p0 -e 's|\.$||g'`"
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of glib: ${GLIB_VER}"
echo "Installed version of glib: ${GLIBV}"
echo ""
fi
if [ "${GLIBV}" != "${GLIB_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating glib${boldoff}"
doRagel
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}Glib ${GLIBV} to ${GLIB_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"glib\": {\n"
printf "\t\t\"name\": \"Glib\",\n"
printf "\t\t\"current\": \"${GLIBV}\",\n"
printf "\t\t\"offered\": \"${GLIB_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
fi
fi
if [ "${RSPAMD_VER}" != "0" ]; then
# Rspamd is managed by OS package manager (yum/apt-get/pkg)
# if [ -e /usr/local/bin/rspamd ]; then
# RSPAMDV=`/usr/local/bin/rspamd --version | grep -m1 'version' | awk '{print $4}'`
# if [ "${VERSIONS}" = "1" ]; then
# echo "Latest version of Rspamd: ${RSPAMD_VER}"
# echo "Installed version of Rspamd: ${RSPAMDV}"
# echo ""
# fi
# if [ "${RSPAMD_VER}" != "${RSPAMDV}" ]; then
# if [ "${VERSIONS}" = "0" ]; then
# echo "${boldon}Updating Rspamd.${boldoff}"
# doRspamd
# elif [ "${VERSIONS}" = "1" ]; then
# echo "${boldon}Rspamd ${RSPAMDV} to ${RSPAMD_VER} update is available.${boldoff}"
# echo ""
# elif [ "${VERSIONS}" = "json" ]; then
# printf "\t\"rspamd\": {\n"
# printf "\t\t\"name\": \"Rspamd\",\n"
# printf "\t\t\"current\": \"${RSPAMDV}\",\n"
# printf "\t\t\"offered\": \"${RSPAMD_VER}\"\n"
# printf "\t},\n"
# fi
# EXIT_CODE=$((EXIT_CODE+1))
# fi
# fi
#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 [ "${ZSTD_VER}" != "0" ]; then
if [ -x /usr/local/bin/zstd ]; then
ZSTDV=`/usr/local/bin/zstd --version | grep -o 'v[0-9]*\.[0-9][^ ,]*' | cut -dv -f2`
else
ZSTDV=0
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of zstd: ${ZSTD_VER}"
echo "Installed version of zstd: ${ZSTDV}"
echo ""
fi
if [ "${ZSTDV}" != "${ZSTD_VER}" ]; then
if [ "${VERSIONS}" = "0" ]; then
echo "${boldon}Updating zstd.${boldoff}"
dozstd
elif [ "${VERSIONS}" = "1" ]; then
echo "${boldon}zstd ${ZSTDV} to ${ZSTD_VER} update is available.${boldoff}"
echo ""
elif [ "${VERSIONS}" = "json" ]; then
printf "\t\"zstd\": {\n"
printf "\t\t\"name\": \"zstd\",\n"
printf "\t\t\"current\": \"${ZSTDV}\",\n"
printf "\t\t\"offered\": \"${ZSTD_VER}\"\n"
printf "\t},\n"
fi
EXIT_CODE=$((EXIT_CODE+1))
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
# Mailman is not yet supported
# if [ "${MAILMAN_OPT}" = "yes" ]; then
# MAILMANV=0
# if [ -e /usr/local/mailman/bin/version ]; then
# MAILMANV=`/usr/local/mailman/bin/version | awk '{print $4}'`
# fi
# if [ "${VERSIONS}" = "1" ]; then
# echo "Latest version of Mailman: ${MAILMAN_VER}"
# echo "Installed version of Mailman: ${MAILMANV}"
# echo ""
# fi
# if [ "${MAILMAN_VER}" != "${MAILMANV}" ]; then
# if [ "${VERSIONS}" = "0" ]; then
# echo "${boldon}Updating Mailman.${boldoff}"
# domailman
# elif [ "${VERSIONS}" = "1" ]; then
# echo "${boldon}Mailman ${MAILMANV} to ${MAILMAN_VER} update is available.${boldoff}"
# echo ""
# fi
# 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} -v 2>&1 | grep -m1 'built' | awk '{ print $2 }'`"
elif [ -e /usr/local/bin/php ] && [ ! -L /usr/local/bin/php ]; then
PHPV="`/usr/local/bin/php -v 2>&1 | grep -m1 'built' | awk '{ print $2 }'`"
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-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}"
doPHPXmlrpc ${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
fi
if [ "${VERSIONS}" = "1" ]; then
echo "Latest version of PHP ${php_release}: ${PHP_VER}"
echo "Installed version of PHP ${php_release}: ${PHPV}"
echo ""
fi
if [ "${PHP_VER}" != "${PHPV}" ]; 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
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 AWstats: ${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
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 [ "${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
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
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_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
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
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}; 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=""
KB=1024
MB=1048576
GB=1073741824
speedtest() {
export LC_ALL=C
wget -O /dev/null --timeout=2 --tries=1 http://${1}/services/${2} 2>&1 | grep saved | cut -d\( -f2 | cut -d\) -f1
}
test_server() {
i=$1
VALUE=0
SPEED=`speedtest $i $2`
#can be MB/s or KB/s or B/s
if [ "${SPEED}" = "" ]; then
echo "$i is too slow, skipping."
continue
fi
NUM=`echo $SPEED | cut -d\ -f1`
TYPE=`echo $SPEED | cut -d\ -f2`
case "$TYPE" in
B/s) VALUE=$NUM
;;
KB/s) VALUE=`perl -e "print $KB * $NUM"`
;;
MB/s) VALUE=`perl -e "print $MB * $NUM"`
;;
GB/s) VALUE=`perl -e "print $GB * $NUM"`
;;
*) echo "Unknown speed type $TYPE"
;;
esac
#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="194.59.159.74 `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/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/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 [ "${OS}" = "FreeBSD" ]; then
if [ "${AUTOCONF_OPT}" = "yes" ] && [ "${AUTOCONF_VER}" != "0" ]; then
doAutoconf
fi
if [ "${AUTOMAKE_OPT}" = "yes" ] && [ "${AUTOMAKE_VER}" != "0" ]; then
doAutomake
fi
if [ "${LIBTOOL_OPT}" = "yes" ] && [ "${LIBTOOL_VER}" != "0" ]; then
doHelp2Man
doLibtool
fi
fi
if [ "${PCRE_VER}" != "0" ]; then
doPCRE
fi
if [ "${PCRE2_VER}" != "0" ]; then
doPCRE2
fi
checkLibz
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
doLibJpeg
if [ "${PNG_VER}" != "0" ]; then
doLibPng
fi
if [ "${LIBWEBP_VER}" != "0" ]; then
doLibWebp
fi
if [ "${CURL_VER}" != "0" ]; then
if [ "${CURL_OPT}" = "yes" ]; then
doCURL
fi
fi
if [ "${MCRYPT_VER}" != "0" ]; then
doMCrypt
fi
if [ "${MHASH_VER}" != "0" ]; then
doMHash
fi
if [ "${FREETYPE_VER}" != "0" ]; then
doFreeType
fi
if [ "${ICONV_VER}" != "0" ]; then
doIconv
fi
if [ "${MYSQL_INST_OPT}" != "no" ]; then
doMySQL
fi
if [ ! -d /usr/local/icu/lib ] && [ "${ICU_VER}" != "0" ]; then
if [ "${MAINVER}" != "" ]; then
if [ ${MAINVER} -lt 10 ]; then
doICU
fi
else
doICU
fi
fi
if [ "${LIBXML2_VER}" != "0" ]; then
doLibxml2
fi
if [ "${LIBXSLT_VER}" != "0" ]; then
doLibxslt
fi
if [ "${LIBSODIUM_VER}" != "0" ]; then
doLibsodium
fi
# uncomment if PHP 7.4 or higher drops built-in libzip
# if [ "${LIBZIP_VER}" != "0" ]; then
# doLibzip
# fi
if [ "${CLAMAV_OPT}" = "yes" ] && [ "${CLAMAV_VER}" != "0" ]; then
doclamav
fi
if [ "${ZSTD_VER}" != "0" ]; then
dozstd
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 [ "${SPAMD_OPT}" = "spamassassin" ] && [ "${SPAMASSASSIN_VER}" != "0" ]; then
dospamassassin
fi
if [ "${SPAMD_OPT}" = "rspamd" ] && [ "${SPAMASSASSIN_VER}" != "0" ]; then
doRspamd
do_rspamd_conf
fi
# Mailman is not yet supported
# if [ "${MAILMAN_OPT}" = "yes" ]; then
# domailman
# 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 [ "${CRON_OPT}" = "yes" ]; then
doCron
fi
fix_curl_link_for_yum
printf "\n\n\n"
echo "*************************************"
echo "* *"
echo "* All parts have been installed *"
echo "* *"
echo "*************************************"
echo ""
if [ "${WEBSERVER_OPT}" = "apache" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${SYSTEMD}" = "yes" ]; then
echo "Type: systemctl restart httpd.service"
else
if [ ${OS} = "FreeBSD" ]; then
echo "Type: /usr/local/etc/rc.d/httpd restart"
elif [ -e ${DEBIAN_VERSION} ]; then
echo "Type: /etc/init.d/httpd restart"
else
echo "Type: /sbin/service httpd restart"
fi
fi
fi
if [ "${WEBSERVER_OPT}" = "nginx" ] || [ "${WEBSERVER_OPT}" = "nginx_apache" ]; then
if [ "${SYSTEMD}" = "yes" ]; then
echo "Type: systemctl restart nginx.service"
else
if [ ${OS} = "FreeBSD" ]; then
echo "Type: /usr/local/etc/rc.d/nginx restart"
elif [ -e ${DEBIAN_VERSION} ]; then
echo "Type: /etc/init.d/nginxrestart"
else
echo "Type: /sbin/service nginx restart"
fi
fi
fi
if [ "${WEBSERVER_OPT}" = "litespeed" ] || [ "${WEBSERVER_OPT}" = "openlitespeed" ]; then
if [ "${SYSTEMD}" = "yes" ]; then
echo "Type: systemctl restart litespeed.service"
else
if [ ${OS} = "FreeBSD" ]; then
echo "Type: /usr/local/etc/rc.d/litespeed restart"
elif [ -e ${DEBIAN_VERSION} ]; then
echo "Type: /etc/init.d/litespeed restart"
else
echo "Type: /sbin/service litespeed restart"
fi
fi
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
;;
os_license_mismatch) os_license_mismatch
;;
create_options) create_options
;;
used_configs) used_configs
;;
remove_nghttp2) doRemoveNghttp2
;;
nghttp2) doNghttp2
;;
apache) doChecks; doApache2
;;
letsencrypt) doLetsEncrypt
;;
litespeed) doChecks; doLiteSpeed
;;
openlitespeed) doChecks; doOpenLiteSpeed
;;
litespeed_license) doChecks; doLiteSpeedLicense 1
;;
litespeed_license_migrate) ${LSWS_HOME}/bin/lshttpd -r
;;
libjpeg) doLibJpeg
;;
libpng) doLibPng
;;
libwebp) doLibWebp
;;
libmaxminddb) dolibmaxminddb
;;
geoipupdate) doGeoipupdate
;;
ragel) doRagel
;;
luajit) doLuaJIT
;;
glib) doGlib
;;
zlib) doZlib
;;
cron) doCron
;;
curl) doCURL
;;
mcrypt) doMCrypt
;;
mhash) doMHash
;;
freetype) doFreeType
;;
iconv) doIconv
;;
icu) doICU
;;
php_imagick|imagick) doIMagick
;;
php_phalcon) doPhalcon
;;
php_psr) doPsr
;;
php_imap) doPHPImap
;;
php_xmlrpc) doPHPXmlrpc
;;
php_gmp) doPHPGmp
;;
imagemagick) doImageMagick
;;
nginx) doChecks; doNginx
;;
nginx_apache) doChecks; doApache2; doNginx
;;
autoconf) doAutoconf
;;
automake) doAutomake
;;
m4) doM4
;;
help2man) doHelp2Man
;;
libsodium) doLibsodium
;;
libtool) doLibtool
;;
libxml2) doLibxml2
;;
libxslt) doLibxslt
;;
libzip) doLibzip
;;
libmagic) doLibmagic
;;
pigz) doPigz
;;
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
;;
opcache|php_opcache) doOpcache
;;
mod_fcgid) doModFCGID
;;
clean) doClean
;;
clean_old_webapps) doclean_old_webapps
;;
clean_old_tarballs) doclean_old_tarballs
;;
update) doUpdate
;;
pcre) doPCRE
;;
pcre2) doPCRE2
;;
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 $2
;;
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
;;
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
;;
php_extensions) doExtensionsSetup
;;
libspf2) doLibspf2
;;
libsrs_alt) doLibsrsAlt
;;
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
;;
todovecot) convertToDovecot
;;
dovecot) doDovecot
;;
xapian) doXapian
;;
fts-xapian) doFTSXapian
;;
zstd) dozstd
;;
bubblewrap) doBubblewrap
;;
jailshell) doJailshell
;;
cpanel_to_da) doCPanelToDA
;;
pigeonhole) doPigeonhole
;;
spamassassin|spamd) doChecks; dospamassassin
;;
plugin|custombuild_plugin) doCustombuildPlugin
;;
rspamd) doChecks; doRspamd
;;
netdata) doNetdata
;;
spamassassin_cron) dospamassassinCron
;;
clamav) doclamav
;;
# Mailman is not yet supported
# mailman) domailman
# ;;
set_fastest) set_fastest 0
;;
set_fastest_quiet) set_fastest 1
;;
set) setOpt $2 $3
;;
set_php) setPhpOpt $2 $3
;;
csfpingore) doCSFpignore
;;
composer) doComposer
;;
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_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}