commit: 74a5571d7fdae809663b0c16db2edb6aa9f8d42f Author: Jarod <jarodiv <AT> web <DOT> de> AuthorDate: Tue Mar 26 22:27:31 2019 +0000 Commit: Lars Wendler <polynomial-c <AT> gentoo <DOT> org> CommitDate: Tue Apr 2 08:38:30 2019 +0000 URL: https://gitweb.gentoo.org/proj/apache.git/commit/?id=74a5571d
apache2ctl: Add suport for systemd Signed-off-by: Lars Wendler <polynomial-c <AT> gentoo.org> 2.4/scripts/apache2ctl | 182 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 165 insertions(+), 17 deletions(-) diff --git a/2.4/scripts/apache2ctl b/2.4/scripts/apache2ctl index 8031b8b..392ac4c 100644 --- a/2.4/scripts/apache2ctl +++ b/2.4/scripts/apache2ctl @@ -6,23 +6,171 @@ APACHE_RC_CONF="/etc/conf.d/apache2" # List of init script verbs that should be passed forward RC_VERBS="start stop restart checkconfd configtest modules virtualhosts configdump fullstatus graceful gracefulstop reload" -load_rc_config() { - [ -f "${APACHE_RC_CONF}" ] || return 1 - if ! grep -q '^[[:space:]]*APACHE2_OPTS' ${APACHE_RC_CONF} ; then - echo "Cannot find APACHE2_OPTS in ${APACHE_RC_CONF}" - exit 1 - fi - . ${APACHE_RC_CONF} - export APACHE2_OPTS - export SERVERROOT="${SERVERROOT:-/usr/@LIBDIR@/apache2}" - export CONFIGFILE="${CONFIGFILE:-/etc/apache2/httpd.conf}" + +function is_systemd() { + [ $(ps --no-headers -o comm 1) == "systemd" ] && return 0 + return 1 +} + +function load_rc_config() { + [ -f "${APACHE_RC_CONF}" ] || return 1 + if ! grep -q '^[[:space:]]*APACHE2_OPTS' ${APACHE_RC_CONF} ; then + echo "Cannot find APACHE2_OPTS in ${APACHE_RC_CONF}" + exit 1 + fi + . ${APACHE_RC_CONF} + export APACHE2_OPTS + export SERVERROOT="${SERVERROOT:-/usr/lib64/apache2}" + export CONFIGFILE="${CONFIGFILE:-/etc/apache2/httpd.conf}" +} + +# Basically the code from '/etc/init.d/apache2::reload()', updated to run without open-rc +function reload() { + RELOAD_TYPE="${RELOAD_TYPE:-graceful}" + + if [ "${RELOAD_TYPE}" = "restart" ]; then + ${APACHE2} ${APACHE2_OPTS} -k restart + elif [ "${RELOAD_TYPE}" = "graceful" ]; then + ${APACHE2} ${APACHE2_OPTS} -k graceful + else + echo "${RELOAD_TYPE} is not a valid RELOAD_TYPE. Please edit /etc/conf.d/apache2" + fi +} + +# Basically the code from '/etc/init.d/apache2::fullstatus()', updated to run without open-rc +function fullstatus() { + LYNX="${LYNX:-lynx -dump}" + STATUSURL="${STATUSURL:-http://localhost/server-status}" + + if ! command -v $(set -- ${LYNX}; echo $1) 2>&1 >/dev/null; then + echo 'lynx not found! you need to emerge www-client/lynx' + else + ${LYNX} ${STATUSURL} + fi + return $? } -# If first parameter is a verb defined in $RC_VERBS, pass the command to init script. -# In other cases, compile command line and run the command on apache binary. -if echo "${RC_VERBS}" | grep -q -- "${1}" ; then - exec /etc/init.d/apache2 "${@}" -else - load_rc_config || exit 1 - ${APACHE2} ${APACHE2_OPTS} -d ${SERVERROOT} -f ${CONFIGFILE} "${@}" +# Basically the code from '/etc/init.d/apache2::checkconfd()', updated to run without open-rc +function checkconfd() { + if [ ! -d ${SERVERROOT} ]; then + echo "SERVERROOT does not exist: ${SERVERROOT}" + return 1 + fi +} + +# Basically the code from '/etc/init.d/apache2::checkconfig()', updated to run without open-rc +function configtest() { + checkconfd || return 1 + + OUTPUT=$( ${APACHE2} ${APACHE2_OPTS} -t 2>&1 ) + ret=$? + if [ $ret -ne 0 ]; then + echo "apache2 has detected an error in your setup:" + printf "%s\n" "${OUTPUT}" + fi + + return $ret +} + +# Basically the code from '/etc/init.d/apache2::configdump()', updated to run without open-rc +function configdump() { + INFOURL="${INFOURL:-http://localhost/server-info}" + + if ! command -v $(set -- ${LYNX}; echo $1) 2>&1 >/dev/null; then + echo "lynx not found! you need to emerge www-client/lynx" + else + echo "${APACHE2} started with '${APACHE2_OPTS}'" + for i in config server list; do + ${LYNX} "${INFOURL}/?${i}" | sed '/Apache Server Information/d;/^[[:space:]]\+[_]\+$/Q' + done + fi +} + + +# If systemd IS NOT detected, run the legacy apache2ctl code +if ! is_systemd; then + # If first parameter is a verb defined in $RC_VERBS, pass the command to init script. + # In other cases, compile command line and run the command on apache binary. + if echo "${RC_VERBS}" | grep -q -- "${1}" ; then + exec /etc/init.d/apache2 "${@}" + else + load_rc_config || exit 1 + ${APACHE2} ${APACHE2_OPTS} -d ${SERVERROOT} -f ${CONFIGFILE} "${@}" + fi + exit 0 fi + +# If systemd IS detected, load the config and parse the argument +load_rc_config || exit 1 + +# Append the server root and configuration file parameters to the +# user's APACHE2_OPTS. +APACHE2_OPTS="${APACHE2_OPTS} -d ${SERVERROOT}" +APACHE2_OPTS="${APACHE2_OPTS} -f ${CONFIGFILE}" + +case $1 in +# Original apachectl options +# See: https://httpd.apache.org/docs/2.4/programs/apachectl.html +start|stop|restart|status) + /bin/systemctl $1 apache2.service + ERROR=$? + ;; + +reload) + reload + ERROR=$? + ;; + +fullstatus) + fullstatus + ERROR=$? + ;; + +graceful) + configtest || exit 1 + /bin/systemctl reload apache2.service + ERROR=$? + ;; + +gracefulstop|graceful-stop) + configtest || exit 1 + /bin/systemctl stop apache2.service + ERROR=$? + ;; + +configtest) + configtest + ERROR=$? + ;; + +checkconfd) + checkconfd + ERROR=$? + ;; + +configdump) + configtest || exit 1 + configdump + ERROR=$? + ;; + +virtualhosts) + configtest || exit 1 + ${APACHE2} ${APACHE2_OPTS} -S + ERROR=$? + ;; + +modules) + configtest || exit 1 + ${APACHE2} ${APACHE2_OPTS} -M 2>&1 + ERROR=$? + ;; + +# For all other options fall back to the legacy way of handling them +*) + ${APACHE2} ${APACHE2_OPTS} "${@}" + ERROR=$? + ;; +esac + +exit $ERROR