Translation(s): English - Français - Italiano - Русский

BootProcess > init

Init is the first program to run after your system is booted, and continues to run as process number 1 until your system halts. Init's job is to start other programs that are essential to the operation of your system. All other processes are descended from init.


The system initialization process is handled by the init daemon. In squeeze and earlier releases, that daemon is provided by the sysvinit package, and no alternatives are supported. In wheezy, the default init daemon is still sysvinit, but a "technology preview" of systemd is available. In jessie and stretch, the default init system is systemd, but switching to sysvinit is supported.

Since jessie, only systemd is fully supported; sysvinit is mostly supported, but Debian packages are not required to provide sysvinit start scripts. Support for init systems other than systemd is significantly improved in Bullseye. runit is also packaged, but has not received the same level of testing and support as the others, and is not currently supported as PID 1. As of Bullseye, a collection of sysvinit start scripts that have been removed from their original packages is provided in the orphan-sysvinit-scripts package.

Determining the init system

In general, you can determine which init system is installed by checking whether the /sbin/init file is a symlink. If it's not a symlink, then sysvinit is probably in use. If it's a symlink pointing to /lib/systemd/systemd then systemd is in use. If it's a symlink pointing to /lib/sysvinit/init then sysvinit is in use.

If you suspect that the init system may have been changed without a reboot, you may also cat /proc/1/comm to see which command name was used for the init daemon during the most recent boot.

Changing the init system

In Bullseye, a number of alternative init systems are supported (such as System-V-style init and OpenRC). Generally, to switch between init systems, you install the new init system and reboot. The exception is switching away from systemd - systemd's packages will refuse to be removed if systemd is running; so the process is a little more involved.

In outline, you need to download the new packages you need, switch to single-user mode, install these new packages, and then reboot. The recommended approach is as follows. First, clear out /var/cache/apt/archives by running apt clean (this makes identifying the packages to install later easier). Next, get apt to download the new packages you need, e.g.: apt --download-only install sysvinit-core libpam-elogind; libpam-elogind (and elogind which it Depends upon) provide session management facilities, which you will likely need on any system running a desktop environment. At this point, review apt's proposed actions, and if happy, let it carry on.

Now switch to single-user mode (systemctl rescue) and install the packages you downloaded using apt install /var/cache/apt/archives/*.deb Once this has completed, reboot your system.

Sysvinit configuration

The inittab configuration tells init what to do. Especially it contains the lines:

Which causes the files /etc/init.d/rcS to run initialization scripts (in /etc/rcS.d/*), then scripts for requested runlevel (in /etc/rcS.[0-9]/*).

See also