Date: Thu, 19 Apr 2012 19:21:39 GMT From: Michael Gmelin <freebsd@grem.de> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/167108: www/uwsgi: rc script doesn't work on startup when profiles are used Message-ID: <201204191921.q3JJLdrK080668@red.freebsd.org> Resent-Message-ID: <201204191930.q3JJUAgs054848@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 167108 >Category: ports >Synopsis: www/uwsgi: rc script doesn't work on startup when profiles are used >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Apr 19 19:30:10 UTC 2012 >Closed-Date: >Last-Modified: >Originator: Michael Gmelin >Release: 9.0-RELEASE >Organization: Grem Equity GmbH >Environment: FreeBSD server 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Fri Feb 24 21:08:08 UTC 2012 root@server:/usr/obj/usr/src/sys/GENERIC amd64 >Description: /usr/local/etc/rc.d/uwsgi does re-invoke itself when processing profiles and relies on $0 to determine its own location. This works ok on a running system where/usr/local/etc/rc.d/uwsgi is invoked directly, but does not work on system startup, when $0 equals /etc/rc. The output in this case is: .. Processing uwsgi profile: myprofile /usr/local/etc/rc.d/uwsgi: /etc/rc: Permission denied .. This happens because rc.subr's run_rc_script function sources rc scripts to execute them, see man 8 rc.subr on that function: .. 4. If the rc.conf(5) variable rc_fast_and_loose is empty, source file in a sub shell, otherwise source file into the current shell. .. >How-To-Repeat: An easy way to test the problem without rebooting is to create a script that simulates the behavior of /etc/rc (and /etc/rc.subr): echo "(set start ; . /usr/local/etc/rc.d/uwsgi)" >/tmp/rcsimul cd /usr/ports/www/uwsgi make -DBATCH install clean echo 'uwsgi_enabled="YES"' >> /etc/rc.conf echo 'uwsgi_profiles="myprofile"' >> /etc/rc.conf echo 'uwsgi_myprofile_flags="doesntmatter"' >> /etc/rc.conf /bin/sh /tmp/rcsimul Expected output: Processing uwsgi profile: myprofile /usr/local/etc/rc.d/uwsgi: /tmp/rcsimul: Permission denied Alternatively reboot the machine and check /var/log/messages or dmesg. >Fix: As a workaround, apply the following patch which replaces $0 with the exact path to the uwsgi rc script. --- /usr/local/etc/rc.d/uwsgi~ 2012-04-19 18:48:25.000000000 +0000 +++ /usr/local/etc/rc.d/uwsgi 2012-04-19 18:48:25.000000000 +0000 @@ -80,7 +80,7 @@ elif [ -n "$1" ]; then for profile in ${uwsgi_profiles}; do echo "Processing ${name} profile: ${profile}" - $0 $1 ${profile} + /usr/local/etc/rc.d/uwsgi $1 ${profile} done exit 0 fi Refactoring the script so that re-invoking itself won't be required would be a better (but more elaborate) fix. >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201204191921.q3JJLdrK080668>