Le système d'exploitation GNU-Linux/Le processus d'initialisation

Un livre de Wikibooks.
Aller à : Navigation, rechercher
Le système d'exploitation GNU-Linux
Tux.svg
Plan
  1. Qu'est-ce qu'un système d'exploitation ?
  2. Unix et Linux
  3. Partitionnement du disque
  4. Installation
    1. Installer Debian via le réseau
  5. Utilisateur Unix
    1. Le login
    2. Commandes de base
    3. L'aide en ligne man
    4. L'éditeur de texte vi
    5. Les shells
    6. La complétion
    7. Les jokers
    8. Les répertoires importants
    9. Redirection des entrées/sorties
    10. Invoquer un programme en tâche de fond
    11. Propriétaires et droits d'accès
    12. Processus
  6. Administration du système
    1. Configuration du réseau
    2. Les utilisateurs et groupes
    3. Le processus d'initialisation
    4. Les systèmes de fichiers
    5. Le système virtuel /proc
    6. Les périphériques /dev
    7. L'ordonnanceur de travaux cron
    8. Le backup : tar et gzip
    9. ghost avec partimage
    10. sauvegarde de fichiers avec rsync
    11. Les fichiers journaux syslog
    12. Installation de nouveaux logiciels
    13. Le noyau Linux et les modules
    14. Autres commandes utiles
    15. Installation RAID1 logiciel + LVM + XFS
    16. Scripts de surveillance
    17. Réseaux sans fil
  7. Administration des services réseaux
    1. Le serveur de noms Bind
    2. Le serveur de configuration réseau DHCP
    3. Le serveur de shell distant SSH
    4. Le partage de fichiers Samba
    5. Le partage de fichiers NFS
    6. Le serveur d'impression CUPS
    7. Le serveur de mails Postfix
    8. Le serveur de fichiers FTP
    9. La base de données Mysql
    10. Le serveur Web Apache
    11. Les annuaires LDAP
    12. L'outil d'administration Webmin
    13. Le routage avec iptables et route
    14. La supervision
  8. Sécurisation d'un serveur Linux
    1. Installation d'un service en mode chroot
    2. Protection avec iptables
  9. Médiagraphie
  10. Auteurs
Modifier ce modèle

Sections

[modifier] Le chargement du noyau Linux

Lorsque l'on allume son ordinateur, la carte mère effectue un test automatique qui se charge de tester le bon fonctionnement des composants de la carte mère (processeur, mémoire, etc.). Ce test s'appelle le POST (Power-On Self Test). Si tout est OK, ce test se termine par un (et un seul) bip.

Ceci fait, le BIOS charge ensuite le programme stocké dans le boot secteur du disque dur.

Sur architecture PC, il existe deux programmes permettant de charger le noyau Linux, ou un autre système d'exploitation.

[modifier] LILO

LILO (LInux LOader) a été le premier logiciel permettant d'effectuer cette opération.

Exemple de fichier de configuration de Lilo (/etc/lilo.conf) :

 boot=/dev/hda
 map=/boot/map
 install=/boot/boot.b
 default=linux
 prompt
 timeout=50
 message=/boot/message
 # Premiere section : boot Windows
 other=/dev/hda1
       label=windows
       table=/dev/hda
 # Deuxieme section: boot Linux
 image=/boot/vmlinuz
       label=linux
       root=/dev/hda4
       append="acpi=off"
       read-only
 # Troisieme section: boot Linux - mode mono-utilisateur
 image=/boot/vmlinuz
       label=linux_single_user
       root=/dev/hda4
       append="single acpi=off"
       read-only

Ce fichier se compose de paramêtres communs (disque dur de boot, timeout ...) et de sections pour chaque système d'exploitation à booter.

Chaque fois que l'on modifie ce fichier, il faut exécuter la commande lilo afin de re-écrire dans le boot secteur l'emplacement exact du noyau sur le disque dur.

 # lilo
 Added windows
 Added linux
 Added linux_single_user


[modifier] GRUB

Aujourd'hui, on utilise le programme GRUB (GRand Unified Bootloader) car il offre des possibilités supplémentaires.

Contrairement à Lilo, Grub sait lire une partition Linux (ext2/3, XFS, reiserFS ...) afin de charger son fichier de configuration (/boot/grub/menu.lst) et le(s) noyau(x) Linux.

Exemple de fichier de configuration de Grub (/boot/grub/menu.lst)

 default         0
 timeout         30
 color cyan/blue white/blue
 # Premiere section : Linux
 title           Debian GNU/Linux, kernel 2.6.18-5-686
      root       (hd1,0)
      kernel     /vmlinuz-2.6.18-5-686 root=/dev/sdb2 ro acpi=off
      initrd     /initrd.img-2.6.18-5-686
      savedefault
 # Deuxieme section : Linux mode mono-utilisateur
 title           Debian GNU/Linux, kernel 2.6.18-5-686 (single-user mode)
      root       (hd1,0)
      kernel      /vmlinuz-2.6.18-5-686 root=/dev/sdb2 ro acpi=off single
      initrd      /initrd.img-2.6.18-5-686
      savedefault
 # Troisieme section : Windows
 title           Windows NT/2000/XP (loader)
 root            (hd0,0)
 savedefault
 makeactive
 chainloader     +1

A la différence de Lilo, il n'est pas nécessaire d'exécuter une commande particulière lorsque l'on modifie ce fichier.

Nuvola apps korganizer.svg
À faire...

parler du initrd

[modifier] les messages du noyau Linux

Une fois chargé en mémoire, le noyau va se charger de détecter et d'initialiser les composants de la carte mère et les périphériques présents.

Ces messages sont affichés sur l'écran lors du démarrage.

La commande dmesg permet de consulter ces messages ultérieurement. Exemples :

 # dmesg
 Linux version 2.6.18-5-686 (Debian 2.6.18.dfsg.1-13) (dannf@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #1 SMP Fri Jun 1 00: 47:00 UTC 2007
 BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000008f000 (usable)
 ...

A noter que la commande dmesg affiche tous les messages détectés durant le boot, ainsi que les messages du noyau affichés par la suite (cad durant le fonctionnement du système).

Dans certains cas, l'affichage de la commande dmesg peut être tronqué (notamment les messages affichés durant le boot). Dans ce cas, on peut consulter le fichier /var/log/dmesg qui ne contient que les messages du boot.

[modifier] Le processus init

Une fois que le noyau a détecté l'ensemble des composants de l'ordinateur, il lance le processus du système : init.

Le processus init a comme particularité d'avoir le PID (Process IDentifiant) n°1 (c'est le premier processus), et de fait, il est le père de tous les autres.

*** A VERIFIER *** Le processus init démarre les processus internes au noyau (noté entre crochet lorsque l'on fait ps aux), comme par exemple les processus kjournald qui gère les journaux des systèmes de fichiers journalisés.

Le processus dispose d'un fichier de configuration, c'est le fichier /etc/inittab.

La syntaxe de ce fichier est la suivante :

code:niveau:action:commande

Exemple de fichier /etc/inittab :

 # Indique le runlevel par défaut (ici le 2)
 id:2:initdefault:
 # Script d'initiation du boot du système
 si::sysinit:/etc/init.d/rcS
 # mode mono-utilisateur
 ~~:S:wait:/sbin/sulogin

 # runlevel 0 : arret du système
 l0:0:wait:/etc/init.d/rc 0
 # runlevel 1 : mono-utilisateur
 l1:1:wait:/etc/init.d/rc 1
 # runlevel 2 : runlevel par défaut sur Debian
 l2:2:wait:/etc/init.d/rc 2
 # runlevel 3, 4 et 5 : autres runlevels disponible
 l3:3:wait:/etc/init.d/rc 3
 l4:4:wait:/etc/init.d/rc 4
 l5:5:wait:/etc/init.d/rc 5
 # runlevel 6 : redémarrage du système
 l6:6:wait:/etc/init.d/rc 6
 # mode emergency
 z6:6:respawn:/sbin/sulogin
 # lance le reboot quand on appuie sur CTRL-ALT-DEL
 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

 # Pour les onduleurs
 pf::powerwait:/etc/init.d/powerfail start
 pn::powerfailnow:/etc/init.d/powerfail now
 po::powerokwait:/etc/init.d/powerfail stop
 # Démarre les ttys en mode console
 1:2345:respawn:/sbin/getty 38400 tty1
 2:23:respawn:/sbin/getty 38400 tty2
 3:23:respawn:/sbin/getty 38400 tty3
 4:23:respawn:/sbin/getty 38400 tty4
 5:23:respawn:/sbin/getty 38400 tty5
 6:23:respawn:/sbin/getty 38400 tty6
Nuvola apps korganizer.svg
À faire...

Parler de upstart sous Ubuntu

[modifier] Les runlevels et les scripts de démarrage

Une fois que le système a effectué le runlevel S (initialisation minimale, comme par exemple vérifier l'intégrité des systèmes de fichiers), il va dans le runlevel 2 (Debian).

Les niveaux de Runlevel

  • S : Initialisation commune à tous les runlevels
  • 0 : Arrêt de la machine
  • 1 : Single-User
  • 2,3,4,5 : Fonctionnement normal
  • 6 : Reboot de la machine


Les principe de fonctionnement est le suivant :

  • tous les scripts de démarrage et d'arrêt sont stockés dans le répertoire /etc/init.d/.
  • les répertoires rc0.d, rc1.d ... rc6.d contiennent des liens qui vont appeller les scripts d'initialisation.
  • Si le lien commence par un S, le script va etre appellé avec l'option start
  • Si le lien commence par un K, le script va etre appellé avec l'option stop
  • le numéro qui suit le S ou le K indique l'ordre de démarrage ou d'arrêt.

Exemple, le serveur d'impression cupsys :

Le script de démarrage et d'arrêt est situé dans /etc/init.d :

 $ ls -l /etc/init.d/cupsys
 -rwxr-xr-x 1 root root 1977 2007-02-02 14:18 /etc/init.d/cupsys

Le lien suivant indique qu'il faut appeller ce script avec l'option start dans le runlevel 2 (runlevel par défaut sous Debian) :

 $ ls -l /etc/rc2.d/S20cupsys
 lrwxrwxrwx 1 root root 16 2007-10-24 15:40 /etc/rc2.d/S20cupsys -> ../init.d/cupsys

Le lien suivant indique qu'il faut appeller ce script avec l'option stop dans le runlevel 0 (arrêt de la machine) :

 $ ls -l /etc/rc0.d/K20cupsys
 lrwxrwxrwx 1 root root 16 2007-10-24 15:40 /etc/rc0.d/K20cupsys -> ../init.d/cupsys

[modifier] La commande update-rc.d

Sous Debian, la commande update-rc.d permet de gérer les liens des runlevels.

Par exemple, pour enlever le démarrage automatique du serveur web apache :

 # update-rc.d -f apache remove
 Removing any system startup links for /etc/init.d/apache ...
  /etc/rc0.d/K91apache
  /etc/rc1.d/K91apache
  /etc/rc2.d/S91apache
  /etc/rc3.d/S91apache
  /etc/rc4.d/S91apache
  /etc/rc5.d/S91apache
  /etc/rc6.d/K91apache

Pour re-activer le démarrage automatique du serveur web apache :

 # update-rc.d apache defaults 91
 Adding system startup for /etc/init.d/apache ...
  /etc/rc0.d/K91apache -> ../init.d/apache
  /etc/rc1.d/K91apache -> ../init.d/apache
  /etc/rc6.d/K91apache -> ../init.d/apache
  /etc/rc2.d/S91apache -> ../init.d/apache
  /etc/rc3.d/S91apache -> ../init.d/apache
  /etc/rc4.d/S91apache -> ../init.d/apache
  /etc/rc5.d/S91apache -> ../init.d/apache

Pour connaitre la liste des options de la commande update-rc.d, il suffit de l'appeller sans argument :

 # update-rc.d
 usage: update-rc.d [-n] [-f] <basename> remove
        update-rc.d [-n] <basename> defaults [NN | sNN kNN]
        update-rc.d [-n] <basename> start|stop NN runlvl [runlvl] [...] .
                 -n: not really
                 -f: force

[modifier] La commande chkconfig

attention : spécifique à REDHAT

Pour savoir en quel(s) runlevel est lancé un service (ie. postgresql)

# chkconfig --list postgresql

Pour positionner le lancement d'un service à un runlevel donné (ie. 3, 4 et 5)

# chkconfig --level 345 postgresql


Nuvola apps korganizer.svg
À faire...

parler du modèle de script d'initialisation /etc/init.d/skeleton

[modifier] Commandes pour manipuler les runlevel

La commande runlevel permet de connaître le runlevel dans lequel on est :

 # runlevel
 N 2

Dans cet exemple, on est dans le runlevel n°2 (fonctionnement sous Debian). Le N nous indique le runlevel précédent (N (No) : pas de runlevel précédent)

La commande init ou la commande telinit permet de changer de runlevel. Exemple :

 # init 6

[modifier] Arréter ou redémarrer le système

Pour arréter le systeme :

  • Commun à tous les UNIX : shutdown
  • Spécifique Linux et systèmes récents : halt et reboot


 # shutdown -h now "changement de noyau" & 

NB : on rajoute un & pour garder la main

Il existe différentes options telles que :

  • -h (h pour halt) : arrêt immédiat
  • -r now (r pour reboot) : redémarrage immédiat
  • -h +10 : arrêt différé dans 10 minutes
  • -h 10:30 : arrêt à 10h30
  • -c : annule l'arrêt
Outils personnels
Espaces de noms

Variantes
Actions
Bibliothèque
Navigation
Aide
Imprimer / exporter
Boîte à outils