cinit is a fast, small and simple init with support for profiles

## Introduction

cinit is a fast init system with dependency features and 
profile support. It was orientated on the design of
Richard Goochs
[need concept](http://www.atnf.csiro.au/people/rgooch/linux/boot-scripts/)
and Felix von Leitners
[minit](http://www.fefe.de/minit/).
Minit does not support real dependencies (you don't know whether the
service you depend on really started) and the need concept is somehow
slow (as seen in gentoo).
In addition, minit needs libowfat and dietlibc, which may not be found
on every Unix system.

### Cinit main features

* portability: it should run on every Unix
* true dependencies (soft and hard!)
* parallel execution
* highly customisable (see conf/*)
* profile support (specify what services to start depending on the profile)


### Why should I use cinit?

 * To significantly speedup the startup process
 * To use highest level of parallelisation at startup
 * To benefit from real dependencies (so called ***needs*** and ***wants***)
 * To easily create profiles that can be chosen at startup (even **before** init is started!)

### How does cinit work?

Cinit creates a dependency tree at startup and executes the services.
A service can have two type of dependencies:

 * ***wants*** describe soft dependencies (i.e. it's not fatal if the wanted service fails to start)
 * ***needs*** describe hard dependencies (if the needed service fails, the depending won't be started)

Let's have a look at an example:

    
                    A
                 (wants)
                /       \
     |------> B \        C
     |       /   \      /  \
     ^  (needs)   (needs)   (wants)
     |    D          E        F
     |                        |
     |------<------(needs)----|
    

Or in words:

 * B and C do not have dependencies
  * They will be started at the beginning
 * A wants B and C
   * A waits until B and C are executed and started afterwards,
     independently of the success of B and C
   * A will also be started, if B and C fail to start.
 * D needs B
  * D will only be started, if B is successfully started
 * E needs B and C
  * E will only be started, if both B and C are successfully started
 * F wants C and needs B
  * F will only be started, if B is successfully started
  * F waits until C is started and is started afterwards

## Getting cinit

### Development versions
You can get the latest (development) version via git:

    git clone git://git.schottelius.org/cLinux/cinit.git

Additionally, the following other git ressources are available:

 * [Gitweb](http://git.schottelius.org/?p=cLinux/cinit.git;a=summary).
 * [Mirror at github](http://github.com/telmich/cinit)
 * [Mirror at gitorious](http://gitorious.org/cinit)


### Archives

Have a look at the [archives](archives).

## Documentation 
The documentation is currently spread all over the ***doc/*** directory
within the tarball and is being cleaned up. Additionally there
are two presentations available:

  * [[2005-10-22: (German) speech at Technophil|software/cinit/speeches/2005-10-22]]
  * [[2005-08-06: (German) online speech|software/cinit/speeches/2005-08-06]]

### Pre-Configuring
If you want to fine tune cinit parameters, add different path names,
change the DESTDIR, ... have a look at conf/*.


### Installing cinit
You can install cinit parallel to any other init-system, it won't
kill other init's config nor /sbin/init, if it exists:

    # make all install

This will create /sbin/cinit.
If /sbin/init does not exist, it will be linked to /sbin/cinit.

### Configuring cinit
You'll have to configure cinit in /etc/cinit and add services,
before you can use it.

Please read doc/configuring.cinit for details.
Please read doc/FAO if there are still questions open.

There are some testing examples below doc/examples/, to be used
as a starting point.

There are currently no tools to merge your existing init-system
to cinit (like sysvinit-merge, bsd-merge or minit-merge) available,
but they are in the making (see various bugs in ditz).

### Configuring the OS / Kernel

After configuring cinit you need to tell your kernel to boot cinit instead
of your current init system. How to do that depends on your system:

 * Linux/LILO and Linux/yaboot (ppc):
  * append="init=/sbin/cinit"
 * grub1 and grub2:
  * kernel <normal kernel specification> init=/sbin/cinit

## Support

### IRC
You can join the development ***IRC channel***
[#cstar on irc.freenode.org](irc://irc.freenode.org/#cstar).

### Mailing list
Bug reports, questions, patches, etc. should be send to the
[cinit mailing list](http://l.schottelius.org/mailman/listinfo/cinit).

## Related websites

 * [cinit](http://www.nico.schottelius.org/software/cinit/)
  * [cinit mailing list](http://l.schottelius.org/mailman/listinfo/cinit)
 * BSD init systems (same codebase):
  * [FreeBSDs init](http://www.freebsd.org/cgi/cvsweb.cgi/src/sbin/init/)
  * [NetBSDs init](http://cvsweb.netbsd.org/bsdweb.cgi/src/sbin/init/)
  * [OpenBSDs init](http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/init/)
 * [initng](http://www.initng.org/)
 * [minit](http://www.fefe.de/minit/)
 * [runit](http://smarden.org/runit/)
 * [need/simpleinit](http://www.atnf.csiro.au/~rgooch/linux/boot-scripts/)
 * [sys-v-init](ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/)
 * [upstart](http://www.netsplit.com/blog/work/canonical/upstart.html)


[[!tag unix]]
