From 3788d853f9ac45c4c5df2f7a0a834f657613a4e3 Mon Sep 17 00:00:00 2001 From: Christoph Date: Wed, 24 Apr 2024 16:41:44 +0200 Subject: [PATCH] /install_httpd-2.4.sh: rewrite file 'extra/httpd-mpm.conf'; Add Parameter 'Timeout' and 'ProxyTimeout' to httpd.conf file. --- install_httpd-2.4.sh | 340 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 300 insertions(+), 40 deletions(-) diff --git a/install_httpd-2.4.sh b/install_httpd-2.4.sh index 13a026d..8c15376 100755 --- a/install_httpd-2.4.sh +++ b/install_httpd-2.4.sh @@ -10,7 +10,7 @@ _backup_date="$(date +%Y%m%d-%H%M)" ## - _VSERVER_GUEST=no -_APACHE_VERSION=2.4.58 +_APACHE_VERSION=2.4.59 _APR_VERSION=1.7.4 _APR_UTIL_VERSION=1.6.3 @@ -94,6 +94,18 @@ _HTTPD_SSL_PORT=443 _SERVER_NAME=`hostname -f` _SERVER_ADMIN="admin@oopen.de" +_HTTPD_OLD_CONF_FILE="$(realpath "/usr/local/apache2/conf/httpd.conf")" +if [[ -f "${_HTTPD_OLD_CONF_FILE}" ]] && $(grep -q -i -E "^\s*timeout\s+" "${_HTTPD_OLD_CONF_FILE}") ; then + _TIMEOUT="$(grep -i -E "^\s*timeout\s+" "${_HTTPD_OLD_CONF_FILE}"| awk '{print$2}' | head -1)" +else + _TIMEOUT=60 +fi +if [[ -f "${_HTTPD_OLD_CONF_FILE}" ]] && $(grep -q -i -E "^\s*ProxyTimeout\s+" "${_HTTPD_OLD_CONF_FILE}") ; then + _PROXY_TIMEOUT="$(grep -i -E "^\s*ProxyTimeout\s+" "${_HTTPD_OLD_CONF_FILE}"| awk '{print$2}' | head -1)" +else + _PROXY_TIMEOUT=${_TIMEOUT} +fi + _srcdir=$(dirname $(realpath $0)) _START_AT_BOOTTIME=yes @@ -137,9 +149,17 @@ fi ## - Determin httpd binary ## - -_httpd_binary="$(which httpd)" -if [ -n "$_httpd_binary" ]; then - _httpd_binary="$(ps -axu | grep httpd | grep -e "^root" | grep -v grep | awk '{print$11}')" +_httpd_binary="$(ps -axu | grep httpd \ + | grep -e "^root" \ + | grep -v grep \ + | grep -v vim \ + | grep -v bash \ + | awk '{print$11}' | head -1)" + +if [ -z "$_httpd_binary" ]; then + + _httpd_binary="$(which httpd)" + if [ -z "$_httpd_binary" ]; then if [ -x "/usr/local/apache2/bin/httpd" ]; then _httpd_binary="/usr/local/apache2/bin/httpd" @@ -276,6 +296,14 @@ get_openssl_version() { fi } +trim() { + local var="$*" + var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters + var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters + echo -n "$var" +} + + detect_os_1 () { if $(which lsb_release > /dev/null 2>&1) ; then @@ -328,11 +356,41 @@ if [[ $? -ne 0 ]] ; then fi -echo +echo "" echo -e "\033[21G\033[32mInstallation script apache webserver \033[m" -echo -echo -echo +echo "" + +if [[ -n "${_httpd_binary}" ]]; then + + echo -e " \033[1mCurrent Settings\033[m" + echo -e "" + echo -e " _httpd_binary: $_httpd_binary" + echo -e " _httpd_current_version: $_httpd_current_version" + echo -e "" + echo -e " _HTTPD_USER: $_HTTPD_USER" + echo -e " _HTTPD_GROUP: $_HTTPD_GROUP" + echo -e "" + echo -e " APACHE_WEBSERVICE_RUNNING: $APACHE_WEBSERVICE_RUNNING" + echo -e " START_APACHE_WEBSERVICE: $START_APACHE_WEBSERVICE" + echo -e "" + +else + + echo -e "" + echo -e " \033[1mNo current installation of apache2 webservice found!\033[m" + echo -e "" +fi + +echononl "continue [yes]: " +read OK +[[ -z "$(trim "${OK}")" ]] && OK="yes" +OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" +while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/no]: " + read OK +done +[[ $OK = "yes" ]] || fatal "Abbruch durch User" + echo "" echo -e "\033[32m--\033[m" @@ -471,6 +529,43 @@ do fi done + +echo "" +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Insert default Timeout / ProxyTimeout" +echo "" +echo " Time : The length of time Apache httpd will wait for I/O " +echo " in various circumstances." +echo "" +echo " ProxyTimeout: Network timeout for proxied requests" +echo "" +echo "" + +TIMEOUT= +while [ "X$TIMEOUT" = "X" ] +do + echononl "default Timeout [${_TIMEOUT}]: " + read TIMEOUT + if [ "X$TIMEOUT" = "X" ]; then + TIMEOUT=$_TIMEOUT + fi +done + +echo "" + +PROXY_TIMEOUT= +while [ "X$PROXY_TIMEOUT" = "X" ] +do + echononl "default ProxyTimeout [${_PROXY_TIMEOUT}]: " + read PROXY_TIMEOUT + if [ "X$PROXY_TIMEOUT" = "X" ]; then + PROXY_TIMEOUT=$_PROXY_TIMEOUT + fi +done + + echo "" echo "" echo -e "\033[32m--\033[m" @@ -904,6 +999,9 @@ echo "" echo "default ServerName............: $SERVER_NAME" echo "default ServerAdmin...........: $SERVER_ADMIN" echo "" +echo "default timeout...............: $TIMEOUT" +echo "default ProxyTimeout..........: $PROXY_TIMEOUT" +echo "" echo "IPv4 addresses................: $IPv4_ADDRESSES" echo "IPv6 addresses................: $IPv6_ADDRESSES" echo "" @@ -1007,6 +1105,9 @@ echo "## -" >> ${_logdir}/main.log echo "## - default ServerName............: $SERVER_NAME" >> ${_logdir}/main.log echo "## - default ServerAdmin...........: $SERVER_ADMIN" >> ${_logdir}/main.log echo "## - " >> ${_logdir}/main.log +echo "## - default timeout...............: $TIMEOUT" >> ${_logdir}/main.log +echo "## - default ProxyTimeout..........: $PROXY_TIMEOUT" >> ${_logdir}/main.log +echo "## - " >> ${_logdir}/main.log echo "## - IPv4 addresses................: $IPv4_ADDRESSES" >> ${_logdir}/main.log echo "## - IPv6 addresses................: $IPv6_ADDRESSES" >> ${_logdir}/main.log echo "## - " >> ${_logdir}/main.log @@ -1065,6 +1166,8 @@ echo "BASE_WEBSPACE_DIR=$BASE_WEBSPACE_DIR" >> ${_logdir}/main.log echo "GLOBAL_DOC_ROOT=$GLOBAL_DOC_ROOT" >> ${_logdir}/main.log echo "SERVER_NAME=$SERVER_NAME" >> ${_logdir}/main.log echo "SERVER_ADMIN=$SERVER_ADMIN" >> ${_logdir}/main.log +echo "TIMEOUT=$TIMEOUT" >> ${_logdir}/main.log +echo "PROXY_TIMEOUT=$PROXY_TIMEOUT" >> ${_logdir}/main.log echo "SUEXEC_DOC_ROOT=$BASE_WEBSPACE_DIR" >> ${_logdir}/main.log echo "IPv4_ADDRESSES=\"$IPv4_ADDRESSES\"" >> ${_logdir}/main.log echo "IPv6_ADDRESSES=\"$IPv6_ADDRESSES\"" >> ${_logdir}/main.log @@ -2126,6 +2229,42 @@ if [ -f $_httpdconf ];then echo_failed fi + ## - Set TimeOut + ## - + echo "" >> ${_logdir}/main.log + echo "## - httpd.conf: Set Timeout to \"$TIMEOUT\".." >> ${_logdir}/main.log + echo "## -" >> ${_logdir}/main.log + echo "sed -i$_backup_suffix -r -e \"s&^([ ^t]*ServerName .*)$&\1\n\nTimeout ${TIMEOUT}&g\" $_httpdconf" >> ${_logdir}/main.log + echononl "\thttpd.conf: Set Timeout to \"$TIMEOUT\".." + sed -i$_backup_suffix -r \ + -e "s&^([ ^t]*ServerName .*)$&\1\n\nTimeout ${TIMEOUT}&g" \ + $_httpdconf + if [ "0" = $? ]; then + echo_ok + rm -f $_httpdconf$_backup_suffix + + echo "" >> ${_logdir}/main.log + echo "## - httpd.conf: Set ProxyTimeout to \"$PROXY_TIMEOUT\".." >> ${_logdir}/main.log + echo "## -" >> ${_logdir}/main.log + echo "sed -i$_backup_suffix -r -e \"s&^([ ^t]*Timeout .*)$&\1\nProxyTimeout ${PROXY_TIMEOUT}&g\" $_httpdconf" >> ${_logdir}/main.log + + echononl "\thttpd.conf: Set ProxyTimeout to \"$PROXY_TIMEOUT\".." + sed -i$_backup_suffix -r \ + -e "s&^([ ^t]*Timeout .*)$&\1\nProxyTimeout ${PROXY_TIMEOUT}&g" \ + $_httpdconf + + if [ "0" = $? ]; then + echo_ok + rm -f $_httpdconf$_backup_suffix + else + echo_failed + fi + + + else + echo_failed + fi + ## - Set DocumentRoot ## - echo "" >> ${_logdir}/main.log @@ -3129,23 +3268,10 @@ if [ -f ${PREFIX}/${_rel_confextra_path}/${_file} ];then fi + + _file=httpd-mpm.conf if [ -f ${PREFIX}/${_rel_confextra_path}/${_file} ];then - echo "" >> ${_logdir}/main.log - echo "## - httpd.conf: Include $_file.." >> ${_logdir}/main.log - echo "## -" >> ${_logdir}/main.log - echo "sed -i$_backup_suffix -r -e \"s&[ ^t]*#([ ^t]*#*[ ^t]*)*(Include $_rel_confextra_path/$_file).*$&\2&g\" $_httpdconf" >> ${_logdir}/main.log - echononl "\thttpd.conf: Include $_file.." - sed -i$_backup_suffix -r \ - -e "s&[ ^t]*#([ ^t]*#*[ ^t]*)*(Include $_rel_confextra_path/$_file).*$&\2&g" \ - $_httpdconf >> ${_logdir}/main.log 2>&1 - if [ "0" = "$?" ];then - rm $_httpdconf$_backup_suffix - echo_ok - else - echo_failed - warn "Including file \"${_file}\" failed.." - fi echo "" >> ${_logdir}/main.log echo "## - Backup file '${PREFIX}/${_rel_confextra_path}/${_file}'.." >> ${_logdir}/main.log @@ -3158,30 +3284,164 @@ if [ -f ${PREFIX}/${_rel_confextra_path}/${_file} ];then echo_failed fi - - ## - Set MaxConnectionsPerChild - ## - - echononl "\t${_file}: Set MaxConnectionsPerChild" echo "" >> ${_logdir}/main.log + echo "## - Move '${_file}' to '/tmp' directory.." >> ${_logdir}/main.log echo "## -" >> ${_logdir}/main.log - echo "## - ${_file}: Set MaxConnectionsPerChild" >> ${_logdir}/main.log + echo "mv \"${PREFIX}/${_rel_confextra_path}/${_file}\" \"/tmp/${_file}\"" >> ${_logdir}/main.log - _key="MaxConnectionsPerChild" - _val="5000" - - echo "sed -i -r -e \"s/^(\s*)($_key)(.*)$/\1\2 $_val/g\" ${PREFIX}/${_rel_confextra_path}/${_file}" >> ${_logdir}/main.log - sed -i -r -e "s/^(\s*)($_key)(.*)$/\1\2 $_val/g" ${PREFIX}/${_rel_confextra_path}/${_file} - if [ "$?" != "0" ]; then - _failed=true - fi - if ! $_failed ; then - echo_ok - else + echononl "\tMove '${_file}' to '/tmp' directory.." + mv "${PREFIX}/${_rel_confextra_path}/${_file}" "/tmp/${_file}" >> ${_logdir}/main.log + if [[ $? -gt 0 ]]; then echo_failed - warn "Setting MaxConnectionsPerChild in file \"${_file}\" failed.." + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/no]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" + + else + echo_ok fi + + + echononl "\tWrite new file $\033[1m{PREFIX}/${_rel_confextra_path}/${_file}\033[m" + > "${PREFIX}/${_rel_confextra_path}/${_file}" + + _found=false + regex_match_mpm_event_module_start="[[:space:]]*> "${PREFIX}/${_rel_confextra_path}/${_file}" + echo "" >> "${PREFIX}/${_rel_confextra_path}/${_file}" + _found=true + continue + fi + + if $_found && [[ $line =~ $regex_match_mpm_event_module_end ]] ; then + echo "" >> "${PREFIX}/${_rel_confextra_path}/${_file}" + echo "${line}" >> "${PREFIX}/${_rel_confextra_path}/${_file}" + _found=false + continue + fi + + if $_found && [[ $line =~ MaxConnectionsPerChild ]]; then + + _key="MaxConnectionsPerChild" + _val="5000" + + line="$(sed "s/^\(\s*\)\($_key\)\(\s*\)\(.*\)$/\1\2 ${_val}/g" <<< "${line}")" + echo "${line}" >> "${PREFIX}/${_rel_confextra_path}/${_file}" + + elif $_found && [[ $line =~ MaxRequestWorkers ]]; then + + _key="MaxRequestWorkers" + _val="400" + + line="$(sed "s/^\(\s*\)\($_key\)\(\s*\)\(.*\)$/\1\2\3${_val}/g" <<< "${line}")" + echo "${line}" >> "${PREFIX}/${_rel_confextra_path}/${_file}" + + elif $_found && [[ $line =~ StartServers ]] ; then + + echo "${line}" >> "${PREFIX}/${_rel_confextra_path}/${_file}" + + cat <> "${PREFIX}/${_rel_confextra_path}/${_file}" + + # ServerLimit + # + # Upper limit on configurable number of processes + ServerLimit 16 + +EOF + + elif $_found && [[ $line =~ ThreadsPerChild ]] ; then + + _key="ThreadsPerChild" + _val="25" + + line="$(sed "s/^\(\s*\)\($_key\)\(\s*\)\(.*\)$/\1\2\3${_val}/g" <<< "${line}")" + echo "${line}" >> "${PREFIX}/${_rel_confextra_path}/${_file}" + + cat <> "${PREFIX}/${_rel_confextra_path}/${_file}" + + # ThreadLimit + # + # Sets the upper limit on the configurable number of threads per child process + ThreadLimit 25 + +EOF + + else + + echo "${line}" >> "${PREFIX}/${_rel_confextra_path}/${_file}" + + fi + + done <"/tmp/${_file}" + + echo_ok + fi +#_file=httpd-mpm.conf +#if [ -f ${PREFIX}/${_rel_confextra_path}/${_file} ];then +# echo "" >> ${_logdir}/main.log +# echo "## - httpd.conf: Include $_file.." >> ${_logdir}/main.log +# echo "## -" >> ${_logdir}/main.log +# echo "sed -i$_backup_suffix -r -e \"s&[ ^t]*#([ ^t]*#*[ ^t]*)*(Include $_rel_confextra_path/$_file).*$&\2&g\" $_httpdconf" >> ${_logdir}/main.log +# echononl "\thttpd.conf: Include $_file.." +# sed -i$_backup_suffix -r \ +# -e "s&[ ^t]*#([ ^t]*#*[ ^t]*)*(Include $_rel_confextra_path/$_file).*$&\2&g" \ +# $_httpdconf >> ${_logdir}/main.log 2>&1 +# if [ "0" = "$?" ];then +# rm $_httpdconf$_backup_suffix +# echo_ok +# else +# echo_failed +# warn "Including file \"${_file}\" failed.." +# fi +# +# echo "" >> ${_logdir}/main.log +# echo "## - Backup file '${PREFIX}/${_rel_confextra_path}/${_file}'.." >> ${_logdir}/main.log +# echo "## -" >> ${_logdir}/main.log +# echononl "\tBackup file '${PREFIX}/${_rel_confextra_path}/${_file}'.." +# cp -a "${PREFIX}/${_rel_confextra_path}/${_file}" "${PREFIX}/${_rel_confextra_path}/${_file}.ORIG" >> ${_logdir}/main.log 2>&1 +# if [ "0" = "$?" ];then +# echo_ok +# else +# echo_failed +# fi +# +# +# ## - Set MaxConnectionsPerChild +# ## - +# echononl "\t${_file}: Set MaxConnectionsPerChild" +# echo "" >> ${_logdir}/main.log +# echo "## -" >> ${_logdir}/main.log +# echo "## - ${_file}: Set MaxConnectionsPerChild" >> ${_logdir}/main.log +# +# _key="MaxConnectionsPerChild" +# _val="5000" +# +# echo "sed -i -r -e \"s/^(\s*)($_key)(.*)$/\1\2 $_val/g\" ${PREFIX}/${_rel_confextra_path}/${_file}" >> ${_logdir}/main.log +# sed -i -r -e "s/^(\s*)($_key)(.*)$/\1\2 $_val/g" ${PREFIX}/${_rel_confextra_path}/${_file} +# if [ "$?" != "0" ]; then +# _failed=true +# fi +# if ! $_failed ; then +# echo_ok +# else +# echo_failed +# warn "Setting MaxConnectionsPerChild in file \"${_file}\" failed.." +# fi +#fi + ## - Enable Module mod_expires ## -