Joachim Nilsson 0e02429e75 Convert finit to use libev and fix so plugin ctors runs on dlopen().
Lots of cleanup and simplification of the main code in this commit.
Most notably libev has been added to take care of the main loop and
monitor services. Still TODO is migrating to use the libev signal
handling.

Convert initctl.c:listen_initctl() to a plugin instead.  This also
meant introducing a new form of I/O plugin to finit, also handled
by libev.

Load plugins *after* we've setup the base filesystem (BASEFS) in case
plugins reside on a filesystem not reachable before "mount -a" has run.
This also has the side effect of lining up nicely with the first level
plugin hooks.

If a plugin wants to hook up with a loded service we connect them by
their respective numeric IDs in plugin_register().  I.e., the service
monitor checks if a service has a registered callback, which in turn
decides if a service should be started, stopped or reloaded.

Rip out old EeePC distribution defines from finit.h, none of it really
applies anymore.  If you need distribution specific settings this is
the place to put them.

Make hookpoint names (#defines) clearer: after BASEFS, after networking,
after all setup, etc.

Use #inlude_next <signal.h> in signal.h to include system header file!

Simplify service monitor: move essential code to svc.c and rip out
the TIPC dependency. Write your own service.so plugin, or wait for
a more complete example of how to extend service monitoring using
the primitives in svc.c

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2012-09-25 14:23:23 +02:00
2012-09-20 17:50:53 +02:00

Finit -- A reimplementation of the EeePC SysV init replacement "fastinit"
=========================================================================

Finit is a reimplementation of the EeePC "fastinit" program based on its
system calls with gaps filled with frog DNA.

Finit's original purpose was to build upon the general workings of the
EeePC fastinit and improve/optimize it for Xandros or alternative
distributions running on the Eeepc.  However, focus has now shifted to
small embedded Linux systems and headless miniature servers with a need
for extremely fast boot.

Nevertheless, finit comes in three flavors:

o finit-org is a replica of the Asus fastinit,
o finit-mod is an improved drop-in replacement for fastinit, and
o finit is a generic replacement for other systems.

Finit-mod and finit (previously finit-alt) were much improved with
patches from Metalshark.

See the GitHub project's Wiki at https://github.com/troglobit/finit, or
the original author's home page at http://helllabs.org/finit/ for more
information.


Usage scenarios
---------------

1. Provide an extremely fine tuned and fast boot on embedded systems or
   Linux distributions for the EeePC or other netbooks. (finit)

2. Replace the original Eeepc 702 fastinit (finit-mod)

3. Provide a reverse engineered document of the original EeePC fastinit
   implementation. (finit-org)

Finit is distribution-specific.  Currently it generates a finit-mdv
executable for Mandriva 2008/2008.1 systems.  Smurfy ported it to
eeeXubuntu, and parts of his port have been merged to finit.


Finit features
--------------

Finit reads configuration information from /etc/finit.conf. See the
source code for available options.


Rebooting and halting
---------------------

Finit handles SIGUSR1 and SIGUSR2 for reboot and halt, and listens to
/dev/initctl so standard Linux reboot and halt commands should also
work.


Debugging
---------

Add finit_debug to the kernel parameter line to enable trace messages
and to run a shell after the X server.

Languages
C 84.3%
Shell 11.9%
Makefile 2.1%
M4 1.7%