From 95ee39ab1c9ce313725098999cf1d05b42f9c126 Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Wed, 4 Nov 2009 19:21:24 +0000 Subject: [PATCH] Add support for Linux Containers, fixes #202. Patch by bug reporter. --- init.d/fsck.in | 2 +- init.d/hwclock.in | 2 +- init.d/localmount.in | 2 +- init.d/modules.in | 2 +- init.d/mount-ro.in | 2 +- init.d/numlock.in | 2 +- init.d/procfs.in | 2 +- init.d/root.in | 2 +- init.d/swap.in | 2 +- init.d/swclock.in | 2 +- man/runscript.8 | 4 +++- src/librc/librc.c | 2 ++ src/librc/rc.h.in | 1 + 13 files changed, 16 insertions(+), 11 deletions(-) diff --git a/init.d/fsck.in b/init.d/fsck.in index 68cdf14e..279e25cb 100644 --- a/init.d/fsck.in +++ b/init.d/fsck.in @@ -9,7 +9,7 @@ _IFS=" depend() { use dev clock modules - keyword -jail -openvz -prefix -timeout -vserver + keyword -jail -openvz -prefix -timeout -vserver -lxc } _abort() { diff --git a/init.d/hwclock.in b/init.d/hwclock.in index ea9fa348..e99900f6 100644 --- a/init.d/hwclock.in +++ b/init.d/hwclock.in @@ -28,7 +28,7 @@ depend() else before * fi - keyword -openvz -prefix -uml -vserver -xenu + keyword -openvz -prefix -uml -vserver -xenu -lxc } setupopts() diff --git a/init.d/localmount.in b/init.d/localmount.in index 89a4801c..a4d11165 100644 --- a/init.d/localmount.in +++ b/init.d/localmount.in @@ -8,7 +8,7 @@ depend() { need fsck use lvm modules mtab - keyword -jail -openvz -prefix -vserver + keyword -jail -openvz -prefix -vserver -lxc } start() diff --git a/init.d/modules.in b/init.d/modules.in index c2270ffd..7c0b993a 100644 --- a/init.d/modules.in +++ b/init.d/modules.in @@ -7,7 +7,7 @@ description="Loads a user defined list of kernel modules." depend() { use isapnp - keyword -openvz -prefix -vserver + keyword -openvz -prefix -vserver -lxc } start() diff --git a/init.d/mount-ro.in b/init.d/mount-ro.in index 45e0fab4..69032d74 100644 --- a/init.d/mount-ro.in +++ b/init.d/mount-ro.in @@ -7,7 +7,7 @@ description="Re-mount filesytems read-only for a clean reboot." depend() { need killprocs savecache - keyword -prefix -openvz -vserver + keyword -prefix -openvz -vserver -lxc } start() diff --git a/init.d/numlock.in b/init.d/numlock.in index 9d88fa08..7bf3dc71 100644 --- a/init.d/numlock.in +++ b/init.d/numlock.in @@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}} depend() { need localmount - keyword -openvz -prefix -vserver + keyword -openvz -prefix -vserver -lxc } _setleds() diff --git a/init.d/procfs.in b/init.d/procfs.in index 712adc23..2b73bd79 100644 --- a/init.d/procfs.in +++ b/init.d/procfs.in @@ -8,7 +8,7 @@ depend() { use modules devfs need localmount - keyword -openvz -prefix -vserver + keyword -openvz -prefix -vserver -lxc } start() diff --git a/init.d/root.in b/init.d/root.in index 6dc37c86..06890601 100644 --- a/init.d/root.in +++ b/init.d/root.in @@ -7,7 +7,7 @@ description="Mount the root fs read/write" depend() { need fsck - keyword -jail -openvz -prefix -vserver + keyword -jail -openvz -prefix -vserver -lxc } start() diff --git a/init.d/swap.in b/init.d/swap.in index 564531ba..d99b9b83 100644 --- a/init.d/swap.in +++ b/init.d/swap.in @@ -5,7 +5,7 @@ depend() { need localmount - keyword -jail -openvz -prefix -vserver + keyword -jail -openvz -prefix -vserver -lxc } start() diff --git a/init.d/swclock.in b/init.d/swclock.in index 2d091fed..3357fc76 100644 --- a/init.d/swclock.in +++ b/init.d/swclock.in @@ -8,7 +8,7 @@ depend() { before * provide clock - keyword -openvz -prefix -uml -vserver -xenu + keyword -openvz -prefix -uml -vserver -xenu -lxc } # swclock is an OpenRC built in diff --git a/man/runscript.8 b/man/runscript.8 index a3e1f2ec..22de8258 100644 --- a/man/runscript.8 +++ b/man/runscript.8 @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd July 1, 2009 +.Dd November 4, 2009 .Dt RUNSCRIPT 8 SMM .Os OpenRC .Sh NAME @@ -143,6 +143,8 @@ When in a jail, exclude this service from any dependencies. The service can still be run directly. .It Dv -openvz Same as -jail, but for OpenVZ systems. +.It Dv -lxc +Same as -jail, but for Linux Resource Containers (LXC). .It Dv -shutdown Don't stop this service when shutting the system down. This normally quite safe as remaining daemons will be sent a SIGTERM just diff --git a/src/librc/librc.c b/src/librc/librc.c index 96e3195d..34bd9e15 100644 --- a/src/librc/librc.c +++ b/src/librc/librc.c @@ -233,6 +233,8 @@ rc_sys(void) return RC_SYS_VSERVER; else if (exists("/proc/vz/veinfo") && !exists("/proc/vz/version")) return RC_SYS_OPENVZ; + else if (file_regex("/proc/self/cgroup", ":/.+$")) + return RC_SYS_LXC; else if (file_regex("/proc/self/status", "envID:[[:space:]]*[1-9]")) return RC_SYS_OPENVZ; /* old test */ diff --git a/src/librc/rc.h.in b/src/librc/rc.h.in index 373f1d1e..4b7977eb 100644 --- a/src/librc/rc.h.in +++ b/src/librc/rc.h.in @@ -268,6 +268,7 @@ bool rc_service_daemons_crashed(const char *); * Some services cannot work in these systems, or we do something else. */ #define RC_SYS_JAIL "JAIL" #define RC_SYS_OPENVZ "OPENVZ" +#define RC_SYS_LXC "LXC" #define RC_SYS_PREFIX "PREFIX" #define RC_SYS_UML "UML" #define RC_SYS_VSERVER "VSERVER"