Explanation of inittab in Devuan

Written by Administrator on Thursday April 30, 2020

As you know, Devuan is using a little bit different init system (sysvinit), than majority of linux distributions (systemd). It means, that you have a chance to follow system's startup and shutdown processes in detail. Moreover, sysvinit gives you a chance to adjust, modify and configure the way, how processes get started.

First process created in system has PID=1 and runs as a daemon. PID number 1 controls system's startup, shutdown and every changes happening with other proceses.

What is inittab

Let's see, how you Devuan system starts: Bootloader starts kernel, which spawns init, which parses inittab, which starts a service symlinks in the boot runlevel and then in the default operating runlevel.

Inittab is just a file, which describes and sets, which processes start in which runlevel. Let's see on a real example and explain, what means what.

To view an inittab, run a command:

$ cat /etc/inittab

# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

# The default runlevel.
id:2:initdefault:

# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.
~~:S:wait:/sbin/sulogin

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin

# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# Action on special keypress (ALT-UpArrow).
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."

# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
#  <id>:<runlevels>:<action>:<process>
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

Let's explaint, what each field means:

initdefault field

Runlevel that will be entered at the end of the boot process (initial default runlevel). Default is to request a number at the end of boot. When /sbin/init starts, it searches for this in /etc/inittab, before anything else. It it's not found, /sbin/init prompts the user for a runlevel.

sysinit field

Process will be executed just after system boot, before any boot or bootwait entries, ignoring runlevels. Used to run /etc/init.d/rcS at startup

boot field

Process will be executed during system boot, ignoring runlevels. "Boot" entries are run before "wait" entries upon arrival at multiuser runlevels.

bootwait field

In my example I don't have processes and programms in this section, but normally process mentioned in this section will be executed during system boot, ignoring runlevels. Init will wait for its termination before proceeding. "bootwait" entries are run before "wait" entries upon arrival at multiuser runlevels.

ctrlaltdel field

Special keypress interrupt handler for Ctrl+Alt+Del; special case of kbrequest action. Usually mapped to either single-user mode or reboot (by default in my case: "/sbin/shutdown -t1 -a -r now")

respawn field

Process will be restarted whenever it terminates. Indispensable for keeping essential processes oepn.

Category: linux Tags: devuan inittab