RFC: Alternate patch to have true new-style rc.d scripts in ports (without touching localpkg)

Kevin Oberman oberman at es.net
Mon Aug 16 09:50:46 PDT 2004

> Date: Mon, 16 Aug 2004 18:56:53 +0300
> From: Mike Makonnen <mtm at identd.net>
> Sender: owner-freebsd-current at freebsd.org
> I have thought about this considerably, and I think the best solution
> is to have ports rc.d scripts installed to /etc/rc.d. One of the problems
> with having them in a separate directory is that we don't know when
> that directory will be available, so we have to order the scripts
> in two phases: first /etc/rc.d and then the ports rc.d directory when
> it is ready. If we do this then there is the REAL possiblity that
> something may not get run the second time around. For example, let's
> say that /etc/rc re-orders all the scripts (base and local) when it
> hits the dummy script PORTS. Furthermore, after they are reordered we
> skip the scripts that come before PORTS. The problem is that When the scripts
> are reordered if a particular script does not have a dependency on PORTS (or
> another script that requires PORTS) you are not guaranteed that if it came
> after PORTS the first time it will still be after ports after the second
> reordering.
> While you can have workarounds and introduce hacks around this problem, I
> think the general messiness and potential problems of ordering scripts
> more than once makes it a bad solution.
> Secondly, there is really no compelling reason that all ports be
> ordered with the base scripts. If a port is of such a nature that it
> needs to be started much earlier than it currently is, either the ports
> should install the script automatically to /etc/rc.d or it should give
> the user the option of choosing.
> So, I think the best course of action is to convert all ports startup
> scripts to rc.d format and either
> 	a) install them all automatically to /etc/rc.d
> 	b) leave it to the port maintainer to choose
> 	c) leave it to the user to choose.
> If we go with b or c, then /etc/rc.d/localpkg will need to learn to order
> rc.d scripts. I have a patch for that which is similar to the one I committed
> except that it has a list of the broken scripts which end in .sh that it
> treats like old style scripts (this should preserve compatibility with those
> upgrading from an older release):
> http://people.freebsd.org/~mtm/patches/localpkg.diff

I'm all for putting all rc.d scripts in a subdirectory of /etc. As you
point out, some things need to run early in the boot operation. I have
one tool in mind, Tobias Roth's profile. But it absolutely MUST run long
before /usr/local is available.

On the other hand, I don't like putting them into /etc/rc.d. This makes
the mergemaster check for orphaned startup scripts fail and can be

I would suggest that the right answer is a new directory. I'm not sure
whether /etc/rc.d.local or /etc/rc.d/local or /etc/local/rc.d would be
the best choice. I tend to favor the latter, but I can see some 
objections about such a modification to hier(7). Any of these would make
me happier than the previous proposals. I really dislike the hacks
required to make /usr/local/etc work correctly and not just in regard to
R. Kevin Oberman, Network Engineer
Energy Sciences Network (ESnet)
Ernest O. Lawrence Berkeley National Laboratory (Berkeley Lab)
E-mail: oberman at es.net			Phone: +1 510 486-8634

More information about the freebsd-current mailing list