Date: Sun, 15 Jan 2012 20:16:47 +0000 From: "Charlie &" <srdjan.rosic@gmail.com> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/164186: [patch] [ports] Improve www/fcgiwrap port with support for rc.d profiles. Message-ID: <4f133432.6466e30a.3e78.ffffc4a2@mx.google.com> Resent-Message-ID: <201201152050.q0FKoBfj029134@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 164186 >Category: ports >Synopsis: [patch] [ports] Improve www/fcgiwrap port with support for rc.d profiles. >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sun Jan 15 20:50:10 UTC 2012 >Closed-Date: >Last-Modified: >Originator: Srdjan Rosic >Release: FreeBSD 8.2-STABLE amd64 >Organization: >Environment: >Description: Adds an easy way to run multiple fcgiwrap daemons, each with their own settings. The approach is analogous to the one nginx (www/nginx) uses. It also fixes a couple of small portlint issues. >How-To-Repeat: >Fix: Apply the attached patch. --- fcgiwrap.diff begins here --- diff --git a/www/fcgiwrap/Makefile b/www/fcgiwrap/Makefile index a942d1e..65d1cef 100644 --- a/www/fcgiwrap/Makefile +++ b/www/fcgiwrap/Makefile @@ -14,10 +14,11 @@ MASTER_SITES= http://cloud.github.com/downloads/gnosek/fcgiwrap/ MAINTAINER= bapt@FreeBSD.org COMMENT= Simple FastCGI wrapper for CGI scripts +LICENSE= MIT + LIB_DEPENDS= fcgi.0:${PORTSDIR}/www/fcgi WRKSRC= ${WRKDIR}/gnosek-fcgiwrap-2e301c8 -LICENSE= MIT USE_RC_SUBR= fcgiwrap diff --git a/www/fcgiwrap/files/fcgiwrap.in b/www/fcgiwrap/files/fcgiwrap.in index 5ee97a0..7bcd352 100755 --- a/www/fcgiwrap/files/fcgiwrap.in +++ b/www/fcgiwrap/files/fcgiwrap.in @@ -20,6 +20,21 @@ # - tcp6:[ipv6_addr]:port (for ipv6) # fcgiwrap_flags= # Use fcgiwrap_user to run fcgiwrap as user +# +# fcgiwrap rc.d script supports multiple profiles (a-la rc.d/nginx) +# When profiles are specified, the non-profile specific parameters become defaults. +# You need to make sure that no two profiles have the same socket parameter. +# +# Example: +# +# fcgiwrap_enable="YES" +# fcgiwrap_profiles="myserver myotherserver" +# fcgiwrap_flags="-c 4" +# fcgiwrap_myserver_socket="unix:/var/run/fcgiwrap.myserver.socket" +# fcgiwrap_myserver_user="myuser" +# fcgiwrap_myotherserver_socket="unix:/var/run/fcgiwrap.myotherserver.socket" +# fcgiwrap_myotherserver_user="myotheruser" +# fcgiwrap_myotherserver_flags="" # No flags for this profile. . /etc/rc.subr @@ -40,7 +55,7 @@ fcgiwrap_setfib() { fcgiwrap_precmd() { fcgiwrap_setfib - install -d -o $fcgiwrap_user -m 755 /var/run/fcgiwrap + install -d -o root -g wheel -m 1777 /var/run/fcgiwrap } fcgiwrap_cleansocket() { @@ -53,7 +68,8 @@ fcgiwrap_cleansocket() { rm -f $pidfile } -pidfile="/var/run/fcgiwrap/fcgiwrap.pid" +pidprefix="/var/run/fcgiwrap/fcgiwrap" +pidfile="${pidprefix}.pid" # May be a different path if profiles are in use. procname="%%PREFIX%%/sbin/${name}" command="/usr/sbin/daemon" @@ -62,11 +78,42 @@ stop_postcmd="fcgiwrap_cleansocket" load_rc_config $name +# These are just the defaults, they might get overriden for a specific profile. fcgiwrap_enable=${fcgiwrap_enable:-"NO"} fcgiwrap_fib=${fcgiwrap_fib:-"NONE"} fcgiwrap_user=${fcgiwrap_user:-"root"} fcgiwrap_socket=${fcgiwrap_socket:-"unix:/var/run/fcgiwrap/fcgiwrap.sock"} +# This handles profile specific vars. +if [ -n "$2" ]; then + profile="$2" + if [ -n "${fcgiwrap_profiles}" ]; then + pidfile="${pidprefix}.${profile}.pid" + eval fcgiwrap_enable="\${fcgiwrap_${profile}_enable:-${fcgiwrap_enable}}" + eval fcgiwrap_fib="\${fcgiwrap_${profile}_fib:-${fcgiwrap_fib}}" + eval fcgiwrap_user="\${fcgiwrap_${profile}_user:-${fcgiwrap_user}}" + eval fcgiwrap_socket="\${fcgiwrap_${profile}_socket:?}" + eval fcgiwrap_flags="\${fcgiwrap_${profile}_flags:-${fciwrap_flags}}" + else + echo "$0: extra argument ignored" + fi +else + if [ -n "${fcgiwrap_profiles}" -a -n "$1" ]; then + for profile in ${fcgiwrap_profiles}; do + echo "===> fcgiwrap profile: ${profile}" + /usr/local/etc/rc.d/fcgiwrap $1 ${profile} + retcode="$?" + if [ "0${retcode}" -ne 0 ]; then + failed="${profile} (${retcode}) ${failed:-}" + else + success="${profile} ${success:-}" + fi + done + # It exits so that non-profile rc.d is not started when there are profiles. + exit 0 + fi +fi + command_args="-f -p ${pidfile} ${procname} -s ${fcgiwrap_socket}" run_rc_command "$1" --- fcgiwrap.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4f133432.6466e30a.3e78.ffffc4a2>