Sur la plupart des distributions Linux traditionnelles, le boot en single user mode se fait en passant l'argument S
ou single
à la ligne kernel
de grub ou de lilo. Or, si vous avez essayé, vous aurez pu constater que ça ne marche pas sous Gentoo.
La réponse se trouve dans le fichier /etc/inittab
, contenant la définition du runlevel 1
:
l1:S1:wait:/sbin/rc single
Pour comparaison, sur une ancienne RedHat 6.2 (Zoot), on trouve:
l1:1:wait:/etc/rc.d/rc 1
Vous noterez le "S
" supplémentaire que l'on trouve sur la Gentoo. Ce deuxième champ décrit le(s) runlevel(s) spécifique(s) pour lesquels la ligne doit être exécutée. Normalement, la machine devrait donc se lancer en single si 1
ou S
ou single
étaient passés en argument; l'expérience prouve que ce n'est pas le cas; avec 1
, le boot single est correct, mais pas avec les deux autres.
Ce problème provient d'un bug de sysvinit, qui est le premier programme lancé par le noyau. Le correctif est inclus ci-dessous, et un bug Gentoo a été ouvert à ce sujet en juillet 2005. En attendant que le correctif soit intégré de base dans la gentoo, utilisez 1
sur votre ligne kernel afin de passer en single user...
[diff] --- sysvinit-2.86/src/init.c.single 2005-12-21 12:21:04.000000000 -0500 +++ sysvinit-2.86/src/init.c 2005-12-21 12:21:40.000000000 -0500 @@ -1153,7 +1153,7 @@ * See if we have a single user entry. */ for(old = newFamily; old; old = old->next) - if (strpbrk(old->rlevel, "S")) break; + if (strpbrk(old->rlevel, "S") && !ISPOWER(old->action)) break; if (old == NULL) snprintf(buf, sizeof(buf), "~~:S:wait:%s -l\n", SHELL); else