From: Petter Reinholdtsen Date: Thu, 4 Aug 2011 10:42:04 +0000 (+0000) Subject: New post. X-Git-Url: https://pere.pagekite.me/gitweb/homepage.git/commitdiff_plain/64abb61e99a4c628d3a63ded857d7c33a9cb3069?ds=inline New post. --- diff --git a/blog/data/2011-08-04-rcS.txt b/blog/data/2011-08-04-rcS.txt new file mode 100644 index 0000000000..7d960aa2a9 --- /dev/null +++ b/blog/data/2011-08-04-rcS.txt @@ -0,0 +1,63 @@ +Title: How is booting into runlevel 1 different from single user boots? +Tags: english, debian, bootsystem +Date: 2011-08-04 12:40 + +

Wouter Verhelst have some +interesting +pcomments and opinions on my blog post on +the +need to clean up /etc/rcS.d/ in Debian and my blog post about +the +default KDE desktop in Debian. I only have time to address one +small piece of his comment now, and though it best to address the +misunderstanding he bring forward:

+ +

+Currently, a system admin has four options: [...] boot to a +single-user system (by adding 'single' to the kernel command line; +this runs rcS and rc1 scripts) +

+ +

This make me believe Wouter believe booting into single user mode +and booting into runlevel 1 is the same. I am not surprised he +believe this, because it would make sense and is a quite sensible +thing to believe. But because the boot in Debian is slightly broken, +runlevel 1 do not work properly and it isn't the same as single user +mode. I'll try to explain what is actually happing, but it is a bit +hard to explain.

+ +

Single user mode is defined like this in /etc/inittab: +"~~:S:wait:/sbin/sulogin". This means the only thing that is +executed in single user mode in sulogin. Single user mode is a boot +state "between" the runlevels, and when booting into single user mode, +only the scripts in /etc/rcS.d/ are executed before the init process +enters the single user state. When switching to runlevel 1, the state +is in fact not ending in runlevel 1, but it passes through runlevel 1 +and end up in the single user mode (see /etc/rc1.d/S03single, which +runs "init -t1 S" to switch to single user mode at the end of runlevel +1. It is confusing that the 'S' (single user) init mode is not the +mode enabled by /etc/rcS.d/ (which is more like the initial boot +mode).

+ +

This summary might make it clearer. When booting for the first +time into single user mode, the following commands are executed: +"/etc/init.d/rc S; /sbin/sulogin". When booting into +runlevel 1, the following commands are executed: "/etc/init.d/rc +S; /etc/init.d/rc 1; /sbin/sulogin". A problem show up when +trying to continue after visiting single user mode. Not all services +are started again as they should, causing the machine to end up in an +unpredicatble state. This is why Debian admins recommend rebooting +after visiting single user mode.

+ +

A similar problem with runlevel 1 is caused by the amount of +scripts executed from /etc/rcS.d/. When switching from say runlevel 2 +to runlevel 1, the services started from /etc/rcS.d/ are not properly +stopped when passing through the scripts in /etc/rc1.d/, and not +started again when switching away from runlevel 1 to the runlevels +2-5. I believe the problem is best fixed by moving all the scripts +out of /etc/rcS.d/ that are not required to get a +functioning single user mode during boot.

+ +

I have spent several years investigating the Debian boot system, +and discovered this problem a few years ago. I suspect it originates +from when sysvinit was introduced into Debian, a long time ago.