From: Daniel P. Berrange
Date: Mon, 3 Oct 2011 17:37:47 +0000 (+0100)
Subject: Allow passing of command line args to LXC container
X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=652f88714454767a9c93bbb71740b897df8a795e;p=libvirt.git
Allow passing of command line args to LXC container
When booting a virtual machine with a kernel/initrd it is possible
to pass command line arguments using the ...args...
element in the guest XML. These appear to the kernel / init process
in /proc/cmdline.
When booting a container we do not have a custom /proc/cmdline,
but we can easily set an environment variable for it. Ideally
we could pass individual arguments to the init process as a
regular set of 'char *argv[]' parameters, but that would involve
libvirt parsing the XML text. This can easily be added
later, even if we add the env variable now
* docs/drvlxc.html.in: Document env variables passed to LXC
* src/conf/domain_conf.c: Add to be parsed for
guests of type='exe'
* src/lxc/lxc_container.c: Set LIBVIRT_LXC_CMDLINE env var
---
diff --git a/docs/drvlxc.html.in b/docs/drvlxc.html.in
index 5ce218d92a..47837d1a89 100644
--- a/docs/drvlxc.html.in
+++ b/docs/drvlxc.html.in
@@ -39,6 +39,23 @@ driver. On such kernels, it may be neccessary to unmount the blkio controller.
+Environment setup for the container init
+
+
+When the container "init" process is started, it will be given several useful
+environment variables.
+
+
+
+- LIBVIRT_LXC_NAME
+- The name assigned to the container by libvirt
+- LIBVIRT_LXC_UUID
+- The UUID assigned to the container by libvirt
+- LIBVIRT_LXC_CMDLINE
+- The unparsed command line arguments specified in the container configuration
+
+
+
Example config version 1
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ab1249b704..f9007ce5a9 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -6834,6 +6834,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
goto error;
}
}
+ def->os.cmdline = virXPathString("string(./os/cmdline[1])", ctxt);
}
if (STREQ(def->os.type, "xen") ||
diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
index 787df9a3f6..69cea8e4df 100644
--- a/src/lxc/lxc_container.c
+++ b/src/lxc/lxc_container.c
@@ -116,6 +116,8 @@ static virCommandPtr lxcContainerBuildInitCmd(virDomainDefPtr vmDef)
virCommandAddEnvString(cmd, "TERM=linux");
virCommandAddEnvPair(cmd, "LIBVIRT_LXC_UUID", uuidstr);
virCommandAddEnvPair(cmd, "LIBVIRT_LXC_NAME", vmDef->name);
+ if (vmDef->os.cmdline)
+ virCommandAddEnvPair(cmd, "LIBVIRT_LXC_CMDLINE", vmDef->os.cmdline);
return cmd;
}