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 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]]