Étapes du démarrage d'un système Linux
Nous verrons dans cette section quelles sont les différentes étapes de démarrage des
*BSD.
Ainsi durant le processus de boot on passera par les étapes suivantes:
- Après le chargement du ``MBR'' lilo va donner la main au kernel.
- Le kernel s'initialise, accède au "initial ram disk" et donne la main au chargeur initrd, qui va permettre
de charger des modules supplémentaires avant d'accéder au système (le déroulement de cette étape est décrit
dans le fichier linuxrc).
Au démarrage du noyau, celui-ci décompresse et monte le contenu du fichier initrd.img sur le
disque virtuel /dev/ram0.
Pour accéder à ce pseudo système de fichiers on peut procéder de la façon suivante:
- cp /boot/initrd.img /tmp
- cd /tmp
- mv initrd.img initrd.gz
- gunzip initrd.gz
- mkdir img
- mount -t ext2 initrd img -o loop=/dev/loop0
- cd img
- cat linuxrc
- Après l'initialisation des modules, Linux accède à la partition racine.
À la limite, un système Linux n'est composé que d'un kernel et d'un interpréteur
de commande (/bin/sh): Un gros DOS! Un micro système *BSD (un BSD sur une disquette)
aura généralement un petit script /etc/rc qui fera un
initialisation minimum et ensuite lancera la tâche principale.
- /sbin/init prend la relève
Le travail initial du kernel, c'est de préparer l'accès au système de
fichier et de donner la main à /sbin/init. Cet utilitaire est présent sur tout les systèmes Unix.
à partir du fichier /etc/inittab, /sbin/init va démarrer
les différents processus nécessaire à l'opération d'un système multi-usagers.
- /etc/inittab
Le fichier /etc/inittab a un format relativement simple. Outre des commentaires
(ligne débutant par le caractère #), il contient une commande par ligne. Chaque ligne a le format suivant:
- Identificateur:
C'est généralement une séquence de deux lettres identifiant uniquement cette
ligne. /sbin/init utilise cet identificateur lorsqu'il rapporte des erreurs.
- Runlevels
Chaque commande est associé à un ou plusieurs groupes appelé "run levels".
Les "run levels" sont identifiés par un numéro de 0 à 6.
La définition exacte de chaque niveau peut varier d'une distribution à l'autre.
Les 7 niveaux d'exécution classiques:
0 |
halte |
1 |
mode utilisateur unique |
2 |
mode multi-utilisateurs sans gestion NFS |
3 |
mode multi-utilisateurs |
4 |
sans effet |
5 |
mode X11 |
6 |
Re-démarrage |
- Attribut
Modes d'exécution (liste non exhaustive):
once |
la commande n'est exécutée qu'une fois |
off |
la commande n'est pas exécutée |
wait |
attente de l'exécution de la commande |
boot |
la commande doit s'exécuter durant l'amorçage, le niveau est ignoré |
bootwait |
idem mais le boot ne se poursuit qu'après la fin de la commande |
ctraltdel |
la commande est appelée lors de l'appui sur Ctrl+Alt+Del |
initdefault |
mode d'exécution de Linux |
|
|
|
Remarque : |
Dans le fichier /etc/inittab on trouvera la ligne suivante: |
______________________________________________ |
# Default runlevel. The runlevels used by RHS are: |
# 0 - halt (Do NOT set initdefault to this) |
# 1 - Single user mode |
# 2 - Multiuser, without NFS. |
# 3 - Full multiuser mode |
# 4 - unused |
# 5 - X11 |
# 6 - reboot (Do NOT set initdefault to this) |
# |
id:3:initdefault: |
______________________________________________ |
|
|
|
|
C'est donc cette ligne qu'il faudra modifier si l'on veut démarrer en mode graphique(5) ou en mode
console(3) comme c'est le cas dans cet exemple.
Ainsi si votre niveau de démarrage est le niveau 3, il vous faudra modifier le répertoire /etc/rc3.d
afin d'ajouter ou de supprimer des services:
(seb@kset)[~]-% ls /etc/rc3.d
K15httpd K35vncserver K65identd S08ip6tables S14nfslock S56rawdevices S95anacron
K15postgresql K45arpwatch K70aep1000 S08ipchains S17keytable S56xinetd S95atd
K16rarpd K45named K70bcm5820 S08iptables S20random S60lpd S97rhnsd
K20nfs K46radvd K74ntpd S09isdn S25netfs S80sendmail S98wine
K25squid K50snmpd K74ypserv S10network S26apmd S85gpm S99local
K34yppasswdd K50snmptrapd K74ypxfrd S12syslog S28autofs S90crond
K35smb K50tux S05kudzu S13portmap S55ssh\index{ssh}d S90xfs
Pour le service httpd par exemple on observe que celui-ci commence par un K, qui détermine si le service est
activé (S) ou non (K) (Start ou Kill), suivit par un chiffre ``15'' qui précise le niveau d'ordre
d'exécution (ici le service network et activé avant portmap).
Pour le reste si le nom ne vous parait pas assez explicite vous pouvez par la commande ``ls -l'' voir sur quel fichier
il pointe, dans le cas ``K15httpd'' on aura donc le fichier:
lrwxrwxrwx 1 root root 15 mai 11 16:25 /etc/rc3.d/K15httpd -> ../init.d/httpd
De même il est possible de visualiser l'ensemble des services disponibles selon le runlevel par la commande
``chkconfig -list''.
|
|
|
Remarque : On peut très bien faire un mode ``rescue'' qui se |
contentera d'ouvrir un shell au démarrage, pour cela il suffira |
d'ajouter à /etc/lilo.conf: |
|
image=/boot/vmlinuz-2.4.18 |
label=maintenance |
root=/dev/hda5 |
append="init=/bin/zsh" |
read-only |
|
|
Après quoi il suffira d''exécuter la commande ``lilo'' pour que les |
changements soient pris en compte au prochain démarrage. |
|
|
|
|
|