Niveau de demarage et services

Fermé
wikilili Messages postés 197 Date d'inscription lundi 4 avril 2011 Statut Membre Dernière intervention 12 février 2014 - 25 nov. 2012 à 19:27
xila_geek Messages postés 8 Date d'inscription mardi 18 juin 2013 Statut Membre Dernière intervention 22 juin 2013 - 21 juin 2013 à 18:43
Bonjour,

s'il vous plez je fait un autoformation et j'ai casse la tete pour comprendre ca :



--> 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



est ce que quelqu'un peut commenter ces ligne
en explicant qu'est ce que rc.d rc3 :( :(

merci

2 réponses

xila_geek Messages postés 8 Date d'inscription mardi 18 juin 2013 Statut Membre Dernière intervention 22 juin 2013 9
21 juin 2013 à 18:43
en fonction du niveau d'exécution ou runlevel certains services (ou programmes) sont lancés (serveur web, interface graphique, serveur DHCP etc.).

t'as un tuto très clair : http://j-kh.fr/2012/08/25/les-runlevels-sous-linux/
4
mamiemando Messages postés 33381 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 26 novembre 2024 7 802
25 nov. 2012 à 21:47
Dans l'idée quand linux démarre il lance le processus init. Ce processus va en lancer plein en cascade, en gros tous les "services" sensés se lancer au "démarrage" (plus exactement ceux que l'on charge au runlevel par défaut, voir plus loins).

Pour cela init utilise les informations qui sont stockées dans /etc/inittab. Ce fichier décrit pour chaque runlevel un certain nombre de chose à faire et le runlevel par défaut. Un runlevel correspond à un état de la machine. La plupart des linux utilisent les conventions suivantes :
- 0 : arrêt de la machine
- 1 : mode single (récupération)
- 6 : reboot

Sous debian, le runlevel par défaut est 2 et amorce tous les services, mais ce n'est pas le cas de toutes les distributions.

Ensuite, on pourrait énumérer dans /etc/inittab et pour le runlevel qui nous intéresse tous les services à amorcer. Quelques exemple de services :
- configurer le réseau
- la plupart des "serveurs" (ssh, mysql, apache...) se lancent ou se coupent au travers d'un service.

Concrètement un service est représenté par un script shell qui permet de le démarrer, le stopper ou le relancer (voir dans /etc/init.d). Par exemple si un serveur ssh est installé tu auras un fichier /etc/init.d/sshd ou /etc/init.d/ssh présent (le nommage peut différer selon la distribution linux).

ls /etc/init.d


On pourrait alors mentionner explicitement dans /etc/inittab un truc du genre "lance le service mysql au runlevel 2" et ainsi de suite pour chaque service. Mais on se rend bien compte que ce ne serait pas très pratique, car à chaque fois qu'on installe ou désinstalle un serveur (ssh, mysql, ...) il faudrait corriger /etc/inittab.

(mando@silk) (~) $ grep default /etc/inittab 
# The default runlevel.
id:2:initdefault:


C'est pourquoi une autre stratégie a été adoptée : chaque service est référencé par des liens symboliques stockés dans /etc/rc1.d à /etc/rc6.d correspondant à chaque runlevel.

(mando@silk) (~) $ ls -l /etc/rc2.d/*ssh
lrwxrwxrwx 1 root root 13 nov.  20 22:04 /etc/rc2.d/S02ssh -> ../init.d/ssh


Pour exploiter ces liens, /etc/inittab fait appel à un script nommé /etc/init.d/rc qui reçoit en paramètre le runlevel dans lequel on s'apprête à basculer. Supposons que /etc/init.d/rc reçoivent en paramètre la valeur 2, alors il va regarder dans /etc/rc2.d les liens symboliques qui y sont présent.

En fonction de leur nom /etc/init.d/rc sait s'il doit les arrêter (K comme kill) ou les démarrer (S comme start). Le numéro qui suit permet à /etc/init.d/rc de savoir dans quel ordre procéder. Pour t'en convaincre tu peux regarder le code source écrit dans le fichier /etc/init.d/rc.

Ainsi, on voit qu'en fonction des liens symboliques dans les répertoires /etc/rc*.d, le script /etc/init.d/rc sait exactement quoi faire à chaque changement runlevel. Ainsi, insérer ssh dans la chaîne de lancement consiste simplement à créer les liens symboliques appropriés et aux bons endroits. C'est le paquet correspondant au serveur ssh qui se chargera de gérer ces liens symboliques.

Comme ce fonctionnement n'est pas trivial à comprendre, les distributions linux mettent souvent à disposition des commandes dédiées à la gestion de ces liens symboliques (par exemple udpate-rc.d sous debian). Mais en pratique si le paquet est bien fait (ce qui est généralement le cas) un utilisateur n'a jamais à utiliser ce genre de commande, ce sera géré automatiquement au niveau du paquet.

À noter en plus que la chaîne de démarrage de linux est susceptible de différer selon la machine que tu considères. Ici j'ai parlé de sysv-init qui est la chaîne de lancement installée par défaut. Si tu regardes par exemple upstart tu verras que ça fonctionne et ça se configure différemment.

Bonne chance
0