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 and Felix von Leitners 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:

Archives

Have a look at the 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:

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.

Mailing list

Bug reports, questions, patches, etc. should be send to the cinit mailing list.

Related websites