Initialisation du système


Voici dans ses grandes lignes les phases du démarrage du système jusqu'à une session de travail, et le mécanisme (appelé System V) de lancement ordonné des processus et en particulier les services.

Démarrage du noyau

Les niveaux de fonctionnement

Ces 6 niveaux sont décrits au début du fichier /etc/inittab La ligne qui suit définit le niveau de fonctionnement par défaut au démarrage (Default runlevel), ici le niveau 3
id:3:initdefault
Donc pour changer de niveau par défaut, il suffit tout simplement de changer ce numéro !

Le premier processus, /sbin/init

Le noyau du système chargé et décompressé, s'exécute et s'initialise : réservation mémoire, prise en compte de la zone d'échange (swap),  détection du matériel et chargement des pilotes des périphériques, montage du système de fichiers et enfin lance le 1er processus /sbin/init
Le paramétrage de ce processus fondamental est entièrement assuré par l'exécution de ce fichier script /etc/inittab dont voici la suite :
# niveau d'exécution 3 par défaut
id:3:initdefault
# il y a ensuite exécution des scripts rc.sysinit
--> initialisation du PATH pour les autres scripts, activation swap,
    montage systèmes fichiers, gestion des quotas.. 
si::sysinit:/etc/rc.d/rc.sysinit
# exécution du script etc/rc.d/rc avec le niveau en paramètre
--> lancement des divers services du niveau choisi, ici 3, 
etc/rc.d/rc 3 
# ceci lance tous les liens symboliques du rép rc3.d
/etc/rc.d/rc3.d/S*
# par exemple /etc/rc.d/rc3.d/S01kerneld*fait référence
au script /etc/rc.d/init.d/kerneld
# le fichier inittab se termine par
# exécute xdm qui lance X et le login graphique, si le "runlevel" est 5
x:5:respawn:/etc/X11/prefdm -nodaemon

Le dernier script d'initialisation à être exécuté est /etc/rc.d/rc.local
Habituellement, on y écrit d'éventuelles commandes de chargement de modules ou de lancement de services supplémentaires.

Le système (System V) de démarrage des services

Outils de gestion du démarrage des services

Il est fastidieux de créer les liens précédemment décrits "à la main".
Il existe un outil ntsysv qui permet de déterminer les services devant être démarrés à l'initialisation du système, et ksysv, frontal graphique très convivial.

En ligne de commande : chkconfig --level 3 smb [on | off] pour activer ou non le service samba au démarrage en niveau 3

Outils de gestion des services en cours de session

Il peut etre nécessaire

Manipulations

  1. Examiner le fichier /var/log/dmesg qui contient le compte-rendu de l'initialisation.
    La commande dmesg nous en dit un peu plus, notamment sur l'interface réseau.

  2. Examiner le fichier /etc/inittab avec  mc
    Que faudrait-il y changer pour démarrer immédiatement au niveau graphique ?

  3. Lancement des services : sur votre machine, supposée fonctionnant en niveau 3, comment connaitre les services en exécution ? vérifier

  4. Comprendre cet extrait du script /etc/rc.d/rc
     # Now run the START scripts.
      for i in /etc/rc$runlevel.d/S*; do
        # Check if the script is there.
        [ ! -f $i ] && continue
    
        .............................
    
        # Bring the subsystem up.
        if egrep -q "(daemon |action )" $i ; then
          $i start
        else
          if [ "$subsys" = "halt" -o "$subsys" = "reboot" -o "$subsys" = "single" -o "$subsys" = "local" ]; then
              $i start
          else
              action "Starting $subsys: " $i start
          fi
        fi
      done
    fi
    

  5. Nature et ordre des services lancés en niveau d'exécution 3 :
    examiner le contenu du répertoire /etc/rc.d/rc3.d
    quelle est la nature de ces fichiers ? sont-ils exécutables ? que donne leur exécution ?

Annexes

Extrait de /etc/inittab

# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, 
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Things to run in every runlevel.
ud::once:/sbin/update
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

Extrait de /etc/rc.d/rc.sysinit

# Définir des variables d'environnement
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
HOSTNAME=`/bin/hostname`
# Le fichier de configuration du réseau existe t-il ?
if [ -f /etc/sysconfig/network ]; then
    . /etc/sysconfig/network
else
    NETWORKING=no
fi