Démarrage du noyau
- A la mise sous tension, il y a la phase d'initialisation du BIOS de la carte mère : celle-ci fait l'inventaire de ses "petits", les divers périphériques dont elle se trouve dotée (bus, ram, disques, cartes ...).
Puis il part à la recherche d'un système d'exploitation sur l'un des périphériques accessibles ... - Habituellement (si on ne démarre pas sur une disquette), le BIOS charge en mémoire le MBR (Master Boot Record, 1er secteur de la 1ère piste du 1er disque dur, 512 octets).
Supposons que le chargeur de systèmes LILO (Linux Loader) s'y trouve, une première partie de LILO est chargée et exécutée (A noter que le chargeurLILO
peut se trouver sur une disquette ou sur la partition active du disque) - Sa tâche consiste à charger en mémoire la 2ème partie de LILO (environ 5 Ko). Lors de cette phase, il y a affichage des lettres LI. S'il y a arrêt, c'est que LILO n'arrive pas à s'exécuter (pb de géométrie du disque)que cette 2ème partie est ce qui va permettre à l'utilisateur de choisir le système à lancer.
- Le noyau de ce système quel qu'il soit (Linux, Windows ..) est décompressé "à la volée" et est chargé en mémoire. Ceci est accompagné de l'affichage du message "Uncompressing Linux ...done. Now booting the kernel .."
- Dès lors c'est le noyau qui prend les affaires en main et inspecte son environnement matériel !
Les niveaux de fonctionnement
Ces 6 niveaux sont décrits au début du fichier/etc/inittab
- 0 : provoque un arrêt (shutdown) de la machine
- 1 : pour rentrer en mode mono-utilisateur, réservé à root
- 2 : mode multi-utilisateurs, sans NFS
- 3 : mode multi-utilisateurs avec tous les services réseaux
- 5 : démarrage du serveur graphique X11 en plus
- 6 : redémarrage de la machine (la commande
init 6
oureboot
lance le niveau 6).
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 scriptsrc.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écutexdm
qui lance X et le login graphique, si le "runlevel" est 5
x:5:respawn:/etc/X11/prefdm -nodaemon
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écessaireManipulations
- 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