[pve-devel] [PATCH v3 pve-container] update inittab instead of replacing it
Wolfgang Bumiller
w.bumiller at proxmox.com
Thu Oct 15 10:46:45 CEST 2015
---
Changes since v2:
- power lines are now removed and only the p0 line added
- getty lines aren't preserved in their original form anymore
- getty/power lines are now always moved to the bottom, makes it easier
src/PVE/LXC/Setup/Debian.pm | 82 ++++++++++----------------------
src/test/test-debian-005/etc/inittab.exp | 22 ++++++++-
src/test/test-debian-006/etc/inittab.exp | 22 ++++++++-
src/test/test-debian-010/etc/inittab.exp | 22 ++++++++-
4 files changed, 88 insertions(+), 60 deletions(-)
diff --git a/src/PVE/LXC/Setup/Debian.pm b/src/PVE/LXC/Setup/Debian.pm
index 1b2a277..5c1828c 100644
--- a/src/PVE/LXC/Setup/Debian.pm
+++ b/src/PVE/LXC/Setup/Debian.pm
@@ -33,70 +33,38 @@ sub new {
return bless $self, $class;
}
-my $default_inittab = <<__EOD__;
-
-# The default runlevel.
-id:2:initdefault:
-
-# Boot-time system configuration/initialization script.
-# This is run first except when booting in emergency (-b) mode.
-si::sysinit:/etc/init.d/rcS
-
-# /etc/init.d executes the S and K scripts upon change
-# of runlevel.
-#
-# Runlevel 0 is halt.
-# Runlevel 1 is single-user.
-# Runlevels 2-5 are multi-user.
-# Runlevel 6 is reboot.
-
-l0:0:wait:/etc/init.d/rc 0
-l1:1:wait:/etc/init.d/rc 1
-l2:2:wait:/etc/init.d/rc 2
-l3:3:wait:/etc/init.d/rc 3
-l4:4:wait:/etc/init.d/rc 4
-l5:5:wait:/etc/init.d/rc 5
-l6:6:wait:/etc/init.d/rc 6
-# Normally not reached, but fallthrough in case of emergency.
-z6:6:respawn:/sbin/sulogin
-
-# What to do when CTRL-ALT-DEL is pressed.
-ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
-
-# What to do when the power fails/returns.
-p0::powerfail:/sbin/init 0
-
-# /sbin/getty invocations for the runlevels.
-#
-# The "id" field MUST be the same as the last
-# characters of the device (after "tty").
-#
-# Format:
-# <id>:<runlevels>:<action>:<process>
-#
-__EOD__
-
sub setup_init {
my ($self, $conf) = @_;
my $filename = "/etc/inittab";
+ return if !$self->ct_file_exists($filename);
- if ($self->ct_file_exists($filename)) {
- my $inittab = $default_inittab;
-
- my $ttycount = PVE::LXC::get_tty_count($conf);
- for (my $i = 1; $i <= $ttycount; $i++) {
- next if $i == 7; # reserved for X11
- my $levels = ($i == 1) ? '2345' : '23';
- if ($self->{version} < 7) {
- $inittab .= "$i:$levels:respawn:/sbin/getty -L 38400 tty$i\n";
- } else {
- $inittab .= "$i:$levels:respawn:/sbin/getty --noclear 38400 tty$i\n";
- }
+ my $ttycount = PVE::LXC::get_tty_count($conf);
+ my $inittab = $self->ct_file_get_contents($filename);
+
+ my @lines = grep {
+ # remove getty lines
+ !/^\s*\d+:\d+:[^:]*:.*getty/ &&
+ # remove power lines
+ !/^\s*p[fno0]:/
+ } split(/\n/, $inittab);
+
+ $inittab = join("\n", @lines) . "\n";
+
+ $inittab .= "p0::powerfail:/sbin/init 0\n";
+
+ my $version = $self->{version};
+ my $levels = '2345';
+ for my $id (1..$ttycount) {
+ if ($version < 7) {
+ $inittab .= "$id:$levels:respawn:/sbin/getty -L 38400 tty$id\n";
+ } else {
+ $inittab .= "$id:$levels:respawn:/sbin/getty --noclear 38400 tty$id\n";
}
-
- $self->ct_file_set_contents($filename, $inittab);
+ $levels = '23';
}
+
+ $self->ct_file_set_contents($filename, $inittab);
}
sub setup_network {
diff --git a/src/test/test-debian-005/etc/inittab.exp b/src/test/test-debian-005/etc/inittab.exp
index 0cbb029..7d881db 100644
--- a/src/test/test-debian-005/etc/inittab.exp
+++ b/src/test/test-debian-005/etc/inittab.exp
@@ -1,3 +1,5 @@
+# /etc/inittab: init(8) configuration.
+# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
# The default runlevel.
id:2:initdefault:
@@ -6,6 +8,9 @@ id:2:initdefault:
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
+# What to do in single-user mode.
+~~:S:wait:/sbin/sulogin
+
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
@@ -27,8 +32,10 @@ z6:6:respawn:/sbin/sulogin
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
+# Action on special keypress (ALT-UpArrow).
+#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
+
# What to do when the power fails/returns.
-p0::powerfail:/sbin/init 0
# /sbin/getty invocations for the runlevels.
#
@@ -38,6 +45,19 @@ p0::powerfail:/sbin/init 0
# Format:
# <id>:<runlevels>:<action>:<process>
#
+# Note that on most Debian systems tty7 is used by the X Window System,
+# so if you want to add more getty's go ahead but skip tty7 if you run X.
+#
+
+# Example how to put a getty on a serial line (for a terminal)
+#
+#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
+#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
+
+# Example how to put a getty on a modem line.
+#
+#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3
+p0::powerfail:/sbin/init 0
1:2345:respawn:/sbin/getty --noclear 38400 tty1
2:23:respawn:/sbin/getty --noclear 38400 tty2
3:23:respawn:/sbin/getty --noclear 38400 tty3
diff --git a/src/test/test-debian-006/etc/inittab.exp b/src/test/test-debian-006/etc/inittab.exp
index 9190693..937a7e0 100644
--- a/src/test/test-debian-006/etc/inittab.exp
+++ b/src/test/test-debian-006/etc/inittab.exp
@@ -1,3 +1,5 @@
+# /etc/inittab: init(8) configuration.
+# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
# The default runlevel.
id:2:initdefault:
@@ -6,6 +8,9 @@ id:2:initdefault:
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
+# What to do in single-user mode.
+~~:S:wait:/sbin/sulogin
+
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
@@ -27,8 +32,10 @@ z6:6:respawn:/sbin/sulogin
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
+# Action on special keypress (ALT-UpArrow).
+#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
+
# What to do when the power fails/returns.
-p0::powerfail:/sbin/init 0
# /sbin/getty invocations for the runlevels.
#
@@ -38,3 +45,16 @@ p0::powerfail:/sbin/init 0
# Format:
# <id>:<runlevels>:<action>:<process>
#
+# Note that on most Debian systems tty7 is used by the X Window System,
+# so if you want to add more getty's go ahead but skip tty7 if you run X.
+#
+
+# Example how to put a getty on a serial line (for a terminal)
+#
+#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
+#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
+
+# Example how to put a getty on a modem line.
+#
+#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3
+p0::powerfail:/sbin/init 0
diff --git a/src/test/test-debian-010/etc/inittab.exp b/src/test/test-debian-010/etc/inittab.exp
index a8b8918..c0e7e5a 100644
--- a/src/test/test-debian-010/etc/inittab.exp
+++ b/src/test/test-debian-010/etc/inittab.exp
@@ -1,3 +1,5 @@
+# /etc/inittab: init(8) configuration.
+# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
# The default runlevel.
id:2:initdefault:
@@ -6,6 +8,9 @@ id:2:initdefault:
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
+# What to do in single-user mode.
+~~:S:wait:/sbin/sulogin
+
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
@@ -27,8 +32,10 @@ z6:6:respawn:/sbin/sulogin
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
+# Action on special keypress (ALT-UpArrow).
+#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
+
# What to do when the power fails/returns.
-p0::powerfail:/sbin/init 0
# /sbin/getty invocations for the runlevels.
#
@@ -38,6 +45,19 @@ p0::powerfail:/sbin/init 0
# Format:
# <id>:<runlevels>:<action>:<process>
#
+# Note that on most Debian systems tty7 is used by the X Window System,
+# so if you want to add more getty's go ahead but skip tty7 if you run X.
+#
+
+# Example how to put a getty on a serial line (for a terminal)
+#
+#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
+#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
+
+# Example how to put a getty on a modem line.
+#
+#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3
+p0::powerfail:/sbin/init 0
1:2345:respawn:/sbin/getty -L 38400 tty1
2:23:respawn:/sbin/getty -L 38400 tty2
3:23:respawn:/sbin/getty -L 38400 tty3
--
2.1.4
More information about the pve-devel
mailing list