commit:     c709e6077c6eda3f4f7e7222298213413254ee0f
Author:     William Hubbs <w.d.hubbs <AT> gmail <DOT> com>
AuthorDate: Tue Apr 28 20:07:21 2015 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Fri May  1 14:04:07 2015 +0000
URL:        https://gitweb.gentoo.org/proj/openrc.git/commit/?id=c709e607

Add support for systemd-nspawn containers

This adds support for running OpenRC in a container created by
the systemd-nspawn utility.

This fixes #52.

X-Gentoo-Bug: 548058
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=548058

 etc/rc.conf.Linux   | 17 +++++++++--------
 sh/openrc-run.sh.in |  5 ++++-
 src/librc/librc.c   |  2 ++
 src/librc/rc.h.in   |  1 +
 4 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/etc/rc.conf.Linux b/etc/rc.conf.Linux
index 79bd971..a8ad58b 100644
--- a/etc/rc.conf.Linux
+++ b/etc/rc.conf.Linux
@@ -2,14 +2,15 @@
 # LINUX SPECIFIC OPTIONS
 
 # This is the subsystem type. Valid options on Linux:
-# ""        - nothing special
-# "lxc"     - Linux Containers
-# "openvz"  - Linux OpenVZ
-# "prefix"  - Prefix
-# "uml"     - Usermode Linux
-# "vserver" - Linux vserver
-# "xen0"    - Xen0 Domain
-# "xenU"    - XenU Domain
+# ""               - nothing special
+# "lxc"            - Linux Containers
+# "openvz"         - Linux OpenVZ
+# "prefix"         - Prefix
+# "uml"            - Usermode Linux
+# "vserver"        - Linux vserver
+# "systemd-nspawn" - Container created by the systemd-nspawn utility
+# "xen0"           - Xen0 Domain
+# "xenU"           - XenU Domain
 # If this is commented out, automatic detection will be used.
 #
 # This should be set to the value representing the environment this file is

diff --git a/sh/openrc-run.sh.in b/sh/openrc-run.sh.in
index a6d2c0b..e279f11 100644
--- a/sh/openrc-run.sh.in
+++ b/sh/openrc-run.sh.in
@@ -34,7 +34,10 @@ sourcex()
 
 sourcex "@LIBEXECDIR@/sh/functions.sh"
 sourcex "@LIBEXECDIR@/sh/rc-functions.sh"
-[ "$RC_SYS" != "PREFIX" ] && sourcex -e "@LIBEXECDIR@/sh/rc-cgroup.sh"
+case $RC_SYS in
+       PREFIX|SYSTEMD-NSPAWN) ;;
+       *) sourcex -e "@LIBEXECDIR@/sh/rc-cgroup.sh";;
+esac
 
 # Support LiveCD foo
 if sourcex -e "/sbin/livecd-functions.sh"; then

diff --git a/src/librc/librc.c b/src/librc/librc.c
index ca51aa6..03448e7 100644
--- a/src/librc/librc.c
+++ b/src/librc/librc.c
@@ -294,6 +294,8 @@ rc_sys_v1(void)
                return RC_SYS_OPENVZ; /* old test */
        else if (file_regex("/proc/1/environ", "container=lxc"))
                return RC_SYS_LXC;
+       else if (file_regex("/proc/1/environ", "container=systemd-nspawn"))
+               return RC_SYS_SYSTEMD_NSPAWN;
 #endif
 
        return NULL;

diff --git a/src/librc/rc.h.in b/src/librc/rc.h.in
index 58d8eb5..13e1b5b 100644
--- a/src/librc/rc.h.in
+++ b/src/librc/rc.h.in
@@ -332,6 +332,7 @@ bool rc_service_daemons_crashed(const char *);
 #define RC_SYS_OPENVZ  "OPENVZ"
 #define RC_SYS_LXC     "LXC"
 #define RC_SYS_PREFIX  "PREFIX"
+#define RC_SYS_SYSTEMD_NSPAWN "SYSTEMD-NSPAWN"
 #define RC_SYS_UML     "UML"
 #define RC_SYS_VSERVER "VSERVER"
 #define RC_SYS_XEN0    "XEN0"

Reply via email to