Init : someone could comment this ?

Enrico Scholz enrico.scholz at informatik.tu-chemnitz.de
Mon Jan 7 12:11:46 UTC 2008


Nils Philippsen <nphilipp at redhat.com> writes:

>> I think, nobody doubts that current initsystem is the worst one of
>> the major linux distributions.
>
> Can the hyperbole please -- we know what we have otherwise we wouldn't
> be having this discussion.

I can not remember how long there are discussions about replacing
RH's initsystem (perhaps 5-6 years), and nothing happened.  Other
distributions implemented more (upstart, syslog-ng) or less (suse,
mandriva) innovative methods in the meantime.  And now, RH tries to
write its own implementation by adding some d-bus features and using
a bloaty scripting language around current initscripts?


>> By changing paradigm from forking to non-forking daemon you can avoid
>> all the complicated 'stop' code; e.g. 'start' will be
>> 
>> | pid = fork();
>> | if (pid==0) { /* ... */ execve(...); }
>> 
>> and 'stop' be
>> 
>> | kill(pid, SIGTERM); /* wait for timeout/sigchld */ kill(pid, SIGKILL);
>
> That'd be all fine and dandy for daemons that simply need to be
> started

how much resp. which daemons are not in this category?


> without any variable options

options are trivially to solve; e.g. by an easy to parse one-option-per-line
configuration file or by 'argv = --foo --bar' stylish options in the service
description file.


> or preparations

trivially to be solved by executing helper scripts instead of the daemon
itself

| #!/bin/sh
| ... do something ...
| exec <daemon> "$@"


Or, by using syslog-ng ideas of scripts (which terminate) and daemons
(which stay running), you can split complicated preparation code and
simple startup code in a way like

--- daemons/foo ---
require = scripts/foo
daemon  = /usr/sbin/foo

--- scripts/foo ---
exec    = /usr/libexec/foo-prepare


> and are obliging enough to write pid files.

pid files are an anachronism required for initsystems with forking
daemons


> I don't think that e.g. the postgresql

works perfectly in this way; e.g. I start it with

| /usr/bin/setuidgid postgres /usr/bin/postmaster -D /var/lib/pgsql/data


>> But python or other bloaty scripting languages are not a solution and
>> completely unacceptable at this place.
>
> "Bloaty" is something that could be solved, don't you think?

Not with python or perl. Perhaps lua.  But I really do not see why an
extra scripting language is required for the initsystem.  sh/bash is
perfect for doing potential preparation tasks.


> bash takes up about 5.1MB.

you mean the 750kb sized 'bash' binary and the >4 MB documentation plus
locale files?



Enrico




More information about the fedora-devel-list mailing list