Page suivante Page précédente Table des matières

2. Pour commencer...

2.1 Que se passe-t-il au démarrage ?

Quand on allume une machine, il se passe une suite d'évènements qu'on peut décomposer comme suit

2.2 Un peu de terminologie

2.3 Le démarrage : /etc/inittab

On a vu qu'au démarrage le noyau démarrait un processus init qui lance les actions définies par /etc/inittab.

Ce qui se passe dépend de l'organisation des fichiers de démarrage. Il y a deux approches : System V et BSD.

Le démarrage type ``System V''

Extrait d'un fichier /etc/inittab (distribution Debian) :

# 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

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

# /sbin/getty invocations for the runlevels.
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
...

Commentaires : le noyau démarre, par défaut, au niveau 2. Le processus init lance donc successivement

En réalité, le répertoire /etc/rc2.d ne contient pas des scripts, mais des liens symboliques :

$ ls -l /etc/rc2.d/S20lpd 
lrwxrwxrwx  1 root root 13 Mar 10  2001 /etc/rc2.d/S20lpd -> ../init.d/lpd
Chacun de ces scripts se charge de gérer un service. Il reçoit un paramètre start, stop, restart. Exemple, /etc.init.d/lpd :
#!/bin/sh

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/sbin/lpd
PIDFILE=/var/spool/lpd/lpd.lock

test -x $DAEMON -a -f /usr/sbin/pac || exit 0

case "$1" in
  start)
        echo -n "Starting printer spooler: lpd"
        if start-stop-daemon --quiet --stop --signal 0 \
            --pidfile $PIDFILE --name lpd
        then
                echo " already running."
                exit
        fi
        /sbin/start-stop-daemon --start --quiet --exec $DAEMON
        echo "."
        ;;
  stop)
        echo -n "Stopping printer spooler: lpd"
        if start-stop-daemon --quiet --stop --signal 0 \
                --pidfile $PIDFILE --name lpd
        then
                PID=`cat $PIDFILE`
                start-stop-daemon --quiet --stop --exec $DAEMON \
                        --pidfile $PIDFILE --name lpd
                # Now we wait for it to die
                while kill -0 $PID 2>/dev/null; do sleep 1; done
                echo "."
        else
                echo " not running.";
        fi
        ;;
  force-reload|restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: /etc/init.d/lpd {start|stop|restart|force-reload}"
        exit 1
esac

exit 0

Le démarrage type BSD

Le fichier /etc/inittab lance quelques scripts, qui regroupent le démarrage de plusieurs services. Voir par exemple le démarrage d'un système de type Slackware : /etc/rc.d/rc.modules lance le chargement des modules, /etc/rc.d/rc.inet1 lance les les services réseau de bas niveau (démarrage des interfaces, routes, ...), /etc/rc.d/rc.inet.2 démarre les services de haut niveau : imprimantes, connexions, etc.

Pour modifier le démarrage BSD - par exemple pour ajouter un service- il faut éditer les scripts existants, alors qu'avec le démarrage à la System V on ajoute un lien dans un répertoire sans toucher aux scripts existants.

2.4 Documentation : La hiérarchie des répertoires

Voici comment sont organisés les principaux répertoires de la hiérarchie standard :


Page suivante Page précédente Table des matières