/install_httpd-2.4.sh: rewrite file 'extra/httpd-mpm.conf'; Add Parameter 'Timeout' and 'ProxyTimeout' to httpd.conf file.

This commit is contained in:
Christoph 2024-04-24 16:41:44 +02:00
parent f99a982021
commit 3788d853f9

View File

@ -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="$(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 [ -n "$_httpd_binary" ]; then
_httpd_binary="$(ps -axu | grep httpd | grep -e "^root" | grep -v grep | awk '{print$11}')"
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
echononl "\tMove '${_file}' to '/tmp' directory.."
mv "${PREFIX}/${_rel_confextra_path}/${_file}" "/tmp/${_file}" >> ${_logdir}/main.log
if [[ $? -gt 0 ]]; then
echo_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:]]*<IfModule[[:space:]]+mpm_event_module"
regex_match_mpm_event_module_end="[[:space:]]*</IfModule>"
regex_match_mpm_start_servers="[[:space:]]*StartServers[[:space:]]+"
while IFS= read -r line || [[ -n "$line" ]]; do
if [[ $line =~ $regex_match_mpm_event_module_start ]] ; then
echo "${line}" >> "${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"
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
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 <<EOF >> "${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 <<EOF >> "${PREFIX}/${_rel_confextra_path}/${_file}"
# ThreadLimit
#
# Sets the upper limit on the configurable number of threads per child process
ThreadLimit 25
EOF
else
echo_failed
warn "Setting MaxConnectionsPerChild in file \"${_file}\" failed.."
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
## -