Personnaliser le démarrage de Linux |
![]() |
![]() |
|
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you
do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
Six états de marche ont été prédéfinis.
Etat de marche 0 pour réaliser un arrêt (shutdown) de la machine,
1 pour rentrer en mode single user (uniquement root de connecté),
2 en mode multiutilisateur sans NFS, 3 le mode multiutilisateur complet,
4 inutilisé, 5 mode multiutilisateur avec X lancé automatiquement,
et 6 pour rebooter la machine.
initdefaut définit l'état de marche par défaut
de la machine en fonctionnement normal, par défaut sur une RedHat
5.2 c'est 3. A noter que si vous mettiez 5, X se lancerez automatiquement
sans avoir à lancer startx.
Pour passer d'un état de marche à un autre, on tape:
init 0
Pour arrêter la machine par exemple.
A noter que pour arriver à l'état de marche 3, le système passe successivement à l'état de marche 0, 1, 2 et 3. En état à l'état de marche 3, pour s'arrêter (état de marche 0), on passe successivement à l'état de marche 3, 2, 1 et 0.
id:3:initdefault: | Etat de marche par défaut 3 | |
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit |
au démarrage c'est le script /etc/rc.d/rc.sysinit qui va être lancé au premier, il permet d'initialiser le système, il réalise les tâches suivantes (liste non exhaustive): initialisation du réseau, de la swap, vérification des disques (fsck éventuel), montage des disques, chargement des modules, .... . En fait les messages que vous voyez au boot sont générés par ce fichier. | |
l0:0:wait:/etc/rc.d/rc 0 | Au démarrage on passe d'abord à l'état de marche 0, lancement de tous les services qui sont dans /etc/rc.d/rc0.d et qui commencent par S (pour Start). Vous constaterez que ce sont des liens vers des scripts qui sont dans /etc/rc.d/init.d. Le wait signifie que tant que tous les scripts de lancement ne se sont pas achevés, on ne va pas plus loin dans le fichier. | |
l1:1:wait:/etc/rc.d/rc 1 | Passage ensuite à l'état de marche 1, lancement des services commençant par S dans le répertoire /etc/rc.d/rc1.d | |
l2:2:wait:/etc/rc.d/rc 2 | Passage ensuite à l'état de marche 2, lancement des services commençant par S dans le répertoire /etc/rc.d/rc2.d | |
l3:3:wait:/etc/rc.d/rc 3 | Passage ensuite à l'état de marche 3, lancement des services commençant par S dans le répertoire /etc/rc.d/rc3.d, comme c'est l'état de marche par défaut, on ne lit pas les 3 lignes suivantes. | |
l4:4:wait:/etc/rc.d/rc 4 | ||
l5:5:wait:/etc/rc.d/rc 5 | ||
l6:6:wait:/etc/rc.d/rc 6 | ||
# Things to run in every runlevel.
ud::once:/sbin/update |
A chaque passage à un état de mache on exécute une fois (once) la commande /sbin/update qui permet de vider les "dirty buffers", faire un man update pour plus de détails. | |
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now |
Ca c'est important, c'est ici qu'on définit que si on presse sur les touches ctrl+alt+del, on déclenche un shutdown (arrêt de la machine (-t3 dans 3 secondes, -r redémarrage après arrêt, bizarrement now c'est à dire arrêt immédiat alors qu'on a définit -t3 précédemment) | |
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now. # This does, of course, assume you have powerd installed and your # UPS connected and working correctly. pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" |
Pour ceux qui ont un onduleur, quand celui-ci envoit un signal d'alarme en cas de coupure du secteur. | |
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" |
C'est marqué dans le commentaire, annule le shutdown si le courant revient au niveau du onduleur. | |
# Run gettys in standard runlevels
1:12345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 |
Lancement de console minimaliste suivant l'état de marche (défini en début de ligne). respawn signifie que le process sera relancé si jamais il est interrompu. | |
# Run xdm in runlevel 5 x:5:respawn:/opt/kde/bin/kdm -nodaemon |
Si on passe à l'état de marche 5, lancement de KDE automatiquement. |
lrwxrwxrwx 1 root root
17 mar 27 17:58 K20rusersd -> ../init.d/rusersd
lrwxrwxrwx 1 root root
15 mar 27 17:58 K20rwhod -> ../init.d/rwhod
lrwxrwxrwx 1 root root
16 mai 1 15:30 K30mcserv -> ../init.d/mcserv
lrwxrwxrwx 1 root root
15 mar 27 17:58 K50snmpd -> ../init.d/snmpd
lrwxrwxrwx 1 root root
16 mar 27 17:58 K55routed -> ../init.d/routed
lrwxrwxrwx 1 root root
16 mar 27 17:58 K87ypbind -> ../init.d/ypbind
lrwxrwxrwx 1 root root
16 mar 27 17:58 K96pcmcia -> ../init.d/pcmcia
lrwxrwxrwx 1 root root
17 mar 27 17:58 S01kerneld -> ../init.d/kerneld
lrwxrwxrwx 1 root root
17 mar 27 17:58 S10network -> ../init.d/network
lrwxrwxrwx 1 root root
17 mar 27 17:58 S11portmap -> ../init.d/portmap
lrwxrwxrwx 1 root root
15 mar 27 17:58 S15nfsfs -> ../init.d/nfsfs
lrwxrwxrwx 1 root root
16 mar 27 17:58 S20random -> ../init.d/random
lrwxrwxrwx 1 root root
16 mar 27 17:58 S30syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root
13 mar 27 17:58 S40atd -> ../init.d/atd
lrwxrwxrwx 1 root root
15 mar 27 17:58 S40crond -> ../init.d/crond
lrwxrwxrwx 1 root root
14 mar 27 17:58 S50inet -> ../init.d/inet
lrwxrwxrwx 1 root root
15 mar 27 17:58 S55named -> ../init.d/named
lrwxrwxrwx 1 root root
13 mar 27 17:58 S60lpd -> ../init.d/lpd
lrwxrwxrwx 1 root root
13 mar 27 17:58 S60nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root
18 mar 27 17:58 S75keytable -> ../init.d/keytable
lrwxrwxrwx 1 root root
18 mar 27 17:58 S80sendmail -> ../init.d/sendmail
lrwxrwxrwx 1 root root
13 mar 27 17:58 S85gpm -> ../init.d/gpm
lrwxrwxrwx 1 root root
15 mar 27 17:58 S85httpd -> ../init.d/httpd
lrwxrwxrwx 1 root root
15 mar 27 17:58 S85sound -> ../init.d/sound
lrwxrwxrwx 1 root root
13 mar 27 17:58 S91smb -> ../init.d/smb
lrwxrwxrwx 1 root root
14 mar 27 17:58 S95innd -> ../init.d/innd
lrwxrwxrwx 1 root root
19 mar 27 17:58 S99linuxconf -> ../init.d/linuxconf
lrwxrwxrwx 1 root root
11 mar 27 17:15 S99local -> ../rc.local
Le système va d'abord lancer repérer tous les noms de liens qui commencent par S (start) ce sont les services à lancer, puis les chiffres croissants, il va donc repérer en premier S01kerneld qui pointe vers le script /etc/rc.d/init.d/kerneld qui a cette tête là:
#! /bin/sh
# chkconfig: 12345 01 98
# description: The kerneld daemon automatically loads kernel modules
\
#
as the system needs them. This deamon should always \
#
be kept running, or many features of the system will \
#
stop working.
# processname: kerneld
# config: /etc/conf.modules autoreload
# Source function library.
. /etc/rc.d/init.d/functions
# See how we were called.
case "$1" in
start)
[ -f /var/lock/subsys/kerneld ] && exit
0
echo -n "Starting kerneld services: "
daemon kerneld
echo
touch /var/lock/subsys/kerneld
;;
stop)
echo -n "Stopping kerneld services: "
killproc kerneld
echo
rm -f /var/lock/subsys/kerneld
;;
status)
status kerneld
;;
restart)
$0 stop
$0 start
;;
reload)
killall -HUP kerneld
;;
*)
echo "Usage: kerneld {start|stop|status|restart}"
exit 1
esac
exit 0
Ce script va être appelé avec comme argument start
ce qui aura pour effet ici de lancer le service kerneld, à noter
que le message "Starting kerneld services:" devrait apparaître au
boot (ou du moins dans la console) lors du passage à l'état
de marche 3.
Après S01kerneld c'est S10network qui va être
appelé et ainsi de suite.
#! /bin/sh | ||
Source function library.
. /etc/rc.d/init.d/functions |
Script qui définit les fonctions killproc, daemon, status, ... | |
# See how we were called.
case "$1" in |
Vérification de l'argument (start pour lancer votre service et stop pour l'arrêter) | |
start)
[ -f /var/lock/subsys/totod ] && exit 0 |
Si le service est lancé on crée un fichier lock, on vérifie ici si le fichier existe pour ne pas lancer le service une deuxième fois. | |
echo -n "Starting totod services: "
daemon totod |
Lancement de votre appli (daemon est défini dans /etc/rc.d/init.d/functions) | |
echo
touch /var/lock/subsys/totod |
Création du fichier lock | |
;; | ||
stop)
echo -n "Stopping totod services: " |
En cas d'arrêt du service, on affiche le message | |
killproc totod | Arrêt de totod (killproc défini dans /etc/rc.d/init.d/functions) | |
echo
rm -f /var/lock/subsys/totod ;; |
Suppression du fichier lock | |
status)
status totod ;; |
Pour avoir l'état de l'appli (status défini dans functions) | |
restart)
$0 stop $0 start ;; |
Pour relancer l'appli, à noter que $0 correspond au nom du script | |
reload)
killall -HUP totod ;; |
Pour recharger l'appli (voir killall dans functions) | |
*)
echo "Usage: totod {start|stop|status|restart}" exit 1 esac |
Si on appelle le script sans faire appel aux arguments start, stop, status ou restart, rappel de ces arguments. | |
exit 0 |
On admet maintenant que vous vouliez lancer votre service uniquement
à partir de l'état de marche 3 et l'arrêter quand vous
voulez passer à l'état de marche 2 et inférieur.
Pour cela vous allez créer un lien dans /etc/rc.d/rc3.d :
ln -s /etc/rc.d/init.d/totod /etc/rc.d/rc3.d/S900totod
Votre service sera donc celui qui sera lancé en dernier au passage à l'état de marche 2 à 3. Ensuite tapez:
ln -s /etc/rc.d/init.d/totod /etc/rc.d/rc2.d/K900totod
Votre service sera donc celui qui sera arrêté en dernier au passage de l'état de marche 3 à 2. Rappelons que quand le lien commence par S le script est appelé avec l'argument start et par K avec l'argument stop.
![]() |