Subject: Re: /etc/default ickiness...
To: None <tech-userlevel@netbsd.org>
From: Luke Mewburn <lukem@netbsd.org>
List: tech-userlevel
Date: 09/10/2000 23:29:06
Mason Loring Bliss writes:
> Maybe I'm confused here, but it seems like what we're now providing as
> /etc/rc.conf is an amazing leap backwards from what we used to provide.
> We used to have something that was nicely documented and approachable.
> Now one must check /etc/default/rc.conf and copy over variables. This
> isn't nearly as nice, IMHO. It's a lot more work for the user.

[See below. Bear with my long post on this; I've tried to explain
the history behind this change]


> Is the plan to have a tool which manages this configuration stuff? I'm
> not grasping the big picture. One of the things I used to tout about
> NetBSD was easy configuration. I'd very much like to see us go back to
> having a single /etc/rc.conf and a way to easily detect changes.
> 
> Perhaps this could be based on how folks typically track kernel config
> file changes - keep a copy of the default file, and diff that against
> a copy of the new default file to see what needs to be changed in the
> actual in-use file. I'm sure this could be automated easily enough to
> take much of the grunt work out of it.

The rationale for the change to make things easier - in the long run -
for users to manage /etc/rc.conf (and other similar config files such
as {daily,weekly,monthly}.conf and security.conf).

With the `old' mechanism, most people would modify the as shipped
/etc/rc.conf as appropriate for their environment. They might even
use version control to keep track of changes (RCS, CVS, ...)

Then, during a (manual) upgrade of /etc (to take advantage of new
programs or startup, or changed options - such as the replacement
of portmap with rpcbind), you might want to find out what changed,
so you'd run diff(1) between /usr/src/etc/rc.conf and /etc/rc.conf.
Of course, because you'd changed /etc/rc.conf for your site
preferences, it was a bit difficult to peruse the diff(1) output for
stuff that you changed versus stuff that was changed in the source
tree. I speak from long experience fighting this battle :/

A while ago someone had added support for /etc/rc.local.conf, which
was read at the end of /etc/rc.conf. Some comments on that change:

	* Certain people started using this as a way to add overrides
	  to /etc/rc.conf and kept /etc/rc.conf `virginal'. I picked
	  this habit up from Matt Green, because it made sense.

	* There were some concerns on the lists a couple of months ago
	  about the name /etc/rc.local.conf; some felt it should have
	  been /etc/rc.conf.local or something else. As usual (on
	  these sysadmin management issues), there wasn't any
	  consensus on what name to use.

	* I also had a concern that having /etc/rc.conf unchanged with
	  local overrides in /etc/rc.local.conf may make support a
	  little harder because you'd have to tell someone to possibly
	  another location (the latter file) to find out why a file
	  was starting.

	* Some of the other config files (daily.conf et al) could have
	  had similar `local overrides' for similar reasons, but the
	  naming problem (see above) also applied.


After considering this problem for a while, and discussing it with a
few other sysadmins I know who also have experience with running a
variety of large systems, I decided on the following:

	* Have default config files in /etc/default, that are read
	  from the `master' file in /etc. This makes it easier to
	  run diff(1) to find out what's changed between /etc/default
	  and /usr/src/etc/default without your local config changes
	  ``getting in the way''.

	  Some debate has since occurred about the choice of name,
	  as SVR4 has /etc/default for a slightly different purpose.
	  Whilst this is true;
		- the files in /etc/default on those systems generally
		  don't end in `.conf'
		- the files are ``defaults'' (rather than examples)
		- even if they were examples, /usr/share/examples/etc
		  wasn't appropriate, since /usr/ may not be mounted
		- I didn't want the change held up for another month
		  because of a pointless debate about the choice of
		  the name (maybe I'm too cynical...)

	* The /etc/foo.conf files source /etc/default/foo.conf, and
	  allow you to override the options in the latter fairly
	  easily.

	* We needed a method that made it much easier for future
	  upgrades than the then current /etc/rc.conf did.


If you want the in-line documentation, I suggest the following techniques:
	* Go to the end of /etc/rc.conf. Using your favourite editor
	  `read' /etc/default/rc.conf into the end of the file, and
	  modify as appropriate. In (n)vi, this is
		ESC G :r /etc/default/rc.conf ESC
	  :-)

	* Open two buffers in your editor; one for /etc/rc.conf and
	  one for /etc/default/rc.conf. Again, in nvi this is:
		ESC :E /etc/default/rc.conf
	  one you're already editing /etc/rc.conf. Use ^W in command
	  mode to flip windows :-)

	* Run screen(1), and have one session open with an editor on
	  /etc/rc.conf and another reading rc.conf(5).

Even with the in-line documentation, I generally find I refer to
rc.conf(5) anyway; it's usually more detailed than the short sentence
that describes a particular feature.


> Another thing that would work if we want to stick with the "master file,
> overrides file" model is a tool (virc?) to invisibly handle changes -
> a tool that would merge in the overrides for purposes of administrator
> editing, and split them back out on saving changes. This would result
> in files essentially identical to what we've got now, but we wouldn't
> be losing the nice in-band comments and documentation.
> 
> Is anyone working on such a tool? Do we want such a tool? Does anyone
> else see the present system as something of a loss? Am I missing some-
> thing that makes the present system *not* a loss in terms of the things
> I've mentioned, above? I'll be happy to work on such a tool if no one
> else is doing it and if folks see it as The Right Thing.

I considered virc, especially for the ill-fated idea of migrating the
system config to separate files (one for each rc.d script), which I
tossed out after implementing locally and realising it was going to be
a pain to manage.

I feel that requiring such a tool (virc) to effectively manage your
configuration would be a step backwards. Having it as a helper utility
might be useful, but I don't think it would be that much of a win.


I hope that helps to explain why I made the change. I feel that it
will provide benefits in the long run for ease of management and
easier upgrades of /etc/{daily,weekly,monthly,security,rc}.conf
that we've provided in prior releases or even within -current.

Luke.