#!/bin/sh # PROVIDE: squid # REQUIRE: LOGIN # KEYWORD: shutdown # # Note: # Set "squid_enable=yes" in either /etc/rc.conf, /etc/rc.conf.local or # /etc/rc.conf.d/squid to activate Squid. # # Additional variables you can define in one of these files: # # squid_chdir: the directory into which the rc system moves into before # starting Squid. Default: /var/squid # # squid_conf: The configuration file that Squid should use. # Default: %%PREFIX%%/etc/squid/squid.conf # # squid_fib: The alternative routing table id that Squid should use. # Default: none # See setfib(1) for further details. Note that the setfib(2) # system call is not available in FreeBSD versions prior to 7.1. # # squid_user: The user id that should be used to run the Squid master # process. Default: squid. # Note that you probably need to define "squid_user=root" if # you want to run Squid in reverse proxy setups or if you want # Squid to listen on a "privileged" port < 1024. # # squid_group: The group id that should be used to run the Squid master # process. Default: squid # Note that it affects squid pid dir also, where SHM files # may be stored on some OS (see r391555) # # squid_maxwait: Seconds to wait for squid PID file # Default: 10 # # squid_pidfile: # The name (including the full path) of the Squid # master process' PID file. # Default: /var/run/squid/squid.pid. # You only need to change this if you changed the # corresponding entry in your Squid configuration. # # squid_flags: Additional commandline arguments for Squid you might want to # use. See squid(8) for further details. # # squid_krb5_ktname: # Alternative Kerberos 5 Key Table. # Default: none # squid_krb5_config: # Alternative Kerberos 5 config file # Default: none . /etc/rc.subr name=squid rcvar=squid_enable # Make sure that we invoke squid with "-f ${squid_conf}"; define this # variable early so reload_cmd and stop_precmd pick it up: extra_commands="reload configtest" reload_cmd=squid_reload start_precmd=squid_prestart start_postcmd=squid_getpid stop_precmd=squid_prestop configtest_cmd=squid_configtest reload_precmd=squid_configtest restart_precmd=squid_configtest # squid(8) will not start if ${squid_conf} is not present so try # to catch that beforehand via ${required_files} rather than make # squid(8) crash. squid_load_rc_config() { : ${squid_chdir:=/var/squid} : ${squid_conf:=%%PREFIX%%/etc/squid/squid.conf} : ${squid_enable:=NO} : ${squid_program:=%%PREFIX%%/sbin/squid} : ${squid_pidfile:=/var/run/squid/squid.pid} : ${squid_maxwait:=10} : ${squid_user:=squid} : ${squid_group:=squid} required_args="-f ${squid_conf}" required_dirs=$chdir required_files=$squid_conf command_args="${required_args} ${squid_flags}" # We used to need it in squid3 to match pid and proc name # procname="?squid-*" pidfile=$squid_pidfile } squid_prestart() { # create piddir if it's missing (for example if /var/run is tmpfs) squid_piddir=${pidfile%/*} if [ ! -d "${squid_piddir}" ]; then echo "Creating PID directory ${squid_piddir}" mkdir ${squid_piddir} && chown ${squid_user}:${squid_group} ${squid_piddir} && chmod 750 ${squid_piddir}|| return $? fi # setup KRB5_KTNAME: squid_krb5_ktname=${squid_krb5_ktname:-"NONE"} if [ "${squid_krb5_ktname}" != "NONE" ]; then export KRB5_KTNAME=${squid_krb5_ktname} fi # setup KRB5_CONFIG: squid_krb5_config=${squid_krb5_config:-"NONE"} if [ "${squid_krb5_config}" != "NONE" ]; then export KRB5_CONFIG=${squid_krb5_config} fi # setup FIB tables: 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 squid_fib=${squid_fib:-"NONE"} if [ "${squid_fib}" != "NONE" ]; then command="setfib -F $squid_fib $command" else return 0 fi squid_configtest } squid_reload() { $command $required_args $squid_flags -k reconfigure } squid_configtest() { echo "Performing sanity check on ${name} configuration." if $command $required_args $squid_flags -k check; then echo "Configuration for ${name} passes." return 0 else return $? fi } squid_getpid() { # retrieve the PID of the Squid master process explicitly here # in case rc.subr was unable to determine it: if [ -z "$rc_pid" ]; then squid_secs=0 while ! [ -f ${pidfile} ]; do if [ ${squid_maxwait} -le ${squid_secs} ]; then echo "give up waiting for pidfile" break fi sleep 1 echo -n "." : $(( squid_secs+=1 )) done read _pid _junk <${pidfile} [ -z "${_pid}" ] || pid=${_pid} else pid=${rc_pid} fi } squid_prestop() { command_args="$command_args -k shutdown" squid_configtest } load_rc_config $name squid_load_rc_config run_rc_command $1