« Daemons SysV init » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
(conversion de la documentation originale de Léa par HTML::WikiConverter)
m (Lea a déplacé la page Admin-admin boot-daemons vers Daemons SysV init)
 
(8 versions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[[Category:Gestion du boot et du démarrage]]
[[Catégorie:Administration système]]
 
= Gestion des services =
= Gestion des services =


<div class="leatitre">Gestion des services</div><div class="leapar">par Philippe (superjoker@club-internet.fr), complété par Anne, Fred et Jice</div><div class="leadesc">Comment ajouter et supprimer des services (daemons, etc.) au démarrage.</div>
par [[Utilisateur:superjoker|Philippe]]
----
 
Comment ajouter et supprimer des services (daemons, etc.) au démarrage.
 
== Avertissement ==
 
Attention : cette documentation parle de la gestion des services à la mode SysVinit (init System V). Désormais, une bonne partie des distributions - en particulier Fedora, Mageia, openSuSE, Arch Linux, Red Hat ou Ubuntu - utilise [[systemd]] pour l'amorçage et la gestion des services.


== Définitions ==
== Définitions ==


'''Les daemons''' (ou démons) sont des programmes résidents chargés au démarrage. A chaque runlevel, correspond une liste de daemons à lancer  (1 à 5) ou à arrêter (6 ou 0).
'''Les daemons''' (ou démons) sont des programmes résidents chargés au démarrage. A chaque runlevel, correspond une liste de daemons à lancer  (1 à 5) ou à arrêter (6 ou 0).


D'autres programmes que des démons peuvent également être lancés dès le démarrage de la machine, avec le même mécanisme.
D'autres programmes que des démons peuvent également être lancés dès le démarrage de la machine, avec le même mécanisme.
Ligne 22 : Ligne 28 :


* lors du boot : si vous précisez un niveau sur la ligne de commande du noyau (par exemple, au prompt LILO, taper "linux 1"),
* lors du boot : si vous précisez un niveau sur la ligne de commande du noyau (par exemple, au prompt LILO, taper "linux 1"),
* dans le fichier <code>/etc/inittab</code>, où le runlevel par défaut est défini,
* dans le fichier <tt>/etc/inittab</tt>, où le runlevel par défaut est défini,
* par la commande <code>init <runlevel></code> qui permet de changer de runlevel en cours de fonctionnement.
* par la commande <tt>init <runlevel></tt> qui permet de changer de runlevel en cours de fonctionnement.


<div class="note">Remarque : Le fonctionnement des services sur une gentoo, bien qu'assez similaire, est différent.</div>
<div class="note">Remarque : Le fonctionnement des services sur une gentoo, bien qu'assez similaire, est différent.</div>
Ligne 29 : Ligne 35 :
== Fonctionnement ==
== Fonctionnement ==


Les services sont lancés par des scripts situés dans <code>/etc/init.d</code> (ou dans <code>/etc/rc.d/init.d</code>, (qui sont souvent le même fichier, l'un étant un lien vers l'autre). Chaque script contient une description ce qui permet de savoir ce que fait chaque daemon en début de script.
Les services sont lancés par des scripts situés dans <tt>/etc/init.d</tt> (ou dans <tt>/etc/rc.d/init.d</tt>, (qui sont souvent le même fichier, l'un étant un lien vers l'autre). Chaque script contient une description ce qui permet de savoir ce que fait chaque daemon en début de script.


Le répertoire <code>/etc/rc.d/</code> contient aussi des répertoires nommés <code>rcX.d</code> (avec X numéro de runlevel). Chacun de ces répertoires contient un lien vers les scripts situés dans init.d.
Le répertoire <tt>/etc/rc.d/</tt> contient aussi des répertoires nommés <tt>rcX.d</tt> (avec X numéro de runlevel). Chacun de ces répertoires contient un lien vers les scripts situés dans init.d.


'''<u>Exemple:</u>'''
'''<u>Exemple:</u>'''
Ligne 37 : Ligne 43 :
<div class="code">$ ls -l /etc/rc.d/rc5.d <br /> rwxrwxrwx 1 root root 13 Jun 16 23:23 K30usb -> /etc/rc.d/init.d/usb* <br /> lrwxrwxrwx 1 root root 16 Jun 17 00:03 S30syslog -> /etc/rc.d/init.d/syslog* <br /> lrwxrwxrwx 1 root root 18 Jun 17 00:05 S75keytable -> /etc/rc.d/init.d/keytable*</div>
<div class="code">$ ls -l /etc/rc.d/rc5.d <br /> rwxrwxrwx 1 root root 13 Jun 16 23:23 K30usb -> /etc/rc.d/init.d/usb* <br /> lrwxrwxrwx 1 root root 16 Jun 17 00:03 S30syslog -> /etc/rc.d/init.d/syslog* <br /> lrwxrwxrwx 1 root root 18 Jun 17 00:05 S75keytable -> /etc/rc.d/init.d/keytable*</div>


La 1<sup>ère</sup> lettre détermine si le daemon est activé (S comme start) dans ce niveau d'exécution (runlevel) ou arrêté (K comme kill). <br /> Les 2 chiffres permettent de trier l'ordre d'exécution des services (dans l'exemple, <code>syslog</code> est démarré avant <code>keytable</code>).
La 1<sup>ère</sup> lettre détermine si le daemon est activé (S comme start) dans ce niveau d'exécution (runlevel) ou arrêté (K comme kill). <br /> Les 2 chiffres permettent de trier l'ordre d'exécution des services (dans l'exemple, <tt>syslog</tt> est démarré avant <tt>keytable</tt>).


<div class="note">Remarque : sur une gentoo, les répertoires correspondant à un runlevel particulier sont stockés dans <code>/etc/runlevels/</code>. La gestion des runlevels par gentoo est complétement différente : il n'est pas nécessaire de se préoccuper de l'ordre de démarrage des services car chaque service précise quels sont les services qui lui sont nécessaires, le reste (dépendances...) est géré automatiquement. De plus les runlevels ont des noms plutôt que des numéros. Par default, une Gentoo arrive avec les runlevels : <code>boot</code>, <code>default</code>, <code>nonetwork</code>, <code>single</code>. </div>
<div class="note">Remarque : sur une gentoo, les répertoires correspondant à un runlevel particulier sont stockés dans <tt>/etc/runlevels/</tt>. La gestion des runlevels par gentoo est complétement différente : il n'est pas nécessaire de se préoccuper de l'ordre de démarrage des services car chaque service précise quels sont les services qui lui sont nécessaires, le reste (dépendances...) est géré automatiquement. De plus les runlevels ont des noms plutôt que des numéros. Par default, une Gentoo arrive avec les runlevels : <tt>boot</tt>, <tt>default</tt>, <tt>nonetwork</tt>, <tt>single</tt>. </div>


== Commandes utiles ==
== Commandes utiles ==


Plutôt que de modifier directement les liens, on va utiliser la commande suivante : <br /><code>/etc/init.d/nom_service {start|stop|restart|reload|status}</code> ou<br /><code>service nom_service {start|stop|restart|reload|status}</code>. À ce propos, je recommande d'utiliser "bash-completion" qui permet d'améliorer la complétion automatique de la ligne de commande, et par exemple de lister tous les services disponibles, en tapant "service" puis la touche [Tab].
Plutôt que de modifier directement les liens, on va utiliser la commande suivante : <br /><tt>/etc/init.d/nom_service {start|stop|restart|reload|status}</tt> ou<br /><tt>service nom_service {start|stop|restart|reload|status}</tt>. À ce propos, je recommande d'utiliser "bash-completion" qui permet d'améliorer la complétion automatique de la ligne de commande, et par exemple de lister tous les services disponibles, en tapant "service" puis la touche [Tab].


'''<u>Exemple:</u>'''
'''<u>Exemple:</u>'''


<div class="code">/etc/rc.d/init.d/linuxconf  start</div><div class="note">Note: les options <code>start/stop/restart</code> lancent/arrêtent/redémarrent le service spécifié pour tous les niveaux.</div><div class="note">Note (Mandrake, RedHat...) : on peut utiliser la commande <code>service</code> pour démarrer un service particulier, <div class="code">$ service nomduservice start</div>
<div class="code">/etc/rc.d/init.d/linuxconf  start</div><div class="note">Note: les options <tt>start/stop/restart</tt> lancent/arrêtent/redémarrent le service spécifié pour tous les niveaux.</div><div class="note">Note (Mandrake, RedHat...) : on peut utiliser la commande <tt>service</tt> pour démarrer un service particulier, <div class="code">$ service nomduservice start</div>


ou :
ou :
Ligne 61 : Ligne 67 :
pour Mandrake et RedHat
pour Mandrake et RedHat


La commande <code>chkconfig</code> est un peu plus puissante.
La commande <tt>chkconfig</tt> est un peu plus puissante.


Pour ajouter un daemon dans tous les niveaux de demarrage: <br /><code>/sbin/chkconfig --add le_service</code>
Pour ajouter un daemon dans tous les niveaux de demarrage: <br /><tt>/sbin/chkconfig --add le_service</tt>


'''<u>Note:</u>''' le daemon doit obligatoirement se trouver dans <code>/etc/rc.d/init.d</code> ou <code>/etc/init.d</code>.
'''<u>Note:</u>''' le daemon doit obligatoirement se trouver dans <tt>/etc/rc.d/init.d</tt> ou <tt>/etc/init.d</tt>.


Pour lister tous les daemons avec leurs status:
Pour lister tous les daemons avec leurs status:


<div class="code">/sbin/chkconfig --list <br /> atd       0:off   1:off   2:off   3:on    4:on    5:on    6:off <br /> xfs       0:on    1:on    2:on    3:on    4:on    5:on    6:on <br /> keytable  0:off   1:off   2:on    3:on    4:on    5:on    6:off <br /> gpm       0:off   1:off   2:on    3:on    4:on    5:on    6:off</div>
<div class="code">/sbin/chkconfig --list <br /> atd      0:off  1:off  2:off  3:on    4:on    5:on    6:off <br /> xfs      0:on    1:on    2:on    3:on    4:on    5:on    6:on <br /> keytable  0:off  1:off  2:on    3:on    4:on    5:on    6:off <br /> gpm      0:off  1:off  2:on    3:on    4:on    5:on    6:off</div>


Autre option: <br /><code>/sbin/chkconfig --list le_service</code><br /> pour ne lister que celui souhaité.
Autre option: <br /><tt>/sbin/chkconfig --list le_service</tt><br /> pour ne lister que celui souhaité.


Pour activer ou désactiver un service au démarrage : <br /><code>/sbin/chkconfig --level 123456 mon_service on/off</code><br /> (avec 123456 le(s) runlevel(s) pour le(s)quel(s) le service doit être ou non activé).
Pour activer ou désactiver un service au démarrage : <br /><tt>/sbin/chkconfig --level 123456 mon_service on/off</tt><br /> (avec 123456 le(s) runlevel(s) pour le(s)quel(s) le service doit être ou non activé).


Pour plus de détails, voir la man page.
Pour plus de détails, voir la man page.


C'est bien beau, mais si je dois me tapper tout ça à la mimine ?! Stop ! Linux a pensé à nous, et pour se simplifier la tache, on a plusieurs outils : Linuxconf via Panneau de configuration/gestion des services (qui stoppe ou arrête un daemon pour tous les runlevels), Runleveleditor (qui permet de choisir pour chaque runlevel les daemons à activer ou non), ksysv, etc. Fais ton choix camarade ;-)
C'est bien beau, mais si je dois me tapper tout ça à la mimine ?! Stop ! Linux a pensé à nous, et pour se simplifier la tache, on a plusieurs outils : Linuxconf via Panneau de configuration/gestion des services (qui stoppe ou arrête un daemon pour tous les runlevels), Runleveleditor (qui permet de choisir pour chaque runlevel les daemons à activer ou non), ksysv, etc. Fais ton choix camarade ;-)
=== sysv-rc-conf ===
pour (K)(X)(Ed)Ubuntu
La commande <tt>sysv-rc-conf</tt> remplit la même fonction que la commande chkconfig ci-dessus mentionnée pour les distributions basées sur ubuntu (et sauf erreur debian, à vérifier).
Pour ajouter ou enlever un daemon dans tous les niveaux de demarrage: <br /><tt>/usr/sbin/sysv-rc-conf le_service on | off</tt>
'''<u>Note:</u>''' le daemon doit obligatoirement se trouver dans <tt>/etc/rc.d/init.d</tt> ou <tt>/etc/init.d</tt>.
Pour lister tous les daemons avec leurs status:
<div class="code">/usr/sbin/sysv-rc-conf --list <br /> atd      0:off  1:off  2:off  3:on    4:on    5:on    6:off <br /> xfs      0:on    1:on    2:on    3:on    4:on    5:on    6:on <br /> keytable  0:off  1:off  2:on    3:on    4:on    5:on    6:off <br /> gpm      0:off  1:off  2:on    3:on    4:on    5:on    6:off</div>
Pour lister un daemon déterminé avec son status:
<div class="code">/usr/sbin/sysv-rc-conf --list le_service</div>
Pour activer ou désactiver un service au démarrage :
<tt>/usr/sbin/sysv-rc-conf --level 123456 mon_service on/off</tt>  (avec 123456 le(s) runlevel(s) pour le(s)quel(s) le service doit être ou non activé).
Enfin il existe un mode interactif:
<tt>/usr/sbin/sysv-rc-conf</tt> sans arguments ouvre un utilitaire graphique en mode texte listant tous les services et permettant d'éditer leur comportement dans chacun des runlevels
Pour plus de détails, voir la man page.


=== rc-update ===
=== rc-update ===
Ligne 83 : Ligne 117 :
pour Gentoo
pour Gentoo


La configuration des services passe par la commande <code>rc-update</code>. Son fonctionnement est des plus simples.
La configuration des services passe par la commande <tt>rc-update</tt>. Son fonctionnement est des plus simples.


<div class="code">$ rc-update add ''nomduservice'' ''nomdurunlevel''</div>
<div class="code">$ rc-update add ''nomduservice'' ''nomdurunlevel''</div>


Par exemple, supposons que vous ayez un script <code>speedtouch</code> qui démarre votre connexion internet, pour qu'elle démarre automatiquement, il suffit de faire :
Par exemple, supposons que vous ayez un script <tt>speedtouch</tt> qui démarre votre connexion internet, pour qu'elle démarre automatiquement, il suffit de faire :


<div class="code">$ rc-update add speedtouch default</div>
<div class="code">$ rc-update add speedtouch default</div>
Ligne 103 : Ligne 137 :
== Ajouter ses propres services ==
== Ajouter ses propres services ==


Nous allons détailler les étapes nécessaires pour configurer un nouveau service et l'ajouter à la base de <code>chkconfig</code>. Nous allons prendre l'exemple d'un service nommé '''<code>bidule</code>''', qui devra être démarré aux runlevels 3, 4 et 5.
Nous allons détailler les étapes nécessaires pour configurer un nouveau service et l'ajouter à la base de <tt>chkconfig</tt>. Nous allons prendre l'exemple d'un service nommé '''<tt>bidule</tt>''', qui devra être démarré aux runlevels 3, 4 et 5.


=== 1 - Ecrire le script de configuration du démarrage ===
=== 1 - Ecrire le script de configuration du démarrage ===


Pour écrire le script <code>/etc/rc.d/init.d/biduled</code>, on peut s'inspirer d'un script existant dans ce répertoire. Ci-dessous un exemple de ce script que nous allons détailler
Pour écrire le script <tt>/etc/rc.d/init.d/biduled</tt>, on peut s'inspirer d'un script existant dans ce répertoire. Ci-dessous un exemple de ce script que nous allons détailler


<div class="code">root@pingu# cat /etc/rc.d/init.d/biduled<br /> #!/bin/sh<br /> # '''description'''<nowiki>: exemple de script pour Léa</nowiki><br /> # '''chkconfig'''<nowiki>: 345 99 0</nowiki><br /> </div>
<div class="code">root@pingu# cat /etc/rc.d/init.d/biduled<br /> #!/bin/sh<br /> # '''description'''<nowiki>: exemple de script pour Léa</nowiki><br /> # '''chkconfig'''<nowiki>: 345 99 0</nowiki><br /> </div>


Attention la syntaxe des 2 dernières lignes est à respecter à la lettre pour que le service puisse être ajouté correctement par la commande <code>chkconfig</code>. Nous devons spécifier 2 mots clé :
Attention la syntaxe des 2 dernières lignes est à respecter à la lettre pour que le service puisse être ajouté correctement par la commande <tt>chkconfig</tt>. Nous devons spécifier 2 mots clé :


* <code>description</code> : décrire le service en quelques mots. Si votre description utilise plus d'une ligne, utiliser un "\" pour respecter la continuité.
* <tt>description</tt> : décrire le service en quelques mots. Si votre description utilise plus d'une ligne, utiliser un "\" pour respecter la continuité.
* <code>chkconfig</code> : cette ligne contient 3 informations. Ici <code>345</code> indique les runlevels auxquels sera démarré le service, <code>99</code> indique le numéro de séquence des liens S, <code></code> indique le numéro de séquence des liens K.
* <tt>chkconfig</tt> : cette ligne contient 3 informations. Ici <tt>345</tt> indique les runlevels auxquels sera démarré le service, <tt>99</tt> indique le numéro de séquence des liens S, <tt></tt> indique le numéro de séquence des liens K.


<div class="code"><nowiki>#source function library</nowiki><br /> . /etc/init.d/functions<br /> </div>
<div class="code"><nowiki>#source function library</nowiki><br /> . /etc/init.d/functions<br /> </div>


On charge ici en mémoire les fonctions définies dans le fichier <code>/etc/init.d/functions</code>. Nous allons en effet utiliser certaines d'entre elles comme <code>daemon</code>, <code>killproc</code>, <code>status</code>.
On charge ici en mémoire les fonctions définies dans le fichier <tt>/etc/init.d/functions</tt>. Nous allons en effet utiliser certaines d'entre elles comme <tt>daemon</tt>, <tt>killproc</tt>, <tt>status</tt>.


<div class="code">case $1 in<br /><br /> 'start')<br /> [ -f /var/lock/subsys/biduled ] &&<br /> exit 0<br /> echo -n "exécute bidule"<br /> daemon /usr/bin/biduled<br /> echo<br /> touch /var/lock/subsys/biduled<br /> ;;<br /> </div>
<div class="code">case $1 in<br /><br /> 'start')<br /> [ -f /var/lock/subsys/biduled ] &&<br /> exit 0<br /> echo -n "exécute bidule"<br /> daemon /usr/bin/biduled<br /> echo<br /> touch /var/lock/subsys/biduled<br /> ;;<br /> </div>


On démarre ici le traitement des arguments de gestion du service. Pour le '''démarrage''', on vérifie d'abord qu'il n'existe pas de fichier de lock, ce qui permet d'éviter de démarrer 2 fois le même service. S'il existe alors on sort du script. Dans le cas contraire, on affiche un message sur la console indiquant le démarrage de <code>bidule</code> et c'est la fonction <code>daemon</code> qui se charge de lancer le service. Enfin au moment du lancement, on crée le fichier de lock.
On démarre ici le traitement des arguments de gestion du service. Pour le '''démarrage''', on vérifie d'abord qu'il n'existe pas de fichier de lock, ce qui permet d'éviter de démarrer 2 fois le même service. S'il existe alors on sort du script. Dans le cas contraire, on affiche un message sur la console indiquant le démarrage de <tt>bidule</tt> et c'est la fonction <tt>daemon</tt> qui se charge de lancer le service. Enfin au moment du lancement, on crée le fichier de lock.


<div class="code">'stop')<br /> echo -n "arrête bidule"<br /> killproc biduled<br /> echo<br /> rm -f /var/lock/subsys/biduled<br /> ;;<br /> </div>
<div class="code">'stop')<br /> echo -n "arrête bidule"<br /> killproc biduled<br /> echo<br /> rm -f /var/lock/subsys/biduled<br /> ;;<br /> </div>


En ce qui concerne l''''arrêt''' du service, on utilise la fonction <code>killproc</code> qui récupère le numéro de processus de notre service et le tue avec la commande <code>kill</code>. On efface également le fichier de lock afin de permettre éventuellement le redémarrage du service.
En ce qui concerne l''''arrêt''' du service, on utilise la fonction <tt>killproc</tt> qui récupère le numéro de processus de notre service et le tue avec la commande <tt>kill</tt>. On efface également le fichier de lock afin de permettre éventuellement le redémarrage du service.


<div class="code">'restart')<br /> $0 stop<br /> $0 start<br /> ;;<br /> </div>
<div class="code">'restart')<br /> $0 stop<br /> $0 start<br /> ;;<br /> </div>
Ligne 134 : Ligne 168 :
<div class="code">'status')<br /> status biduled<br /> ;; </div>
<div class="code">'status')<br /> status biduled<br /> ;; </div>


Cet argument permet de vérifier si le service est lancé, au moyen de la fonction <code>status</code>.
Cet argument permet de vérifier si le service est lancé, au moyen de la fonction <tt>status</tt>.


<div class="code"><nowiki>*)</nowiki><br /> echo "Usage : biduled \<br /> {start|stop|restart|status}"<br /> exit 1<br /> ;;<br /> esac<br /> exit 0</div>
<div class="code"><nowiki>*)</nowiki><br /> echo "Usage : biduled \<br /> {start|stop|restart|status}"<br /> exit 1<br /> ;;<br /> esac<br /> exit 0</div>
Ligne 146 : Ligne 180 :
=== 2 - Ajouter le service à la base de chkconfig ===
=== 2 - Ajouter le service à la base de chkconfig ===


Le plus gros du travail est fait ! Il ne reste plus qu'à ajouter le service <code>biduled</code> à la base des services gérée par <code>chkconfig</code>. Pour ce faire, rien de plus simple :
Le plus gros du travail est fait ! Il ne reste plus qu'à ajouter le service <tt>biduled</tt> à la base des services gérée par <tt>chkconfig</tt>. Pour ce faire, rien de plus simple :


<div class="code">root@pingu# '''chkconfig --add''' biduled</div>
<div class="code">root@pingu# '''chkconfig --add''' biduled</div>
Ligne 164 : Ligne 198 :
Le principe est le même que dans la section précédente, mais les fonctions disponibles sont différentes.
Le principe est le même que dans la section précédente, mais les fonctions disponibles sont différentes.


Un script de démarrage de Gentoo doit forcément être stocké dans <code>/etc/init.d</code> et commencer par :
Un script de démarrage de Gentoo doit forcément être stocké dans <tt>/etc/init.d</tt> et commencer par :


<div class="code"><nowiki>#!/sbin/runscript</nowiki><br /> # Copyright Léa Linux 2003.<br /> # Distributed under the terms of the GNU General Public License v2</div>
<div class="code"><nowiki>#!/sbin/runscript</nowiki><br /> # Copyright Léa Linux 2003.<br /> # Distributed under the terms of the GNU General Public License v2</div>


Vous pouvez remarquer qu'il ne commence pas par <code><nowiki>#!/bin/sh</nowiki></code> comme le fait habituellement un script. En fait c'est un habillage de <code>/bin/sh</code> qui met en place tout ce qui est nécessaire aux services de démarage.
Vous pouvez remarquer qu'il ne commence pas par <tt><nowiki>#!/bin/sh</nowiki></tt> comme le fait habituellement un script. En fait c'est un habillage de <tt>/bin/sh</tt> qui met en place tout ce qui est nécessaire aux services de démarage.


Ensuite, on précise ce qui est nécessaire à notre script ainsi que ce qu'il fournit comme service (si le nom du service est différent de celui du script) :
Ensuite, on précise ce qui est nécessaire à notre script ainsi que ce qu'il fournit comme service (si le nom du service est différent de celui du script) :
Ligne 176 : Ligne 210 :
Ce qui signifie :
Ce qui signifie :


* <code>use cups</code> : si le service <code>cups</code> doit être démarré lui aussi, alors notre service est capable de l'utiliser, mais pour cela il faut que <code>cups</code> soit démaré avant le notre.
* <tt>use cups</tt> : si le service <tt>cups</tt> doit être démarré lui aussi, alors notre service est capable de l'utiliser, mais pour cela il faut que <tt>cups</tt> soit démaré avant le notre.
* <code>need net my-firewall</code> : ces deux services (<code>net</code> et <code>my-firewall</code>) sont nécessaires à notre service et ils doivent absolument être démarrés avant le nôtre.
* <tt>need net my-firewall</tt> : ces deux services (<tt>net</tt> et <tt>my-firewall</tt>) sont nécessaires à notre service et ils doivent absolument être démarrés avant le nôtre.
* <code>provide monbeauservice</code> : notre service à un nom différent de celui du script (qu'on appellera par exemple, <code>/etc/init.d/monservice</code>). Ceci n'est nécessaire que si notre service peut être utilisé par un autre.  
* <tt>provide monbeauservice</tt> : notre service à un nom différent de celui du script (qu'on appellera par exemple, <tt>/etc/init.d/monservice</tt>). Ceci n'est nécessaire que si notre service peut être utilisé par un autre.  


La fonction <code>depend()</code> est appelée en interne par <code>/sbin/runscript</code> pour déterminer l'ordre de démarrage des services ainsi que ceux qu'il faut démarrer.
La fonction <tt>depend()</tt> est appelée en interne par <tt>/sbin/runscript</tt> pour déterminer l'ordre de démarrage des services ainsi que ceux qu'il faut démarrer.


Ensuite, il nous faut écrire ce qui doit se passer quand on démarre un service.
Ensuite, il nous faut écrire ce qui doit se passer quand on démarre un service.
Ligne 188 : Ligne 222 :
Ici, nous avons utilisé trois fonctions qui simplifient la rédaction d'un script de démarrage pour Gentoo :
Ici, nous avons utilisé trois fonctions qui simplifient la rédaction d'un script de démarrage pour Gentoo :


* <code>ebegin</code> qui affiche un message sans aller à la ligne en utilisant un peu de couleur.
* <tt>ebegin</tt> qui affiche un message sans aller à la ligne en utilisant un peu de couleur.
* <code>start-stop-daemon</code> qui gére le démarrage de services (en évitant par exemple de démarrer deux fois le même, et autres astuces).
* <tt>start-stop-daemon</tt> qui gére le démarrage de services (en évitant par exemple de démarrer deux fois le même, et autres astuces).
* <code>eend</code> : qui teste la valeur de retour du programme précédent et affiche '[OK]' ou '[!!]' suivant la valeur.
* <tt>eend</tt> : qui teste la valeur de retour du programme précédent et affiche '[OK]' ou '[!!]' suivant la valeur.


L'utilisation de ces fonctions n'est absolument pas nécessaires. Mais elle est bien pratique.
L'utilisation de ces fonctions n'est absolument pas nécessaires. Mais elle est bien pratique.
Ligne 200 : Ligne 234 :
Je pense que c'est assez clair.
Je pense que c'est assez clair.


Voilà c'est tout ! Le reste est géré par le programme <code>/sbin/runscript</code>. Si vous sauvez ce script dans <code>/etc/init.d/monservice</code>, vous l'activez par :
Voilà c'est tout ! Le reste est géré par le programme <tt>/sbin/runscript</tt>. Si vous sauvez ce script dans <tt>/etc/init.d/monservice</tt>, vous l'activez par :


<div class="code"><nowiki># chmod +x /etc/init.d/monservice</nowiki><br /> # rc-update add monservice default</div>
<div class="code"><nowiki># chmod +x /etc/init.d/monservice</nowiki><br /> # rc-update add monservice default</div>
Ligne 208 : Ligne 242 :
== Faire du ménage ==
== Faire du ménage ==


Dans mon cas et à titre d'exemple (internet, pas d'imprimante, travail sous X, son) je ne garde en activité que : <code>syslog</code>, <code>xfs</code>, <code>keytable</code>.
Dans mon cas et à titre d'exemple (internet, pas d'imprimante, travail sous X, son) je ne garde en activité que : <tt>syslog</tt>, <tt>xfs</tt>, <tt>keytable</tt>.


Pour information, voici une liste (non exhaustive) de quelques daemons et de leur fonctions.
Pour information, voici une liste (non exhaustive) de quelques daemons et de leur fonctions.


<code>apmd</code><nowiki>: nécessaire uniquement pour les ordinateurs portables </nowiki><br /><code>xntpd</code><nowiki>: Network time protocol </nowiki><br /><code>portmap</code><nowiki>: nécessaire si vous utilisez un service rpc, comme NIS ou NFS </nowiki><br /><code>sound</code><nowiki>: configuration des sons (ma carte fonctionne très bien sans ??? ndlr:normal si le fichier </nowiki><code>/etc/modules.conf</code> est bien conçu) <br /><code>netfs</code><nowiki>: c'est le client </nowiki><code>nfs</code>, utilisé pour mounter des filesystems depuis un serveur <code>nfs</code><br /><code>rstatd</code> , <code>rusersd</code>, <code>rwhod</code>,  <code>rwalld</code><nowiki>: ne pas exécuter tous les services car ils fournissent trop d'informations aux utilisateurs à distance </nowiki><br /><code>bootparamd</code><nowiki>: Utilisé par les clients sans lecteur de disquette (vulnérable) </nowiki><br /><code>squid</code><nowiki>: serveur proxy </nowiki><br /><code>yppasswdd</code><nowiki>: nécessaire si vous êtes un serveur NIS (extrêmement vulnérable) </nowiki><br /><code>ypserv</code><nowiki>: nécessaire si vous êtes un serveur NIS (extrêmement vulnérable) </nowiki><br /><code>dhcpd</code><nowiki>: démarre le daemon du serveur dhcp </nowiki><br /><code>atd</code><nowiki>: utilisé pour le service at, similaire à cron, mais n'est pas nécessaire </nowiki><br /><code>pcmcia</code><nowiki>: parle de lui-même </nowiki><br /><code>snmpd</code><nowiki>: daemon SNMP, peut donner à des utilisateurs distants des informations détaillées sur votre système </nowiki><br /><code>named</code><nowiki>: serveur DNS </nowiki><br /><code>routed</code><nowiki>: RIP, n'exécutez cela que si vous en avez vraiment besoin </nowiki><br /><code>lpd</code> : services d'impression <br /><code>mars-nwe</code><nowiki>: fichier Netware et serveur d'impression </nowiki><br /><code>nfs</code><nowiki>: Utilisé pour le serveur NFS, lancez le que si vous en avez absolument besoin </nowiki><br /><code>amd</code><nowiki>: daemon AutoMount, sert à mounter les filesystems distants </nowiki><br /><code>gated</code><nowiki>: sert à lancer d'autres protocoles de routage comme OSPF </nowiki><br /><code>sendmail</code><nowiki>: Vous pourrez toujours envoyer/recevoir des emails par Netscape (ou autre) sans lui. </nowiki><br /><code>httpd</code><nowiki>: serveur web Apache </nowiki><br /><code>ypbind</code><nowiki>: nécessaire si vous êtes un client NIS </nowiki><br /><code>xfs</code><nowiki>: xfont server (indispensable si vous êtes sous X). </nowiki><br /><code>innd</code><nowiki>: serveur de news </nowiki><br /><code>arpwatch</code><nowiki>: off par défaut. Rapport d'activité de datagrammes IP via mail </nowiki><br /><code>kudzu</code><nowiki>: détection des periphériques. A réactiver à l'occasion </nowiki><br /><code>anacron</code><nowiki>: reprise de jobs de la crontab après un crash </nowiki><br /><code>crond</code><nowiki>: si vous ne savez pas ce qu'est une </nowiki>[../admin/automate.php3 crontab], désactivez-le. <br /><code>rawdevices</code><nowiki>: partitions spécifique sous ORACLE ou autre SGBD </nowiki><br /><code>random</code><nowiki>: améliore la génération aléatoire de nombres (peut être utile pour les joueurs) </nowiki><br /><code>rhnd</code><nowiki>: redhat network </nowiki><br /><code>linuxconf</code><nowiki>: j'utilise linuxconf sans ce daemon (peut être est-ce utile pour l'administration à distance ?) </nowiki><br /><code>nfslock</code><nowiki>: si vous n'êtes pas serveur NFS, désactivez-le </nowiki><br /><code>usb</code><nowiki>: parle de lui-même </nowiki><br /><code>gpm</code><nowiki>: fournit des fonctions pour le support de la souris en mode texte (utile pour midnight commander en particulier)</nowiki>
<tt>apmd</tt><nowiki>: nécessaire uniquement pour les ordinateurs portables </nowiki><br /><tt>xntpd</tt><nowiki>: Network time protocol </nowiki><br /><tt>portmap</tt><nowiki>: nécessaire si vous utilisez un service rpc, comme NIS ou NFS </nowiki><br /><tt>sound</tt><nowiki>: configuration des sons (ma carte fonctionne très bien sans ??? ndlr:normal si le fichier </nowiki><tt>/etc/modules.conf</tt> est bien conçu) <br /><tt>netfs</tt><nowiki>: c'est le client </nowiki><tt>nfs</tt>, utilisé pour mounter des filesystems depuis un serveur <tt>nfs</tt><br /><tt>rstatd</tt> , <tt>rusersd</tt>, <tt>rwhod</tt>, <tt>rwalld</tt><nowiki>: ne pas exécuter tous les services car ils fournissent trop d'informations aux utilisateurs à distance </nowiki><br /><tt>bootparamd</tt><nowiki>: Utilisé par les clients sans lecteur de disquette (vulnérable) </nowiki><br /><tt>squid</tt><nowiki>: serveur proxy </nowiki><br /><tt>yppasswdd</tt><nowiki>: nécessaire si vous êtes un serveur NIS (extrêmement vulnérable) </nowiki><br /><tt>ypserv</tt><nowiki>: nécessaire si vous êtes un serveur NIS (extrêmement vulnérable) </nowiki><br /><tt>dhcpd</tt><nowiki>: démarre le daemon du serveur dhcp </nowiki><br /><tt>atd</tt><nowiki>: utilisé pour le service at, similaire à cron, mais n'est pas nécessaire </nowiki><br /><tt>pcmcia</tt><nowiki>: parle de lui-même </nowiki><br /><tt>snmpd</tt><nowiki>: daemon SNMP, peut donner à des utilisateurs distants des informations détaillées sur votre système </nowiki><br /><tt>named</tt><nowiki>: serveur DNS </nowiki><br /><tt>routed</tt><nowiki>: RIP, n'exécutez cela que si vous en avez vraiment besoin </nowiki><br /><tt>lpd</tt> : services d'impression <br /><tt>mars-nwe</tt><nowiki>: fichier Netware et serveur d'impression </nowiki><br /><tt>nfs</tt><nowiki>: Utilisé pour le serveur NFS, lancez le que si vous en avez absolument besoin </nowiki><br /><tt>amd</tt><nowiki>: daemon AutoMount, sert à mounter les filesystems distants </nowiki><br /><tt>gated</tt><nowiki>: sert à lancer d'autres protocoles de routage comme OSPF </nowiki><br /><tt>sendmail</tt><nowiki>: Vous pourrez toujours envoyer/recevoir des emails par Netscape (ou autre) sans lui. </nowiki><br /><tt>httpd</tt><nowiki>: serveur web Apache </nowiki><br /><tt>ypbind</tt><nowiki>: nécessaire si vous êtes un client NIS </nowiki><br /><tt>xfs</tt><nowiki>: xfont server (indispensable si vous êtes sous X). </nowiki><br /><tt>innd</tt><nowiki>: serveur de news </nowiki><br /><tt>arpwatch</tt><nowiki>: off par défaut. Rapport d'activité de datagrammes IP via mail </nowiki><br /><tt>kudzu</tt><nowiki>: détection des periphériques. A réactiver à l'occasion </nowiki><br /><tt>anacron</tt><nowiki>: reprise de jobs de la crontab après un crash </nowiki><br /><tt>crond</tt><nowiki>: si vous ne savez pas ce qu'est une </nowiki>[[Admin-admin_tools-automate|crontab]], désactivez-le. <br /><tt>rawdevices</tt><nowiki>: partitions spécifique sous ORACLE ou autre SGBD </nowiki><br /><tt>random</tt><nowiki>: améliore la génération aléatoire de nombres (peut être utile pour les joueurs) </nowiki><br /><tt>rhnd</tt><nowiki>: redhat network </nowiki><br /><tt>linuxconf</tt><nowiki>: j'utilise linuxconf sans ce daemon (peut être est-ce utile pour l'administration à distance ?) </nowiki><br /><tt>nfslock</tt><nowiki>: si vous n'êtes pas serveur NFS, désactivez-le </nowiki><br /><tt>usb</tt><nowiki>: parle de lui-même </nowiki><br /><tt>gpm</tt><nowiki>: fournit des fonctions pour le support de la souris en mode texte (utile pour midnight commander en particulier)</nowiki>


Ouf, c'est fini...
Ouf, c'est fini...


<div class="merci">Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Philippe le 08/07/2001.</div>


= Copyright =
<br/>
Copyright &copy; 08/07/2001, Philippe
<br/>
{{CC-BY-NC-SA}}
'''<b>[[Admin-index|@ Retour à la rubrique Administration système]]</b>'''
<br/>
 
Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Philippe le 08/07/2001. Elle a été complétée par [[Utilisateur:Ennael|Anne]], [[Utilisateur:Fred|Fred]] et [[Utilisateur:LeaJice|Jice]].
 
{{Copy|08/07/2001|[[Utilisateur:superjoker|Philippe]]|CC-BY-SA}}

Dernière version du 3 décembre 2023 à 21:41


Gestion des services

par Philippe

Comment ajouter et supprimer des services (daemons, etc.) au démarrage.

Avertissement

Attention : cette documentation parle de la gestion des services à la mode SysVinit (init System V). Désormais, une bonne partie des distributions - en particulier Fedora, Mageia, openSuSE, Arch Linux, Red Hat ou Ubuntu - utilise systemd pour l'amorçage et la gestion des services.

Définitions

Les daemons (ou démons) sont des programmes résidents chargés au démarrage. A chaque runlevel, correspond une liste de daemons à lancer (1 à 5) ou à arrêter (6 ou 0).

D'autres programmes que des démons peuvent également être lancés dès le démarrage de la machine, avec le même mécanisme.

Les runlevels ou "niveaux d'exécution", correspondent aux services qui vont être lancés au démarrage de la machine. En général (mais toutes les distributions n'utilisent pas la même numérotation), on peut avoir les niveaux d'éxécution suivant :

  • 0 : arrête la machine.
  • 1 : mode simple utilisateur (ou single, ou encore failsafe). Ce mode est utile pour dépanner une machine plantée.
  • 3 : mode console. Les services sont lancés, mais le serveur X n'est pas activé (ainsi que les services dont il dépend).
  • 4 (Slackware) ou 5 (Mandrake, RedHat..). : mode graphique : le serveur X et les services dont ils dépend sont lancés.
  • 6 : redémarre la machine.

Le niveau d'exécution est déterminé (dans l'ordre) soit :

  • lors du boot : si vous précisez un niveau sur la ligne de commande du noyau (par exemple, au prompt LILO, taper "linux 1"),
  • dans le fichier /etc/inittab, où le runlevel par défaut est défini,
  • par la commande init <runlevel> qui permet de changer de runlevel en cours de fonctionnement.
Remarque : Le fonctionnement des services sur une gentoo, bien qu'assez similaire, est différent.

Fonctionnement

Les services sont lancés par des scripts situés dans /etc/init.d (ou dans /etc/rc.d/init.d, (qui sont souvent le même fichier, l'un étant un lien vers l'autre). Chaque script contient une description ce qui permet de savoir ce que fait chaque daemon en début de script.

Le répertoire /etc/rc.d/ contient aussi des répertoires nommés rcX.d (avec X numéro de runlevel). Chacun de ces répertoires contient un lien vers les scripts situés dans init.d.

Exemple:

$ ls -l /etc/rc.d/rc5.d
rwxrwxrwx 1 root root 13 Jun 16 23:23 K30usb -> /etc/rc.d/init.d/usb*
lrwxrwxrwx 1 root root 16 Jun 17 00:03 S30syslog -> /etc/rc.d/init.d/syslog*
lrwxrwxrwx 1 root root 18 Jun 17 00:05 S75keytable -> /etc/rc.d/init.d/keytable*

La 1ère lettre détermine si le daemon est activé (S comme start) dans ce niveau d'exécution (runlevel) ou arrêté (K comme kill).
Les 2 chiffres permettent de trier l'ordre d'exécution des services (dans l'exemple, syslog est démarré avant keytable).

Remarque : sur une gentoo, les répertoires correspondant à un runlevel particulier sont stockés dans /etc/runlevels/. La gestion des runlevels par gentoo est complétement différente : il n'est pas nécessaire de se préoccuper de l'ordre de démarrage des services car chaque service précise quels sont les services qui lui sont nécessaires, le reste (dépendances...) est géré automatiquement. De plus les runlevels ont des noms plutôt que des numéros. Par default, une Gentoo arrive avec les runlevels : boot, default, nonetwork, single.

Commandes utiles

Plutôt que de modifier directement les liens, on va utiliser la commande suivante :
/etc/init.d/nom_service {start|stop|restart|reload|status} ou
service nom_service {start|stop|restart|reload|status}. À ce propos, je recommande d'utiliser "bash-completion" qui permet d'améliorer la complétion automatique de la ligne de commande, et par exemple de lister tous les services disponibles, en tapant "service" puis la touche [Tab].

Exemple:

/etc/rc.d/init.d/linuxconf start
Note: les options start/stop/restart lancent/arrêtent/redémarrent le service spécifié pour tous les niveaux.
Note (Mandrake, RedHat...) : on peut utiliser la commande service pour démarrer un service particulier,
$ service nomduservice start

ou :

$ service nomduservice stop

pour l'arrêter.

chkconfig

pour Mandrake et RedHat

La commande chkconfig est un peu plus puissante.

Pour ajouter un daemon dans tous les niveaux de demarrage:
/sbin/chkconfig --add le_service

Note: le daemon doit obligatoirement se trouver dans /etc/rc.d/init.d ou /etc/init.d.

Pour lister tous les daemons avec leurs status:

/sbin/chkconfig --list
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
xfs 0:on 1:on 2:on 3:on 4:on 5:on 6:on
keytable 0:off 1:off 2:on 3:on 4:on 5:on 6:off
gpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Autre option:
/sbin/chkconfig --list le_service
pour ne lister que celui souhaité.

Pour activer ou désactiver un service au démarrage :
/sbin/chkconfig --level 123456 mon_service on/off
(avec 123456 le(s) runlevel(s) pour le(s)quel(s) le service doit être ou non activé).

Pour plus de détails, voir la man page.

C'est bien beau, mais si je dois me tapper tout ça à la mimine ?! Stop ! Linux a pensé à nous, et pour se simplifier la tache, on a plusieurs outils : Linuxconf via Panneau de configuration/gestion des services (qui stoppe ou arrête un daemon pour tous les runlevels), Runleveleditor (qui permet de choisir pour chaque runlevel les daemons à activer ou non), ksysv, etc. Fais ton choix camarade ;-)

sysv-rc-conf

pour (K)(X)(Ed)Ubuntu

La commande sysv-rc-conf remplit la même fonction que la commande chkconfig ci-dessus mentionnée pour les distributions basées sur ubuntu (et sauf erreur debian, à vérifier).

Pour ajouter ou enlever un daemon dans tous les niveaux de demarrage:
/usr/sbin/sysv-rc-conf le_service on | off

Note: le daemon doit obligatoirement se trouver dans /etc/rc.d/init.d ou /etc/init.d.

Pour lister tous les daemons avec leurs status:

/usr/sbin/sysv-rc-conf --list
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
xfs 0:on 1:on 2:on 3:on 4:on 5:on 6:on
keytable 0:off 1:off 2:on 3:on 4:on 5:on 6:off
gpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Pour lister un daemon déterminé avec son status:

/usr/sbin/sysv-rc-conf --list le_service

Pour activer ou désactiver un service au démarrage :

/usr/sbin/sysv-rc-conf --level 123456 mon_service on/off (avec 123456 le(s) runlevel(s) pour le(s)quel(s) le service doit être ou non activé).

Enfin il existe un mode interactif:

/usr/sbin/sysv-rc-conf sans arguments ouvre un utilitaire graphique en mode texte listant tous les services et permettant d'éditer leur comportement dans chacun des runlevels

Pour plus de détails, voir la man page.

rc-update

pour Gentoo

La configuration des services passe par la commande rc-update. Son fonctionnement est des plus simples.

$ rc-update add nomduservice nomdurunlevel

Par exemple, supposons que vous ayez un script speedtouch qui démarre votre connexion internet, pour qu'elle démarre automatiquement, il suffit de faire :

$ rc-update add speedtouch default

Pour arrêter un service c'est exactement pareil :

$ rc-update del speedtouch default

À partir de maintenant, votre speedtouch ne démarrera plus automatiquement.

Pour lister les services d'un runlevel particulier :

$ ls /etc/runlevels/nomdurunlevel

Ajouter ses propres services

Nous allons détailler les étapes nécessaires pour configurer un nouveau service et l'ajouter à la base de chkconfig. Nous allons prendre l'exemple d'un service nommé bidule, qui devra être démarré aux runlevels 3, 4 et 5.

1 - Ecrire le script de configuration du démarrage

Pour écrire le script /etc/rc.d/init.d/biduled, on peut s'inspirer d'un script existant dans ce répertoire. Ci-dessous un exemple de ce script que nous allons détailler

root@pingu# cat /etc/rc.d/init.d/biduled
#!/bin/sh
# description: exemple de script pour Léa
# chkconfig: 345 99 0

Attention la syntaxe des 2 dernières lignes est à respecter à la lettre pour que le service puisse être ajouté correctement par la commande chkconfig. Nous devons spécifier 2 mots clé :

  • description : décrire le service en quelques mots. Si votre description utilise plus d'une ligne, utiliser un "\" pour respecter la continuité.
  • chkconfig : cette ligne contient 3 informations. Ici 345 indique les runlevels auxquels sera démarré le service, 99 indique le numéro de séquence des liens S, indique le numéro de séquence des liens K.
#source function library
. /etc/init.d/functions

On charge ici en mémoire les fonctions définies dans le fichier /etc/init.d/functions. Nous allons en effet utiliser certaines d'entre elles comme daemon, killproc, status.

case $1 in

'start')
[ -f /var/lock/subsys/biduled ] &&
exit 0
echo -n "exécute bidule"
daemon /usr/bin/biduled
echo
touch /var/lock/subsys/biduled
 ;;

On démarre ici le traitement des arguments de gestion du service. Pour le démarrage, on vérifie d'abord qu'il n'existe pas de fichier de lock, ce qui permet d'éviter de démarrer 2 fois le même service. S'il existe alors on sort du script. Dans le cas contraire, on affiche un message sur la console indiquant le démarrage de bidule et c'est la fonction daemon qui se charge de lancer le service. Enfin au moment du lancement, on crée le fichier de lock.

'stop')
echo -n "arrête bidule"
killproc biduled
echo
rm -f /var/lock/subsys/biduled
 ;;

En ce qui concerne l'arrêt du service, on utilise la fonction killproc qui récupère le numéro de processus de notre service et le tue avec la commande kill. On efface également le fichier de lock afin de permettre éventuellement le redémarrage du service.

'restart')
$0 stop
$0 start
 ;;

Le redémarrage du service consiste simplement à utiliser ce même script pour l'arrêter puis le démarrer

'status')
status biduled
 ;;

Cet argument permet de vérifier si le service est lancé, au moyen de la fonction status.

*)
echo "Usage : biduled \
{start|stop|restart|status}"
exit 1
 ;;
esac
exit 0

Ce cas de figure traite le cas où l'utilisateur ne rentre pas le bon argument. On lui renvoie donc un message d'erreur lui indiquant ceux qui doivent être utilisés.

Ouf ! Nous avons terminé le script. Il ne reste plus qu'à le rendre exécutable :

root@pingu# chmod +x /etc/rc.d/init.d/biduled

2 - Ajouter le service à la base de chkconfig

Le plus gros du travail est fait ! Il ne reste plus qu'à ajouter le service biduled à la base des services gérée par chkconfig. Pour ce faire, rien de plus simple :

root@pingu# chkconfig --add biduled

Le service fait maintenant partie de la base, les liens symboliques de démarrage ont été créés automatiquement de la manière suivante :

# ll /etc/rc.d/rc?.d/*biduled lrwxrwxrwx 1 root root 17 oct 11 09:37 rc0.d/K00biduled -> /etc/rc.d/init.d/biduled
lrwxrwxrwx 1 root root 17 oct 11 09:37 rc1.d/K00biduled -> /etc/rc.d/init.d/biduled
lrwxrwxrwx 1 root root 17 oct 11 09:37 rc2.d/K00biduled -> /etc/rc.d/init.d/biduled
lrwxrwxrwx 1 root root 17 oct 11 09:37 rc3.d/S99biduled -> /etc/rc.d/init.d/biduled
lrwxrwxrwx 1 root root 17 oct 11 09:37 rc4.d/S99biduled -> /etc/rc.d/init.d/biduled
lrwxrwxrwx 1 root root 17 oct 11 09:32 rc5.d/S99biduled -> /etc/rc.d/init.d/biduled
lrwxrwxrwx 1 root root 17 oct 11 09:37 rc6.d/K00biduled -> /etc/rc.d/init.d/biduled

Si vous n'avez pas chkconfig ou désirez faire cette opération manuellement, il vous suffit de créer les liens symboliques listés ci-dessus.

Nous pouvons également vérifier de la manière suivante :

root@pingu# chkconfig --list | grep biduled
biduled 0:Arrêt 1:Arrêt 2:Arrêt 3:Marche 4:Marche 5:Marche 6:Arrêt

Ajouter ses propres services sur une Gentoo

Le principe est le même que dans la section précédente, mais les fonctions disponibles sont différentes.

Un script de démarrage de Gentoo doit forcément être stocké dans /etc/init.d et commencer par :

#!/sbin/runscript
# Copyright Léa Linux 2003.
# Distributed under the terms of the GNU General Public License v2

Vous pouvez remarquer qu'il ne commence pas par #!/bin/sh comme le fait habituellement un script. En fait c'est un habillage de /bin/sh qui met en place tout ce qui est nécessaire aux services de démarage.

Ensuite, on précise ce qui est nécessaire à notre script ainsi que ce qu'il fournit comme service (si le nom du service est différent de celui du script) :

depend() {
use cups
need net my-firewall
provide monbeauservice
}

Ce qui signifie :

  • use cups : si le service cups doit être démarré lui aussi, alors notre service est capable de l'utiliser, mais pour cela il faut que cups soit démaré avant le notre.
  • need net my-firewall : ces deux services (net et my-firewall) sont nécessaires à notre service et ils doivent absolument être démarrés avant le nôtre.
  • provide monbeauservice : notre service à un nom différent de celui du script (qu'on appellera par exemple, /etc/init.d/monservice). Ceci n'est nécessaire que si notre service peut être utilisé par un autre.

La fonction depend() est appelée en interne par /sbin/runscript pour déterminer l'ordre de démarrage des services ainsi que ceux qu'il faut démarrer.

Ensuite, il nous faut écrire ce qui doit se passer quand on démarre un service.

start() {
ebegin "Démarrage de MonService à Moi"
start-stop-daemon --start --quiet --exec /usr/bin/monservice
eend $?
}

Ici, nous avons utilisé trois fonctions qui simplifient la rédaction d'un script de démarrage pour Gentoo :

  • ebegin qui affiche un message sans aller à la ligne en utilisant un peu de couleur.
  • start-stop-daemon qui gére le démarrage de services (en évitant par exemple de démarrer deux fois le même, et autres astuces).
  • eend : qui teste la valeur de retour du programme précédent et affiche '[OK]' ou '[!!]' suivant la valeur.

L'utilisation de ces fonctions n'est absolument pas nécessaires. Mais elle est bien pratique.

Puis, nous devons écrire la fonction appelé quand on veut stopper le service :

stop() {
ebegin "J'arrête Mon Service à Moi"
start-stop-daemon --stop --quiet --exec /usr/bin/monservice
eend $?
}

Je pense que c'est assez clair.

Voilà c'est tout ! Le reste est géré par le programme /sbin/runscript. Si vous sauvez ce script dans /etc/init.d/monservice, vous l'activez par :

# chmod +x /etc/init.d/monservice
# rc-update add monservice default

La classe quoi ! Qui a dit que Gentoo était complexe ?

Faire du ménage

Dans mon cas et à titre d'exemple (internet, pas d'imprimante, travail sous X, son) je ne garde en activité que : syslog, xfs, keytable.

Pour information, voici une liste (non exhaustive) de quelques daemons et de leur fonctions.

apmd: nécessaire uniquement pour les ordinateurs portables
xntpd: Network time protocol
portmap: nécessaire si vous utilisez un service rpc, comme NIS ou NFS
sound: configuration des sons (ma carte fonctionne très bien sans ??? ndlr:normal si le fichier /etc/modules.conf est bien conçu)
netfs: c'est le client nfs, utilisé pour mounter des filesystems depuis un serveur nfs
rstatd , rusersd, rwhod, rwalld: ne pas exécuter tous les services car ils fournissent trop d'informations aux utilisateurs à distance
bootparamd: Utilisé par les clients sans lecteur de disquette (vulnérable)
squid: serveur proxy
yppasswdd: nécessaire si vous êtes un serveur NIS (extrêmement vulnérable)
ypserv: nécessaire si vous êtes un serveur NIS (extrêmement vulnérable)
dhcpd: démarre le daemon du serveur dhcp
atd: utilisé pour le service at, similaire à cron, mais n'est pas nécessaire
pcmcia: parle de lui-même
snmpd: daemon SNMP, peut donner à des utilisateurs distants des informations détaillées sur votre système
named: serveur DNS
routed: RIP, n'exécutez cela que si vous en avez vraiment besoin
lpd : services d'impression
mars-nwe: fichier Netware et serveur d'impression
nfs: Utilisé pour le serveur NFS, lancez le que si vous en avez absolument besoin
amd: daemon AutoMount, sert à mounter les filesystems distants
gated: sert à lancer d'autres protocoles de routage comme OSPF
sendmail: Vous pourrez toujours envoyer/recevoir des emails par Netscape (ou autre) sans lui.
httpd: serveur web Apache
ypbind: nécessaire si vous êtes un client NIS
xfs: xfont server (indispensable si vous êtes sous X).
innd: serveur de news
arpwatch: off par défaut. Rapport d'activité de datagrammes IP via mail
kudzu: détection des periphériques. A réactiver à l'occasion
anacron: reprise de jobs de la crontab après un crash
crond: si vous ne savez pas ce qu'est une crontab, désactivez-le.
rawdevices: partitions spécifique sous ORACLE ou autre SGBD
random: améliore la génération aléatoire de nombres (peut être utile pour les joueurs)
rhnd: redhat network
linuxconf: j'utilise linuxconf sans ce daemon (peut être est-ce utile pour l'administration à distance ?)
nfslock: si vous n'êtes pas serveur NFS, désactivez-le
usb: parle de lui-même
gpm: fournit des fonctions pour le support de la souris en mode texte (utile pour midnight commander en particulier)

Ouf, c'est fini...




@ Retour à la rubrique Administration système

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Philippe le 08/07/2001. Elle a été complétée par Anne, Fred et Jice.

Copyright

© 08/07/2001 Philippe

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike icon
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique 4.0 :
https://creativecommons.org/licenses/by-sa/4.0/