Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 23459 Details for
Bug 36917
[fr] Traduction du Handbook
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
hb-working-rcscripts.xml
hb-working-rcscripts.xml (text/plain), 18.53 KB, created by
Xavier Neys (RETIRED)
on 2004-01-09 05:40:26 UTC
(
hide
)
Description:
hb-working-rcscripts.xml
Filename:
MIME Type:
Creator:
Xavier Neys (RETIRED)
Created:
2004-01-09 05:40:26 UTC
Size:
18.53 KB
patch
obsolete
><?xml version='1.0' encoding='UTF-8'?> ><!DOCTYPE sections SYSTEM "/dtd/book.dtd"> > ><!-- The content of this document is licensed under the CC-BY-SA license --> ><!-- See http://creativecommons.org/licenses/by-sa/1.0 --> > ><!-- $Header: /home/cvsroot/gentoo/xml/htdocs/doc/en/handbook/hb-working-rcscripts.xml,v 1.9 2004/01/06 15:28:51 swift Exp $ --> > ><sections> ><section> ><title>Les runlevels</title> ><subsection> ><title>Démarrer votre système</title> ><body> > ><p> >Quand vous démarrez votre système, vous voyez pas mal de texte défiler sur >votre écran. Vous remarquerez aussi que ce texte est le même à chaque >démarrage. La séquence d'actions qui se déroule devant vos yeux s'appelle la ><e>séquence de démarrage</e> et elle est définie de façon plus ou moins >statique. ></p> > ><p> >D'abord, votre chargeur de démarrage charge l'image du noyau que vous avez >définie dans son fichier de configuration et ensuite, il exécute ce noyau. Ce >dernier s'initialise, démarre les tâches spécifiques au noyau et lance le >processus <c>init</c>. ></p> > ><p> >Ce processus monte les systèmes de fichiers définis dans ><path>/etc/fstab</path> et exécute quelques scripts placés dans le répertoire ><path>/etc/init.d</path> qui, à leur tour, démarrent les services nécessaires >au bon fonctionnement du système. ></p> > ><p> >Finalement, quand tous les scripts ont été exécutés, <c>init</c> active les >terminaux (en général, les consoles virtuelles que vous obtenez avec les >touches <c>Alt-F1</c>, <c>Alt-F2</c>, etc.) et attache un processus appelé ><c>agetty</c> à chacun. Ce processus vous permet de vous identifier sur ces >terminaux avec <c>login</c>. ></p> > ></body> ></subsection> ><subsection> ><title>Les scripts d'initialisation</title> ><body> > ><p> >En fait, <c>init</c> n'exécute pas les scripts du répertoire ><path>/etc/init.d</path> n'importe comment. De plus, il n'exécute pas non plus >tous les scripts, mais seulement ceux qui doivent l'être. Les scripts à >exécuter sont définis dans <path>/etc/runlevels</path>. ></p> > ><p> >Le processus <c>init</c> exécute d'abord les scripts de ><path>/etc/init.d</path> vers lesquels un lien symbolique existe dans ><path>/etc/runlevels/boot</path>. Les scripts sont généralement exécutés par >ordre alphabétique, mais certains contiennent des dépendances qui indiquent >quels scripts doivent d'abord être exécutés. ></p> > ><p> >Quand tous les scripts liés dans <path>/etc/runlevels/boot</path> ont été >exécutés, <c>init</c> poursuit avec ceux liés dans ><path>/etc/runlevels/default</path>. Ici aussi, les scripts sont généralement >exécutés par ordre alphabétique, sauf quand ils contiennent des informations >sur des dépendances qui spécifient une séquence d'exécution correcte. ></p> > ></body> ></subsection> ><subsection> ><title>Comment init fonctionne-t-il ?</title> ><body> > ><p> >Ãvidemment, <c>init</c> ne décide pas tout seul de ce qu'il doit faire. Il a >besoin d'un fichier de configuration qui lui indique quelles actions il doit >effectuer. Ce fichier est <path>/etc/inittab</path>. ></p> > ><p> >Dans la séquence de démarrage que nous venons d'expliquer, nous avons dit que >la première action de <c>init</c> était de monter les systèmes de fichiers. La >ligne du fichier <path>/etc/inittab</path> qui provoque cela est la >suivante : ></p> > ><pre caption="La ligne d'initialisation du système dans /etc/inittab"> >si::sysinit:/sbin/rc sysinit ></pre> > ><p> >En fait, cette ligne indique à <c>init</c> qu'il doit exécuter <c>/sbin/rc >sysinit</c> pour initialiser le système. C'est le script <path>/sbin/rc</path> >qui fait vraiment le travail d'initialisation et pas <c>init</c> qui ne fait >que déléguer les tâches. ></p> > ><p> >Ensuite, <c>init</c> exécute tous les scripts vers lesquels un lien symbolique >est défini dans <path>/etc/runlevels/boot</path>. La ligne suivante provoque >cela : ></p> > ><pre caption="L'initialisation du système, suite"> >rc::bootwait:/sbin/rc boot ></pre> > ><p> >Encore une fois, le script <c>rc</c> fait le travail. Remarquez que l'option ><e>boot</e> passée au script <c>rc</c> correspond au nom du sous-répertoire qui >se trouve dans <path>/etc/runlevels</path>. ></p> > ><p> >Ensuite, <c>init</c> lit son fichier de configuration pour savoir quel ><e>runlevel</e> il doit exécuter (NdT: un «runlevel», ou niveau d'exécution, >correspond à l'état dans lequel il faut amener la machine). La ligne suivante >définit le runlevel : ></p> > ><pre caption="La ligne initdefault"> >id:3:initdefault: ></pre> > ><p> >Dans ce cas (la majorité des utilisateurs de Gentoo sont dans ce cas), le ><e>runlevel</e> a le numéro 3. Avec ce numéro, <c>init</c> trouve ce qu'il doit >exécuter pour lancer le <e>runlevel 3</e> : ></p> > ><pre caption="Les définitions des runlevels"> >l0:0:wait:/sbin/rc shutdown >l1:S1:wait:/sbin/rc single >l2:2:wait:/sbin/rc nonetwork >l3:3:wait:/sbin/rc default >l4:4:wait:/sbin/rc default >l5:5:wait:/sbin/rc default >l6:6:wait:/sbin/rc reboot ></pre> > ><p> >La ligne qui définit le niveau 3 utilise à nouveau le script <c>rc</c> pour >démarrer les services, cette fois avec le paramètre <e>default</e>. Remarquez >que, encore une fois, le paramètre correspond au nom du sous-répertoire dans ><path>/etc/runlevels</path>. ></p> > ><p> >Quand le script <c>rc</c> a terminé, <c>init</c> trouve la liste des consoles >virtuelles à activer et quelles commandes il doit utiliser dans son fichier de >configuration : ></p> > ><pre caption="La définition des consoles virtuelles"> >c1:12345:respawn:/sbin/agetty 38400 tty1 linux >c2:12345:respawn:/sbin/agetty 38400 tty2 linux >c3:12345:respawn:/sbin/agetty 38400 tty3 linux >c4:12345:respawn:/sbin/agetty 38400 tty4 linux >c5:12345:respawn:/sbin/agetty 38400 tty5 linux >c6:12345:respawn:/sbin/agetty 38400 tty6 linux ></pre> > > ></body> ></subsection> ><subsection> ><title>Qu'est-ce qu'un runlevel ?</title> ><body> > ><p> >Vous avez constaté que <c>init</c> numérote les <e>runlevels</e> qu'il doit >activer. Un <e>runlevel</e> définit un état dans lequel votre système se trouve >et contient les scripts nécessaires pour entrer dans ou quitter cet état. ></p> > ><p> >Dans Gentoo, sept <e>runlevels</e> sont définis :trois internes et quatre >définis par l'utilisateur. Les runlevels internes sont <e>sysinit</e>, ><e>shutdown</e> et <e>reboot</e> et sont utilisés respectivement pour >initialiser, éteindre et redémarrer le système. ></p> > ><p> >Les runlevels définis par l'utilisateur sont ceux qui correspondent à un >sous-répertoire dans <path>/etc/runlevels</path> : <path>boot</path>, ><path>default</path>, <path>nonetwork</path> et <path>single</path>. Le >runlevel <path>boot</path> est utilisé pour démarrer tous les services système >utilisés par les autres runlevels. Les autres runlevels se différencient par >les services qu'ils activent : <path>default</path> est utilisé en temps >normal, <path>nonetwork</path> est utilisé quand aucune connexion réseau n'est >souhaitée et <path>single</path> est utilisé quand des problèmes du système >doivent être résolus. ></p> > ></body> ></subsection> ><subsection> ><title>Utiliser les scripts d'initialisation</title> ><body> > ><p> >Les scripts que <c>rc</c> exécute sont appelés des <e>scripts >d'initialisation</e>. Chaque script peut être exécuté avec les options ><e>start</e>, <e>stop</e>, <e>restart</e>, <e>pause</e>, <e>zap</e>, ><e>status</e>, <e>ineed</e>, <e>iuse</e>, <e>needsme</e>, <e>usesme</e> ou ><e>broken</e>. ></p> > ><p> >Pour démarrer, arrêter ou relancer un service (et les autres services >nécessaires éventuels), utilisez <c>start</c>, <c>stop</c> et <c>restart</c>. ></p> > ><pre caption="Démarrer postfix"> ># <i>/etc/init.d/postfix start</i> ></pre> > ><note> >Seuls les services qui ont <e>besoin</e> du service spécifié sont arrêtés ou >redémarrés. Les autres services qui l'<e>utilisent</e> ne sont pas affectés. ></note> > ><p> >Pour stopper un service sans toucher aux services qui l'utilisent, utilisez >l'option <c>pause</c> : ></p> > ><pre caption="Stopper postfix sans toucher aux services qui l'utilisent"> ># <i>/etc/init.d/postfix pause</i> ></pre> > ><p> >Pour afficher le statut d'un service (démarré, arrêté, en pause), utilisez >l'option <c>status</c> : ></p> > ><pre caption="Afficher le statut du service postfix"> ># <i>/etc/init.d/postfix status</i> ></pre> > ><p> >Si le système vous affiche qu'un service est actif, mais que vous savez qu'il >ne l'est pas, utilisez l'option <c>zap</c> pour réinitialiser son statut à >«arrêté». ></p> > ><pre caption="Réinitialiser le statut de postfix"> ># <i>/etc/init.d/postfix zap</i> ></pre> > ><p> >Vous pouvez aussi faire afficher les services dont un service a besoin avec les >options <c>iuse</c> ou <c>ineed</c>. Avec l'option <c>ineed</c>, les services >réellement nécessaires sont affichés, mais, avec <c>iuse</c>, les services qui >peuvent être utilisés sans être indispensables sont affichés. ></p> > ><pre caption="Afficher la liste des services dont Postfix a besoin"> ># <i>/etc/init.d/postfix ineed</i> ></pre> > ><p> >De la même façon, vous pouvez faire afficher la liste des services qui ont >besoin (<c>needsme</c>) ou qui utilisent (<c>usesme</c>) un service >particulier : ></p> > ><pre caption="Afficher la liste des services qui ont besoin de Postfix"> ># <i>/etc/init.d/postfix needsme</i> ></pre> > ><p> >Enfin, vous pouvez aussi demander la liste des services requis qui >manquent : ></p> > ><pre caption="Afficher la liste des services manquants dont Postfix a besoin"> ># <i>/etc/init.d/postfix broken</i> ></pre> > ></body> ></subsection> ></section> ><section> ><title>Utiliser rc-update</title> ><subsection> ><title>Qu'est-ce que rc-update ?</title> ><body> > ><p> >Gentoo construit un arbre de dépendances pour déterminer l'ordre d'exécution >des services. Cela est loin d'être trivial et nous avons donc créé des outils >qui facilitent l'administration des runlevels et des scripts d'initialisation. ></p> > ><p> >La commande <c>rc-update</c> permet d'ajouter ou d'enlever un script d'un >runlevel. Cette commande utilise automatiquement le script <c>depscan.sh</c> >qui reconstruit l'arbre des dépendances. ></p> > ></body> ></subsection> ><subsection> ><title>Ajouter et enlever des services</title> ><body> > ><p> >Vous avez déjà ajouté des scripts d'initialisation au runlevel "default" >pendant l'installation de Gentoo. Vous ignoriez alors la signification de >"default", mais maintenant, vous savez. Le script <c>rc-update</c> a besoin >d'un second argument qui spécifie l'action à effectuer : <e>add</e>, ><e>del</e> ou <e>show</e> pour respectivement ajouter, supprimer ou afficher. ></p> > ><p> >Pour ajouter ou supprimer un service, ajoutez simplement <c>add</c> ou ><c>del</c> à la commande <c>rc-update</c> et spécifiez ensuite le nom du script >d'initialisation et le runlevel. Par exemple : ></p> > ><pre caption="Ajouter Postfix au runlevel «default»"> ># <i>rc-update del postfix default</i> ></pre> > ><p> >La commande <c>rc-update show</c> affiche la liste des scripts d'initialisation >disponibles et les runlevels dans lesquels ils ont été ajoutés : ></p> > ><pre caption="Afficher la liste des scripts d'initialisation"> ># <i>rc-update show</i> ></pre> > ></body> ></subsection> ></section> ><section> ><title>Configurer les services</title> ><subsection> ><title>Pourquoi encore configurer ?</title> ><body> > ><p> >Les scripts d'initialisation peuvent être complexes. Il vaut donc mieux éviter >que les utilisateurs ne doivent les modifier et éviter ainsi bien des >problèmes. Cependant, les services ont parfois besoin d'être configurés ou de >recevoir certaines options. ></p> > ><p> >Une autre raison pour séparer les scripts de leur configuration est de pouvoir >les mettre à jour sans modifier votre configuration. ></p> > ></body> ></subsection> ><subsection> ><title>Le répertoire /etc/conf.d</title> ><body> > ><p> >Gentoo offre un système facile pour configurer les services. Chaque script >d'initialisation qui peut être configuré a un fichier de configuration dans le >répertoire <path>/etc/conf.d</path>. Par exemple, le script d'initialisation >d'apache2 (<path>/etc/init.d/apache2</path>) a un fichier de configuration ><path>/etc/conf.d/apache2</path> qui contient les options à passer au serveur >Apache 2 quand il est lancé. ></p> > ><pre caption="Variables définies dans /etc/conf.d/apache2"> >APACHE2_OPTS="-D PHP4" ></pre> > ><p> >Un tel fichier de configuration ne contient <e>que</e> des définitions de >variables (tout comme <path>/etc/make.conf</path>), ce qui permet de configurer >facilement un service. Cela permet aussi de fournir des explications sur ces >options sous forme de commentaires. ></p> > ></body> ></subsection> ></section> ><section> ><title>Ãcrire un script d'initialisation</title> ><subsection> ><title>Dois-je faire cela ?</title> ><body> > ><p> >Non. Rédiger un tel script d'initialisation n'est généralement pas nécessaire >puisque Gentoo fournit des scripts complets pour tous les services supportés. >Cependant, si vous avez installé un service sans l'aide de Portage, vous devrez >sans doute en écrire un. ></p> > ><p> >N'utilisez pas le script fourni avec le logiciel à moins qu'il ne soit écrit >spécifiquement pour Gentoo, car les scripts d'initialisation de Gentoo ne sont >pas compatibles avec ceux des autres distributions. ></p> > ></body> ></subsection> ><subsection> ><title>Structure</title> ><body> > ><p> >La structure de base d'un script d'initialisation est décrite ci-dessous. ></p> > ><pre caption="Structure de base d'un script d'initialisation"> >#!/sbin/runscript > >depend() { > <comment>(Information sur les dépendances)</comment> >} > >start() { > <comment>(Commandes à exécuter pour démarrer le service)</comment> >} > >stop() { > <comment>(Commandes à exécuter pour arrêter le service)</comment> >} > >restart() { > <comment>(Commandes à exécuter pour redémarrer le service)</comment> >} ></pre> > ><p> >La partie <c>start()</c> est <e>indispensable</e>, les autres sont >facultatives. ></p> > ></body> ></subsection> ><subsection> ><title>Dépendances</title> ><body> > ><p> >Il existe deux types de dépendances : <c>use</c> et <c>need</c>. Comme >mentionné précédemment, la dépendance <c>need</c> est plus stricte que ><c>use</c>. Vous devez faire suivre le type de dépendance par le nom du service >dont votre service dépend, ou par une dépendance <e>virtuelle</e>. ></p> > ><p> >Une dépendance <e>virtuelle</e> est une même dépendance fournie par plusieurs >services différents. Par exemple, votre service pourrait dépendre du système de >log qui peut être fourni par plusieurs services différents (metalogd, >syslog-ng, sysklogd...) Ãtant donné que votre service ne peut pas dépendre de >tous ces services (on ne peut installer qu'un seul système de log), nous avons >défini une seule dépendance virtuelle que chacun de ces services fournit. ></p> > ><p> >Jetons un Åil aux dépendances du service postfix. ></p> > ><pre caption="Dépendances de Postfix"> >depend() { > need net > use logger dns > provide mta >} ></pre> > ><p> >Comme vous pouvez le voir, postfix : ></p> > ><ul> > <li> > a besoin de la dépendance virtuelle <c>net</c> qui est fournie par > <path>/etc/init.d/net.eth0</path>, par exemple ; > </li> > <li> > utilise un système de log (dépendance virtuelle <c>logger</c>) qui est > foruni par <path>/etc/init.d/syslog-ng</path>, par exemple ; > </li> > <li> > utilise le service (virtuel) <c>dns</c> qui est fourni par > <path>/etc/init.d/named</path>, par exemple ; > </li> > <li> > fournit le service virtuel <c>mta</c> qui indique qu'un serveur de courrier > est disponible. > </li> ></ul> > ></body> ></subsection> ><subsection> ><title>Ordonner la séquence d'exécution</title> ><body> > ><p> >Dans certains cas, vous voudrez peut-être démarrer un service avant ou après un >autre, pout autant que cet autre service soit disponible. Notez qu'il ne s'agit >plus d'une dépendance, mais simplement d'une demande de lancement de services >dans un ordre défini au sein d'un même runlevel. Pour définir une séquence >d'exécution, utilisez les mots-clefs <c>before</c> ou <c>after</c>. ></p> > ><p> >Voyez, par exemple, le service portmap : ></p> > ><pre caption="La fonction depend() du service Portmap"> >depend() { > need net > before inetd > before xinetd >} ></pre> > ><p> >Vous pouvez aussi remplacez le nom de service par une étoile ("*") pour >spécifier tous les services d'un runlevel, mais cela n'est pas recommandé. ></p> > ><pre caption="Lancer un script avant tous les autres dans un runlevel"> >depend() { > before * >} ></pre> > ></body> ></subsection> ><subsection> ><title>Fonctions standard</title> ><body> > ><p> >En plus de la fonction <c>depend()</c>, vous devez définir la fonction ><c>start()</c> qui doit contenir les commandes nécessaires pour activer le >service. Il est conseillé d'utiliser les fonctions <c>ebegin</c> et <c>eend</c> >pour afficher des messages à l'écran et ainsi informer l'utilisateur que le >service démarre. ></p> > ><pre caption="Exemple de fonction start()"> >start() { > ebegin "Gentoo démarre le_service" > start-stop-daemon --start --quiet --exec /chemin/vers/le_service > eend $? >} ></pre> > ><p> >Vous trouverez plus d'exemples de fonctions <c>start()</c> dans les scripts >d'initialisation qui se trouvent dans le répertoire <path>/etc/init.d</path>. >La commande <c>start-stop-daemon</c> est documentée sous la forme d'une page >man : ></p> > ><pre caption="Afficher l'aide de la commande start-stop-daemon"> ># <i>man start-stop-daemon</i> ></pre> > ><p> >Vous pouvez aussi définir les fonctions facultatives <c>stop()</c> et ><c>restart()</c> pour respectivement arrêter et relancer un service, mais >Gentoo est capable de s'en passer si vous avez utilisé la commande ><c>start-stop-daemon</c>. ></p> > ></body> ></subsection> ><subsection> ><title>Ajouter un option non prévue</title> ><body> > ><p> >Si vous voulez utiliser une option non prévue par nos scripts, vous devez >l'ajouter à la variable <c>opts</c> et créer un fonction qui a le même nom. Par >exemple, pour ajouter une option <c>restartdelay</c> : ></p> > ><pre caption="Ajouter une option restartdelay"> >opts="${opts} restartdelay" > >restartdelay() { > stop() > sleep 3 <comment># Temporisation de 3 secondes</comment> > start() >} ></pre> > ></body> ></subsection> ><subsection> ><title>Variables de configuration d'un service</title> ><body> > ><p> >Vous ne devez rien faire de particulier pour utiliser un fichier de >configuration dans <path>/etc/conf.d</path> : avant que votre script >d'initalisation ne soit exécuté, les variables des fichiers suivants sont >initialisées dans cet ordre : ></p> > ><ul> > <li><path>/etc/conf.d/<votre_script></path></li> > <li><path>/etc/conf.d/basic</path></li> > <li><path>/etc/rc.conf</path></li> ></ul> > ><p> >De plus, si votre script fournit une dépendance virtuelle (comme <c>net</c>), >le fichier de configuration correspondant (comme <path>/etc/conf.d/net</path>) >sera également lu. ></p> > ></body> ></subsection> ></section> ></sections>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 36917
:
22921
|
22922
|
22923
|
22924
|
22925
|
22927
|
22928
|
22936
|
22938
|
23063
|
23067
|
23070
|
23072
|
23078
|
23079
|
23117
|
23270
|
23271
|
23273
|
23391
|
23392
|
23429
|
23458
| 23459