[lxc-devel] [PATCH] doc: Try to clear some confusion about lxc.conf
Stéphane Graber
stgraber at ubuntu.com
Thu Jan 23 01:03:25 UTC 2014
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
configure.ac | 2 +
doc/Makefile.am | 5 +-
doc/lxc.conf | 36 -
doc/lxc.conf.sgml.in | 1475 ++------------------------------------
doc/lxc.container.conf | 36 +
doc/lxc.container.conf.sgml.in | 1543 ++++++++++++++++++++++++++++++++++++++++
doc/lxc.system.conf | 20 +
doc/lxc.system.conf.sgml.in | 206 ++++++
8 files changed, 1854 insertions(+), 1469 deletions(-)
delete mode 100644 doc/lxc.conf
create mode 100644 doc/lxc.container.conf
create mode 100644 doc/lxc.container.conf.sgml.in
create mode 100644 doc/lxc.system.conf
create mode 100644 doc/lxc.system.conf.sgml.in
diff --git a/configure.ac b/configure.ac
index 73facf3..736625f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -608,6 +608,8 @@ AC_CONFIG_FILES([
doc/lxc-wait.sgml
doc/lxc.conf.sgml
+ doc/lxc.container.conf.sgml
+ doc/lxc.system.conf.sgml
doc/lxc-usernet.sgml
doc/lxc.sgml
doc/common_options.sgml
diff --git a/doc/Makefile.am b/doc/Makefile.am
index e848717..9ddf53f 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -10,7 +10,8 @@ SUBDIRS += api
endif
EXTRA_DIST = \
- lxc.conf \
+ lxc.container.conf \
+ lxc.system.conf \
FAQ.txt
if ENABLE_DOCBOOK
@@ -37,6 +38,8 @@ man_MANS = \
lxc-wait.1 \
\
lxc.conf.5 \
+ lxc.container.conf.5 \
+ lxc.system.conf.5 \
lxc-usernet.5 \
\
lxc.7
diff --git a/doc/lxc.conf b/doc/lxc.conf
deleted file mode 100644
index 4e2491b..0000000
--- a/doc/lxc.conf
+++ /dev/null
@@ -1,36 +0,0 @@
-# the fstab mount file
-lxc.mount = ./fstab
-
-# the hostname to be set into the container
-lxc.utsname = virtnode
-
-# The network has several of kind of configuration:
-#
-# * veth : the network will use the veth virtual device, the specified
-# link must be a bridge
-# * macvlan : the network will use the macvlan device, the specified link
-# should be an existing interface, usually it is eth0
-# * phys : the network will use a physical network device, the specified
-# link should be an existing interface
-lxc.network.type = macvlan
-
-# specify the flags to be used for the network, actually only <up> is allowed
-# which mean the network should be set up when created. If the network is set
-# up, the loopback is automatically set up too.
-lxc.network.flags = up
-
-# specify the physical network device which will communicate with the
-# outside world
-lxc.network.link = eth0
-
-# NIC ethernet mac address
-lxc.network.hwaddr = 4a:49:43:49:79:bd
-
-# specify the ipv4 address of the container. Several lines are allowed and
-# will mean several addresses will be assigned to the interface
-lxc.network.ipv4 = 1.2.3.5/24
-
-# specify the ipv6 address of the container. Several lines are allowed and
-# will mean several addresses will be assigned to the interface
-lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3596
-
diff --git a/doc/lxc.conf.sgml.in b/doc/lxc.conf.sgml.in
index 897738f..19f11c2 100644
--- a/doc/lxc.conf.sgml.in
+++ b/doc/lxc.conf.sgml.in
@@ -2,10 +2,10 @@
lxc: linux Container library
-(C) Copyright IBM Corp. 2007, 2008
+(C) Copyright Canonical Ltd. 2014
Authors:
-Daniel Lezcano <daniel.lezcano at free.fr>
+Stéphane Graber <stgraber at ubuntu.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -41,7 +41,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
<refname>lxc.conf</refname>
<refpurpose>
- linux container configuration file
+ Configuration files for LXC.
</refpurpose>
</refnamediv>
@@ -49,1480 +49,91 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
<title>Description</title>
<para>
- The linux containers (<command>lxc</command>) are always created
- before being used. This creation defines a set of system
- resources to be virtualized / isolated when a process is using
- the container. By default, the pids, sysv ipc and mount points
- are virtualized and isolated. The other system resources are
- shared across containers, until they are explicitly defined in
- the configuration file. For example, if there is no network
- configuration, the network will be shared between the creator of
- the container and the container itself, but if the network is
- specified, a new network stack is created for the container and
- the container can no longer use the network of its ancestor.
+ LXC configuration is split in two parts. Container configuration
+ and system configuration.
</para>
- <para>
- The configuration file defines the different system resources to
- be assigned for the container. At present, the utsname, the
- network, the mount points, the root file system, the user namespace,
- and the control groups are supported.
- </para>
-
- <para>
- Each option in the configuration file has the form <command>key
- = value</command> fitting in one line. The '#' character means
- the line is a comment.
- </para>
-
- <refsect2>
- <title>Configuration</title>
- <para>
- In order to ease administration of multiple related containers, it
- is possible to have a container configuration file cause another
- file to be loaded. For instance, network configuration
- can be defined in one common file which is included by multiple
- containers. Then, if the containers are moved to another host,
- only one file may need to be updated.
- </para>
-
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.include</option>
- </term>
- <listitem>
- <para>
- Specify the file to be included. The included file must be
- in the same valid lxc configuration file format.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Architecture</title>
- <para>
- Allows one to set the architecture for the container. For example,
- set a 32bits architecture for a container running 32bits
- binaries on a 64bits host. This fixes the container scripts
- which rely on the architecture to do some work like
- downloading the packages.
- </para>
-
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.arch</option>
- </term>
- <listitem>
- <para>
- Specify the architecture for the container.
- </para>
- <para>
- Valid options are
- <option>x86</option>,
- <option>i686</option>,
- <option>x86_64</option>,
- <option>amd64</option>
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- </refsect2>
-
- <refsect2>
- <title>Hostname</title>
- <para>
- The utsname section defines the hostname to be set for the
- container. That means the container can set its own hostname
- without changing the one from the system. That makes the
- hostname private for the container.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.utsname</option>
- </term>
- <listitem>
- <para>
- specify the hostname for the container
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Halt signal</title>
- <para>
- Allows one to specify signal name or number, sent by lxc-stop to the
- container's init process to cleanly shutdown the container. Different
- init systems could use different signals to perform clean shutdown
- sequence. This option allows the signal to be specified in kill(1)
- fashion, e.g. SIGPWR, SIGRTMIN+14, SIGRTMAX-10 or plain number. The
- default signal is SIGPWR.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.haltsignal</option>
- </term>
- <listitem>
- <para>
- specify the signal used to halt the container
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Stop signal</title>
- <para>
- Allows one to specify signal name or number, sent by lxc-stop to forcibly
- shutdown the container. This option allows signal to be specified in
- kill(1) fashion, e.g. SIGKILL, SIGRTMIN+14, SIGRTMAX-10 or plain number.
- The default signal is SIGKILL.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.stopsignal</option>
- </term>
- <listitem>
- <para>
- specify the signal used to stop the container
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Network</title>
- <para>
- The network section defines how the network is virtualized in
- the container. The network virtualization acts at layer
- two. In order to use the network virtualization, parameters
- must be specified to define the network interfaces of the
- container. Several virtual interfaces can be assigned and used
- in a container even if the system has only one physical
- network interface.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.network.type</option>
- </term>
- <listitem>
- <para>
- specify what kind of network virtualization to be used
- for the container. Each time
- a <option>lxc.network.type</option> field is found a new
- round of network configuration begins. In this way,
- several network virtualization types can be specified
- for the same container, as well as assigning several
- network interfaces for one container. The different
- virtualization types can be:
- </para>
-
- <para>
- <option>none:</option> will cause the container to share
- the host's network namespace. This means the host
- network devices are usable in the container. It also
- means that if both the container and host have upstart as
- init, 'halt' in a container (for instance) will shut down the
- host.
- </para>
-
- <para>
- <option>empty:</option> will create only the loopback
- interface.
- </para>
-
- <para>
- <option>veth:</option> a peer network device is created
- with one side assigned to the container and the other
- side is attached to a bridge specified by
- the <option>lxc.network.link</option>. If the bridge is
- not specified, then the veth pair device will be created
- but not attached to any bridge. Otherwise, the bridge
- has to be setup before on the
- system, <command>lxc</command> won't handle any
- configuration outside of the container. By
- default <command>lxc</command> choose a name for the
- network device belonging to the outside of the
- container, this name is handled
- by <command>lxc</command>, but if you wish to handle
- this name yourself, you can tell <command>lxc</command>
- to set a specific name with
- the <option>lxc.network.veth.pair</option> option.
- </para>
-
- <para>
- <option>vlan:</option> a vlan interface is linked with
- the interface specified by
- the <option>lxc.network.link</option> and assigned to
- the container. The vlan identifier is specified with the
- option <option>lxc.network.vlan.id</option>.
- </para>
-
- <para>
- <option>macvlan:</option> a macvlan interface is linked
- with the interface specified by
- the <option>lxc.network.link</option> and assigned to
- the container.
- <option>lxc.network.macvlan.mode</option> specifies the
- mode the macvlan will use to communicate between
- different macvlan on the same upper device. The accepted
- modes are <option>private</option>, the device never
- communicates with any other device on the same upper_dev (default),
- <option>vepa</option>, the new Virtual Ethernet Port
- Aggregator (VEPA) mode, it assumes that the adjacent
- bridge returns all frames where both source and
- destination are local to the macvlan port, i.e. the
- bridge is set up as a reflective relay. Broadcast
- frames coming in from the upper_dev get flooded to all
- macvlan interfaces in VEPA mode, local frames are not
- delivered locally, or <option>bridge</option>, it
- provides the behavior of a simple bridge between
- different macvlan interfaces on the same port. Frames
- from one interface to another one get delivered directly
- and are not sent out externally. Broadcast frames get
- flooded to all other bridge ports and to the external
- interface, but when they come back from a reflective
- relay, we don't deliver them again. Since we know all
- the MAC addresses, the macvlan bridge mode does not
- require learning or STP like the bridge module does.
- </para>
-
- <para>
- <option>phys:</option> an already existing interface
- specified by the <option>lxc.network.link</option> is
- assigned to the container.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.network.flags</option>
- </term>
- <listitem>
- <para>
- specify an action to do for the
- network.
- </para>
-
- <para><option>up:</option> activates the interface.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.network.link</option>
- </term>
- <listitem>
- <para>
- specify the interface to be used for real network
- traffic.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.network.mtu</option>
- </term>
- <listitem>
- <para>
- specify the maximum transfer unit for this interface.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.network.name</option>
- </term>
- <listitem>
- <para>
- the interface name is dynamically allocated, but if
- another name is needed because the configuration files
- being used by the container use a generic name,
- eg. eth0, this option will rename the interface in the
- container.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.network.hwaddr</option>
- </term>
- <listitem>
- <para>
- the interface mac address is dynamically allocated by
- default to the virtual interface, but in some cases,
- this is needed to resolve a mac address conflict or to
- always have the same link-local ipv6 address.
- Any "x" in address will be replaced by random value,
- this allows setting hwaddr templates.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.network.ipv4</option>
- </term>
- <listitem>
- <para>
- specify the ipv4 address to assign to the virtualized
- interface. Several lines specify several ipv4 addresses.
- The address is in format x.y.z.t/m,
- eg. 192.168.1.123/24. The broadcast address should be
- specified on the same line, right after the ipv4
- address.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.network.ipv4.gateway</option>
- </term>
- <listitem>
- <para>
- specify the ipv4 address to use as the gateway inside the
- container. The address is in format x.y.z.t, eg.
- 192.168.1.123.
-
- Can also have the special value <option>auto</option>,
- which means to take the primary address from the bridge
- interface (as specified by the
- <option>lxc.network.link</option> option) and use that as
- the gateway. <option>auto</option> is only available when
- using the <option>veth</option> and
- <option>macvlan</option> network types.
- </para>
- </listitem>
- </varlistentry>
-
-
- <varlistentry>
- <term>
- <option>lxc.network.ipv6</option>
- </term>
- <listitem>
- <para>
- specify the ipv6 address to assign to the virtualized
- interface. Several lines specify several ipv6 addresses.
- The address is in format x::y/m,
- eg. 2003:db8:1:0:214:1234:fe0b:3596/64
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.network.ipv6.gateway</option>
- </term>
- <listitem>
- <para>
- specify the ipv6 address to use as the gateway inside the
- container. The address is in format x::y,
- eg. 2003:db8:1:0::1
-
- Can also have the special value <option>auto</option>,
- which means to take the primary address from the bridge
- interface (as specified by the
- <option>lxc.network.link</option> option) and use that as
- the gateway. <option>auto</option> is only available when
- using the <option>veth</option> and
- <option>macvlan</option> network types.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.network.script.up</option>
- </term>
- <listitem>
- <para>
- add a configuration option to specify a script to be
- executed after creating and configuring the network used
- from the host side. The following arguments are passed
- to the script: container name and config section name
- (net) Additional arguments depend on the config section
- employing a script hook; the following are used by the
- network system: execution context (up), network type
- (empty/veth/macvlan/phys), Depending on the network
- type, other arguments may be passed:
- veth/macvlan/phys. And finally (host-sided) device name.
- </para>
- <para>
- Standard output from the script is logged at debug level.
- Standard error is not logged, but can be captured by the
- hook redirecting its standard error to standard output.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.network.script.down</option>
- </term>
- <listitem>
- <para>
- add a configuration option to specify a script to be
- executed before destroying the network used from the
- host side. The following arguments are passed to the
- script: container name and config section name (net)
- Additional arguments depend on the config section
- employing a script hook; the following are used by the
- network system: execution context (down), network type
- (empty/veth/macvlan/phys), Depending on the network
- type, other arguments may be passed:
- veth/macvlan/phys. And finally (host-sided) device name.
- </para>
- <para>
- Standard output from the script is logged at debug level.
- Standard error is not logged, but can be captured by the
- hook redirecting its standard error to standard output.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>New pseudo tty instance (devpts)</title>
- <para>
- For stricter isolation the container can have its own private
- instance of the pseudo tty.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.pts</option>
- </term>
- <listitem>
- <para>
- If set, the container will have a new pseudo tty
- instance, making this private to it. The value specifies
- the maximum number of pseudo ttys allowed for a pts
- instance (this limitation is not implemented yet).
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Container system console</title>
- <para>
- If the container is configured with a root filesystem and the
- inittab file is setup to use the console, you may want to specify
- where the output of this console goes.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.console</option>
- </term>
- <listitem>
- <para>
- Specify a path to a file where the console output will
- be written. The keyword 'none' will simply disable the
- console. This is dangerous once if have a rootfs with a
- console device file where the application can write, the
- messages will fall in the host.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Console through the ttys</title>
- <para>
- This option is useful if the container is configured with a root
- filesystem and the inittab file is setup to launch a getty on the
- ttys. The option specifies the number of ttys to be available for
- the container. The number of gettys in the inittab file of the
- container should not be greater than the number of ttys specified
- in this option, otherwise the excess getty sessions will die and
- respawn indefinitely giving annoying messages on the console or in
- <filename>/var/log/messages</filename>.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.tty</option>
- </term>
- <listitem>
- <para>
- Specify the number of tty to make available to the
- container.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Console devices location</title>
- <para>
- LXC consoles are provided through Unix98 PTYs created on the
- host and bind-mounted over the expected devices in the container.
- By default, they are bind-mounted over <filename>/dev/console</filename>
- and <filename>/dev/ttyN</filename>. This can prevent package upgrades
- in the guest. Therefore you can specify a directory location (under
- <filename>/dev</filename> under which LXC will create the files and
- bind-mount over them. These will then be symbolically linked to
- <filename>/dev/console</filename> and <filename>/dev/ttyN</filename>.
- A package upgrade can then succeed as it is able to remove and replace
- the symbolic links.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.devttydir</option>
- </term>
- <listitem>
- <para>
- Specify a directory under <filename>/dev</filename>
- under which to create the container console devices.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
<refsect2>
- <title>/dev directory</title>
+ <title>Container configuration</title>
<para>
- By default, lxc does nothing with the container's
- <filename>/dev</filename>. This allows the container's
- <filename>/dev</filename> to be set up as needed in the container
- rootfs. If lxc.autodev is set to 1, then after mounting the container's
- rootfs LXC will mount a fresh tmpfs under <filename>/dev</filename>
- (limited to 100k) and fill in a minimal set of initial devices.
- This is generally required when starting a container containing
- a "systemd" based "init" but may be optional at other times. Additional
- devices in the containers /dev directory may be created through the
- use of the <option>lxc.hook.autodev</option> hook.
+ The container configuration is held in the
+ <filename>config</filename> stored in the container's
+ directory.
</para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.autodev</option>
- </term>
- <listitem>
- <para>
- Set this to 1 to have LXC mount and populate a minimal
- <filename>/dev</filename> when starting the container.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Enable kmsg symlink</title>
- <para>
- Enable creating /dev/kmsg as symlink to /dev/console. This defaults to 1.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.kmsg</option>
- </term>
- <listitem>
- <para>
- Set this to 0 to disable /dev/kmsg symlinking.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Mount points</title>
- <para>
- The mount points section specifies the different places to be
- mounted. These mount points will be private to the container
- and won't be visible by the processes running outside of the
- container. This is useful to mount /etc, /var or /home for
- examples.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.mount</option>
- </term>
- <listitem>
- <para>
- specify a file location in
- the <filename>fstab</filename> format, containing the
- mount information. If the rootfs is an image file or a
- block device and the fstab is used to mount a point
- somewhere in this rootfs, the path of the rootfs mount
- point should be prefixed with the
- <filename>@LXCROOTFSMOUNT@</filename> default path or
- the value of <option>lxc.rootfs.mount</option> if
- specified. Note that when mounting a filesystem from an
- image file or block device the third field (fs_vfstype)
- cannot be auto as with
- <citerefentry>
- <refentrytitle>mount</refentrytitle>
- <manvolnum>8</manvolnum>
- </citerefentry>
- but must be explicitly specified.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.mount.entry</option>
- </term>
- <listitem>
- <para>
- specify a mount point corresponding to a line in the
- fstab format.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.mount.auto</option>
- </term>
- <listitem>
- <para>
- specify which standard kernel file systems should be
- automatically mounted. This may dramatically simplify
- the configuration. The file systems are:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <option>proc:mixed</option> (or <option>proc</option>):
- mount <filename>/proc</filename> as read-write, but
- remount <filename>/proc/sys</filename> and
- <filename>/proc/sysrq-trigger</filename> read-only
- for security / container isolation purposes.
- </para>
- </listitem>
- <listitem>
- <para>
- <option>proc:rw</option>: mount
- <filename>/proc</filename> as read-write
- </para>
- </listitem>
- <listitem>
- <para>
- <option>sys:ro</option> (or <option>sys</option>):
- mount <filename>/sys</filename> as read-only
- for security / container isolation purposes.
- </para>
- </listitem>
- <listitem>
- <para>
- <option>sys:rw</option>: mount
- <filename>/sys</filename> as read-write
- </para>
- </listitem>
- <listitem>
- <para>
- <option>cgroup:mixed</option> (or
- <option>cgroup</option>):
- mount a tmpfs to <filename>/sys/fs/cgroup</filename>,
- create directories for all hierarchies to which
- the container is added, create subdirectories
- there with the name of the cgroup, and bind-mount
- the container's own cgroup into that directory.
- The container will be able to write to its own
- cgroup directory, but not the parents, since they
- will be remounted read-only
- </para>
- </listitem>
- <listitem>
- <para>
- <option>cgroup:ro</option>: similar to
- <option>cgroup:mixed</option>, but everything will
- be mounted read-only.
- </para>
- </listitem>
- <listitem>
- <para>
- <option>cgroup:rw</option>: similar to
- <option>cgroup:mixed</option>, but everything will
- be mounted read-write. Note that the paths leading
- up to the container's own cgroup will be writable,
- but will not be a cgroup filesystem but just part
- of the tmpfs of <filename>/sys/fs/cgroup</filename>
- </para>
- </listitem>
- <listitem>
- <para>
- <option>cgroup-full:mixed</option> (or
- <option>cgroup-full</option>):
- mount a tmpfs to <filename>/sys/fs/cgroup</filename>,
- create directories for all hierarchies to which
- the container is added, bind-mount the hierarchies
- from the host to the container and make everything
- read-only except the container's own cgroup. Note
- that compared to <option>cgroup</option>, where
- all paths leading up to the container's own cgroup
- are just simple directories in the underlying
- tmpfs, here
- <filename>/sys/fs/cgroup/$hierarchy</filename>
- will contain the host's full cgroup hierarchy,
- albeit read-only outside the container's own cgroup.
- This may leak quite a bit of information into the
- container.
- </para>
- </listitem>
- <listitem>
- <para>
- <option>cgroup-full:ro</option>: similar to
- <option>cgroup-full:mixed</option>, but everything
- will be mounted read-only.
- </para>
- </listitem>
- <listitem>
- <para>
- <option>cgroup-full:rw</option>: similar to
- <option>cgroup-full:mixed</option>, but everything
- will be mounted read-write. Note that in this case,
- the container may escape its own cgroup. (Note also
- that if the container has CAP_SYS_ADMIN support
- and can mount the cgroup filesystem itself, it may
- do so anyway.)
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Examples:
- </para>
- <programlisting>
- lxc.mount.auto = proc sys cgroup
- lxc.mount.auto = proc:rw sys:rw cgroup-full:rw
- </programlisting>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Root file system</title>
- <para>
- The root file system of the container can be different than that
- of the host system.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.rootfs</option>
- </term>
- <listitem>
- <para>
- specify the root file system for the container. It can
- be an image file, a directory or a block device. If not
- specified, the container shares its root file system
- with the host.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.rootfs.mount</option>
- </term>
- <listitem>
- <para>
- where to recursively bind <option>lxc.rootfs</option>
- before pivoting. This is to ensure success of the
- <citerefentry>
- <refentrytitle><command>pivot_root</command></refentrytitle>
- <manvolnum>8</manvolnum>
- </citerefentry>
- syscall. Any directory suffices, the default should
- generally work.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>lxc.pivotdir</option>
- </term>
- <listitem>
- <para>
- where to pivot the original root file system under
- <option>lxc.rootfs</option>, specified relatively to
- that. The default is <filename>mnt</filename>.
- It is created if necessary, and also removed after
- unmounting everything from it during container setup.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Control group</title>
- <para>
- The control group section contains the configuration for the
- different subsystem. <command>lxc</command> does not check the
- correctness of the subsystem name. This has the disadvantage
- of not detecting configuration errors until the container is
- started, but has the advantage of permitting any future
- subsystem.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.cgroup.[subsystem name]</option>
- </term>
- <listitem>
- <para>
- specify the control group value to be set. The
- subsystem name is the literal name of the control group
- subsystem. The permitted names and the syntax of their
- values is not dictated by LXC, instead it depends on the
- features of the Linux kernel running at the time the
- container is started,
- eg. <option>lxc.cgroup.cpuset.cpus</option>
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Capabilities</title>
- <para>
- The capabilities can be dropped in the container if this one
- is run as root.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.cap.drop</option>
- </term>
- <listitem>
- <para>
- Specify the capability to be dropped in the container. A
- single line defining several capabilities with a space
- separation is allowed. The format is the lower case of
- the capability definition without the "CAP_" prefix,
- eg. CAP_SYS_MODULE should be specified as
- sys_module. See
- <citerefentry>
- <refentrytitle><command>capabilities</command></refentrytitle>
- <manvolnum>7</manvolnum>
- </citerefentry>,
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>lxc.cap.keep</option>
- </term>
- <listitem>
- <para>
- Specify the capability to be kept in the container. All other
- capabilities will be dropped.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Apparmor profile</title>
- <para>
- If lxc was compiled and installed with apparmor support, and the host
- system has apparmor enabled, then the apparmor profile under which the
- container should be run can be specified in the container
- configuration. The default is <command>lxc-container-default</command>.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.aa_profile</option>
- </term>
- <listitem>
- <para>
- Specify the apparmor profile under which the container should
- be run. To specify that the container should be unconfined,
- use
- </para>
- <programlisting>lxc.aa_profile = unconfined</programlisting>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
- <refsect2>
- <title>SELinux context</title>
<para>
- If lxc was compiled and installed with SELinux support, and the host
- system has SELinux enabled, then the SELinux context under which the
- container should be run can be specified in the container
- configuration. The default is <command>unconfined_t</command>,
- which means that lxc will not attempt to change contexts.
+ A basic configuration is generated at container creation time
+ with the default's recommended for the chosen template as well
+ as extra default keys coming from the
+ <filename>default.conf</filename> file.
</para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.se_context</option>
- </term>
- <listitem>
- <para>
- Specify the SELinux context under which the container should
- be run or <command>unconfined_t</command>. For example
- </para>
- <programlisting>lxc.se_context = unconfined_u:unconfined_r:lxc_t:s0-s0:c0.c1023</programlisting>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
- <refsect2>
- <title>Seccomp configuration</title>
<para>
- A container can be started with a reduced set of available
- system calls by loading a seccomp profile at startup. The
- seccomp configuration file should begin with a version number
- (which currently must be 1) on the first line, a policy type
- (which must be 'whitelist') on the second line, followed by a
- list of allowed system call numbers, one per line.
+ That <filename>default.conf</filename> file is either located
+ at <filename>@LXC_DEFAULT_CONFIG@</filename> or for
+ unprivileged containers at
+ <filename>~/.config/lxc/default.conf</filename>.
</para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.seccomp</option>
- </term>
- <listitem>
- <para>
- Specify a file containing the seccomp configuration to
- load before the container starts.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
- <refsect2>
- <title>UID mappings</title>
<para>
- A container can be started in a private user namespace with
- user and group id mappings. For instance, you can map userid
- 0 in the container to userid 200000 on the host. The root
- user in the container will be privileged in the container,
- but unprivileged on the host. Normally a system container
- will want a range of ids, so you would map, for instance,
- user and group ids 0 through 20,000 in the container to the
- ids 200,000 through 220,000.
+ Details about the syntax of this file can be found in:
+ <citerefentry>
+ <refentrytitle><command>lxc.container.conf</command></refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>
</para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.id_map</option>
- </term>
- <listitem>
- <para>
- Four values must be provided. First a character, either
- 'u', or 'g', to specify whether user or group ids are
- being mapped. Next is the first userid as seen in the
- user namespace of the container. Next is the userid as
- seen on the host. Finally, a range indicating the number
- of consecutive ids to map.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
</refsect2>
<refsect2>
- <title>Container hooks</title>
- <para>
- Container hooks are programs or scripts which can be executed
- at various times in a container's lifetime.
- </para>
- <para>
- When a container hook is executed, information is passed both
- as command line arguments and through environment variables.
- The arguments are:
- <itemizedlist>
- <listitem><para> Container name. </para></listitem>
- <listitem><para> Section (always 'lxc'). </para></listitem>
- <listitem><para> The hook type (i.e. 'clone' or 'pre-mount'). </para></listitem>
- <listitem><para> Additional arguments In the
- case of the clone hook, any extra arguments passed to
- lxc-clone will appear as further arguments to the hook. </para></listitem>
- </itemizedlist>
- The following environment variables are set:
- <itemizedlist>
- <listitem><para> LXC_NAME: is the container's name. </para></listitem>
- <listitem><para> LXC_ROOTFS_MOUNT: the path to the mounted root filesystem. </para></listitem>
- <listitem><para> LXC_CONFIG_FILE: the path to the container configuration file. </para></listitem>
- <listitem><para> LXC_SRC_NAME: in the case of the clone hook, this is the original container's name. </para></listitem>
- <listitem><para> LXC_ROOTFS_PATH: this is the lxc.rootfs entry for the container. Note this is likely not where the mounted rootfs is to be found, use LXC_ROOTFS_MOUNT for that. </para></listitem>
- </itemizedlist>
- </para>
+ <title>System configuration</title>
<para>
- Standard output from the hooks is logged at debug level.
- Standard error is not logged, but can be captured by the
- hook redirecting its standard error to standard output.
+ The system configuration is located at
+ <filename>@LXC_GLOBAL_CONF@</filename> or
+ <filename>~/.config/lxc/lxc.conf</filename> for unprivileged
+ containers.
</para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.hook.pre-start</option>
- </term>
- <listitem>
- <para>
- A hook to be run in the host's namespace before the
- container ttys, consoles, or mounts are up.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.hook.pre-mount</option>
- </term>
- <listitem>
- <para>
- A hook to be run in the container's fs namespace but before
- the rootfs has been set up. This allows for manipulation
- of the rootfs, i.e. to mount an encrypted filesystem. Mounts
- done in this hook will not be reflected on the host (apart from
- mounts propagation), so they will be automatically cleaned up
- when the container shuts down.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.hook.mount</option>
- </term>
- <listitem>
- <para>
- A hook to be run in the container's namespace after
- mounting has been done, but before the pivot_root.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.hook.autodev</option>
- </term>
- <listitem>
- <para>
- A hook to be run in the container's namespace after
- mounting has been done and after any mount hooks have
- run, but before the pivot_root, if
- <option>lxc.autodev</option> == 1.
- The purpose of this hook is to assist in populating the
- /dev directory of the container when using the autodev
- option for systemd based containers. The container's /dev
- directory is relative to the
- ${<option>LXC_ROOTFS_MOUNT</option>} environment
- variable available when the hook is run.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.hook.start</option>
- </term>
- <listitem>
- <para>
- A hook to be run in the container's namespace immediately
- before executing the container's init. This requires the
- program to be available in the container.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.hook.post-stop</option>
- </term>
- <listitem>
- <para>
- A hook to be run in the host's namespace after the
- container has been shut down.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.hook.clone</option>
- </term>
- <listitem>
- <para>
- A hook to be run when the container is cloned to a new one.
- See <citerefentry><refentrytitle><command>lxc-clone</command></refentrytitle>
- <manvolnum>1</manvolnum></citerefentry> for more information.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
- <refsect2>
- <title>Container hooks Environment Variables</title>
<para>
- A number of environment variables are made available to the startup
- hooks to provide configuration information and assist in the
- functioning of the hooks. Not all variables are valid in all
- contexts. In particular, all paths are relative to the host system
- and, as such, not valid during the <option>lxc.hook.start</option> hook.
+ This configuration file is used to set values such as default
+ lookup paths and storage backend settings for LXC.
</para>
- <variablelist>
- <varlistentry>
- <term>
- <option>LXC_NAME</option>
- </term>
- <listitem>
- <para>
- The LXC name of the container. Useful for logging messages
- in common log environments. [<option>-n</option>]
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>LXC_CONFIG_FILE</option>
- </term>
- <listitem>
- <para>
- Host relative path to the container configuration file. This
- gives the container to reference the original, top level,
- configuration file for the container in order to locate any
- additional configuration information not otherwise made
- available. [<option>-f</option>]
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>LXC_CONSOLE</option>
- </term>
- <listitem>
- <para>
- The path to the console output of the container if not NULL.
- [<option>-c</option>] [<option>lxc.console</option>]
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>LXC_CONSOLE_LOGPATH</option>
- </term>
- <listitem>
- <para>
- The path to the console log output of the container if not NULL.
- [<option>-L</option>]
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>LXC_ROOTFS_MOUNT</option>
- </term>
- <listitem>
- <para>
- The mount location to which the container is initially bound.
- This will be the host relative path to the container rootfs
- for the container instance being started and is where changes
- should be made for that instance.
- [<option>lxc.rootfs.mount</option>]
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- <variablelist>
- <varlistentry>
- <term>
- <option>LXC_ROOTFS_PATH</option>
- </term>
- <listitem>
- <para>
- The host relative path to the container root which has been
- mounted to the rootfs.mount location.
- [<option>lxc.rootfs</option>]
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- </refsect2>
- <refsect2>
- <title>Logging</title>
- <para>
- Logging can be configured on a per-container basis. By default,
- depending upon how the lxc package was compiled, container startup
- is logged only at the ERROR level, and logged to a file named after
- the container (with '.log' appended) either under the container path,
- or under @LOGPATH at .
- </para>
- <para>
- Both the default log level and the log file can be specified in the
- container configuration file, overriding the default behavior. Note
- that the configuration file entries can in turn be overridden by the
- command line options to <command>lxc-start</command>.
- </para>
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.loglevel</option>
- </term>
- <listitem>
- <para>
- The level at which to log. The log level is an integer in
- the range of 0..8 inclusive, where a lower number means more
- verbose debugging. In particular 0 = trace, 1 = debug, 2 =
- info, 3 = notice, 4 = warn, 5 = error, 6 = critical, 7 =
- alert, and 8 = fatal. If unspecified, the level defaults
- to 5 (error), so that only errors and above are logged.
- </para>
- <para>
- Note that when a script (such as either a hook script or a
- network interface up or down script) is called, the script's
- standard output is logged at level 1, debug.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>lxc.logfile</option>
- </term>
- <listitem>
- <para>
- The file to which logging info should be written.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
-
- <refsect2>
- <title>Autostart</title>
- <para>
- The autostart options support marking which containers should be
- auto-started and in what order. These options may be used by LXC tools
- directly or by external tooling provided by the distributions.
- </para>
-
- <variablelist>
- <varlistentry>
- <term>
- <option>lxc.start.auto</option>
- </term>
- <listitem>
- <para>
- Whether the container should be auto-started.
- Valid values are 0 (off) and 1 (on).
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>lxc.start.delay</option>
- </term>
- <listitem>
- <para>
- How long to wait (in seconds) after the container is
- started before starting the next one.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>lxc.start.order</option>
- </term>
- <listitem>
- <para>
- An integer used to sort the containers when auto-starting
- a series of containers at once.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>
- <option>lxc.group</option>
- </term>
- <listitem>
- <para>
- A multi-value key (can be used multiple times) to put the
- container in a container group. Those groups can then be
- used (amongst other things) to start a series of related
- containers.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect2>
- </refsect1>
- <refsect1>
- <title>Examples</title>
<para>
- In addition to the few examples given below, you will find
- some other examples of configuration file in @DOCDIR@/examples
- </para>
- <refsect2>
- <title>Network</title>
- <para>This configuration sets up a container to use a veth pair
- device with one side plugged to a bridge br0 (which has been
- configured before on the system by the administrator). The
- virtual network device visible in the container is renamed to
- eth0.</para>
- <programlisting>
- lxc.utsname = myhostname
- lxc.network.type = veth
- lxc.network.flags = up
- lxc.network.link = br0
- lxc.network.name = eth0
- lxc.network.hwaddr = 4a:49:43:49:79:bf
- lxc.network.ipv4 = 10.2.3.5/24 10.2.3.255
- lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3597
- </programlisting>
- </refsect2>
-
- <refsect2>
- <title>UID/GID mapping</title>
- <para>This configuration will map both user and group ids in the
- range 0-9999 in the container to the ids 100000-109999 on the host.
+ Details about the syntax of this file can be found in:
+ <citerefentry>
+ <refentrytitle><command>lxc.system.conf</command></refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>
</para>
- <programlisting>
- lxc.id_map = u 0 100000 10000
- lxc.id_map = g 0 100000 10000
- </programlisting>
- </refsect2>
-
- <refsect2>
- <title>Control group</title>
- <para>This configuration will setup several control groups for
- the application, cpuset.cpus restricts usage of the defined cpu,
- cpus.share prioritize the control group, devices.allow makes
- usable the specified devices.</para>
- <programlisting>
- lxc.cgroup.cpuset.cpus = 0,1
- lxc.cgroup.cpu.shares = 1234
- lxc.cgroup.devices.deny = a
- lxc.cgroup.devices.allow = c 1:3 rw
- lxc.cgroup.devices.allow = b 8:0 rw
- </programlisting>
</refsect2>
-
- <refsect2>
- <title>Complex configuration</title>
- <para>This example show a complex configuration making a complex
- network stack, using the control groups, setting a new hostname,
- mounting some locations and a changing root file system.</para>
- <programlisting>
- lxc.utsname = complex
- lxc.network.type = veth
- lxc.network.flags = up
- lxc.network.link = br0
- lxc.network.hwaddr = 4a:49:43:49:79:bf
- lxc.network.ipv4 = 10.2.3.5/24 10.2.3.255
- lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3597
- lxc.network.ipv6 = 2003:db8:1:0:214:5432:feab:3588
- lxc.network.type = macvlan
- lxc.network.flags = up
- lxc.network.link = eth0
- lxc.network.hwaddr = 4a:49:43:49:79:bd
- lxc.network.ipv4 = 10.2.3.4/24
- lxc.network.ipv4 = 192.168.10.125/24
- lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3596
- lxc.network.type = phys
- lxc.network.flags = up
- lxc.network.link = dummy0
- lxc.network.hwaddr = 4a:49:43:49:79:ff
- lxc.network.ipv4 = 10.2.3.6/24
- lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3297
- lxc.cgroup.cpuset.cpus = 0,1
- lxc.cgroup.cpu.shares = 1234
- lxc.cgroup.devices.deny = a
- lxc.cgroup.devices.allow = c 1:3 rw
- lxc.cgroup.devices.allow = b 8:0 rw
- lxc.mount = /etc/fstab.complex
- lxc.mount.entry = /lib /root/myrootfs/lib none ro,bind 0 0
- lxc.rootfs = /mnt/rootfs.complex
- lxc.cap.drop = sys_module mknod setuid net_raw
- lxc.cap.drop = mac_override
- </programlisting>
- </refsect2>
-
</refsect1>
<refsect1>
<title>See Also</title>
<simpara>
<citerefentry>
- <refentrytitle><command>chroot</command></refentrytitle>
- <manvolnum>1</manvolnum>
+ <refentrytitle><command>lxc</command></refentrytitle>
+ <manvolnum>1</manvolnum>
</citerefentry>,
-
<citerefentry>
- <refentrytitle><command>pivot_root</command></refentrytitle>
- <manvolnum>8</manvolnum>
+ <refentrytitle><command>lxc.container.conf</command></refentrytitle>
+ <manvolnum>5</manvolnum>
</citerefentry>,
-
<citerefentry>
- <refentrytitle><filename>fstab</filename></refentrytitle>
- <manvolnum>5</manvolnum>
+ <refentrytitle><command>lxc.system.conf</command></refentrytitle>
+ <manvolnum>5</manvolnum>
</citerefentry>,
-
<citerefentry>
- <refentrytitle><filename>capabilities</filename></refentrytitle>
- <manvolnum>7</manvolnum>
+ <refentrytitle><command>lxc-usernet</command></refentrytitle>
+ <manvolnum>5</manvolnum>
</citerefentry>
</simpara>
</refsect1>
- &seealso;
-
<refsect1>
<title>Author</title>
- <para>Daniel Lezcano <email>daniel.lezcano at free.fr</email></para>
+ <para>Stéphane Graber <email>stgraber at ubuntu.com</email></para>
</refsect1>
-
</refentry>
<!-- Keep this comment at the end of the file
diff --git a/doc/lxc.container.conf b/doc/lxc.container.conf
new file mode 100644
index 0000000..4e2491b
--- /dev/null
+++ b/doc/lxc.container.conf
@@ -0,0 +1,36 @@
+# the fstab mount file
+lxc.mount = ./fstab
+
+# the hostname to be set into the container
+lxc.utsname = virtnode
+
+# The network has several of kind of configuration:
+#
+# * veth : the network will use the veth virtual device, the specified
+# link must be a bridge
+# * macvlan : the network will use the macvlan device, the specified link
+# should be an existing interface, usually it is eth0
+# * phys : the network will use a physical network device, the specified
+# link should be an existing interface
+lxc.network.type = macvlan
+
+# specify the flags to be used for the network, actually only <up> is allowed
+# which mean the network should be set up when created. If the network is set
+# up, the loopback is automatically set up too.
+lxc.network.flags = up
+
+# specify the physical network device which will communicate with the
+# outside world
+lxc.network.link = eth0
+
+# NIC ethernet mac address
+lxc.network.hwaddr = 4a:49:43:49:79:bd
+
+# specify the ipv4 address of the container. Several lines are allowed and
+# will mean several addresses will be assigned to the interface
+lxc.network.ipv4 = 1.2.3.5/24
+
+# specify the ipv6 address of the container. Several lines are allowed and
+# will mean several addresses will be assigned to the interface
+lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3596
+
diff --git a/doc/lxc.container.conf.sgml.in b/doc/lxc.container.conf.sgml.in
new file mode 100644
index 0000000..aee5451
--- /dev/null
+++ b/doc/lxc.container.conf.sgml.in
@@ -0,0 +1,1543 @@
+<!--
+
+lxc: linux Container library
+
+(C) Copyright IBM Corp. 2007, 2008
+
+Authors:
+Daniel Lezcano <daniel.lezcano at free.fr>
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+-->
+
+<!DOCTYPE refentry PUBLIC @docdtd@ [
+
+<!ENTITY seealso SYSTEM "@builddir@/see_also.sgml">
+]>
+
+<refentry>
+
+ <docinfo><date>@LXC_GENERATE_DATE@</date></docinfo>
+
+ <refmeta>
+ <refentrytitle>lxc.container.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>lxc.container.conf</refname>
+
+ <refpurpose>
+ LXC container configuration file
+ </refpurpose>
+ </refnamediv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para>
+ The linux containers (<command>lxc</command>) are always created
+ before being used. This creation defines a set of system
+ resources to be virtualized / isolated when a process is using
+ the container. By default, the pids, sysv ipc and mount points
+ are virtualized and isolated. The other system resources are
+ shared across containers, until they are explicitly defined in
+ the configuration file. For example, if there is no network
+ configuration, the network will be shared between the creator of
+ the container and the container itself, but if the network is
+ specified, a new network stack is created for the container and
+ the container can no longer use the network of its ancestor.
+ </para>
+
+ <para>
+ The configuration file defines the different system resources to
+ be assigned for the container. At present, the utsname, the
+ network, the mount points, the root file system, the user namespace,
+ and the control groups are supported.
+ </para>
+
+ <para>
+ Each option in the configuration file has the form <command>key
+ = value</command> fitting in one line. The '#' character means
+ the line is a comment.
+ </para>
+
+ <refsect2>
+ <title>Configuration</title>
+ <para>
+ In order to ease administration of multiple related containers, it
+ is possible to have a container configuration file cause another
+ file to be loaded. For instance, network configuration
+ can be defined in one common file which is included by multiple
+ containers. Then, if the containers are moved to another host,
+ only one file may need to be updated.
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.include</option>
+ </term>
+ <listitem>
+ <para>
+ Specify the file to be included. The included file must be
+ in the same valid lxc configuration file format.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Architecture</title>
+ <para>
+ Allows one to set the architecture for the container. For example,
+ set a 32bits architecture for a container running 32bits
+ binaries on a 64bits host. This fixes the container scripts
+ which rely on the architecture to do some work like
+ downloading the packages.
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.arch</option>
+ </term>
+ <listitem>
+ <para>
+ Specify the architecture for the container.
+ </para>
+ <para>
+ Valid options are
+ <option>x86</option>,
+ <option>i686</option>,
+ <option>x86_64</option>,
+ <option>amd64</option>
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ </refsect2>
+
+ <refsect2>
+ <title>Hostname</title>
+ <para>
+ The utsname section defines the hostname to be set for the
+ container. That means the container can set its own hostname
+ without changing the one from the system. That makes the
+ hostname private for the container.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.utsname</option>
+ </term>
+ <listitem>
+ <para>
+ specify the hostname for the container
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Halt signal</title>
+ <para>
+ Allows one to specify signal name or number, sent by lxc-stop to the
+ container's init process to cleanly shutdown the container. Different
+ init systems could use different signals to perform clean shutdown
+ sequence. This option allows the signal to be specified in kill(1)
+ fashion, e.g. SIGPWR, SIGRTMIN+14, SIGRTMAX-10 or plain number. The
+ default signal is SIGPWR.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.haltsignal</option>
+ </term>
+ <listitem>
+ <para>
+ specify the signal used to halt the container
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Stop signal</title>
+ <para>
+ Allows one to specify signal name or number, sent by lxc-stop to forcibly
+ shutdown the container. This option allows signal to be specified in
+ kill(1) fashion, e.g. SIGKILL, SIGRTMIN+14, SIGRTMAX-10 or plain number.
+ The default signal is SIGKILL.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.stopsignal</option>
+ </term>
+ <listitem>
+ <para>
+ specify the signal used to stop the container
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Network</title>
+ <para>
+ The network section defines how the network is virtualized in
+ the container. The network virtualization acts at layer
+ two. In order to use the network virtualization, parameters
+ must be specified to define the network interfaces of the
+ container. Several virtual interfaces can be assigned and used
+ in a container even if the system has only one physical
+ network interface.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.network.type</option>
+ </term>
+ <listitem>
+ <para>
+ specify what kind of network virtualization to be used
+ for the container. Each time
+ a <option>lxc.network.type</option> field is found a new
+ round of network configuration begins. In this way,
+ several network virtualization types can be specified
+ for the same container, as well as assigning several
+ network interfaces for one container. The different
+ virtualization types can be:
+ </para>
+
+ <para>
+ <option>none:</option> will cause the container to share
+ the host's network namespace. This means the host
+ network devices are usable in the container. It also
+ means that if both the container and host have upstart as
+ init, 'halt' in a container (for instance) will shut down the
+ host.
+ </para>
+
+ <para>
+ <option>empty:</option> will create only the loopback
+ interface.
+ </para>
+
+ <para>
+ <option>veth:</option> a peer network device is created
+ with one side assigned to the container and the other
+ side is attached to a bridge specified by
+ the <option>lxc.network.link</option>. If the bridge is
+ not specified, then the veth pair device will be created
+ but not attached to any bridge. Otherwise, the bridge
+ has to be setup before on the
+ system, <command>lxc</command> won't handle any
+ configuration outside of the container. By
+ default <command>lxc</command> choose a name for the
+ network device belonging to the outside of the
+ container, this name is handled
+ by <command>lxc</command>, but if you wish to handle
+ this name yourself, you can tell <command>lxc</command>
+ to set a specific name with
+ the <option>lxc.network.veth.pair</option> option.
+ </para>
+
+ <para>
+ <option>vlan:</option> a vlan interface is linked with
+ the interface specified by
+ the <option>lxc.network.link</option> and assigned to
+ the container. The vlan identifier is specified with the
+ option <option>lxc.network.vlan.id</option>.
+ </para>
+
+ <para>
+ <option>macvlan:</option> a macvlan interface is linked
+ with the interface specified by
+ the <option>lxc.network.link</option> and assigned to
+ the container.
+ <option>lxc.network.macvlan.mode</option> specifies the
+ mode the macvlan will use to communicate between
+ different macvlan on the same upper device. The accepted
+ modes are <option>private</option>, the device never
+ communicates with any other device on the same upper_dev (default),
+ <option>vepa</option>, the new Virtual Ethernet Port
+ Aggregator (VEPA) mode, it assumes that the adjacent
+ bridge returns all frames where both source and
+ destination are local to the macvlan port, i.e. the
+ bridge is set up as a reflective relay. Broadcast
+ frames coming in from the upper_dev get flooded to all
+ macvlan interfaces in VEPA mode, local frames are not
+ delivered locally, or <option>bridge</option>, it
+ provides the behavior of a simple bridge between
+ different macvlan interfaces on the same port. Frames
+ from one interface to another one get delivered directly
+ and are not sent out externally. Broadcast frames get
+ flooded to all other bridge ports and to the external
+ interface, but when they come back from a reflective
+ relay, we don't deliver them again. Since we know all
+ the MAC addresses, the macvlan bridge mode does not
+ require learning or STP like the bridge module does.
+ </para>
+
+ <para>
+ <option>phys:</option> an already existing interface
+ specified by the <option>lxc.network.link</option> is
+ assigned to the container.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.flags</option>
+ </term>
+ <listitem>
+ <para>
+ specify an action to do for the
+ network.
+ </para>
+
+ <para><option>up:</option> activates the interface.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.link</option>
+ </term>
+ <listitem>
+ <para>
+ specify the interface to be used for real network
+ traffic.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.mtu</option>
+ </term>
+ <listitem>
+ <para>
+ specify the maximum transfer unit for this interface.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.name</option>
+ </term>
+ <listitem>
+ <para>
+ the interface name is dynamically allocated, but if
+ another name is needed because the configuration files
+ being used by the container use a generic name,
+ eg. eth0, this option will rename the interface in the
+ container.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.hwaddr</option>
+ </term>
+ <listitem>
+ <para>
+ the interface mac address is dynamically allocated by
+ default to the virtual interface, but in some cases,
+ this is needed to resolve a mac address conflict or to
+ always have the same link-local ipv6 address.
+ Any "x" in address will be replaced by random value,
+ this allows setting hwaddr templates.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.ipv4</option>
+ </term>
+ <listitem>
+ <para>
+ specify the ipv4 address to assign to the virtualized
+ interface. Several lines specify several ipv4 addresses.
+ The address is in format x.y.z.t/m,
+ eg. 192.168.1.123/24. The broadcast address should be
+ specified on the same line, right after the ipv4
+ address.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.ipv4.gateway</option>
+ </term>
+ <listitem>
+ <para>
+ specify the ipv4 address to use as the gateway inside the
+ container. The address is in format x.y.z.t, eg.
+ 192.168.1.123.
+
+ Can also have the special value <option>auto</option>,
+ which means to take the primary address from the bridge
+ interface (as specified by the
+ <option>lxc.network.link</option> option) and use that as
+ the gateway. <option>auto</option> is only available when
+ using the <option>veth</option> and
+ <option>macvlan</option> network types.
+ </para>
+ </listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.ipv6</option>
+ </term>
+ <listitem>
+ <para>
+ specify the ipv6 address to assign to the virtualized
+ interface. Several lines specify several ipv6 addresses.
+ The address is in format x::y/m,
+ eg. 2003:db8:1:0:214:1234:fe0b:3596/64
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.ipv6.gateway</option>
+ </term>
+ <listitem>
+ <para>
+ specify the ipv6 address to use as the gateway inside the
+ container. The address is in format x::y,
+ eg. 2003:db8:1:0::1
+
+ Can also have the special value <option>auto</option>,
+ which means to take the primary address from the bridge
+ interface (as specified by the
+ <option>lxc.network.link</option> option) and use that as
+ the gateway. <option>auto</option> is only available when
+ using the <option>veth</option> and
+ <option>macvlan</option> network types.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.script.up</option>
+ </term>
+ <listitem>
+ <para>
+ add a configuration option to specify a script to be
+ executed after creating and configuring the network used
+ from the host side. The following arguments are passed
+ to the script: container name and config section name
+ (net) Additional arguments depend on the config section
+ employing a script hook; the following are used by the
+ network system: execution context (up), network type
+ (empty/veth/macvlan/phys), Depending on the network
+ type, other arguments may be passed:
+ veth/macvlan/phys. And finally (host-sided) device name.
+ </para>
+ <para>
+ Standard output from the script is logged at debug level.
+ Standard error is not logged, but can be captured by the
+ hook redirecting its standard error to standard output.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.network.script.down</option>
+ </term>
+ <listitem>
+ <para>
+ add a configuration option to specify a script to be
+ executed before destroying the network used from the
+ host side. The following arguments are passed to the
+ script: container name and config section name (net)
+ Additional arguments depend on the config section
+ employing a script hook; the following are used by the
+ network system: execution context (down), network type
+ (empty/veth/macvlan/phys), Depending on the network
+ type, other arguments may be passed:
+ veth/macvlan/phys. And finally (host-sided) device name.
+ </para>
+ <para>
+ Standard output from the script is logged at debug level.
+ Standard error is not logged, but can be captured by the
+ hook redirecting its standard error to standard output.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>New pseudo tty instance (devpts)</title>
+ <para>
+ For stricter isolation the container can have its own private
+ instance of the pseudo tty.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.pts</option>
+ </term>
+ <listitem>
+ <para>
+ If set, the container will have a new pseudo tty
+ instance, making this private to it. The value specifies
+ the maximum number of pseudo ttys allowed for a pts
+ instance (this limitation is not implemented yet).
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Container system console</title>
+ <para>
+ If the container is configured with a root filesystem and the
+ inittab file is setup to use the console, you may want to specify
+ where the output of this console goes.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.console</option>
+ </term>
+ <listitem>
+ <para>
+ Specify a path to a file where the console output will
+ be written. The keyword 'none' will simply disable the
+ console. This is dangerous once if have a rootfs with a
+ console device file where the application can write, the
+ messages will fall in the host.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Console through the ttys</title>
+ <para>
+ This option is useful if the container is configured with a root
+ filesystem and the inittab file is setup to launch a getty on the
+ ttys. The option specifies the number of ttys to be available for
+ the container. The number of gettys in the inittab file of the
+ container should not be greater than the number of ttys specified
+ in this option, otherwise the excess getty sessions will die and
+ respawn indefinitely giving annoying messages on the console or in
+ <filename>/var/log/messages</filename>.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.tty</option>
+ </term>
+ <listitem>
+ <para>
+ Specify the number of tty to make available to the
+ container.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Console devices location</title>
+ <para>
+ LXC consoles are provided through Unix98 PTYs created on the
+ host and bind-mounted over the expected devices in the container.
+ By default, they are bind-mounted over <filename>/dev/console</filename>
+ and <filename>/dev/ttyN</filename>. This can prevent package upgrades
+ in the guest. Therefore you can specify a directory location (under
+ <filename>/dev</filename> under which LXC will create the files and
+ bind-mount over them. These will then be symbolically linked to
+ <filename>/dev/console</filename> and <filename>/dev/ttyN</filename>.
+ A package upgrade can then succeed as it is able to remove and replace
+ the symbolic links.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.devttydir</option>
+ </term>
+ <listitem>
+ <para>
+ Specify a directory under <filename>/dev</filename>
+ under which to create the container console devices.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>/dev directory</title>
+ <para>
+ By default, lxc does nothing with the container's
+ <filename>/dev</filename>. This allows the container's
+ <filename>/dev</filename> to be set up as needed in the container
+ rootfs. If lxc.autodev is set to 1, then after mounting the container's
+ rootfs LXC will mount a fresh tmpfs under <filename>/dev</filename>
+ (limited to 100k) and fill in a minimal set of initial devices.
+ This is generally required when starting a container containing
+ a "systemd" based "init" but may be optional at other times. Additional
+ devices in the containers /dev directory may be created through the
+ use of the <option>lxc.hook.autodev</option> hook.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.autodev</option>
+ </term>
+ <listitem>
+ <para>
+ Set this to 1 to have LXC mount and populate a minimal
+ <filename>/dev</filename> when starting the container.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Enable kmsg symlink</title>
+ <para>
+ Enable creating /dev/kmsg as symlink to /dev/console. This defaults to 1.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.kmsg</option>
+ </term>
+ <listitem>
+ <para>
+ Set this to 0 to disable /dev/kmsg symlinking.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Mount points</title>
+ <para>
+ The mount points section specifies the different places to be
+ mounted. These mount points will be private to the container
+ and won't be visible by the processes running outside of the
+ container. This is useful to mount /etc, /var or /home for
+ examples.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.mount</option>
+ </term>
+ <listitem>
+ <para>
+ specify a file location in
+ the <filename>fstab</filename> format, containing the
+ mount information. If the rootfs is an image file or a
+ block device and the fstab is used to mount a point
+ somewhere in this rootfs, the path of the rootfs mount
+ point should be prefixed with the
+ <filename>@LXCROOTFSMOUNT@</filename> default path or
+ the value of <option>lxc.rootfs.mount</option> if
+ specified. Note that when mounting a filesystem from an
+ image file or block device the third field (fs_vfstype)
+ cannot be auto as with
+ <citerefentry>
+ <refentrytitle>mount</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>
+ but must be explicitly specified.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.mount.entry</option>
+ </term>
+ <listitem>
+ <para>
+ specify a mount point corresponding to a line in the
+ fstab format.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.mount.auto</option>
+ </term>
+ <listitem>
+ <para>
+ specify which standard kernel file systems should be
+ automatically mounted. This may dramatically simplify
+ the configuration. The file systems are:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <option>proc:mixed</option> (or <option>proc</option>):
+ mount <filename>/proc</filename> as read-write, but
+ remount <filename>/proc/sys</filename> and
+ <filename>/proc/sysrq-trigger</filename> read-only
+ for security / container isolation purposes.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <option>proc:rw</option>: mount
+ <filename>/proc</filename> as read-write
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <option>sys:ro</option> (or <option>sys</option>):
+ mount <filename>/sys</filename> as read-only
+ for security / container isolation purposes.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <option>sys:rw</option>: mount
+ <filename>/sys</filename> as read-write
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <option>cgroup:mixed</option> (or
+ <option>cgroup</option>):
+ mount a tmpfs to <filename>/sys/fs/cgroup</filename>,
+ create directories for all hierarchies to which
+ the container is added, create subdirectories
+ there with the name of the cgroup, and bind-mount
+ the container's own cgroup into that directory.
+ The container will be able to write to its own
+ cgroup directory, but not the parents, since they
+ will be remounted read-only
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <option>cgroup:ro</option>: similar to
+ <option>cgroup:mixed</option>, but everything will
+ be mounted read-only.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <option>cgroup:rw</option>: similar to
+ <option>cgroup:mixed</option>, but everything will
+ be mounted read-write. Note that the paths leading
+ up to the container's own cgroup will be writable,
+ but will not be a cgroup filesystem but just part
+ of the tmpfs of <filename>/sys/fs/cgroup</filename>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <option>cgroup-full:mixed</option> (or
+ <option>cgroup-full</option>):
+ mount a tmpfs to <filename>/sys/fs/cgroup</filename>,
+ create directories for all hierarchies to which
+ the container is added, bind-mount the hierarchies
+ from the host to the container and make everything
+ read-only except the container's own cgroup. Note
+ that compared to <option>cgroup</option>, where
+ all paths leading up to the container's own cgroup
+ are just simple directories in the underlying
+ tmpfs, here
+ <filename>/sys/fs/cgroup/$hierarchy</filename>
+ will contain the host's full cgroup hierarchy,
+ albeit read-only outside the container's own cgroup.
+ This may leak quite a bit of information into the
+ container.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <option>cgroup-full:ro</option>: similar to
+ <option>cgroup-full:mixed</option>, but everything
+ will be mounted read-only.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <option>cgroup-full:rw</option>: similar to
+ <option>cgroup-full:mixed</option>, but everything
+ will be mounted read-write. Note that in this case,
+ the container may escape its own cgroup. (Note also
+ that if the container has CAP_SYS_ADMIN support
+ and can mount the cgroup filesystem itself, it may
+ do so anyway.)
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ Examples:
+ </para>
+ <programlisting>
+ lxc.mount.auto = proc sys cgroup
+ lxc.mount.auto = proc:rw sys:rw cgroup-full:rw
+ </programlisting>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Root file system</title>
+ <para>
+ The root file system of the container can be different than that
+ of the host system.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.rootfs</option>
+ </term>
+ <listitem>
+ <para>
+ specify the root file system for the container. It can
+ be an image file, a directory or a block device. If not
+ specified, the container shares its root file system
+ with the host.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.rootfs.mount</option>
+ </term>
+ <listitem>
+ <para>
+ where to recursively bind <option>lxc.rootfs</option>
+ before pivoting. This is to ensure success of the
+ <citerefentry>
+ <refentrytitle><command>pivot_root</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>
+ syscall. Any directory suffices, the default should
+ generally work.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>lxc.pivotdir</option>
+ </term>
+ <listitem>
+ <para>
+ where to pivot the original root file system under
+ <option>lxc.rootfs</option>, specified relatively to
+ that. The default is <filename>mnt</filename>.
+ It is created if necessary, and also removed after
+ unmounting everything from it during container setup.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Control group</title>
+ <para>
+ The control group section contains the configuration for the
+ different subsystem. <command>lxc</command> does not check the
+ correctness of the subsystem name. This has the disadvantage
+ of not detecting configuration errors until the container is
+ started, but has the advantage of permitting any future
+ subsystem.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.cgroup.[subsystem name]</option>
+ </term>
+ <listitem>
+ <para>
+ specify the control group value to be set. The
+ subsystem name is the literal name of the control group
+ subsystem. The permitted names and the syntax of their
+ values is not dictated by LXC, instead it depends on the
+ features of the Linux kernel running at the time the
+ container is started,
+ eg. <option>lxc.cgroup.cpuset.cpus</option>
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Capabilities</title>
+ <para>
+ The capabilities can be dropped in the container if this one
+ is run as root.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.cap.drop</option>
+ </term>
+ <listitem>
+ <para>
+ Specify the capability to be dropped in the container. A
+ single line defining several capabilities with a space
+ separation is allowed. The format is the lower case of
+ the capability definition without the "CAP_" prefix,
+ eg. CAP_SYS_MODULE should be specified as
+ sys_module. See
+ <citerefentry>
+ <refentrytitle><command>capabilities</command></refentrytitle>
+ <manvolnum>7</manvolnum>
+ </citerefentry>,
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>lxc.cap.keep</option>
+ </term>
+ <listitem>
+ <para>
+ Specify the capability to be kept in the container. All other
+ capabilities will be dropped.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Apparmor profile</title>
+ <para>
+ If lxc was compiled and installed with apparmor support, and the host
+ system has apparmor enabled, then the apparmor profile under which the
+ container should be run can be specified in the container
+ configuration. The default is <command>lxc-container-default</command>.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.aa_profile</option>
+ </term>
+ <listitem>
+ <para>
+ Specify the apparmor profile under which the container should
+ be run. To specify that the container should be unconfined,
+ use
+ </para>
+ <programlisting>lxc.aa_profile = unconfined</programlisting>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>SELinux context</title>
+ <para>
+ If lxc was compiled and installed with SELinux support, and the host
+ system has SELinux enabled, then the SELinux context under which the
+ container should be run can be specified in the container
+ configuration. The default is <command>unconfined_t</command>,
+ which means that lxc will not attempt to change contexts.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.se_context</option>
+ </term>
+ <listitem>
+ <para>
+ Specify the SELinux context under which the container should
+ be run or <command>unconfined_t</command>. For example
+ </para>
+ <programlisting>lxc.se_context = unconfined_u:unconfined_r:lxc_t:s0-s0:c0.c1023</programlisting>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Seccomp configuration</title>
+ <para>
+ A container can be started with a reduced set of available
+ system calls by loading a seccomp profile at startup. The
+ seccomp configuration file should begin with a version number
+ (which currently must be 1) on the first line, a policy type
+ (which must be 'whitelist') on the second line, followed by a
+ list of allowed system call numbers, one per line.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.seccomp</option>
+ </term>
+ <listitem>
+ <para>
+ Specify a file containing the seccomp configuration to
+ load before the container starts.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>UID mappings</title>
+ <para>
+ A container can be started in a private user namespace with
+ user and group id mappings. For instance, you can map userid
+ 0 in the container to userid 200000 on the host. The root
+ user in the container will be privileged in the container,
+ but unprivileged on the host. Normally a system container
+ will want a range of ids, so you would map, for instance,
+ user and group ids 0 through 20,000 in the container to the
+ ids 200,000 through 220,000.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.id_map</option>
+ </term>
+ <listitem>
+ <para>
+ Four values must be provided. First a character, either
+ 'u', or 'g', to specify whether user or group ids are
+ being mapped. Next is the first userid as seen in the
+ user namespace of the container. Next is the userid as
+ seen on the host. Finally, a range indicating the number
+ of consecutive ids to map.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Container hooks</title>
+ <para>
+ Container hooks are programs or scripts which can be executed
+ at various times in a container's lifetime.
+ </para>
+ <para>
+ When a container hook is executed, information is passed both
+ as command line arguments and through environment variables.
+ The arguments are:
+ <itemizedlist>
+ <listitem><para> Container name. </para></listitem>
+ <listitem><para> Section (always 'lxc'). </para></listitem>
+ <listitem><para> The hook type (i.e. 'clone' or 'pre-mount'). </para></listitem>
+ <listitem><para> Additional arguments In the
+ case of the clone hook, any extra arguments passed to
+ lxc-clone will appear as further arguments to the hook. </para></listitem>
+ </itemizedlist>
+ The following environment variables are set:
+ <itemizedlist>
+ <listitem><para> LXC_NAME: is the container's name. </para></listitem>
+ <listitem><para> LXC_ROOTFS_MOUNT: the path to the mounted root filesystem. </para></listitem>
+ <listitem><para> LXC_CONFIG_FILE: the path to the container configuration file. </para></listitem>
+ <listitem><para> LXC_SRC_NAME: in the case of the clone hook, this is the original container's name. </para></listitem>
+ <listitem><para> LXC_ROOTFS_PATH: this is the lxc.rootfs entry for the container. Note this is likely not where the mounted rootfs is to be found, use LXC_ROOTFS_MOUNT for that. </para></listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ Standard output from the hooks is logged at debug level.
+ Standard error is not logged, but can be captured by the
+ hook redirecting its standard error to standard output.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.hook.pre-start</option>
+ </term>
+ <listitem>
+ <para>
+ A hook to be run in the host's namespace before the
+ container ttys, consoles, or mounts are up.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.hook.pre-mount</option>
+ </term>
+ <listitem>
+ <para>
+ A hook to be run in the container's fs namespace but before
+ the rootfs has been set up. This allows for manipulation
+ of the rootfs, i.e. to mount an encrypted filesystem. Mounts
+ done in this hook will not be reflected on the host (apart from
+ mounts propagation), so they will be automatically cleaned up
+ when the container shuts down.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.hook.mount</option>
+ </term>
+ <listitem>
+ <para>
+ A hook to be run in the container's namespace after
+ mounting has been done, but before the pivot_root.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.hook.autodev</option>
+ </term>
+ <listitem>
+ <para>
+ A hook to be run in the container's namespace after
+ mounting has been done and after any mount hooks have
+ run, but before the pivot_root, if
+ <option>lxc.autodev</option> == 1.
+ The purpose of this hook is to assist in populating the
+ /dev directory of the container when using the autodev
+ option for systemd based containers. The container's /dev
+ directory is relative to the
+ ${<option>LXC_ROOTFS_MOUNT</option>} environment
+ variable available when the hook is run.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.hook.start</option>
+ </term>
+ <listitem>
+ <para>
+ A hook to be run in the container's namespace immediately
+ before executing the container's init. This requires the
+ program to be available in the container.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.hook.post-stop</option>
+ </term>
+ <listitem>
+ <para>
+ A hook to be run in the host's namespace after the
+ container has been shut down.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.hook.clone</option>
+ </term>
+ <listitem>
+ <para>
+ A hook to be run when the container is cloned to a new one.
+ See <citerefentry><refentrytitle><command>lxc-clone</command></refentrytitle>
+ <manvolnum>1</manvolnum></citerefentry> for more information.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Container hooks Environment Variables</title>
+ <para>
+ A number of environment variables are made available to the startup
+ hooks to provide configuration information and assist in the
+ functioning of the hooks. Not all variables are valid in all
+ contexts. In particular, all paths are relative to the host system
+ and, as such, not valid during the <option>lxc.hook.start</option> hook.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>LXC_NAME</option>
+ </term>
+ <listitem>
+ <para>
+ The LXC name of the container. Useful for logging messages
+ in common log environments. [<option>-n</option>]
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>LXC_CONFIG_FILE</option>
+ </term>
+ <listitem>
+ <para>
+ Host relative path to the container configuration file. This
+ gives the container to reference the original, top level,
+ configuration file for the container in order to locate any
+ additional configuration information not otherwise made
+ available. [<option>-f</option>]
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>LXC_CONSOLE</option>
+ </term>
+ <listitem>
+ <para>
+ The path to the console output of the container if not NULL.
+ [<option>-c</option>] [<option>lxc.console</option>]
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>LXC_CONSOLE_LOGPATH</option>
+ </term>
+ <listitem>
+ <para>
+ The path to the console log output of the container if not NULL.
+ [<option>-L</option>]
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>LXC_ROOTFS_MOUNT</option>
+ </term>
+ <listitem>
+ <para>
+ The mount location to which the container is initially bound.
+ This will be the host relative path to the container rootfs
+ for the container instance being started and is where changes
+ should be made for that instance.
+ [<option>lxc.rootfs.mount</option>]
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>LXC_ROOTFS_PATH</option>
+ </term>
+ <listitem>
+ <para>
+ The host relative path to the container root which has been
+ mounted to the rootfs.mount location.
+ [<option>lxc.rootfs</option>]
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ </refsect2>
+ <refsect2>
+ <title>Logging</title>
+ <para>
+ Logging can be configured on a per-container basis. By default,
+ depending upon how the lxc package was compiled, container startup
+ is logged only at the ERROR level, and logged to a file named after
+ the container (with '.log' appended) either under the container path,
+ or under @LOGPATH at .
+ </para>
+ <para>
+ Both the default log level and the log file can be specified in the
+ container configuration file, overriding the default behavior. Note
+ that the configuration file entries can in turn be overridden by the
+ command line options to <command>lxc-start</command>.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.loglevel</option>
+ </term>
+ <listitem>
+ <para>
+ The level at which to log. The log level is an integer in
+ the range of 0..8 inclusive, where a lower number means more
+ verbose debugging. In particular 0 = trace, 1 = debug, 2 =
+ info, 3 = notice, 4 = warn, 5 = error, 6 = critical, 7 =
+ alert, and 8 = fatal. If unspecified, the level defaults
+ to 5 (error), so that only errors and above are logged.
+ </para>
+ <para>
+ Note that when a script (such as either a hook script or a
+ network interface up or down script) is called, the script's
+ standard output is logged at level 1, debug.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>lxc.logfile</option>
+ </term>
+ <listitem>
+ <para>
+ The file to which logging info should be written.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Autostart</title>
+ <para>
+ The autostart options support marking which containers should be
+ auto-started and in what order. These options may be used by LXC tools
+ directly or by external tooling provided by the distributions.
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.start.auto</option>
+ </term>
+ <listitem>
+ <para>
+ Whether the container should be auto-started.
+ Valid values are 0 (off) and 1 (on).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>lxc.start.delay</option>
+ </term>
+ <listitem>
+ <para>
+ How long to wait (in seconds) after the container is
+ started before starting the next one.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>lxc.start.order</option>
+ </term>
+ <listitem>
+ <para>
+ An integer used to sort the containers when auto-starting
+ a series of containers at once.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>lxc.group</option>
+ </term>
+ <listitem>
+ <para>
+ A multi-value key (can be used multiple times) to put the
+ container in a container group. Those groups can then be
+ used (amongst other things) to start a series of related
+ containers.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+ </refsect1>
+
+ <refsect1>
+ <title>Examples</title>
+ <para>
+ In addition to the few examples given below, you will find
+ some other examples of configuration file in @DOCDIR@/examples
+ </para>
+ <refsect2>
+ <title>Network</title>
+ <para>This configuration sets up a container to use a veth pair
+ device with one side plugged to a bridge br0 (which has been
+ configured before on the system by the administrator). The
+ virtual network device visible in the container is renamed to
+ eth0.</para>
+ <programlisting>
+ lxc.utsname = myhostname
+ lxc.network.type = veth
+ lxc.network.flags = up
+ lxc.network.link = br0
+ lxc.network.name = eth0
+ lxc.network.hwaddr = 4a:49:43:49:79:bf
+ lxc.network.ipv4 = 10.2.3.5/24 10.2.3.255
+ lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3597
+ </programlisting>
+ </refsect2>
+
+ <refsect2>
+ <title>UID/GID mapping</title>
+ <para>This configuration will map both user and group ids in the
+ range 0-9999 in the container to the ids 100000-109999 on the host.
+ </para>
+ <programlisting>
+ lxc.id_map = u 0 100000 10000
+ lxc.id_map = g 0 100000 10000
+ </programlisting>
+ </refsect2>
+
+ <refsect2>
+ <title>Control group</title>
+ <para>This configuration will setup several control groups for
+ the application, cpuset.cpus restricts usage of the defined cpu,
+ cpus.share prioritize the control group, devices.allow makes
+ usable the specified devices.</para>
+ <programlisting>
+ lxc.cgroup.cpuset.cpus = 0,1
+ lxc.cgroup.cpu.shares = 1234
+ lxc.cgroup.devices.deny = a
+ lxc.cgroup.devices.allow = c 1:3 rw
+ lxc.cgroup.devices.allow = b 8:0 rw
+ </programlisting>
+ </refsect2>
+
+ <refsect2>
+ <title>Complex configuration</title>
+ <para>This example show a complex configuration making a complex
+ network stack, using the control groups, setting a new hostname,
+ mounting some locations and a changing root file system.</para>
+ <programlisting>
+ lxc.utsname = complex
+ lxc.network.type = veth
+ lxc.network.flags = up
+ lxc.network.link = br0
+ lxc.network.hwaddr = 4a:49:43:49:79:bf
+ lxc.network.ipv4 = 10.2.3.5/24 10.2.3.255
+ lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3597
+ lxc.network.ipv6 = 2003:db8:1:0:214:5432:feab:3588
+ lxc.network.type = macvlan
+ lxc.network.flags = up
+ lxc.network.link = eth0
+ lxc.network.hwaddr = 4a:49:43:49:79:bd
+ lxc.network.ipv4 = 10.2.3.4/24
+ lxc.network.ipv4 = 192.168.10.125/24
+ lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3596
+ lxc.network.type = phys
+ lxc.network.flags = up
+ lxc.network.link = dummy0
+ lxc.network.hwaddr = 4a:49:43:49:79:ff
+ lxc.network.ipv4 = 10.2.3.6/24
+ lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3297
+ lxc.cgroup.cpuset.cpus = 0,1
+ lxc.cgroup.cpu.shares = 1234
+ lxc.cgroup.devices.deny = a
+ lxc.cgroup.devices.allow = c 1:3 rw
+ lxc.cgroup.devices.allow = b 8:0 rw
+ lxc.mount = /etc/fstab.complex
+ lxc.mount.entry = /lib /root/myrootfs/lib none ro,bind 0 0
+ lxc.rootfs = /mnt/rootfs.complex
+ lxc.cap.drop = sys_module mknod setuid net_raw
+ lxc.cap.drop = mac_override
+ </programlisting>
+ </refsect2>
+
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <simpara>
+ <citerefentry>
+ <refentrytitle><command>chroot</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>,
+
+ <citerefentry>
+ <refentrytitle><command>pivot_root</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>,
+
+ <citerefentry>
+ <refentrytitle><filename>fstab</filename></refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>,
+
+ <citerefentry>
+ <refentrytitle><filename>capabilities</filename></refentrytitle>
+ <manvolnum>7</manvolnum>
+ </citerefentry>
+ </simpara>
+ </refsect1>
+
+ &seealso;
+
+ <refsect1>
+ <title>Author</title>
+ <para>Daniel Lezcano <email>daniel.lezcano at free.fr</email></para>
+ </refsect1>
+
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/doc/lxc.system.conf b/doc/lxc.system.conf
new file mode 100644
index 0000000..c895ff5
--- /dev/null
+++ b/doc/lxc.system.conf
@@ -0,0 +1,20 @@
+# LVM: volume group to use for new containers
+lxc.bdev.lvm.vg = lxc
+
+# LVM: thin pool to use for new containers
+lxc.bdev.lvm.thin_pool = lxc
+
+# ZFS: Root path
+lxc.bdev.zfs.root = lxc
+
+# Path to the containers
+lxc.lxcpath = /var/lib/lxc/
+
+# Path to the default configuration file
+lxc.default_config = /etc/lxc/default.conf
+
+# Pattern to use for the cgroup path
+lxc.cgroup.pattern = lxc/%n
+
+# List of cgroups to use
+lxc.cgroup.use =
diff --git a/doc/lxc.system.conf.sgml.in b/doc/lxc.system.conf.sgml.in
new file mode 100644
index 0000000..a2b70ec
--- /dev/null
+++ b/doc/lxc.system.conf.sgml.in
@@ -0,0 +1,206 @@
+<!--
+
+lxc: linux Container library
+
+(C) Copyright Canonical Ltd. 2014
+
+Authors:
+Stéphane Graber <stgraber at ubuntu.com>
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+-->
+
+<!DOCTYPE refentry PUBLIC @docdtd@ [
+
+<!ENTITY seealso SYSTEM "@builddir@/see_also.sgml">
+]>
+
+<refentry>
+
+ <docinfo><date>@LXC_GENERATE_DATE@</date></docinfo>
+
+ <refmeta>
+ <refentrytitle>lxc.system.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>lxc.system.conf</refname>
+
+ <refpurpose>
+ LXC system configuration file
+ </refpurpose>
+ </refnamediv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para>
+ The system configuration is located at
+ <filename>@LXC_GLOBAL_CONF@</filename> or
+ <filename>~/.config/lxc/lxc.conf</filename> for unprivileged
+ containers.
+ </para>
+
+ <para>
+ This configuration file is used to set values such as default
+ lookup paths and storage backend settings for LXC.
+ </para>
+
+ <refsect2>
+ <title>Configuration paths</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.lxcpath</option>
+ </term>
+ <listitem>
+ <para>
+ The location in which all containers are stored.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>lxc.default_config</option>
+ </term>
+ <listitem>
+ <para>
+ The path to the default container configuration.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Control Groups</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.cgroup.user</option>
+ </term>
+ <listitem>
+ <para>
+ Comma separated list of cgroup controllers to setup.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>lxc.cgroup.pattern</option>
+ </term>
+ <listitem>
+ <para>
+ Format string used to generate the cgroup path (e.g. lxc/%n).
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>LVM</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.bdev.lvm.vg</option>
+ </term>
+ <listitem>
+ <para>
+ Default LVM volume group name.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>lxc.bdev.lvm.thin_pool</option>
+ </term>
+ <listitem>
+ <para>
+ Default LVM thin pool name.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>ZFS</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>lxc.bdev.zfs.root</option>
+ </term>
+ <listitem>
+ <para>
+ Default ZFS root name.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+ </refsect1>
+
+ <refsect1>
+ <simpara>
+ <citerefentry>
+ <refentrytitle><command>lxc</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle><command>lxc.container.conf</command></refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle><command>lxc.system.conf</command></refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle><command>lxc-usernet</command></refentrytitle>
+ <manvolnum>5</manvolnum>
+ </citerefentry>
+ </simpara>
+ </refsect1>
+
+ &seealso;
+
+ <refsect1>
+ <title>Author</title>
+ <para>Stéphane Graber <email>stgraber at ubuntu.com</email></para>
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
--
1.8.5.3
More information about the lxc-devel
mailing list