Subject: Re: rc.d (Was Re: run levels (was Re: The new rc.d stuff...))
To: NetBSD-current Discussion List <current-users@netbsd.org>
From: Greg A. Woods <woods@weird.com>
List: current-users
Date: 04/27/2000 03:13:22
[ On Wednesday, April 26, 2000 at 12:42:23 (-0700), Greywolf wrote: ]
> Subject: Re: rc.d (Was Re: run levels (was Re: The new rc.d stuff...))
>
> Good.  init's config file list consists, currently of ttys.

Actually it's not that simple.  /etc/ttys is really just a list of
identifiers and the comands to run with those names given as arguments,
and a flag to note if the entry should be ignored or not, plus other
gunk not used by init (more flags and such).  Init itself doesn't really
know that those identifiers are the names of ttys with /dev/ stripped
off (well internally actually it does, though it doesn't need to and it
spends a lot of unnecessary effort adding the prefix and then stripping
it off again or ignoring it -- it doesn't even pass the prefix to
getty!).

>  Every other
> config file that you might currently associate with init is really run
> by the shell that init calls, and so is not really directly associated
> with init.

Which is really just another reason why those "other things" (I presume
you're talking about /etc/rc) should be abstracted in the config file
instead of being hard-coded in.

> 2.  inittab is ugly as all f[^a-tv-z]ck already, both in name (antiquated)
> 	and in format (one line for everything that init is expected to
> 	handle).

I won't comment on the choice of names (other than to point out that
"*tab" files are "tables"), but I will note that the standard SysV
/etc/inittab format seems to be derived from the /etc/passwd format, and
I haven't heard anyone complain about that in a *long* time!  Are you
saying you don't like tables being stored in one-line records with ':'
field separators?

I wouldn't mind a block-structured syntax (ala bind8), or even a
getcap(3) format, I guess, though I don't much like the latter (it's
common enough though that one can use consistency as a valid argument
for choosing it).

>            Now that wouldn't be horribly bad, but when you have to
> 	have one line for pty that you expect to be serving, that
> 	convolves an init.conf file more than it needs.

Ah, it's /etc/ttys that needs an entry for every pty.  I suggested that
/etc/inittab could solve the hackishness of utmp/utmpx tagging by doing
something the same.  However I'd just as soon avoid having to store an
index from ttys/inittab in session accounting records (but that might
mean changing the format of utmp! ;-).

>            Init should
> 	at least delegate the tty info to a lower level than init.conf
> 	(ne inittab).

I won't disagree with that, but if I understand what you're thinking it
does mean inventing something akin to ttymon!  ;-)

> 	In short, init.conf should handle events in as efficient a manner
> 	as possible, iff it's going to exist at all.  And that's a big IFF.

I'm not sure what you might mean by that.  What "events"?  What would
make their handling "efficient"?

> 3.  ttys serves its purpose, although it could stand to advance in design,
> 	i.e., allow wildcards, assign certain perms to certain ttys,
> 	etc.  (the latter is arguably better suited to a login.conf type
> 	of arrangement).

Well it serves a number of purposes, and it crowds into the domain of
a bunch of probably more suitable configuration files, as I've already
mentioned.  I.e. it's already a big hack -- why make it worse?

If you really want /etc/ttys to do what you seem to be saying you want
it to do then you probably should revert to the original V7 format and
thus avoid being tempted into having it do things it's not intended to
do!  ;-)

TTYS(5)                                                   TTYS(5)

NAME
       ttys - terminal initialization data

DESCRIPTION
       The  ttys  file  is read by the init program and specifies
       which terminal special files are to have a process created
       for  them  which will allow people to log in.  It contains
       one line per special file.

       The first character of a line is either `0'  or  `1';  the
       former causes the line to be ignored, the latter causes it
       to be effective.  The second character is used as an argu-
       ment  to  getty(8), which performs such tasks as baud-rate
       recognition, reading the login name,  and  calling  login.
       For  normal  lines, the character is `0'; other characters
       can be used, for example, with hard-wired terminals  where
       speed  recognition  is  unnecessary  or which have special
       characteristics.  (Getty will have to  be  fixed  in  such
       cases.)  The remainder of the line is the terminal's entry
       in the device directory, /dev.

FILES
       /etc/ttys

SEE ALSO
       init(8), getty(8), login(1)

                                                                1


-- 
							Greg A. Woods

+1 416 218-0098      VE3TCP      <gwoods@acm.org>      <robohack!woods>
Planix, Inc. <woods@planix.com>; Secrets of the Weird <woods@weird.com>