PROFDINFO.COM

Votre enseignant d'informatique en ligne

Section 6 - La séquence de démarrage

Retour à la page du cours

Cette section nous présentera ce qui se passe exactement quand Linux démarre. Nous couvrirons en même temps les services et la façon de les gérer.

6.1 - Introduction

6.2 - /etc/fstab

6.3 - Ubuntu contre le monde

6.4 - Les "runlevels" (niveaux d'exécution)

6.5 - Les fichiers de démarrage

6.6 - Modifier la séquence de démarrage

6.7 - Interagir avec les services

6.8 - Quelques questions...

6.1 - Introduction

Que fait le système lorsque Linux démarre? 

Le tout premier processus à démarrer sur un système Linux est init. Si vous faites un ps -e, vous constaterez qu'init a toujours le PID 1.

Init ouvrira le fichier /etc/fstab et montera chacune des partitions aux points de montage indiqués. La première à être montée sera /, puis les autres seront greffées après celle-ci.

Quelques définitions:

Retour à la table des matières de la section

6.2 - /etc/fstab

C'est dans ce fichier que sont listés les différents sytèmes de fichiers disponibles sur votre système. Pour chacun d'eux, on trouvera un nom, un point de montage, un type (ext3 ou ntfs par exemple) puis des options de montage à utiliser.

Le fichier est un fichier de configuration Linux typique: fichier texte standard, avec une entrée par ligne. Chaque entrée contient plusieurs champs séparés par un ou des espaces ou tabulations. Les champs n'ont pas besoin d'être alignés d'une entrée à l'autre. Les lignes vides ou commençant par # sont ignorées.

Par exemple, on y verra quelque chose comme:

proc  /proc  proc  defaults		0	0
#/dev/sda2
UUID=43455-3442-2123-1212-12   /	ext3	defaults,errors=remount-ro	0	1
#/dev/sda3
UUID-385832-29482-2812-128123-12  /home	ext3	defaults	0	2

Puis, plus bas dans le fichier:

/dev/scd0	/media/cdrom0	udf,iso9660	user,noauto,exec	0	0

Dans ce fichier, les champs, dans l'ordre, sont:

Ce fichier est donc essentiel au bon fonctionnement du système. Si un jour vous faites des modifications aux disques durs ou partitions, il faut vous assurer que /etc/fstab est mis à jour correctement.

Retour à la table des matières de la section

6.3 - Ubuntu contre le monde

Ubuntu fonctionne différemment des autres distributions pour ce qui est de la séquence de démarrage des services.

La majorité des distributions utilise sysvinit, un package appelé "System V" et commençant à se faire vieux. SysV s'occupe entre autres de la séquence de démarrage et utilise pour cela différents scripts et fichiers de configuration permettant d'orchestrer le tout de façon statique (dans un ordre bien défini).

Ubuntu utilise upstart, un tout nouveau package créé par Scott James Remnant de chez Ubuntu. L'idée derrière upstart est de remplacer SysV par quelque chose de dynamique basé sur des événements. Ainsi, certaines tâches ou services peuvent être démarrés lorsqu'un événement particulier est lancé (que ce soit pour signifier que le serveur s'allume ou qu'un service s'est arrêté). On permet donc une plus grande flexibilité dans la séquence de démarrage.

En contrepartie, Ubuntu simplifie bien des choses en fonctionnant toujours en mode graphique (sauf lorsqu'on démarre en "mode sans échec").

Retour à la table des matières de la section

6.4 - Les "runlevels" (niveaux d'exécutions)

En Linux, il y a plusieurs niveaux d'exécution.  Un niveau d'exécution représente simplement une séquence quelconque de démarrage (ou d'arrêt).  Lorsqu'on passe à un niveau d'exécution quelconque, Linux sait quels services arrêter et quels services démarrer pour que tout soit fonctionnel. On peut considérer un niveau d'exécution comme un mode.

Il existe 4 niveaux d'exécutions prédéfinis qui permettent d'utiliser le serveur d'une façon quelconque, 2 niveaux d'exécutions prédéfinis qui servent à l'arrêter et 1 niveau d'exécution non défini et par défaut non utilisé (ce qui pourrait permettre à quelqu'un de définir son propre niveau d'exécution selon ses besoins).

Voici la liste officielle:


Niveau d'exécution

Usage Ubuntu

Usage courant

0

Arrêt (halt) - éteint la machine

Arrêt (halt) – éteint la machine

1

Mode mono usager (single user mode) – un genre de mode sans échec où seul le root peut se loguer et où peu de services sont démarrés

Mode mono usager (single user mode)

2

Multi usagers graphique

Multi usagers sans NFS (texte)

3

Multi usagers graphique

Multi usagers normal (texte)

4

Multi usagers graphique

Non utilisé – peu servir de mode personnalisé si on en a besoin.

5

Multi usagers graphique

X11 – mode multi usagers graphique

6

Redémarrage – redémarre l'ordinateur pour retomber dans le niveau d'exécution par défaut.

Redémarrage

Si on est root, on peut passer au niveau d'exécution voulu grâce à la commande init.  On lui passe simplement en paramètre le numéro du niveau désiré comme ceci:

init 6

Sur Ubuntu, on peut également faire:

telinit 6

ce qui revient exactement au même. Évidemment, il faut être root pour pouvoir exécuter ces commandes (donc utilisez sudo!)

Lorsque l'on utilise la commande shutdown –h, celle-ci appelle en fait init 0.  De la même façon, shutdown –r appelle init 6 et shutdown tout cours appelle init 1 (et passe donc en mode mono usager).

Sur toute autre distribution, si on est en mode texte et que l'on veut passer en mode graphique, on peut faire init 5, ce qui revient presque au même que d'appeler startx (qui démarre le mode graphique).  La différence est qu'en runlevel 5, même l'écran de login sera graphique.  De la même façon, on peut faire init 3 en mode graphique et se retrouver en un mode texte (uniquement console), à l'ancienne - idéal pour un serveur utilisé à distance seulement (inutile de s'encombrer d'une interface graphique).

Sur Ubuntu, les niveaux d'exécution 2 à 5 sont équivalents. Si on veut se retrouver avec un mode texte sans X-Windows, il faudra alors empêcher le service gdm de démarrer.

Retour à la table des matières de la section

6.5 - Les fichiers de démarrage

Il existe plusieurs fichiers impliqués dans le démarrage d'Ubuntu. Ceux-ci sont organisés en répertoires et se trouvent tous quelque part sous /etc.

Retour à la table des matières de la section

6.6 - Modifier la séquence de démarrage

La façon la plus évidente (mais la plus délicate) pour modifier la séquence de démarrage est de jouer avec les scripts dans /etc/init.d et les liens dans /etc/rc?.d.

C'est délicat puisque les scripts dans init.d sont généralement complexes et que l'ordre des liens est souvent important à cause de dépendances.

Si jamais vous vous aventurez là-dedans et que vous faites du grabuge, sachez que chaque script dans init.d commence par une section en commentaires qui indique les dépendances des services, les niveaux d'exécution où ils doivent démarrer et les niveaux où ils doivent s'arrêter. Il est ainsi possible de tout remettre en place.

Il y a encore parfois quelques vieilles applications de type service qui seront fournies avec un script à placer dans init.d et qui demanderont de créer des liens appropriés dans les rc?.d - mais c'est rare.

Il existe une façon plus simple de jouer avec les services, mais pour l'utiliser il faut d'abord installer un package. Pas d'inquiétude, c'est très facile. Il suffit de taper:

sudo apt-get install sysv-rc-conf         

Ceci installera le package automatiquement. On pourra ensuite utiliser sysv-rc-conf pour modifier aisément, grâce à une interface pseudo-graphique, les services qui sont démarrés dans chaque niveau d'exécution. (Il faut être root, donc pensez au sudo - "q" vous permet de quitter).

L'équivalent en mode graphique se trouve dans Système->Administration->Services. On y voit alors le nom complet de chaque service (ce qui aide à comprendre à quoi ils servent) mais on ne peut que modifier la séquence du niveau d'exécution courant.

On peut également voir les jobs d'upstart et leur statut en faisant

initctl list

Finalement, on peut voir dans quel niveau d'exécution on se trouve présentement en faisant simplement

runlevel

On verra alors le niveau d'exécution précédent, suivi d'un espace, suivi du niveau courant. S'il n'y a pas de niveau précédent (puisqu'il n'a pas changé depuis le démarrage de la machine), on verra N.

Retour à la table des matières de la section

6.7 - Interagir avec les services

Pour arrêter un service, on peut simplement appeler son script dans /etc/init.d et lui passer "stop" en paramètre. Par exemple:

/etc/init.d/gdm stop

Pour le démarrer, on fait:

/etc/init.d/gdm start

On peut faire restart également pour plusieurs services qui supportent cette fonctionnalité (ceux pour lesquels c'est utile).

Il existe une autre syntaxe fort utile, par exemple ceci:

service networking restart

redémarre le service réseau (notez que sous Ubuntu, c'est networking, à bien d'autres endroits c'est network). Cette syntaxe est viable un peu partout, mais pour pouvoir l'utiliser sous Ubuntu, il nous faudra installer un autre package, comme bash nous le fera savoir si on essaie d'utiliser la commande service:

sudo apt-get install sysvconfig

Retour à la table des matières de la section

6.8 - Quelques questions pour voir si vous avez saisi toute cette longue théorie

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Retour à la table des matières de la section