2
0
mirror of git://github.com/lxc/lxc synced 2025-09-01 18:15:11 +00:00

Merge pull request #1789 from brauner/2017-09-06/fix_documentation

doc: adapt + update
This commit is contained in:
Stéphane Graber
2017-09-05 19:19:45 -04:00
committed by GitHub
12 changed files with 190 additions and 237 deletions

View File

@@ -105,11 +105,11 @@ by KATOH Yasufumi <karma at jazz.email.ne.jp>
example, a process running as UID and GID 0 inside the container might example, a process running as UID and GID 0 inside the container might
appear as UID and GID 100000 on the host. The implementation and working appear as UID and GID 100000 on the host. The implementation and working
details can be gathered from the corresponding user namespace man page. details can be gathered from the corresponding user namespace man page.
UID and GID mappings can be defined with the <option>lxc.id_map</option> UID and GID mappings can be defined with the <option>lxc.idmap</option>
key. key.
--> -->
本質的には、ユーザ名前空間は与えられた UID、GID の組を隔離します。ユーザ名前空間は、ホスト上の UID、GID のある範囲を、それとは異なるコンテナ上の UID、GID の範囲へマッピングすることで実現します。カーネルは、ホスト上では実際には UID、GID は特権を持たないにも関わらず、コンテナ内ではすべての UID、GID が期待されるように見えるように変換を行います。 本質的には、ユーザ名前空間は与えられた UID、GID の組を隔離します。ユーザ名前空間は、ホスト上の UID、GID のある範囲を、それとは異なるコンテナ上の UID、GID の範囲へマッピングすることで実現します。カーネルは、ホスト上では実際には UID、GID は特権を持たないにも関わらず、コンテナ内ではすべての UID、GID が期待されるように見えるように変換を行います。
例えば、コンテナ内では UID、GID が 0 として実行中のプロセスは、ホスト上では UID、GID が 100000 として見えるでしょう。実装と動作の詳細は、ユーザ名前空間の man ページから得られます。UID と GID のマッピングは <option>lxc.id_map</option> を使って定義できます。 例えば、コンテナ内では UID、GID が 0 として実行中のプロセスは、ホスト上では UID、GID が 100000 として見えるでしょう。実装と動作の詳細は、ユーザ名前空間の man ページから得られます。UID と GID のマッピングは <option>lxc.idmap</option> を使って定義できます。
</para> </para>
<para> <para>
@@ -1904,7 +1904,7 @@ by KATOH Yasufumi <karma at jazz.email.ne.jp>
<variablelist> <variablelist>
<varlistentry> <varlistentry>
<term> <term>
<option>lxc.id_map</option> <option>lxc.idmap</option>
</term> </term>
<listitem> <listitem>
<para> <para>
@@ -2642,8 +2642,8 @@ by KATOH Yasufumi <karma at jazz.email.ne.jp>
この設定は、コンテナ内のユーザとグループ両方の id 0-9999 の範囲を、ホスト上の 100000-109999 へマッピングします。 この設定は、コンテナ内のユーザとグループ両方の id 0-9999 の範囲を、ホスト上の 100000-109999 へマッピングします。
</para> </para>
<programlisting> <programlisting>
lxc.id_map = u 0 100000 10000 lxc.idmap = u 0 100000 10000
lxc.id_map = g 0 100000 10000 lxc.idmap = g 0 100000 10000
</programlisting> </programlisting>
</refsect2> </refsect2>

View File

@@ -1839,7 +1839,7 @@ mknod errno 0
<variablelist> <variablelist>
<varlistentry> <varlistentry>
<term> <term>
<option>lxc.id_map</option> <option>lxc.idmap</option>
</term> </term>
<listitem> <listitem>
<para> <para>
@@ -2564,8 +2564,8 @@ mknod errno 0
이 설정은 UID와 GID 둘다를 컨테이너의 0 ~ 9999를 호스트의 100000 ~ 109999로 매핑한다. 이 설정은 UID와 GID 둘다를 컨테이너의 0 ~ 9999를 호스트의 100000 ~ 109999로 매핑한다.
</para> </para>
<programlisting> <programlisting>
lxc.id_map = u 0 100000 10000 lxc.idmap = u 0 100000 10000
lxc.id_map = g 0 100000 10000 lxc.idmap = g 0 100000 10000
</programlisting> </programlisting>
</refsect2> </refsect2>

View File

@@ -86,7 +86,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
example, a process running as UID and GID 0 inside the container might example, a process running as UID and GID 0 inside the container might
appear as UID and GID 100000 on the host. The implementation and working appear as UID and GID 100000 on the host. The implementation and working
details can be gathered from the corresponding user namespace man page. details can be gathered from the corresponding user namespace man page.
UID and GID mappings can be defined with the <option>lxc.id_map</option> UID and GID mappings can be defined with the <option>lxc.idmap</option>
key. key.
</para> </para>
@@ -1129,6 +1129,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<option>lxc.cgroup.dir</option>
</term>
<listitem>
<para>
specify a directory or path in which the container's cgroup will
be created. For example, setting
<option>lxc.cgroup.dir = my-cgroup/first</option> for a container
named "c1" will create the container's cgroup as a sub-cgroup of
"my-cgroup". For example, if the user's current cgroup "my-user"
is located in the root cgroup of the cpuset controllerin in a
cgroup v1 hierarchy this would create the cgroup
"/sys/fs/cgroup/cpuset/my-user/my-cgroup/first/c1" for the
container. Any missing cgroups will be created by LXC. This
presupposes that the user has write access to its current cgroup.
</para>
</listitem>
</varlistentry>
</variablelist> </variablelist>
</refsect2> </refsect2>
@@ -1383,7 +1402,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
<variablelist> <variablelist>
<varlistentry> <varlistentry>
<term> <term>
<option>lxc.id_map</option> <option>lxc.idmap</option>
</term> </term>
<listitem> <listitem>
<para> <para>
@@ -1935,8 +1954,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
range 0-9999 in the container to the ids 100000-109999 on the host. range 0-9999 in the container to the ids 100000-109999 on the host.
</para> </para>
<programlisting> <programlisting>
lxc.id_map = u 0 100000 10000 lxc.idmap = u 0 100000 10000
lxc.id_map = g 0 100000 10000 lxc.idmap = g 0 100000 10000
</programlisting> </programlisting>
</refsect2> </refsect2>

View File

@@ -51,137 +51,68 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
</refpurpose> </refpurpose>
</refnamediv> </refnamediv>
<refsect1>
<title>Quick start</title>
<para>
You are in a hurry, and you don't want to read this man page. Ok,
without warranty, here are the commands to launch a shell inside
a container with a predefined configuration template, it may
work.
<command>@BINDIR@/lxc-execute -n foo -f
@DOCDIR@/examples/lxc-macvlan.conf /bin/bash</command>
</para>
</refsect1>
<refsect1> <refsect1>
<title>Overview</title> <title>Overview</title>
<para> <para>
The container technology is actively being pushed into the The container technology is actively being pushed into the mainstream
mainstream linux kernel. It provides the resource management Linux kernel. It provides resource management through control groups and
through the control groups aka process containers and resource resource isolation via namespaces.
isolation through the namespaces.
</para> </para>
<para> <para>
The linux containers, <command>lxc</command>, aims to use these <command>lxc</command>, aims to use these new functionalities to provide a
new functionalities to provide a userspace container object userspace container object which provides full resource isolation and
which provides full resource isolation and resource control for resource control for an applications or a full system.
an applications or a system.
</para> </para>
<para> <para>
The first objective of this project is to make the life easier <command>lxc</command> is small enough to easily manage a container with
for the kernel developers involved in the containers project and simple command lines and complete enough to be used for other purposes.
especially to continue working on the Checkpoint/Restart new
features. The <command>lxc</command> is small enough to easily
manage a container with simple command lines and complete enough
to be used for other purposes.
</para> </para>
</refsect1> </refsect1>
<refsect1> <refsect1>
<title>Requirements</title> <title>Requirements</title>
<para> <para>
The <command>lxc</command> relies on a set of functionalities The kernel version >= 3.10 shipped with the distros, will work with
provided by the kernel which needs to be active. Depending of <command>lxc</command>, this one will have less functionalities but enough
the missing functionalities the <command>lxc</command> will to be interesting.
work with a restricted number of functionalities or will simply
fail.
</para> </para>
<para> <para>
The following list gives the kernel features to be enabled in <command>lxc</command> relies on a set of functionalities provided by the
the kernel to have the full features container: kernel. The helper script <command>lxc-checkconfig</command> will give
you information about your kernel configuration, required, and missing
features.
</para> </para>
<programlisting>
* General setup
* Control Group support
-> Namespace cgroup subsystem
-> Freezer cgroup subsystem
-> Cpuset support
-> Simple CPU accounting cgroup subsystem
-> Resource counters
-> Memory resource controllers for Control Groups
* Group CPU scheduler
-> Basis for grouping tasks (Control Groups)
* Namespaces support
-> UTS namespace
-> IPC namespace
-> User namespace
-> Pid namespace
-> Network namespace
* Device Drivers
* Character devices
-> Support multiple instances of devpts
* Network device support
-> MAC-VLAN support
-> Virtual ethernet pair device
* Networking
* Networking options
-> 802.1d Ethernet Bridging
* Security options
-> File POSIX Capabilities
</programlisting>
<para>
The kernel version >= 3.10 shipped with the distros, will
work with <command>lxc</command>, this one will have less
functionalities but enough to be interesting.
The helper script <command>lxc-checkconfig</command> will give
you information about your kernel configuration.
</para>
<para>
The control group can be mounted anywhere, eg:
<command>mount -t cgroup cgroup /cgroup</command>.
It is however recommended to use cgmanager, cgroup-lite or systemd
to mount the cgroup hierarchy under /sys/fs/cgroup.
</para>
</refsect1> </refsect1>
<refsect1> <refsect1>
<title>Functional specification</title> <title>Functional specification</title>
<para> <para>
A container is an object isolating some resources of the host, A container is an object isolating some resources of the host, for the
for the application or system running in it. application or system running in it.
</para> </para>
<para> <para>
The application / system will be launched inside a The application / system will be launched inside a container specified by
container specified by a configuration that is either a configuration that is either initially created or passed as a parameter
initially created or passed as parameter of the starting commands. of the commands.
</para> </para>
<para>How to run an application in a container ?</para> <para>How to run an application in a container</para>
<para> <para>
Before running an application, you should know what are the Before running an application, you should know what are the resources you
resources you want to isolate. The default configuration is to want to isolate. The default configuration is to isolate PIDs, the sysv
isolate the pids, the sysv ipc and the mount points. If you want IPC and mount points. If you want to run a simple shell inside a
to run a simple shell inside a container, a basic configuration container, a basic configuration is needed, especially if you want to
is needed, especially if you want to share the rootfs. If you share the rootfs. If you want to run an application like
want to run an application like <command>sshd</command>, you <command>sshd</command>, you should provide a new network stack and a new
should provide a new network stack and a new hostname. If you hostname. If you want to avoid conflicts with some files eg.
want to avoid conflicts with some files <filename>/var/run/httpd.pid</filename>, you should remount
eg. <filename>/var/run/httpd.pid</filename>, you should <filename>/var/run</filename> with an empty directory. If you want to
remount <filename>/var/run</filename> with an empty avoid the conflicts in all the cases, you can specify a rootfs for the
directory. If you want to avoid the conflicts in all the cases, container. The rootfs can be a directory tree, previously bind mounted
you can specify a rootfs for the container. The rootfs can be a with the initial rootfs, so you can still use your distro but with your
directory tree, previously bind mounted with the initial rootfs,
so you can still use your distro but with your
own <filename>/etc</filename> and <filename>/home</filename> own <filename>/etc</filename> and <filename>/home</filename>
</para> </para>
<para> <para>
@@ -225,15 +156,17 @@ rootfs
</programlisting> </programlisting>
</para> </para>
<para>How to run a system in a container ?</para> <para>How to run a system in a container</para>
<para>Running a system inside a container is paradoxically easier <para>
than running an application. Why ? Because you don't have to care Running a system inside a container is paradoxically easier
about the resources to be isolated, everything need to be than running an application. Why? Because you don't have to care
about the resources to be isolated, everything needs to be
isolated, the other resources are specified as being isolated but isolated, the other resources are specified as being isolated but
without configuration because the container will set them without configuration because the container will set them
up. eg. the ipv4 address will be setup by the system container up. eg. the ipv4 address will be setup by the system container
init scripts. Here is an example of the mount points file: init scripts. Here is an example of the mount points file:
</para>
<programlisting> <programlisting>
[root@lxc debian]$ cat fstab [root@lxc debian]$ cat fstab
@@ -242,26 +175,17 @@ rootfs
/dev/pts /home/root/debian/rootfs/dev/pts none bind 0 0 /dev/pts /home/root/debian/rootfs/dev/pts none bind 0 0
</programlisting> </programlisting>
More information can be added to the container to facilitate the
configuration. For example, make accessible from the container
the resolv.conf file belonging to the host.
<programlisting>
/etc/resolv.conf /home/root/debian/rootfs/etc/resolv.conf none bind 0 0
</programlisting>
</para>
<refsect2> <refsect2>
<title>Container life cycle</title> <title>Container life cycle</title>
<para> <para>
When the container is created, it contains the configuration When the container is created, it contains the configuration
information. When a process is launched, the container will be information. When a process is launched, the container will be starting
starting and running. When the last process running inside the and running. When the last process running inside the container exits,
container exits, the container is stopped. the container is stopped.
</para> </para>
<para> <para>
In case of failure when the container is initialized, it will In case of failure when the container is initialized, it will pass
pass through the aborting state. through the aborting state.
</para> </para>
<programlisting> <programlisting>
@@ -306,17 +230,14 @@ rootfs
</refsect2> </refsect2>
<refsect2> <refsect2>
<title>Creating / Destroying container <title>Creating / Destroying containers</title>
(persistent container)</title>
<para> <para>
A persistent container object can be A persistent container object can be created via the
created via the <command>lxc-create</command> <command>lxc-create</command> command. It takes a container name as
command. It takes a container name as parameter and parameter and optional configuration file and template. The name is
optional configuration file and template. used by the different commands to refer to this container. The
The name is used by the different <command>lxc-destroy</command> command will destroy the container
commands to refer to this object.
container. The <command>lxc-destroy</command> command will
destroy the container object.
<programlisting> <programlisting>
lxc-create -n foo lxc-create -n foo
lxc-destroy -n foo lxc-destroy -n foo
@@ -326,33 +247,30 @@ rootfs
<refsect2> <refsect2>
<title>Volatile container</title> <title>Volatile container</title>
<para>It is not mandatory to create a container object <para>
before to start it. It is not mandatory to create a container object before starting it.
The container can be directly started with a The container can be directly started with a configuration file as
configuration file as parameter. parameter.
</para> </para>
</refsect2> </refsect2>
<refsect2> <refsect2>
<title>Starting / Stopping container</title> <title>Starting / Stopping container</title>
<para>When the container has been created, it is ready to run an <para>
application / system. When the container has been created, it is ready to run an application /
This is the purpose of the <command>lxc-execute</command> and system. This is the purpose of the <command>lxc-execute</command> and
<command>lxc-start</command> commands. <command>lxc-start</command> commands. If the container was not created
If the container was not created before before starting the application, the container will use the
starting the application, the container will use the configuration file passed as parameter to the command, and if there is
configuration file passed as parameter to the command, no such parameter either, then it will use a default isolation. If the
and if there is no such parameter either, then application ended, the container will be stopped, but if needed the
it will use a default isolation. <command>lxc-stop</command> command can be used to stop the container.
If the application is ended, the container will be stopped also,
but if needed the <command>lxc-stop</command> command can
be used to kill the still running application.
</para> </para>
<para> <para>
Running an application inside a container is not exactly the Running an application inside a container is not exactly the same thing
same thing as running a system. For this reason, there are two as running a system. For this reason, there are two different commands
different commands to run an application into a container: to run an application into a container:
<programlisting> <programlisting>
lxc-execute -n foo [-f config] /bin/bash lxc-execute -n foo [-f config] /bin/bash
lxc-start -n foo [-f config] [/bin/bash] lxc-start -n foo [-f config] [/bin/bash]
@@ -360,39 +278,35 @@ rootfs
</para> </para>
<para> <para>
<command>lxc-execute</command> command will run the The <command>lxc-execute</command> command will run the specified command
specified command into the container via an intermediate into a container via an intermediate process,
process, <command>lxc-init</command>. <command>lxc-init</command>.
This lxc-init after launching the specified command, This lxc-init after launching the specified command, will wait for its
will wait for its end and all other reparented processes. end and all other reparented processes. (to support daemons in the
(to support daemons in the container). container). In other words, in the container,
In other words, in the <command>lxc-init</command> has PID 1 and the first process of the
container, <command>lxc-init</command> has the pid 1 and the application has PID 2.
first process of the application has the pid 2.
</para> </para>
<para> <para>
<command>lxc-start</command> command will run directly the specified The <command>lxc-start</command> command will directly run the specified
command into the container. command in the container. The PID of the first process is 1. If no
The pid of the first process is 1. If no command is command is specified <command>lxc-start</command> will run the command
specified <command>lxc-start</command> will defined in lxc.init.cmd or if not set, <filename>/sbin/init</filename> .
run the command defined in lxc.init.cmd or if not set,
<filename>/sbin/init</filename> .
</para> </para>
<para> <para>
To summarize, <command>lxc-execute</command> is for running To summarize, <command>lxc-execute</command> is for running an
an application and <command>lxc-start</command> is better suited for application and <command>lxc-start</command> is better suited for
running a system. running a system.
</para> </para>
<para> <para>
If the application is no longer responding, is inaccessible or is If the application is no longer responding, is inaccessible or is not
not able to finish by itself, a able to finish by itself, a wild <command>lxc-stop</command> command
wild <command>lxc-stop</command> command will kill all the will kill all the processes in the container without pity.
processes in the container without pity.
<programlisting> <programlisting>
lxc-stop -n foo lxc-stop -n foo -k
</programlisting> </programlisting>
</para> </para>
</refsect2> </refsect2>
@@ -400,11 +314,10 @@ rootfs
<refsect2> <refsect2>
<title>Connect to an available tty</title> <title>Connect to an available tty</title>
<para> <para>
If the container is configured with the ttys, it is possible If the container is configured with ttys, it is possible to access it
to access it through them. It is up to the container to through them. It is up to the container to provide a set of available
provide a set of available tty to be used by the following ttys to be used by the following command. When the tty is lost, it is
command. When the tty is lost, it is possible to reconnect it possible to reconnect to it without login again.
without login again.
<programlisting> <programlisting>
lxc-console -n foo -t 3 lxc-console -n foo -t 3
</programlisting> </programlisting>
@@ -430,30 +343,28 @@ rootfs
</para> </para>
<para> <para>
This feature is enabled if the cgroup freezer is enabled in the This feature is enabled if the freezer cgroup v1 controller is enabled
kernel. in the kernel.
</para> </para>
</refsect2> </refsect2>
<refsect2> <refsect2>
<title>Getting information about container</title> <title>Getting information about container</title>
<para>When there are a lot of containers, it is hard to follow <para>
what has been created or destroyed, what is running or what are When there are a lot of containers, it is hard to follow what has been
the pids running into a specific container. For this reason, the created or destroyed, what is running or what are the PIDs running in a
following commands may be useful: specific container. For this reason, the following commands may be useful:
<programlisting> <programlisting>
lxc-ls lxc-ls -f
lxc-info -n foo lxc-info -n foo
</programlisting> </programlisting>
</para> </para>
<para> <para>
<command>lxc-ls</command> lists the containers of the <command>lxc-ls</command> lists containers.
system.
</para> </para>
<para> <para>
<command>lxc-info</command> gives information for a specific <command>lxc-info</command> gives information for a specific container.
container.
</para> </para>
<para> <para>
@@ -464,22 +375,20 @@ rootfs
lxc-info -n $i lxc-info -n $i
done done
</programlisting> </programlisting>
</para> </para>
</refsect2> </refsect2>
<refsect2> <refsect2>
<title>Monitoring container</title> <title>Monitoring container</title>
<para>It is sometime useful to track the states of a container, <para>
for example to monitor it or just to wait for a specific It is sometime useful to track the states of a container, for example to
state in a script. monitor it or just to wait for a specific state in a script.
</para> </para>
<para> <para>
<command>lxc-monitor</command> command will monitor one or <command>lxc-monitor</command> command will monitor one or several
several containers. The parameter of this command accept a containers. The parameter of this command accepts a regular expression
regular expression for example: for example:
<programlisting> <programlisting>
lxc-monitor -n "foo|bar" lxc-monitor -n "foo|bar"
</programlisting> </programlisting>
@@ -504,8 +413,8 @@ rootfs
state change and exit. This is useful for scripting to state change and exit. This is useful for scripting to
synchronize the launch of a container or the end. The synchronize the launch of a container or the end. The
parameter is an ORed combination of different states. The parameter is an ORed combination of different states. The
following example shows how to wait for a container if he went following example shows how to wait for a container if it successfully
to the background. started as a daemon.
<programlisting> <programlisting>
<![CDATA[ <![CDATA[
@@ -527,11 +436,12 @@ rootfs
</refsect2> </refsect2>
<refsect2> <refsect2>
<title>Setting the control group for container</title> <title>cgroup settings for containers</title>
<para>The container is tied with the control groups, when a <para>
container is started a control group is created and associated The container is tied with the control groups, when a container is
with it. The control group properties can be read and modified started a control group is created and associated with it. The control
when the container is running by using the lxc-cgroup command. group properties can be read and modified when the container is running
by using the lxc-cgroup command.
</para> </para>
<para> <para>
<command>lxc-cgroup</command> command is used to set or get a <command>lxc-cgroup</command> command is used to set or get a
@@ -553,18 +463,14 @@ rootfs
</refsect2> </refsect2>
</refsect1> </refsect1>
<refsect1>
<title>Bugs</title>
<para>The <command>lxc</command> is still in development, so the
command syntax and the API can change. The version 1.0.0 will be
the frozen version.</para>
</refsect1>
&seealso; &seealso;
<refsect1> <refsect1>
<title>Author</title> <title>Author</title>
<para>Daniel Lezcano <email>daniel.lezcano@free.fr</email></para> <para>Daniel Lezcano <email>daniel.lezcano@free.fr</email></para>
<para>Christian Brauner <email>christian.brauner@ubuntu.com</email></para>
<para>Serge Hallyn <email>serge@hallyn.com</email></para>
<para>Stéphane Graber <email>stgraber@ubuntu.com</email></para>
</refsect1> </refsect1>
</refentry> </refentry>

View File

@@ -1559,7 +1559,7 @@ static bool cgm_chown(void *hdata, struct lxc_conf *conf)
} }
/* /*
* TODO: this should be re-written to use the get_config_item("lxc.id_map") * TODO: this should be re-written to use the get_config_item("lxc.idmap")
* cmd api instead of getting the idmap from c->lxc_conf. The reason is * cmd api instead of getting the idmap from c->lxc_conf. The reason is
* that the id_maps may be different if the container was started with a * that the id_maps may be different if the container was started with a
* -f or -s argument. * -f or -s argument.

View File

@@ -3972,8 +3972,8 @@ void suggest_default_idmap(void)
ERROR("To pass uid mappings to lxc-create, you could create"); ERROR("To pass uid mappings to lxc-create, you could create");
ERROR("~/.config/lxc/default.conf:"); ERROR("~/.config/lxc/default.conf:");
ERROR("lxc.include = %s", LXC_DEFAULT_CONFIG); ERROR("lxc.include = %s", LXC_DEFAULT_CONFIG);
ERROR("lxc.id_map = u 0 %u %u", uid, urange); ERROR("lxc.idmap = u 0 %u %u", uid, urange);
ERROR("lxc.id_map = g 0 %u %u", gid, grange); ERROR("lxc.idmap = g 0 %u %u", gid, grange);
free(gname); free(gname);
free(uname); free(uname);

View File

@@ -96,10 +96,10 @@ enum idtype {
/* /*
* id_map is an id map entry. Form in confile is: * id_map is an id map entry. Form in confile is:
* lxc.id_map = u 0 9800 100 * lxc.idmap = u 0 9800 100
* lxc.id_map = u 1000 9900 100 * lxc.idmap = u 1000 9900 100
* lxc.id_map = g 0 9800 100 * lxc.idmap = g 0 9800 100
* lxc.id_map = g 1000 9900 100 * lxc.idmap = g 1000 9900 100
* meaning the container can use uids and gids 0-99 and 1000-1099, * meaning the container can use uids and gids 0-99 and 1000-1099,
* with [ug]id 0 mapping to [ug]id 9800 on the host, and [ug]id 1000 to * with [ug]id 0 mapping to [ug]id 9800 on the host, and [ug]id 1000 to
* [ug]id 9900 on the host. * [ug]id 9900 on the host.

View File

@@ -102,8 +102,8 @@ mkdir -p $HDIR/.config/lxc/
cat > $HDIR/.config/lxc/default.conf << EOF cat > $HDIR/.config/lxc/default.conf << EOF
lxc.net.0.type = veth lxc.net.0.type = veth
lxc.net.0.link = lxcbr0 lxc.net.0.link = lxcbr0
lxc.id_map = u 0 910000 9999 lxc.idmap = u 0 910000 9999
lxc.id_map = g 0 910000 9999 lxc.idmap = g 0 910000 9999
EOF EOF
chown -R $TUSER: $HDIR chown -R $TUSER: $HDIR

View File

@@ -118,8 +118,8 @@ mkdir -p $HDIR/.config/lxc/
cat > $HDIR/.config/lxc/default.conf << EOF cat > $HDIR/.config/lxc/default.conf << EOF
lxc.net.0.type = veth lxc.net.0.type = veth
lxc.net.0.link = lxcbr0 lxc.net.0.link = lxcbr0
lxc.id_map = u 0 910000 9999 lxc.idmap = u 0 910000 9999
lxc.id_map = g 0 910000 9999 lxc.idmap = g 0 910000 9999
EOF EOF
chown -R $TUSER: $HDIR chown -R $TUSER: $HDIR

View File

@@ -81,8 +81,8 @@ usermod -v 910000-919999 -w 910000-919999 usernic-user
mkdir -p /home/usernic-user/.config/lxc/ mkdir -p /home/usernic-user/.config/lxc/
cat > /home/usernic-user/.config/lxc/default.conf << EOF cat > /home/usernic-user/.config/lxc/default.conf << EOF
lxc.net.0.type = empty lxc.net.0.type = empty
lxc.id_map = u 0 910000 10000 lxc.idmap = u 0 910000 10000
lxc.id_map = g 0 910000 10000 lxc.idmap = g 0 910000 10000
EOF EOF
if which cgm >/dev/null 2>&1; then if which cgm >/dev/null 2>&1; then

View File

@@ -455,6 +455,34 @@ int main(int argc, char *argv[])
return -1; return -1;
} }
/* lxc.idmap
* We can't really save the config here since save_config() wants to
* chown the container's directory but we haven't created an on-disk
* container. So let's test set-get-clear.
*/
if (set_get_compare_clear_save_load(
c, "lxc.idmap", "u 0 100000 1000000000", NULL, false) < 0) {
lxc_error("%s\n", "lxc.idmap");
goto non_test_error;
}
if (!c->set_config_item(c, "lxc.idmap", "u 1 100000 10000000")) {
lxc_error("%s\n", "failed to set config item "
"\"lxc.idmap\" to \"u 1 100000 10000000\"");
return -1;
}
if (!c->set_config_item(c, "lxc.idmap", "g 1 100000 10000000")) {
lxc_error("%s\n", "failed to set config item "
"\"lxc.idmap\" to \"g 1 100000 10000000\"");
return -1;
}
if (!c->get_config_item(c, "lxc.idmap", retval, sizeof(retval))) {
lxc_error("%s\n", "failed to get config item \"lxc.cgroup\"");
return -1;
}
c->clear_config(c); c->clear_config(c);
c->lxc_conf = NULL; c->lxc_conf = NULL;

View File

@@ -287,8 +287,8 @@ configure_container() {
if [[ $unprivileged && $unprivileged == true ]] ; then if [[ $unprivileged && $unprivileged == true ]] ; then
if [[ $flush_owner == true ]] ; then if [[ $flush_owner == true ]] ; then
unprivileged_options=" unprivileged_options="
lxc.id_map = u 0 ${mapped_uid} 65536 lxc.idmap = u 0 ${mapped_uid} 65536
lxc.id_map = g 0 ${mapped_gid} 65536 lxc.idmap = g 0 ${mapped_gid} 65536
" "
fi fi