Files
ports/www/apache24/files/apache24.in
T
Alexander Leidinger a3fbcaec53 www/apache24: make the start script service jails ready
The setup I've chosen is to allow ipv4/ipv6 access. It does not allow
to use sysv IPC in a jail. If you want to use this possibility, the
config would need to be changed to "net_basic sysvipc" instead.
More advanced use cases may need different service jail options.
The config can be overridden in rc.conf.

See also:
  https://docs.freebsd.org/en/books/handbook/jails/#service-jails
  https://docs.freebsd.org/en/articles/rc-scripting/#rcng-service-jails

Some notes:
 - There are special apache24_limits_* stuff which is different from
   the name_limits stuff as part of the rc framework.
 - The limits part in the precmd will probably not work in a service
   jail, as the start command will be executed in a jail and the precmd
   outside the jail.
 - While the patch is taking the profiles into account, it may fail when
   the jail is started, as the name of the service jail is derived from
   the name of the rc script (assuming "profiles" means different
   instances of apache are started for each profile).
   The tomcat/oauth2-proxy/openhab ports use a way to have different
   instances of the software running in parallel which is based upon the
   name of the rc script (via links to the original rc script). That way
   works well with service jails.

Approved by:	maintainer timeout
PR:		279494
2025-08-29 10:07:34 +02:00

230 lines
6.6 KiB
Bash

#!/bin/sh
# PROVIDE: apache24
# REQUIRE: LOGIN cleanvar sshd
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable apache24:
# apache24_enable (bool): Set to "NO" by default.
# Set it to "YES" to enable apache24
# apache24_profiles (str): Set to "" by default.
# Define your profiles here.
# apache24limits_enable (bool):Set to "NO" by default.
# Set it to yes to run `limits $limits_args`
# just before apache starts.
# apache24_flags (str): Set to "" by default.
# Extra flags passed to start command.
# apache24limits_args (str): Default to "-e -C daemon"
# Arguments of pre-start limits run.
# apache24_http_accept_enable (bool): Set to "NO" by default.
# Set to yes to check for accf_http kernel
# module on start up and load if not loaded.
# apache24_fib (str): Set an altered default network view for apache
# apache24_configcheck_disable (bool): Set to "YES" to disable sanity check on startup
# apache24_aslr_disable (bool): Set to "YES" to disable ASLR (Address Space Layout
# Randomization): workaround for PR#268318
. /etc/rc.subr
name="apache24"
rcvar=apache24_enable
start_precmd="apache24_prestart"
restart_precmd="apache24_checkconfig"
reload_precmd="apache24_checkconfig"
reload_cmd="apache24_graceful"
graceful_cmd="apache24_graceful"
gracefulstop_cmd="apache24_gracefulstop"
configtest_cmd="apache24_checkconfig"
command="%%PREFIX%%/sbin/httpd"
_pidprefix="/var/run/httpd"
pidfile="${_pidprefix}.pid"
required_files=%%PREFIX%%/etc/apache24/httpd.conf
envvars="%%PREFIX%%/sbin/envvars"
: ${apache24_svcj_options:="net_basic"}
[ -z "$apache24_enable" ] && apache24_enable="NO"
[ -z "$apache24limits_enable" ] && apache24limits_enable="NO"
[ -z "$apache24limits_args" ] && apache24limits_args="-e -C daemon"
[ -z "$apache24_http_accept_enable" ] && apache24_http_accept_enable="NO"
[ -z "$apache24_configcheck_disable" ] && apache24_configcheck_disable="NO"
[ -z "$apache24_aslr_disable" ] && apache24_aslr_disable="NO"
apache24_accf()
{
if checkyesno apache24_http_accept_enable; then
/sbin/kldstat -qm accf_http || /sbin/kldload accf_http || return ${?}
/sbin/kldstat -qm accf_data || /sbin/kldload accf_data || return ${?}
else
apache24_flags="${apache24_flags} -DNOHTTPACCEPT"
fi
}
load_rc_config $name
if [ -n "$2" ]; then
profile="$2"
if [ "x${apache24_profiles}" != "x" ]; then
pidfile="${_pidprefix}.${profile}.pid"
eval apache24_configfile="\${apache24_${profile}_configfile:-}"
if [ "x${apache24_configfile}" = "x" ]; then
echo "You must define a configuration file (apache24_${profile}_configfile)"
exit 1
fi
required_files="${apache24_configfile}"
eval apache24_enable="\${apache24_${profile}_enable:-${apache24_enable}}"
eval apache24_flags="\${apache24_${profile}_flags:-${apache24_flags}}"
eval apache24_http_accept_enable="\${apache24_${profile}_http_accept_enable:-${apache24_http_accept_enable}}"
eval apache24limits_enable="\${apache24limits_${profile}_enable:-${apache24limits_enable}}"
eval apache24limits_args="\${apache24limits_${profile}_args:-${apache24limits_args}}"
eval apache24_fib="\${apache24_${profile}_fib:-${apache24_fib}}"
eval apache24_configcheck_disable="\${apache24_${profile}_configcheck_disable:-${apache24_configcheck_disable}}"
eval apache24_aslr_disable="\${apache24_${profile}_aslr_disable:-${apache24_aslr_disable}}"
eval command="\${apache24_${profile}_command:-${command}}"
eval pidfile="\${apache24_${profile}_pidfile:-${pidfile}}"
eval apache24_envvars="\${apache24_${profile}_envvars:-${envvars}}"
eval apache24_svcj_options="\${apache24_${profile}_svcj_options:-${apache24_svcj_options}}"
apache24_flags="-f ${apache24_configfile} -c \"PidFile ${pidfile}\" ${apache24_flags}"
else
echo "$0: extra argument ignored"
fi
else
eval apache24_envvars=${envvars}
if [ "x${apache24_profiles}" != "x" -a "x$1" != "x" ]; then
for profile in ${apache24_profiles}; do
eval _enable="\${apache24_${profile}_enable}"
case "x${_enable:-${apache24_enable}}" in
x|x[Nn][Oo]|x[Nn][Oo][Nn][Ee])
continue
;;
x[Yy][Ee][Ss])
;;
*)
if test -z "$_enable"; then
_var=apache24_enable
else
_var=apache24_"${profile}"_enable
fi
echo "Bad value" \
"'${_enable:-${apache24_enable}}'" \
"for ${_var}. " \
"Profile ${profile} skipped."
continue
;;
esac
echo "===> apache24 profile: ${profile}"
%%PREFIX%%/etc/rc.d/apache24 $1 ${profile}
retcode="$?"
if [ "0${retcode}" -ne 0 ]; then
failed="${profile} (${retcode}) ${failed:-}"
else
success="${profile} ${success:-}"
fi
done
exit 0
fi
fi
if [ "${1}" != "stop" ] ; then \
apache24_accf
fi
if checkyesno apache24_configcheck_disable
then
unset restart_precmd
unset reload_precmd
fi
apache24_requirepidfile()
{
if [ ! "0`check_pidfile ${pidfile} ${command}`" -gt 1 ]; then
echo "${name} not running? (check $pidfile)."
exit 1
fi
}
apache24_checkconfig()
{
if test -f ${apache24_envvars}
then
. ${apache24_envvars}
fi
echo "Performing sanity check on apache24 configuration:"
eval ${command} ${apache24_flags} -t
}
apache24_graceful() {
apache24_requirepidfile
if ! checkyesno apache24_configcheck_disable
then
apache24_checkconfig
fi
echo "Performing a graceful restart"
eval ${command} ${apache24_flags} -k graceful
}
apache24_gracefulstop() {
apache24_requirepidfile
if ! checkyesno apache24_configcheck_disable
then
apache24_checkconfig
fi
echo "Performing a graceful stop"
eval ${command} ${apache24_flags} -k graceful-stop
}
apache24_precmd()
{
if ! checkyesno apache24_configcheck_disable
then
apache24_checkconfig
fi
if checkyesno apache24limits_enable
then
eval `/usr/bin/limits ${apache24limits_args}` 2>/dev/null
else
return 0
fi
}
apache24_checkalsr () {
if checkyesno apache24_aslr_disable
then
command="/usr/bin/proccontrol -m aslr -s disable ${command}"
fi
}
apache24_checkfib () {
if command -v check_namevarlist > /dev/null 2>&1; then
check_namevarlist fib && return 0
fi
$SYSCTL net.fibs >/dev/null 2>&1 || return 0
apache24_fib=${apache24_fib:-"NONE"}
if [ "x$apache24_fib" != "xNONE" ]
then
command="/usr/sbin/setfib -F ${apache24_fib} ${command}"
else
return 0
fi
}
apache24_prestart() {
apache24_checkalsr
apache24_checkfib
apache24_precmd
}
extra_commands="reload graceful gracefulstop configtest"
run_rc_command "$1"