From owner-freebsd-rc@FreeBSD.ORG Wed Nov 7 08:47:29 2007 Return-Path: Delivered-To: freebsd-rc@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2665A16A419 for ; Wed, 7 Nov 2007 08:47:29 +0000 (UTC) (envelope-from ccowart@rescomp.berkeley.edu) Received: from hal.rescomp.berkeley.edu (hal.Rescomp.Berkeley.EDU [169.229.70.150]) by mx1.freebsd.org (Postfix) with ESMTP id 13F2A13C4BD for ; Wed, 7 Nov 2007 08:47:28 +0000 (UTC) (envelope-from ccowart@rescomp.berkeley.edu) Received: by hal.rescomp.berkeley.edu (Postfix, from userid 1225) id E542A3C0481; Wed, 7 Nov 2007 00:28:37 -0800 (PST) Date: Wed, 7 Nov 2007 00:28:37 -0800 From: Christopher Cowart To: freebsd-rc@FreeBSD.org Message-ID: <20071107082837.GM65098@hal.rescomp.berkeley.edu> Mail-Followup-To: freebsd-rc@FreeBSD.org MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="+4tyMlGyR6ddaJz2" Content-Disposition: inline Organization: RSSP-IT, UC Berkeley User-Agent: Mutt/1.5.16 (2007-06-09) Cc: Subject: Multiple instances of a daemon X-BeenThere: freebsd-rc@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Discussion related to /etc/rc.d design and implementation." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Nov 2007 08:47:29 -0000 --+4tyMlGyR6ddaJz2 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hello, I want to be able to use the same rc script to start several instances of a daemon. When I've encountered this desire before, I've cp'd the script, given it a unique name, and carried on with my business. This is a but kludgy and makes updating scripts a manual task. Today, I realized the arpd port didn't provide an rc script, so I set out to write one. I also knew that I was going to be launching several different arpd's, so I wanted to figure out a better way to deal with this problem. I thought I'd be clever and use symlinks: rc.d $ ls -l arpd* -r-xr-xr-x 1 root wheel 486 Nov 7 00:01 arpd lrwxr-xr-x 1 root wheel 4 Nov 6 23:32 arpd_vlan665 -> arpd lrwxr-xr-x 1 root wheel 4 Nov 6 23:32 arpd_vlan679 -> arpd Then I wrote my rc script with `name=3D${0##*/}'. Everything was fantastic doing manual starts and stops. Then I tried rebooting... After a few boots, some debugging, and a lot of tracing through /etc/rc and /etc/rc.subr, I found the problem (or is it a feature?). run_rc_script() sources the script. All the talk about not sourcing the "current shell" anymore, and I foolishly assumed that meant something more like calling the script and less like sourcing it in a subshell. I would really find it convenient to use the symlink trick shown above, because it means a symlink-compatible rc-script can be updated by the port or mergemaster, and all the "copies" will "just work." I'd be willing to take the time to implement something, but I don't pretend=20 to know all the use cases or the motivation behind this design.=20 One approach could be that run_rc_script() throws the rc script name into a variable visible to the sourced script, say _rc_script_name.=20 Then name could be something like `${_rc_script_name:-${0##*/}}' or a less terse if/then. Is this a feature other people would like to see, or is it just me? --=20 Chris Cowart Lead Systems Administrator Network & Infrastructure Services, RSSP-IT UC Berkeley --+4tyMlGyR6ddaJz2 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4 (FreeBSD) iQIVAwUBRzF3NSPHEDszU3zYAQJfQQ/+LeYMACS5nAvkf+A4L5bxH6hn8U7tN5GY MczWkPNcrge/b15oIZun6Nko+b6tetH/ZcurWM/JtdY2ZrAMn+RX0KP3bgUq5dOQ gbl6crU4cThFP2Y3XrX3lHflXMtFqSYdWjctWrgrUdHyrYxZm2ObaAjmiqu+7+Bx pcYW5CNaUOWk+Ah8gwAVsIuOM1buICBExItIo47fqZTCDpI784eZnbLVbs/JCStn e+gDGFbVA7ygeTttsDTzmuchzLpBoJyiX9i1PI1vXiCHgylWs3rKFUsQ6wVbLCZT zpmYhLXwjkzuaI2LC/+hnW0n31czX6CbmId+sLv4iOqnH7jn1H6WmpvSNQKiT5SN rrWGmvkZSGQgcqi6K2JglOv6HHD6tAywgbLaKCbXXRg17GYxHVypmQy5IxP0UbOp Yj/KGGEYyIBHHGXvUGO6X4cmtCmuLUllEJl/drPIi4o76Y5koMPMuzwWARIGilKP EzofEQ7Eu8TL76/mAOTizzemki2CLpeKaiwB6yzSMRYZIgaLG4wtQXrSPgGTeLsj FVJfTR6BDh7/t2bLbK/4f2kwTNLaWejjsFRmRqGWiujK5RCb2d85Qk4OM6rbmEkt AzF0lYbhk5ELGUaAi1iICuUK666ngs4TK6UOcceA6hJ9UnpfpgNqoLmJbS4HXrwW Uz6TXdEVB3Q= =5ElB -----END PGP SIGNATURE----- --+4tyMlGyR6ddaJz2--