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