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
- # les scripts de /etc/rc.d/init.d/ sont appelés avec un paramètre
start, stop, status, restart
Par exemple si on a modifié la configuration du serveur Samba dans le
fichier smb.conf, il faut relancer ce service par la commande
/etc/rc.d/init.d/smb restart
- Quand on souhaite démarrer un service, il faut placer dans /etc/rc.d/init.d
le script de démarrage du service, puis créer un lien symbolique
dans chacun des répertoires/etc/rc.d/rcx.d (x=0..6), avec comme règle de créer
ce lien symbolique avec un nom commençant par S (comme Start) et un K (comme K).
- Les liens symboliques commençant par K
sont lus les premiers, et le numéro indique l'ordre dans lequel les fichiers
seront lus (normalement lorsque vous faites une installation à partir d'un
rpm cela est fait automatiquement).
- Ainsi pour gérer le serveur dns on doit créer les liens symboliques vers le script de
démarrage :named
ln -s /etc/rc.d/init.d/named /etc/rc.d/rc0.d/K40named Au niveau d'arrêt 0 on l'arrête
ln -s /etc/rc.d/init.d/named /etc/rc.d/rc1.d/K40named pas de réseau à ce niveau
ln -s /etc/rc.d/init.d/named /etc/rc.d/rc2.d/K40named bind peut etre démarré ici
ln -s /etc/rc.d/init.d/named /etc/rc.d/rc3.d/S40named
ln -s /etc/rc.d/init.d/named /etc/rc.d/rc4.d/K40named niveau inutilisé sur Red Hat
ln -s /etc/rc.d/init.d/named /etc/rc.d/rc5.d/S40named
ln -s /etc/rc.d/init.d/named /etc/rc.d/rc6.d/K40named Le niveau 6 étant le reboot, il faut l'arreter
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
- 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.
- Examiner le fichier
/etc/inittab avec mc
Que faudrait-il y changer pour démarrer immédiatement au
niveau graphique ?
- Lancement des services : sur votre machine, supposée fonctionnant en niveau 3, comment connaitre les services
en exécution ? vérifier
- 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
- 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