---
# System prepended metadata

title: System V Init/Upstart
tags: ['Unlocking-Linux, SystemD']

---

---
title: System V Init
tags: Unlocking-Linux, SystemD
disqus: hackmd
---

## Init
Here we will look more closely at the init process after the Linux kernel has been loaded, and just began to start.

1. /sbin/init
    The very first program the Linux kernel starts is the init script located at /sbin/init. This script reads in configurations from /etc/inittab which tells it what scripts to run.

    init is the root process with PID=1

    init then calls the script /etc/rc.d/rc.sysinit. (rc stands for run control)
<!-- pagebreak -->

2. /etc/rc.d/rc.sysinit
    The rc.sysinit script does several initialization steps to the system, such as setting the clock, setting the host name, initializing controllers etc. To see the entire list of items, click here

    The next script init runs is /etc/rc.d/rc
<!-- pagebreak -->

3. /etc/rc.d/rc
    The /etc/rc.d/rc script initiates the running of all startup scripts

    A number known as the run level is passed to this script, which is given as such

    0 = halt
    1 = single-user mode
    6 = reboot
    Runlevels 2-5 are used for various forms of multi-user mode

    The initial run level is specified in /etc/inittab.

    /etc/rc.d/rc uses the run level to enter the appropriate /etc/rc.d/rc<runlevel>.d/ directory and calls the scripts inside
<!-- pagebreak -->

4. /etc/rc.d/rc<runlevel>.d/
    Inside the /etc/rc.d/rc<runlevel>.d/ directory contains a number of scripts. These scripts start with either an S or a K

    An example is:

    > lrwxrwxrwx   1 root     root           19 Aug 16 06:15 K34yppasswdd -> ../init.d/yppasswdd
    lrwxrwxrwx   1 root     root           18 Aug 16 06:15 K45arpwatch -> ../init.d/arpwatch
    lrwxrwxrwx   1 root     root           15 Aug 16 06:15 K50snmpd -> ../init.d/snmpd
    lrwxrwxrwx   1 root     root           16 Aug 16 06:15 K55routed -> ../init.d/routed
    lrwxrwxrwx   1 root     root           14 Aug 16 06:15 K80nscd -> ../init.d/nscd
    lrwxrwxrwx   1 root     root           16 Aug 16 06:15 K88ypserv -> ../init.d/ypserv
    lrwxrwxrwx   1 root     root           14 Aug 16 06:15 S05apmd -> ../init.d/apmd
    lrwxrwxrwx   1 root     root           17 Aug 16 06:15 S10network -> ../init.d/network
    lrwxrwxrwx   1 root     root           17 Aug 16 06:15 S11portmap -> ../init.d/portmap
    lrwxrwxrwx   1 root     root           15 Aug 16 06:15 S15netfs -> ../init.d/netfs
    lrwxrwxrwx   1 root     root           16 Aug 16 06:15 S20random -> ../init.d/random
    lrwxrwxrwx   1 root     root           16 Aug 16 06:15 S30syslog -> ../init.d/syslog
    
    Names that start with K means to kill the process, while names that start with S means to start the process.

    The following two digit number defines the priority. S20 will run before S30

    When the system first boots, it executes all the Kill scripts K* first, before executing all the Start scripts S*.

    When the run level is switched, say for example from 3 to 1, then all the scripts in /etc/rc.d/rc1.d/ are executed (Kill scripts first, before Start scripts)

    These scripts here are symbolic links that points to scripts located in /etc/rc.d/init.d/
<!-- pagebreak -->

5. /etc/rc.local
    The script /etc/rc.local is executed after all the normal system services are started.

    It can be used to start a custom service, for example a server that's installed in /usr/local


## Upstart

Upstart: Ubuntu’s implementation of the init system. It solves the problems associated with System V. Rather than execute scripts during a runlevel, upstart manages the system state by reacting to events. An event occurs when a hot-plug device is connected/removed from the machine. Upstart initializes the required dependencies and services for this event change.