]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
lxc-debian: support systemd as PID 1
authorAntonio Terceiro <terceiro@debian.org>
Mon, 24 Nov 2014 01:51:06 +0000 (23:51 -0200)
committerStéphane Graber <stgraber@ubuntu.com>
Tue, 2 Dec 2014 16:51:55 +0000 (11:51 -0500)
Containers with systemd need a somewhat special setup, which I borrowed
and adapted from lxc-fedora. These changes are required so that Debian 8
(jessie) containers work properly, and are a no-op for previous Debian
versions.

Signed-off-by: Antonio Terceiro <terceiro@debian.org>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
templates/lxc-debian.in

index 493fbe5e87192216360aa006c01e05a8ea099ea0..97b6e650604271544ad565f32f711bbd33498639 100644 (file)
@@ -172,6 +172,38 @@ ${prefix} $SECURITY_MIRROR ${release}/updates main contrib non-free
 EOF
 }
 
+configure_debian_systemd()
+{
+    path=$1
+    rootfs=$2
+    init="$(chroot ${rootfs} dpkg-query --search /sbin/init | cut -d : -f 1)"
+    if [ "$init" != "systemd-sysv" ]; then
+       # systemd is not PID 1
+       return
+    fi
+
+    echo 'lxc.autodev = 1' >> "$path/config"
+    echo 'lxc.kmsg = 0' >> "$path/config"
+
+    # This function has been copied and adapted from lxc-fedora
+    rm -f ${rootfs}/etc/systemd/system/default.target
+    touch ${rootfs}/etc/fstab
+    chroot ${rootfs} ln -s /dev/null /etc/systemd/system/udev.service
+    chroot ${rootfs} ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
+    # Make systemd honor SIGPWR
+    chroot ${rootfs} ln -s /lib/systemd/system/halt.target /etc/systemd/system/sigpwr.target
+    sed -e 's/^ConditionPathExists=/# ConditionPathExists=/' \
+        -e 's/After=dev-%i.device/After=/' \
+        < ${rootfs}/lib/systemd/system/getty\@.service \
+        > ${rootfs}/etc/systemd/system/getty\@.service
+    # Setup getty service on the 4 ttys we are going to allow in the
+    # default config.  Number should match lxc.tty
+    ( cd ${rootfs}/etc/systemd/system/getty.target.wants
+        for i in 1 2 3 4 ; do ln -sf ../getty\@.service getty@tty${i}.service; done )
+
+    return 0
+}
+
 cleanup()
 {
     rm -rf $cache/partial-$release-$arch
@@ -507,6 +539,8 @@ if [ $? -ne 0 ]; then
     exit 1
 fi
 
+configure_debian_systemd $path $rootfs
+
 post_process ${rootfs} ${release} ${arch} ${hostarch}
 
 if [ ! -z $clean ]; then