src/lxc/tools/lxc-checkconfig
src/lxc/tools/lxc-update-config
src/lxc/lxc-checkpoint
-src/lxc/lxc-clone
src/lxc/lxc-console
src/lxc/lxc-config
src/lxc/lxc-copy
src/lxc/lxc-shutdown
src/lxc/lxc-snapshot
src/lxc/lxc-start
-src/lxc/tools/lxc-start-ephemeral
src/lxc/lxc-stop
src/lxc/lxc-top
src/lxc/lxc-unfreeze
# allow pre-mount hooks to stage mounts under /var/lib/lxc/<container>/
mount -> /var/lib/lxc/{**,},
- # required for some pre-mount hooks (like the new lxc-start-ephemeral)
+ # required for some pre-mount hooks
mount fstype=overlayfs,
mount fstype=aufs,
mount fstype=ecryptfs,
complete -o default -F _lxc_generic_t lxc-create
complete -o default -F _lxc_generic_o lxc-copy
- complete -o default -F _lxc_generic_o lxc-start-ephemeral
}
doc/lxc-cgroup.sgml
doc/lxc-checkconfig.sgml
doc/lxc-checkpoint.sgml
- doc/lxc-clone.sgml
doc/lxc-config.sgml
doc/lxc-console.sgml
doc/lxc-copy.sgml
doc/lxc-ls.sgml
doc/lxc-monitor.sgml
doc/lxc-snapshot.sgml
- doc/lxc-start-ephemeral.sgml
doc/lxc-start.sgml
doc/lxc-stop.sgml
doc/lxc-top.sgml
doc/ja/lxc-cgroup.sgml
doc/ja/lxc-checkconfig.sgml
doc/ja/lxc-checkpoint.sgml
- doc/ja/lxc-clone.sgml
doc/ja/lxc-config.sgml
doc/ja/lxc-console.sgml
doc/ja/lxc-copy.sgml
doc/ja/lxc-ls.sgml
doc/ja/lxc-monitor.sgml
doc/ja/lxc-snapshot.sgml
- doc/ja/lxc-start-ephemeral.sgml
doc/ja/lxc-start.sgml
doc/ja/lxc-stop.sgml
doc/ja/lxc-top.sgml
doc/ko/lxc-cgroup.sgml
doc/ko/lxc-checkconfig.sgml
doc/ko/lxc-checkpoint.sgml
- doc/ko/lxc-clone.sgml
doc/ko/lxc-config.sgml
doc/ko/lxc-console.sgml
doc/ko/lxc-copy.sgml
doc/ko/lxc-ls.sgml
doc/ko/lxc-monitor.sgml
doc/ko/lxc-snapshot.sgml
- doc/ko/lxc-start-ephemeral.sgml
doc/ko/lxc-start.sgml
doc/ko/lxc-stop.sgml
doc/ko/lxc-top.sgml
src/lxc/lxc.functions
src/lxc/cmd/lxc-checkconfig
src/lxc/cmd/lxc-update-config
- src/lxc/tools/lxc-start-ephemeral
src/lxc/version.h
src/python-lxc/Makefile
\
lxc.7
-if ENABLE_DEPRECATED
- man_MANS += lxc-clone.1
-if ENABLE_PYTHON
- man_MANS += lxc-start-ephemeral.1
-endif
-endif
-
%.1 : %.sgml
$(db2xman) --encoding=UTF-8 $<
test "$(shell basename $@)" != "$@" && mv $(shell basename $@) $@ || true
+++ /dev/null
-<!--
-
-lxc: linux Container library
-
-(C) Copyright IBM Corp. 2007, 2008
-
-Authors:
-Daniel Lezcano <daniel.lezcano at free.fr>
-Serge Hallyn <serge.hallyn 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
-
-Translated into Japanese
-by KATOH Yasufumi <karma at jazz.email.ne.jp>
-
--->
-
-<!DOCTYPE refentry PUBLIC @docdtd@ [
-
-<!ENTITY commonoptions SYSTEM "@builddir@/common_options.sgml">
-<!ENTITY seealso SYSTEM "@builddir@/see_also.sgml">
-]>
-
-<refentry>
-
- <docinfo><date>@LXC_GENERATE_DATE@</date></docinfo>
-
- <refmeta>
- <refentrytitle>lxc-clone</refentrytitle>
- <manvolnum>1</manvolnum>
- </refmeta>
-
- <refnamediv>
- <refname>lxc-clone</refname>
-
- <refpurpose>
- <!--
- clone a new container from an existing one.
- -->
- 既存のコンテナからの新しいコンテナのクローン
- </refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>lxc-clone</command>
- <arg choice="opt">-s </arg>
- <arg choice="opt">-K </arg>
- <arg choice="opt">-M </arg>
- <arg choice="opt">-H </arg>
- <arg choice="opt">-B <replaceable>backingstore</replaceable></arg>
- <arg choice="opt">-L <replaceable>fssize</replaceable></arg>
- <arg choice="opt">-p <replaceable>lxcpath</replaceable></arg>
- <arg choice="opt">-P <replaceable>newlxcpath</replaceable></arg>
- <arg choice="opt">-R </arg>
- <arg choice="req">-o <replaceable>orig</replaceable></arg>
- <arg choice="req">-n <replaceable>new</replaceable></arg>
- <arg choice="opt">-- hook arguments</arg>
- </cmdsynopsis>
- <cmdsynopsis>
- <command>lxc-clone</command>
- <arg choice="opt">-s </arg>
- <arg choice="opt">-K </arg>
- <arg choice="opt">-M </arg>
- <arg choice="opt">-H </arg>
- <arg choice="opt">-B <replaceable>backingstore</replaceable></arg>
- <arg choice="opt">-L <replaceable>fssize</replaceable></arg>
- <arg choice="opt">-p <replaceable>lxcpath</replaceable></arg>
- <arg choice="opt">-P <replaceable>newlxcpath</replaceable></arg>
- <arg choice="opt">-R </arg>
- <arg choice="req">orig</arg>
- <arg choice="req">new</arg>
- <arg choice="opt">-- hook arguments</arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
- <refsect1>
- <title><!-- Description -->説明</title>
-
- <para>
- <!--
- <command>lxc-clone</command> Creates a new container as a clone of an existing
- container. Two types of clones are supported: copy and snapshot. A copy
- clone copies the root filessytem from the original container to the new. A
- snapshot filesystem uses the backing store's snapshot functionality to create
- a very small copy-on-write snapshot of the original container. Snapshot
- clones require the new container backing store to support snapshotting. Currently
- this includes only aufs, btrfs, lvm, overlayfs and zfs. LVM devices do not support
- snapshots of snapshots.
- -->
- <command>lxc-clone</command> は、新しいコンテナを既に存在するコンテナのクローンとして作製します。
- クローンは 2 つのタイプをサポートします: コピーとスナップショットです。
- コピータイプのクローンは元のコンテナから新しいコンテナへ root ファイルシステムをコピーします。
- スナップショットファイルシステムは、バッキングストアのスナップショット機能を使い、元のコンテナの非常に小さな copy-on-write でのスナップショットを作製します。
- スナップショットでのクローンは、新しいコンテナのバッキングストアとしてスナップショット機能のサポートが必要になります。
- 現時点では、このようなバッキングストアとしては aufs, btrfs, lvm, overlayfs, zfs のみをサポートします。
- LVM デバイスはスナップショットのスナップショットはサポートしていません。
- </para>
-
- <para>
- <!--
- The backing store of the new container will be the same type as the
- original container, with one exception, overlay containers.
- aufs and overlayfs snapshots can be created of directory backed
- containers. This can be requested by using (for overlayfs) the
- <replaceable>-B overlayfs</replaceable> arguments.
- -->
- 新しいコンテナのバッキングストアは、オーバーレイタイプのコンテナを除いては元のコンテナのタイプと同じになります。
- ディレクトリバックエンドのコンテナのスナップショットを aufs もしくは overlayfs で作成することは可能です。
- 例えば、overlayfs の場合は <replaceable>-B overlayfs</replaceable> という引数を使って指定することが可能です。
- </para>
-
- <para>
- <!--
- The names of the original and new container can be given (in that order)
- after all options, or can be specified with the
- <replaceable>-o</replaceable> and <replaceable>-n</replaceable> options,
- respectively.
- -->
- 元のコンテナと新しいコンテナの名前は、全てのオプションの後に順番に与えることも、<replaceable>-o</replaceable> と <replaceable>-n</replaceable> オプションを使ってそれぞれ指定することも可能です。
- </para>
-
- </refsect1>
-
- <refsect1>
-
- <title><!-- Options -->オプション</title>
-
- <variablelist>
-
- <varlistentry>
- <term>
- <option>-s, --snapshot</option>
- </term>
- <listitem>
- <para>
- <!--
- The new container's rootfs will be a snapshot of the original. This option can be specified when the backing store is LVM, btrfs or zfs, and must be specified when you want to snapshot using aufs or overlayfs.
- -->
- 新しいコンテナの rootfs はオリジナルのスナップショットとなります。
- このオプションはバッキングストアが LVM か btrfs か zfs の時に使用できます。
- また、スナップショットを aufs か overlayfs で取得したい場合は指定する必要があります。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-K, --keepname</option>
- </term>
- <listitem>
- <para>
- <!--
- Do not change the hostname of the container (in the root
- filesystem).
- -->
- (root ファイルシステム内では) コンテナのホスト名を変更しません。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-M, --keepmac</option>
- </term>
- <listitem>
- <para>
- <!--
- Use the same MAC address as the original container, rather than
- generating a new random one.
- -->
- 新しい MAC アドレスをランダムに生成せずに、元のコンテナと同じ MAC アドレスを使用します。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-H, --copyhooks</option>
- </term>
- <listitem>
- <para>
- <!--
- Copy all mount hooks into the new container's directory, and
- update any lxcpaths and container names as needed.
- -->
- 全てのマウントフックを新しいコンテナのディレクトリにコピーします。
- そして、lxcpath とコンテナ名を必要に応じて更新します。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-L, --fssize <replaceable>fssize</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- In the case of a block device backed container, a size for the new
- block device. By default, the new device will be made the
- same size as the original.
- -->
- ブロックデバイスのバックエンドのコンテナの場合、新しいブロックデバイスのサイズ。
- デフォルトでは、新しいデバイスは元のデバイスと同じサイズとなります。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-p, --lxcpath <replaceable>lxcpath</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- The lxcpath of the original container. By default, the system
- wide configured lxcpath will be used.
- -->
- オリジナルのコンテナの lxcpath。デフォルトでは、システム全体で設定された lxcpath が使われます。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-P, --newpath <replaceable>newlxcpath</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- The lxcpath for the new container. By default the same lxcpath
- as the original will be used. Note that with btrfs snapshots,
- changing lxcpaths may not be possible, as subvolume snapshots
- must be in the same btrfs filesystem.
- -->
- 新しいコンテナの lxcpath。
- デフォルトでは、オリジナルの lxcpath と同じものが使われます。
- btrfs のスナップショットの場合は注意が必要で、lxcpath の変更はできない可能性があります。
- これは subvolume のスナップショットが、同じ btrfs ファイルシステム上に存在しなければならないからです。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-B, --backingstore <replaceable>backingstore</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Select a different backing store for the new container. By
- default the same as the original container's is used. Note that
- currently changing the backingstore is only supported for
- aufs and overlayfs snapshots of directory backed containers. Valid
- backing stores include dir (directory), aufs, btrfs, lvm, zfs, loop
- and overlayfs.
- -->
- 新しいコンテナで元のコンテナと違うバッキングストアを使う場合のバッキングストアを選択します。
- デフォルトでは元のコンテナと同じものが使われます。
- 現時点では、バッキングストアの変更は、ディレクトリバックエンドのコンテナに対する aufs と overlayfs のスナップショットに対してのみサポートされます。
- 有効なバッキングストアは dir(directory), aufs, btrfs, lvm, zfs, loop, overlayfs です。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-R, --rename</option>
- </term>
- <listitem>
- <para>
- <!--
- Rename an existing container.
- <replaceable>orig</replaceable> is renamed <replaceable>new</replaceable>.
- -->
- コンテナの名前を変更します。<replaceable>orig</replaceable> を <replaceable>new</replaceable> という名前に変更します。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-o, --orig <replaceable>orig</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- The name of the original container to clone.
- -->
- クローンしたい元のコンテナの名前。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-n, --new <replaceable>new</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- The name of the new container to create.
- -->
- 作製する新しいコンテナの名前。
- </para>
- </listitem>
- </varlistentry>
-
-
- </variablelist>
-
- </refsect1>
-
- <refsect1>
- <title>Clone hook</title>
- <para>
- <!--
- If the container being cloned has one or more <filename>lxc.hook.clone</filename>
- specified, then the specified hooks will be called for the new container. The
- first 3 arguments passed to the clone hook will be the container name, a section
- ('lxc'), and the hook type ('clone'). Extra arguments passed
- <command>lxc-clone</command> will be passed to the hook program starting at
- argument 4. The <filename>LXC_ROOTFS_MOUNT</filename> environment variable gives
- the path under which the container's root filesystem is mounted. The
- configuration file pathname is stored in <filename>LXC_CONFIG_FILE</filename>, the
- new container name in <filename>LXC_NAME</filename>, the old container name in
- <filename>LXC_SRC_NAME</filename>, and the path or device on which
- the rootfs is located is in <filename>LXC_ROOTFS_PATH</filename>.
- -->
- クローンされるコンテナに 1 つ以上の <filename>lxc.hook.clone</filename> の指定が存在する場合、指定されたフックは新しいコンテナに対して呼ばれます。
- クローンフックに渡される最初の 3 つの引数は、コンテナ名、セクション ('lxc')、フックタイプ ('clone') となります。
- <command>lxc-clone</command> に渡される追加の引数は、フックプログラムに渡される引数の 4 番目以降となります。
- <filename>LXC_ROOTFS_MOUNT</filename> 環境変数には、コンテナの root ファイルシステムがマウントされるパスが与えられます。
- 設定ファイルのパス名は <filename>LXC_CONFIG_FILE</filename> に、新しいコンテナ名は <filename>LXC_NAME</filename>、古いコンテナ名は <filename>LXC_SRC_NAME</filename> に、rootfs のあるパスまたはデバイスは <filename>LXC_ROOTFS_PATH</filename> に保存されます。
- </para>
- </refsect1>
-
- <refsect1>
- <title><!-- Notes -->注意</title>
- <para>
- <!--
- <command>lxc-clone</command> is deprecated in favor of
- <command>lxc-copy</command>.
- -->
- <command>lxc-clone</command> は <command>lxc-copy</command> に置き換えられ、廃止される予定です。
- </para>
- </refsect1>
-
- &seealso;
-
- <refsect1>
- <title><!-- Author -->作者</title>
- <para>Serge Hallyn <email>serge.hallyn@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:
--->
+++ /dev/null
-
-<!--
-
-(C) Copyright Canonical Ltd. 2013
-
-Authors:
-Stéphane Graber <stgraber@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
-
-Translated into Japanese
-by KATOH Yasufumi <karma at jazz.email.ne.jp>
-
--->
-
-<!DOCTYPE refentry PUBLIC @docdtd@ [
-
-<!ENTITY seealso SYSTEM "@builddir@/see_also.sgml">
-]>
-
-<refentry>
-
- <docinfo><date>@LXC_GENERATE_DATE@</date></docinfo>
-
- <refmeta>
- <refentrytitle>lxc-start-ephemeral</refentrytitle>
- <manvolnum>1</manvolnum>
- </refmeta>
-
- <refnamediv>
- <refname>lxc-start-ephemeral</refname>
-
- <refpurpose>
- <!--
- start an ephemeral copy of an existing container
- -->
- 存在するコンテナの一時的なコピーを起動
- </refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>lxc-start-ephemeral</command>
- <arg choice="opt">-o</arg>
- <arg choice="opt">-n</arg>
- <arg choice="opt">-d</arg>
- <arg choice="opt">--bdir</arg>
- <arg choice="opt">--user</arg>
- <arg choice="opt">--key</arg>
- <arg choice="opt">--storage-type</arg>
- <arg choice="opt">--union-type</arg>
- <arg choice="opt">--keep-data</arg>
- <arg choice="opt">COMMAND</arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
- <refsect1>
- <title><!-- Description -->説明</title>
- <para>
- <!--
- <command>lxc-start-ephemeral</command> start an ephemeral copy of an
- existing container.
- -->
- <command>lxc-start-ephemeral</command> は、存在するコンテナの一時的なコピーからコンテナを起動します。
- </para>
- </refsect1>
-
- <refsect1>
- <title><!-- Options -->オプション</title>
- <variablelist>
- <varlistentry>
- <term>
- <option>-o, --orig <replaceable>orig</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Original container name
- -->
- コピー元のコンテナ名
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-n, --name <replaceable>name</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Name of the ephemeral container (defaults to a random suffix).
- -->
- 一時的なコンテナの名前 (デフォルトではランダムなサフィックスが付与されます)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-d, --daemon</option>
- </term>
- <listitem>
- <para>
- <!--
- Start the container in background and print the name and IP.
- This option can't be used if a command is passed.
- -->
- コンテナをバックグラウンドで実行し、名前と IP アドレスを表示します。
- このオプションはコマンドを実行させたいときには使用することはできません。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-b, --bdir <replaceable>bdir</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Directory to bind mount into container.
- Can be passed multiple times.
- -->
- コンテナ内にバインドマウントするためのディレクトリ。
- 複数回指定できます。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-u, --user <replaceable>user</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- The user to connect to the container as.
- Used when passing a command to lxc-start-ephemeral.
- -->
- コンテナに接続するためのユーザ。
- lxc-start-ephemeral にコマンドを指定するときに使います。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-S, --key <replaceable>key</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Copy the provided SSH public key into the container.
- -->
- コンテナ内にコピーする既存の SSH 公開鍵。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-s, --storage-type <replaceable>storage type</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Specify the type of storage used by the container. Valid types are tmpfs or dir.
- -->
- コンテナが使うストレージのタイプ。tmpfs か dir を指定できます。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-U, --union-type <replaceable>union type</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Force a specific union file system.
- Can be one of: overlayfs aufs
- -->
- 指定した union ファイルシステムを使用します。
- overlayfs か aufs のどちらかが使用できます。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-k, --keep-data</option>
- </term>
- <listitem>
- <para>
- <!--
- Use a persistent backend instead of tmpfs.
- With this option, you can lxc-stop and lxc-start the no longer so
- ephemeral container (it's still an overlay, but a persistent one).
- -->
- tmpfs の代わりに永続的なバックエンドを使用します。このオプションを使うことにより、もはや一時的なコンテナではないので、lxc-stop や lxc-start を使用することができます (オーバーレイな状態ですが、永続的です)。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>COMMAND</option>
- </term>
- <listitem>
- <para>
- <!--
- Immediately run the provided command in the container.
- This uses attach if the kernel supports it, otherwise uses ssh.
- This is incompatible with daemon mode.
- -->
- 即座に指定したコマンドをコンテナ内で実行します。
- コマンドを実行する際、カーネルがサポートしている場合は lxc-start-ephemeral は attach を使います。
- カーネルがサポートしていない場合は ssh を使います。
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>See Also</title>
-
- <simpara>
- <citerefentry>
- <refentrytitle>lxc-start</refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry>,
- </simpara>
- </refsect1>
-
- <refsect1>
- <title><!-- Examples -->例</title>
- <variablelist>
- <varlistentry>
- <term>lxc-start-ephemeral -o p1</term>
- <listitem>
- <para>
- <!--
- Simply start an ephemeral container and attach to the console.
- This container will be based on existing container "p1".
- -->
- 単に一時的なコンテナを開始させ、コンソールにアタッチします。
- このコンテナは "p1" という既存のコンテナを基にします。
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>lxc-start-ephemeral -o p1 -n p1-ephemeral -d</term>
- <listitem>
- <para>
- <!--
- Start an ephemeral container based on p1 called p1-ephemeral and
- print its IP and name to the console instead of attaching.
- -->
- p1 を基にした一時的なコンテナを開始し、コンソールにアタッチする代わりに IP アドレスと名前を表示します。
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title><!-- Notes -->注意</title>
- <para>
- <!--
- <command>lxc-start-ephemeral</command> is deprecated in favor of
- <command>lxc-copy</command>.
- -->
- <command>lxc-start-ephemeral</command> は <command>lxc-copy</command> に置き換えられ、廃止される予定です。
- </para>
- </refsect1>
-
- &seealso;
-
- <refsect1>
- <title><!-- Author -->作者</title>
- <para>Stéphane Graber <email>stgraber@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:
--->
+++ /dev/null
-<!--
-
-lxc: linux Container library
-
-(C) Copyright IBM Corp. 2007, 2008
-
-Authors:
-Daniel Lezcano <daniel.lezcano at free.fr>
-Serge Hallyn <serge.hallyn 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
-
-Translated into Korean
-by Sungbae Yoo <sungbae.yoo at samsung.com>
-
--->
-
-<!DOCTYPE refentry PUBLIC @docdtd@ [
-
-<!ENTITY commonoptions SYSTEM "@builddir@/common_options.sgml">
-<!ENTITY seealso SYSTEM "@builddir@/see_also.sgml">
-]>
-
-<refentry>
-
- <docinfo><date>@LXC_GENERATE_DATE@</date></docinfo>
-
- <refmeta>
- <refentrytitle>lxc-clone</refentrytitle>
- <manvolnum>1</manvolnum>
- </refmeta>
-
- <refnamediv>
- <refname>lxc-clone</refname>
-
- <refpurpose>
- <!--
- clone a new container from an existing one.
- -->
- 존재하는 컨테이너를 새로운 컨테이너로 복제
- </refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>lxc-clone</command>
- <arg choice="opt">-s </arg>
- <arg choice="opt">-K </arg>
- <arg choice="opt">-M </arg>
- <arg choice="opt">-H </arg>
- <arg choice="opt">-B <replaceable>backingstore</replaceable></arg>
- <arg choice="opt">-L <replaceable>fssize</replaceable></arg>
- <arg choice="opt">-p <replaceable>lxcpath</replaceable></arg>
- <arg choice="opt">-P <replaceable>newlxcpath</replaceable></arg>
- <arg choice="opt">-R </arg>
- <arg choice="req">-o <replaceable>orig</replaceable></arg>
- <arg choice="req">-n <replaceable>new</replaceable></arg>
- <arg choice="opt">-- hook arguments</arg>
- </cmdsynopsis>
- <cmdsynopsis>
- <command>lxc-clone</command>
- <arg choice="opt">-s </arg>
- <arg choice="opt">-K </arg>
- <arg choice="opt">-M </arg>
- <arg choice="opt">-H </arg>
- <arg choice="opt">-B <replaceable>backingstore</replaceable></arg>
- <arg choice="opt">-L <replaceable>fssize</replaceable></arg>
- <arg choice="opt">-p <replaceable>lxcpath</replaceable></arg>
- <arg choice="opt">-P <replaceable>newlxcpath</replaceable></arg>
- <arg choice="opt">-R </arg>
- <arg choice="req">orig</arg>
- <arg choice="req">new</arg>
- <arg choice="opt">-- hook arguments</arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
- <refsect1>
- <title><!-- Description -->설명</title>
-
- <para>
- <!--
- <command>lxc-clone</command> Creates a new container as a clone of an existing
- container. Two types of clones are supported: copy and snapshot. A copy
- clone copies the root filessytem from the original container to the new. A
- snapshot filesystem uses the backing store's snapshot functionality to create
- a very small copy-on-write snapshot of the original container. Snapshot
- clones require the new container backing store to support snapshotting. Currently
- this includes only aufs, btrfs, lvm, overlayfs and zfs. LVM devices do not support
- snapshots of snapshots.
- -->
- <command>lxc-clone</command>는 존재하는 컨테이너를 복제하여 새로운 컨테이너를 생성한다. 복사, 스냅샷의 두가지 형태의 복제가 지원된다.
- 복사는 원본 컨테이너의 루트 파일시스템을 그대로 새 컨테이너로 복사한다..
- 스냅샷은 저장소의 스냅샷 기능을 이용하여 원본 컨테이너의 copy-on-write 형태로 매우 작은 스냅샷을 생성한다. 스냅샷을 사용하기 위해서는 새 컨테이너의 저장소가 스냅샷 기능을 지원하여야 한다. 현재 스냅샷 기능을 지원하는 것은 aufs, btrfs, lvm, overlayfs, zfs 정도이다. lvm은 스냅샷의 스냅샷은 지원하지 않는다.
- </para>
-
- <para>
- <!--
- The backing store of the new container will be the same type as the
- original container, with one exception, overlay containers.
- aufs and overlayfs snapshots can be created of directory backed
- containers. This can be requested by using (for overlayfs) the
- <replaceable>-B overlayfs</replaceable> arguments.
- -->
- 오버레이 컨테이너들을 제외하면, 새 컨테이너의 저장소는 원본과 같은 종류를 사용한다.
- aufs와 overlayfs의 스냅샷은 디렉토리로 구성된 컨테이너로 생성할 수 있다. overlayfs의 경우 <replaceable>-B overlayfs</replaceable> 인수를 통해 이를 지정할 수 있다.
- </para>
-
- <para>
- <!--
- The names of the original and new container can be given (in that order)
- after all options, or can be specified with the
- <replaceable>-o</replaceable> and <replaceable>-n</replaceable> options,
- respectively.
- -->
- 원본 컨테이너와 새 컨테이너의 이름은 모든 옵션 뒤에 원본, 새 컨테이너 순으로 지정할 수 있다. 또는 <replaceable>-o</replaceable>과 <replaceable>-n</replaceable> 옵션을 사용하여 지정할 수 있다.
- </para>
-
- </refsect1>
-
- <refsect1>
-
- <title><!-- Options -->옵션</title>
-
- <variablelist>
-
- <varlistentry>
- <term>
- <option>-s, --snapshot</option>
- </term>
- <listitem>
- <para>
- <!--
- The new container's rootfs will be a snapshot of the original. This option can be specified when the backing store is LVM, btrfs or zfs, and must be specified when you want to snapshot using aufs or overlayfs.
- -->
- 새로 생성하는 컨테이너의 루트 파일시스템은 원본의 스냅샷으로 한다. 이 옵션은 저장소가 lvm, btrfs, zfs 일때 지정할 수 있다. 또한 aufs나 overlayfs를 이용한 스냅샷을 원할때만 지정해야 한다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-K, --keepname</option>
- </term>
- <listitem>
- <para>
- <!--
- Do not change the hostname of the container (in the root
- filesystem).
- -->
- (루트 파일시스템에서) 컨테이너의 호스트 이름을 변경하지 않는다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-M, --keepmac</option>
- </term>
- <listitem>
- <para>
- <!--
- Use the same MAC address as the original container, rather than
- generating a new random one.
- -->
- 새로 무작위한 주소를 만들지 않고, 원본과 같은 MAC 주소를 사용한다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-H, --copyhooks</option>
- </term>
- <listitem>
- <para>
- <!--
- Copy all mount hooks into the new container's directory, and
- update any lxcpaths and container names as needed.
- -->
- 모든 마운트 훅들을 새 컨테이너의 디렉토리로 복사한다. 그리고 lxcpath와 컨테이너 이름을 필요에 따라 갱신한다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-L, --fssize <replaceable>fssize</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- In the case of a block device backed container, a size for the new
- block device. By default, the new device will be made the
- same size as the original.
- -->
- 블록장치로 구성된 컨테이너의 경우, 새로운 블록 장치의 크기.
- 기본으로 새 디바이스는 원본과 같은 크기로 만들어진다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-p, --lxcpath <replaceable>lxcpath</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- The lxcpath of the original container. By default, the system
- wide configured lxcpath will be used.
- -->
- 원본 컨테이너의 lxcpath. 기본값은 시스템 전역으로 설정되어 잇는 lxcpath를 사용한다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-P, --newpath <replaceable>newlxcpath</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- The lxcpath for the new container. By default the same lxcpath
- as the original will be used. Note that with btrfs snapshots,
- changing lxcpaths may not be possible, as subvolume snapshots
- must be in the same btrfs filesystem.
- -->
- 새로 생성될 컨테이너의 lxcpath.
- 기본값은 원본 컨테이너의 lxcpath와 같다.
- btrfs의 스냅샷의 경우 lxcpath 변경이 불가능 할 수 있음을 주의해야 한다. 왜냐하면 서브볼륨 스냅샷이 같은 btrfs 파일시스템 내에 있어야 하기 때문이다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-B, --backingstore <replaceable>backingstore</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Select a different backing store for the new container. By
- default the same as the original container's is used. Note that
- currently changing the backingstore is only supported for
- aufs and overlayfs snapshots of directory backed containers. Valid
- backing stores include dir (directory), aufs, btrfs, lvm, zfs, loop
- and overlayfs.
- -->
- 새 컨테이너의 저장소를 선택한다.
- 기본 값은 원본 컨테이너가 쓰던 것과 같은 것으로 되어 있다.
- 현재 저장소를 다른 것으로 변경하는 것은 디렉토리로 구성된 컨테이너의 aufs와 overlayfs 스냅샷에서만 지원된다.
- 가능한 값은 dir(디렉토리), aufs, btrfs, lvm zfs, loop 그리고 ovelayfs 이다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-R, --rename</option>
- </term>
- <listitem>
- <para>
- <!--
- Rename an existing container.
- <replaceable>orig</replaceable> is renamed <replaceable>new</replaceable>.
- -->
- 컨테이너의 이름을 변경한다. <replaceable>orig</replaceable>를 <replaceable>new</replaceable>로 이름을 바꾼다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
-
- <option>-o, --orig <replaceable>orig</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- The name of the original container to clone.
- -->
- 복제할 원본 컨테이너의 이름.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-n, --new <replaceable>new</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- The name of the new container to create.
- -->
- 생성할 새 컨테이너의 이름.
- </para>
- </listitem>
- </varlistentry>
-
-
- </variablelist>
-
- </refsect1>
-
- <refsect1>
- <title>Clone hook</title>
- <para>
- <!--
- If the container being cloned has one or more <filename>lxc.hook.clone</filename>
- specified, then the specified hooks will be called for the new container. The
- first 3 arguments passed to the clone hook will be the container name, a section
- ('lxc'), and the hook type ('clone'). Extra arguments passed
- <command>lxc-clone</command> will be passed to the hook program starting at
- argument 4. The <filename>LXC_ROOTFS_MOUNT</filename> environment variable gives
- the path under which the container's root filesystem is mounted. The
- configuration file pathname is stored in <filename>LXC_CONFIG_FILE</filename>, the
- new container name in <filename>LXC_NAME</filename>, the old container name in
- <filename>LXC_SRC_NAME</filename>, and the path or device on which
- the rootfs is located is in <filename>LXC_ROOTFS_PATH</filename>.
- -->
- 만약 복제되는 컨테이너가 1개 이상의 <filename>lxc.hook.clone</filename>을 지정했다면, 지정된 훅은 새 컨테이너가 생성될 때 실행될 것이다.
- 먼저 컨테이너 이름, 섹션('lxc'), 훅 종류('clone') 3개의 인수가 복제 훅에 전달 된다. 그리고 4번째 인수 부터는 <command>lxc-clone</command>로 넘겨줄 수 있다.
- <filename>LXC_ROOTFS_MOUNT</filename> 환경변수는 컨테이너의 루트 파일시스템이 마운트되어 있는 경로를 넘겨준다.
- 새 컨테이너의 이름은 <filename>LXC_NAME</filename> 변수에, 이전 컨테이너의 이름은 <filename>LXC_SRC_NAME</filename> 환경변수에 담겨 있다. 그리고 루트 파일시스템이 위치하고 있는 곳은 <filename>LXC_ROOTFS_PATH</filename>로 넘겨준다.
- </para>
- </refsect1>
-
- <refsect1>
- <title><!-- Notes -->주의</title>
- <para>
- <!--
- <command>lxc-clone</command> is deprecated in favor of
- <command>lxc-copy</command>.
- -->
- <command>lxc-clone</command>는 <command>lxc-copy</command>로 대체되었으며, 제거될 예정이다.
- </para>
- </refsect1>
-
- &seealso;
-
- <refsect1>
- <title><!-- Author -->저자</title>
- <para>Serge Hallyn <email>serge.hallyn@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:
--->
+++ /dev/null
-
-<!--
-
-(C) Copyright Canonical Ltd. 2013
-
-Authors:
-Stéphane Graber <stgraber@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
-
-Translated into Korean
-by Sungbae Yoo <sungbae.yoo at samsung.com>
-
--->
-
-<!DOCTYPE refentry PUBLIC @docdtd@ [
-
-<!ENTITY seealso SYSTEM "@builddir@/see_also.sgml">
-]>
-
-<refentry>
-
- <docinfo><date>@LXC_GENERATE_DATE@</date></docinfo>
-
- <refmeta>
- <refentrytitle>lxc-start-ephemeral</refentrytitle>
- <manvolnum>1</manvolnum>
- </refmeta>
-
- <refnamediv>
- <refname>lxc-start-ephemeral</refname>
-
- <refpurpose>
- <!--
- start an ephemeral copy of an existing container
- -->
- 존재하는 컨테이너를 임시 복사본으로 시작
- </refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>lxc-start-ephemeral</command>
- <arg choice="opt">-o</arg>
- <arg choice="opt">-n</arg>
- <arg choice="opt">-d</arg>
- <arg choice="opt">--bdir</arg>
- <arg choice="opt">--user</arg>
- <arg choice="opt">--key</arg>
- <arg choice="opt">--storage-type</arg>
- <arg choice="opt">--union-type</arg>
- <arg choice="opt">--keep-data</arg>
- <arg choice="opt">COMMAND</arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
- <refsect1>
- <title><!-- Description -->설명</title>
- <para>
- <!--
- <command>lxc-start-ephemeral</command> start an ephemeral copy of an
- existing container.
- -->
- <command>lxc-start-ephemeral</command>는 존재하는 컨테이너를 임시 복사본으로 시작시킨다.
- </para>
- </refsect1>
-
- <refsect1>
- <title><!-- Options -->옵션</title>
- <variablelist>
- <varlistentry>
- <term>
- <option>-o, --orig <replaceable>orig</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Original container name
- -->
- 원본 컨테이너 이름
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-n, --name <replaceable>name</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Name of the ephemeral container (defaults to a random suffix).
- -->
- 임시 컨테이너의 이름 (기본값은 무작위한 접미사를 붙이는 것)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-d, --daemon</option>
- </term>
- <listitem>
- <para>
- <!--
- Start the container in background and print the name and IP.
- This option can't be used if a command is passed.
- -->
- 컨테이너를 백그라운드로 시작한다. 그리고 이름과 IP를 표시한다.
- 옵션으로 명령어를 넘길 경우, 이 옵션은 사용하지 못한다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-b, --bdir <replaceable>bdir</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Directory to bind mount into container.
- Can be passed multiple times.
- -->
- 컨테이너로 바인드 마운트할 디렉토리.
- 여러번 인자로 넘겨줄 수 있다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-u, --user <replaceable>user</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- The user to connect to the container as.
- Used when passing a command to lxc-start-ephemeral.
- -->
- 컨테이너에 연결할 사용자.
- lxc-start-ephemeral로 명령어를 넘길때 사용한다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-S, --key <replaceable>key</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Copy the provided SSH public key into the container.
- -->
- 컨테이너 안으로 지정한 SSH 공개키를 복사한다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-s, --storage-type <replaceable>storage type</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Specify the type of storage used by the container. Valid types are tmpfs or dir.
- -->
- 컨테이너가 사용하는 저장소 형태를 지정한다. 가능한 형태는 tmpfs, dir이다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-U, --union-type <replaceable>union type</replaceable></option>
- </term>
- <listitem>
- <para>
- <!--
- Force a specific union file system.
- Can be one of: overlayfs aufs
- -->
- 지정한 union 파일시스템을 사용한다.
- 가능한 파일시스템은 overlayfs, aufs이다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-k, --keep-data</option>
- </term>
- <listitem>
- <para>
- <!--
- Use a persistent backend instead of tmpfs.
- With this option, you can lxc-stop and lxc-start the no longer so
- ephemeral container (it's still an overlay, but a persistent one).
- -->
- tmpfs 대신 영구적인 백엔드를 사용한다.
- 이 옵션을 사용하면, 더이상 임시 컨테이너가 아니기 때문에 lxc-stop이나 lxc-start를 사용할 수 있게 된다. (여전히 오버레이 상태이지만 영구적이다)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>COMMAND</option>
- </term>
- <listitem>
- <para>
- <!--
- Immediately run the provided command in the container.
- This uses attach if the kernel supports it, otherwise uses ssh.
- This is incompatible with daemon mode.
- -->
- 지정한 명령어를 컨테이너 안에서 바로 실행한다.
- 커널이 attach를 지원하면 attach를 사용하고, 지원하지 않으면 ssh를 사용한다.
- 이 옵션은 데몬 모드와 같이 사용할 수 없다.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title><!-- See Also -->참조</title>
-
- <simpara>
- <citerefentry>
- <refentrytitle>lxc-start</refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry>,
- </simpara>
- </refsect1>
-
- <refsect1>
- <title><!-- Examples -->예제</title>
- <variablelist>
- <varlistentry>
- <term>lxc-start-ephemeral -o p1</term>
- <listitem>
- <para>
- <!--
- Simply start an ephemeral container and attach to the console.
- This container will be based on existing container "p1".
- -->
- 단순히 임시 복사본 컨테이너를 시작하고, console에 연결한다.
- 임시 컨테이너는 컨테이너 p1을 기반으로 한다.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>lxc-start-ephemeral -o p1 -n p1-ephemeral -d</term>
- <listitem>
- <para>
- <!--
- Start an ephemeral container based on p1 called p1-ephemeral and
- print its IP and name to the console instead of attaching.
- -->
- 컨테이너 p1을 기반으로 임시 컨테이너 p1-ephemeral을 시작한다.
- console에 연결하지 않고, 컨테이너의 IP와 이름을 출력한다.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title><!-- Notes -->주의</title>
- <para>
- <!--
- <command>lxc-start-ephemeral</command> is deprecated in favor of
- <command>lxc-copy</command>.
- -->
- <command>lxc-start-ephemeral</command>는 <command>lxc-copy</command>로 대체되었으며, 제거될 예정이다.
- </para>
- </refsect1>
-
- &seealso;
-
- <refsect1>
- <title><!-- Author -->저자</title>
- <para>Stéphane Graber <email>stgraber@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:
--->
+++ /dev/null
-<!--
-
-lxc: linux Container library
-
-(C) Copyright IBM Corp. 2007, 2008
-
-Authors:
-Daniel Lezcano <daniel.lezcano at free.fr>
-Serge Hallyn <serge.hallyn 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 commonoptions SYSTEM "@builddir@/common_options.sgml">
-<!ENTITY seealso SYSTEM "@builddir@/see_also.sgml">
-]>
-
-<refentry>
-
- <docinfo><date>@LXC_GENERATE_DATE@</date></docinfo>
-
- <refmeta>
- <refentrytitle>lxc-clone</refentrytitle>
- <manvolnum>1</manvolnum>
- </refmeta>
-
- <refnamediv>
- <refname>lxc-clone</refname>
-
- <refpurpose>
- clone a new container from an existing one.
- </refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>lxc-clone</command>
- <arg choice="opt">-s </arg>
- <arg choice="opt">-K </arg>
- <arg choice="opt">-M </arg>
- <arg choice="opt">-H </arg>
- <arg choice="opt">-B <replaceable>backingstore</replaceable></arg>
- <arg choice="opt">-L <replaceable>fssize</replaceable></arg>
- <arg choice="opt">-p <replaceable>lxcpath</replaceable></arg>
- <arg choice="opt">-P <replaceable>newlxcpath</replaceable></arg>
- <arg choice="opt">-R </arg>
- <arg choice="req">-o <replaceable>orig</replaceable></arg>
- <arg choice="req">-n <replaceable>new</replaceable></arg>
- <arg choice="opt">-- hook arguments</arg>
- </cmdsynopsis>
- <cmdsynopsis>
- <command>lxc-clone</command>
- <arg choice="opt">-s </arg>
- <arg choice="opt">-K </arg>
- <arg choice="opt">-M </arg>
- <arg choice="opt">-H </arg>
- <arg choice="opt">-B <replaceable>backingstore</replaceable></arg>
- <arg choice="opt">-L <replaceable>fssize</replaceable></arg>
- <arg choice="opt">-p <replaceable>lxcpath</replaceable></arg>
- <arg choice="opt">-P <replaceable>newlxcpath</replaceable></arg>
- <arg choice="opt">-R </arg>
- <arg choice="req">orig</arg>
- <arg choice="req">new</arg>
- <arg choice="opt">-- hook arguments</arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
- <refsect1>
- <title>Description</title>
-
- <para>
- <command>lxc-clone</command> Creates a new container as a clone of an existing
- container. Two types of clones are supported: copy and snapshot. A copy
- clone copies the root filessytem from the original container to the new. A
- snapshot filesystem uses the backing store's snapshot functionality to create
- a very small copy-on-write snapshot of the original container. Snapshot
- clones require the new container backing store to support snapshotting. Currently
- this includes only aufs, btrfs, lvm, overlayfs and zfs. LVM devices do not support
- snapshots of snapshots.
- </para>
-
- <para>
- The backing store of the new container will be the same type as the
- original container, with one exception, overlay containers.
- aufs and overlayfs snapshots can be created of directory backed
- containers. This can be requested by using (for overlayfs) the
- <replaceable>-B overlayfs</replaceable> arguments.
- </para>
-
- <para>
- The names of the original and new container can be given (in that order)
- after all options, or can be specified with the
- <replaceable>-o</replaceable> and <replaceable>-n</replaceable> options,
- respectively.
- </para>
-
- </refsect1>
-
- <refsect1>
-
- <title>Options</title>
-
- <variablelist>
-
- <varlistentry>
- <term>
- <option>-s, --snapshot</option>
- </term>
- <listitem>
- <para>
- The new container's rootfs will be a snapshot of the original. This option can be specified when the backing store is LVM, btrfs or zfs, and must be specified when you want to snapshot using aufs or overlayfs.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-K, --keepname</option>
- </term>
- <listitem>
- <para>
- Do not change the hostname of the container (in the root
- filesystem).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-M, --keepmac</option>
- </term>
- <listitem>
- <para>
- Use the same MAC address as the original container, rather than
- generating a new random one.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-H, --copyhooks</option>
- </term>
- <listitem>
- <para>
- Copy all mount hooks into the new container's directory, and
- update any lxcpaths and container names as needed.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-L, --fssize <replaceable>fssize</replaceable></option>
- </term>
- <listitem>
- <para>
- In the case of a block device backed container, a size for the new
- block device. By default, the new device will be made the
- same size as the original.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-p, --lxcpath <replaceable>lxcpath</replaceable></option>
- </term>
- <listitem>
- <para>
- The lxcpath of the original container. By default, the system
- wide configured lxcpath will be used.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-P, --newpath <replaceable>newlxcpath</replaceable></option>
- </term>
- <listitem>
- <para>
- The lxcpath for the new container. By default the same lxcpath
- as the original will be used. Note that with btrfs snapshots,
- changing lxcpaths may not be possible, as subvolume snapshots
- must be in the same btrfs filesystem.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-B, --backingstore <replaceable>backingstore</replaceable></option>
- </term>
- <listitem>
- <para>
- Select a different backing store for the new container. By
- default the same as the original container's is used. Note that
- currently changing the backingstore is only supported for
- aufs and overlayfs snapshots of directory backed containers. Valid
- backing stores include dir (directory), aufs, btrfs, lvm, zfs, loop
- and overlayfs.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-R, --rename</option>
- </term>
- <listitem>
- <para>
- Rename an existing container.
- <replaceable>orig</replaceable> is renamed <replaceable>new</replaceable>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-o, --orig <replaceable>orig</replaceable></option>
- </term>
- <listitem>
- <para>
- The name of the original container to clone.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-n, --new <replaceable>new</replaceable></option>
- </term>
- <listitem>
- <para>
- The name of the new container to create.
- </para>
- </listitem>
- </varlistentry>
-
-
- </variablelist>
-
- </refsect1>
-
- <refsect1>
- <title>Clone hook</title>
- <para>
- If the container being cloned has one or more <filename>lxc.hook.clone</filename>
- specified, then the specified hooks will be called for the new container. The
- first 3 arguments passed to the clone hook will be the container name, a section
- ('lxc'), and the hook type ('clone'). Extra arguments passed
- <command>lxc-clone</command> will be passed to the hook program starting at
- argument 4. The <filename>LXC_ROOTFS_MOUNT</filename> environment variable gives
- the path under which the container's root filesystem is mounted. The
- configuration file pathname is stored in <filename>LXC_CONFIG_FILE</filename>, the
- new container name in <filename>LXC_NAME</filename>, the old container name in
- <filename>LXC_SRC_NAME</filename>, and the path or device on which
- the rootfs is located is in <filename>LXC_ROOTFS_PATH</filename>.
- </para>
- </refsect1>
-
- <refsect1>
- <title>Notes</title>
- <para>
- <command>lxc-clone</command> is deprecated in favor of
- <command>lxc-copy</command>.
- </para>
- </refsect1>
-
- &seealso;
-
- <refsect1>
- <title>Author</title>
- <para>Serge Hallyn <email>serge.hallyn@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:
--->
<para>
<command>lxc-copy</command> creates and optionally starts (ephemeral or
- non-ephemeral) copies of existing containers. It replaces
- <command>lxc-clone</command> and <command>lxc-start-ephemeral</command>.
+ non-ephemeral) copies of existing containers.
</para>
<para>
<command>lxc-copy</command> creates copies of existing containers. Copies
+++ /dev/null
-
-<!--
-
-(C) Copyright Canonical Ltd. 2013
-
-Authors:
-Stéphane Graber <stgraber@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-start-ephemeral</refentrytitle>
- <manvolnum>1</manvolnum>
- </refmeta>
-
- <refnamediv>
- <refname>lxc-start-ephemeral</refname>
-
- <refpurpose>
- start an ephemeral copy of an existing container
- </refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>lxc-start-ephemeral</command>
- <arg choice="opt">-o</arg>
- <arg choice="opt">-n</arg>
- <arg choice="opt">-d</arg>
- <arg choice="opt">--bdir</arg>
- <arg choice="opt">--user</arg>
- <arg choice="opt">--key</arg>
- <arg choice="opt">--storage-type</arg>
- <arg choice="opt">--union-type</arg>
- <arg choice="opt">--keep-data</arg>
- <arg choice="opt">COMMAND</arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
- <refsect1>
- <title>Description</title>
- <para>
- <command>lxc-start-ephemeral</command> start an ephemeral copy of an
- existing container.
- </para>
- </refsect1>
-
- <refsect1>
- <title>Options</title>
- <variablelist>
- <varlistentry>
- <term>
- <option>-o, --orig <replaceable>orig</replaceable></option>
- </term>
- <listitem>
- <para>
- Original container name
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-n, --name <replaceable>name</replaceable></option>
- </term>
- <listitem>
- <para>
- Name of the ephemeral container (defaults to a random suffix).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-d, --daemon</option>
- </term>
- <listitem>
- <para>
- Start the container in background and print the name and IP.
- This option can't be used if a command is passed.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-b, --bdir <replaceable>bdir</replaceable></option>
- </term>
- <listitem>
- <para>
- Directory to bind mount into container.
- Can be passed multiple times.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-u, --user <replaceable>user</replaceable></option>
- </term>
- <listitem>
- <para>
- The user to connect to the container as.
- Used when passing a command to lxc-start-ephemeral.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-S, --key <replaceable>key</replaceable></option>
- </term>
- <listitem>
- <para>
- Copy the provided SSH public key into the container.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-s, --storage-type <replaceable>storage type</replaceable></option>
- </term>
- <listitem>
- <para>
- Specify the type of storage used by the container. Valid types are tmpfs or dir.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-U, --union-type <replaceable>union type</replaceable></option>
- </term>
- <listitem>
- <para>
- Force a specific union file system.
- Can be one of: overlayfs aufs
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>-k, --keep-data</option>
- </term>
- <listitem>
- <para>
- Use a persistent backend instead of tmpfs.
- With this option, you can lxc-stop and lxc-start the no longer so
- ephemeral container (it's still an overlay, but a persistent one).
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>
- <option>COMMAND</option>
- </term>
- <listitem>
- <para>
- Immediately run the provided command in the container.
- This uses attach if the kernel supports it, otherwise uses ssh.
- This is incompatible with daemon mode.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>See Also</title>
-
- <simpara>
- <citerefentry>
- <refentrytitle>lxc-start</refentrytitle>
- <manvolnum>1</manvolnum>
- </citerefentry>,
- </simpara>
- </refsect1>
-
- <refsect1>
- <title>Examples</title>
- <variablelist>
- <varlistentry>
- <term>lxc-start-ephemeral -o p1</term>
- <listitem>
- <para>
- Simply start an ephemeral container and attach to the console.
- This container will be based on existing container "p1".
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>lxc-start-ephemeral -o p1 -n p1-ephemeral -d</term>
- <listitem>
- <para>
- Start an ephemeral container based on p1 called p1-ephemeral and
- print its IP and name to the console instead of attaching.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>Notes</title>
- <para>
- <command>lxc-start-ephemeral</command> is deprecated in favor of
- <command>lxc-copy</command>.
- </para>
- </refsect1>
-
- &seealso;
-
- <refsect1>
- <title>Author</title>
- <para>Stéphane Graber <email>stgraber@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:
--->
<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.
- In the case of the stop hook, paths to filedescriptors
- for each of the container's namespaces along with their types
- are passed. </para></listitem>
+ case of the clone hook, any extra arguments passed will appear as
+ further arguments to the hook. In the case of the stop hook, paths to
+ filedescriptors for each of the container's namespaces along with
+ their types are passed. </para></listitem>
</itemizedlist>
The following environment variables are set:
<itemizedlist>
cmd/lxc-update-config
endif
-if ENABLE_TOOLS
-EXTRA_DIST = \
- tools/lxc-top.lua
-
-if ENABLE_DEPRECATED
-if ENABLE_PYTHON
-bin_SCRIPTS += tools/lxc-start-ephemeral
-endif
-endif
-endif
-
if ENABLE_TOOLS
bin_PROGRAMS = \
lxc-attach \
lxc-unshare \
lxc-usernsexec \
lxc-wait
-
-if ENABLE_DEPRECATED
-bin_PROGRAMS += lxc-clone
-endif
endif
if ENABLE_COMMANDS
if ENABLE_TOOLS
-if ENABLE_DEPRECATED
-lxc_clone_SOURCES = tools/lxc_clone.c tools/arguments.c
-endif
-
if !HAVE_GETSUBOPT
lxc_copy_SOURCES += tools/include/getsubopt.c tools/include/getsubopt.h
endif
+++ /dev/null
-#!/usr/bin/env python3
-#
-# lxc-start-ephemeral: Start a copy of a container using an overlay
-#
-# This python implementation is based on the work done in the original
-# shell implementation done by Serge Hallyn in Ubuntu (and other contributors)
-#
-# (C) Copyright Canonical Ltd. 2012
-#
-# Authors:
-# Stéphane Graber <stgraber@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
-#
-
-import argparse
-import gettext
-import lxc
-import locale
-import os
-import sys
-import subprocess
-import tempfile
-
-_ = gettext.gettext
-gettext.textdomain("lxc-start-ephemeral")
-
-# Other functions
-
-
-def printstderr(*args):
- print("lxc-start-ephemeral is deprecated in favor of lxc-copy\n",
- *args, file=sys.stderr)
-
-
-def randomMAC():
- import random
-
- mac = [0x00, 0x16, 0x3e,
- random.randint(0x00, 0x7f),
- random.randint(0x00, 0xff),
- random.randint(0x00, 0xff)]
- return ':'.join(map(lambda x: "%02x" % x, mac))
-
-
-def get_rundir():
- if os.geteuid() == 0:
- return "@RUNTIME_PATH@"
-
- if "XDG_RUNTIME_DIR" in os.environ:
- return os.environ["XDG_RUNTIME_DIR"]
-
- if "HOME" in os.environ:
- return "%s/.cache/lxc/run/" % os.environ["HOME"]
-
- raise Exception("Unable to find a runtime directory")
-
-
-# Inform that lxc-start-ephemeral is deprecated
-printstderr()
-
-# Begin parsing the command line
-parser = argparse.ArgumentParser(description=_(
- "LXC: Start an ephemeral container"),
- formatter_class=argparse.RawTextHelpFormatter,
- epilog=_("If a COMMAND is given, then the "
- """container will run only as long
-as the command runs.
-If no COMMAND is given, this command will attach to tty1 and stop the
-container when exiting (with ctrl-a-q).
-
-If no COMMAND is given and -d is used, the name and IP addresses of the
-container will be printed to the console."""))
-
-parser.add_argument("--lxcpath", "-P", dest="lxcpath", metavar="PATH",
- help=_("Use specified container path"), default=None)
-
-parser.add_argument("--orig", "-o", type=str, required=True,
- help=_("name of the original container"))
-
-parser.add_argument("--name", "-n", type=str,
- help=_("name of the target container"))
-
-parser.add_argument("--bdir", "-b", type=str, action="append", default=[],
- help=_("directory to bind mount into container, "
- "either --bdir=/src-path or --bdir=/src-path:/dst-path"))
-
-parser.add_argument("--cdir", "-c", type=str, action="append", default=[],
- help=_("directory to cow mount into container"))
-
-parser.add_argument("--user", "-u", type=str,
- help=_("the user to run the command as"))
-
-parser.add_argument("--key", "-S", type=str,
- help=_("the path to the key to use to connect "
- "(when using ssh)"))
-
-parser.add_argument("--daemon", "-d", action="store_true",
- help=_("run in the background"))
-
-parser.add_argument("--storage-type", "-s", type=str, default=None,
- choices=("tmpfs", "dir"),
- help=("type of storage use by the container"))
-
-parser.add_argument("--union-type", "-U", type=str, default="overlayfs",
- choices=("overlayfs", "aufs"),
- help=_("type of union (overlayfs or aufs), "
- "defaults to overlayfs."))
-
-parser.add_argument("--keep-data", "-k", action="store_true",
- help=_("don't wipe everything clean at the end"))
-
-parser.add_argument("command", metavar='CMD', type=str, nargs="*",
- help=_("Run specific command in container "
- "(command as argument)"))
-
-parser.add_argument("--version", action="version", version=lxc.version)
-
-args = parser.parse_args()
-
-# Check that -d and CMD aren't used at the same time
-if args.command and args.daemon:
- parser.error(_("You can't use -d and a command at the same time."))
-
-# Check that -k isn't used with -s tmpfs
-if not args.storage_type:
- if args.keep_data:
- args.storage_type = "dir"
- else:
- args.storage_type = "tmpfs"
-
-if args.keep_data and args.storage_type == "tmpfs":
- parser.error(_("You can't use -k with the tmpfs storage type."))
-
-# Load the orig container
-orig = lxc.Container(args.orig, args.lxcpath)
-if not orig.defined:
- parser.error(_("Source container '%s' doesn't exist." % args.orig))
-
-# Create the new container paths
-if not args.lxcpath:
- lxc_path = lxc.default_config_path
-else:
- lxc_path = args.lxcpath
-
-if args.name:
- if os.path.exists("%s/%s" % (lxc_path, args.name)):
- parser.error(_("A container named '%s' already exists." % args.name))
- dest_path = "%s/%s" % (lxc_path, args.name)
- os.mkdir(dest_path)
-else:
- dest_path = tempfile.mkdtemp(prefix="%s-" % args.orig, dir=lxc_path)
-os.mkdir(os.path.join(dest_path, "rootfs"))
-os.chmod(dest_path, 0o770)
-
-# Setup the new container's configuration
-dest = lxc.Container(os.path.basename(dest_path), args.lxcpath)
-dest.load_config(orig.config_file_name)
-dest.set_config_item("lxc.utsname", dest.name)
-dest.set_config_item("lxc.rootfs", os.path.join(dest_path, "rootfs"))
-print("setting rootfs to .%s.", os.path.join(dest_path, "rootfs"))
-for nic in dest.network:
- if hasattr(nic, 'hwaddr'):
- nic.hwaddr = randomMAC()
-
-overlay_dirs = [(orig.get_config_item("lxc.rootfs"), "%s/rootfs/" % dest_path)]
-
-# Generate a new fstab
-if orig.get_config_item("lxc.mount"):
- dest.set_config_item("lxc.mount", os.path.join(dest_path, "fstab"))
- with open(orig.get_config_item("lxc.mount"), "r") as orig_fd:
- with open(dest.get_config_item("lxc.mount"), "w+") as dest_fd:
- for line in orig_fd.read().split("\n"):
- # Start by replacing any reference to the container rootfs
- line.replace(orig.get_config_item("lxc.rootfs"),
- dest.get_config_item("lxc.rootfs"))
-
- fields = line.split()
-
- # Skip invalid entries
- if len(fields) < 4:
- continue
-
- # Non-bind mounts are kept as-is
- if "bind" not in fields[3]:
- dest_fd.write("%s\n" % line)
- continue
-
- # Bind mounts of virtual filesystems are also kept as-is
- src_path = fields[0].split("/")
- if len(src_path) > 1 and src_path[1] in ("proc", "sys"):
- dest_fd.write("%s\n" % line)
- continue
-
- # Skip invalid mount points
- dest_mount = os.path.abspath(os.path.join("%s/rootfs/" % (
- dest_path), fields[1]))
-
- if "%s/rootfs/" % dest_path not in dest_mount:
- print(_("Skipping mount entry '%s' as it's outside "
- "of the container rootfs.") % line)
-
- # Setup an overlay for anything remaining
- overlay_dirs += [(fields[0], dest_mount)]
-
-for entry in args.cdir:
- if not os.path.exists(entry):
- print(_("Path '%s' doesn't exist, won't be cow-mounted.") %
- entry)
- else:
- src_path = os.path.abspath(entry)
- dst_path = "%s/rootfs/%s" % (dest_path, src_path)
- overlay_dirs += [(src_path, dst_path)]
-
-# do we have the new overlay fs which requires workdir, or the older
-# overlayfs which does not?
-have_new_overlay = False
-with open("/proc/filesystems", "r") as fd:
- for line in fd:
- if line == "nodev\toverlay\n":
- have_new_overlay = True
-
-# Generate pre-mount script
-with open(os.path.join(dest_path, "pre-mount"), "w+") as fd:
- os.fchmod(fd.fileno(), 0o755)
- fd.write("""#!/bin/sh
-LXC_DIR="%s"
-LXC_BASE="%s"
-LXC_NAME="%s"
-""" % (dest_path, orig.name, dest.name))
-
- count = 0
- for entry in overlay_dirs:
- tmpdir = "%s/tmpfs" % dest_path
- fd.write("mkdir -p %s\n" % (tmpdir))
- if args.storage_type == "tmpfs":
- fd.write("mount -n -t tmpfs -o mode=0755 none %s\n" % (tmpdir))
- deltdir = "%s/delta%s" % (tmpdir, count)
- workdir = "%s/work%s" % (tmpdir, count)
- fd.write("mkdir -p %s %s\n" % (deltdir, entry[1]))
- if have_new_overlay:
- fd.write("mkdir -p %s\n" % workdir)
-
- fd.write("getfacl -a %s | setfacl --set-file=- %s || true\n" %
- (entry[0], deltdir))
- fd.write("getfacl -a %s | setfacl --set-file=- %s || true\n" %
- (entry[0], entry[1]))
-
- if args.union_type == "overlayfs":
- if have_new_overlay:
- fd.write("mount -n -t overlay"
- " -oupperdir=%s,lowerdir=%s,workdir=%s none %s\n" % (
- deltdir,
- entry[0],
- workdir,
- entry[1]))
- else:
- fd.write("mount -n -t overlayfs"
- " -oupperdir=%s,lowerdir=%s none %s\n" % (
- deltdir,
- entry[0],
- entry[1]))
- elif args.union_type == "aufs":
- xino_path = "/dev/shm/aufs.xino"
- if not os.path.exists(os.path.basename(xino_path)):
- os.makedirs(os.path.basename(xino_path))
-
- fd.write("mount -n -t aufs "
- "-o br=%s=rw:%s=ro,noplink,xino=%s none %s\n" % (
- deltdir,
- entry[0],
- xino_path,
- entry[1]))
- count += 1
-
- for entry in args.bdir:
- if ':' in entry:
- src_path, dst_path = entry.split(":")
- else:
- src_path = entry
- dst_path = os.path.abspath(entry)
-
- if not os.path.exists(src_path):
- print(_("Path '%s' doesn't exist, won't be bind-mounted.") %
- src_path)
- else:
- src_path = os.path.abspath(src_path)
- dst_path = "%s/rootfs/%s" % (dest_path, dst_path)
- fd.write("mkdir -p %s\nmount -n --bind %s %s\n" % (
- dst_path, src_path, dst_path))
-
- fd.write("""
-[ -e $LXC_DIR/configured ] && exit 0
-for file in $LXC_DIR/rootfs/etc/hostname \\
- $LXC_DIR/rootfs/etc/hosts \\
- $LXC_DIR/rootfs/etc/sysconfig/network \\
- $LXC_DIR/rootfs/etc/sysconfig/network-scripts/ifcfg-eth0; do
- [ -f "$file" ] && sed -i -e "s/$LXC_BASE/$LXC_NAME/" $file
-done
-touch $LXC_DIR/configured
-""")
-
-dest.set_config_item("lxc.hook.pre-mount",
- os.path.join(dest_path, "pre-mount"))
-
-if not args.keep_data:
- dest.set_config_item("lxc.ephemeral", "1")
-
-dest.save_config()
-
-# Start the container
-if not dest.start() or not dest.wait("RUNNING", timeout=5):
- print(_("The container '%s' failed to start.") % dest.name)
- dest.stop()
- if dest.defined:
- dest.destroy()
- sys.exit(1)
-
-# Deal with the case where we just attach to the container's console
-if not args.command and not args.daemon:
- dest.console()
- if not dest.shutdown(timeout=5):
- dest.stop()
- sys.exit(0)
-
-# Try to get the IP addresses
-ips = dest.get_ips(timeout=10)
-
-# Deal with the case where we just print info about the container
-if args.daemon:
- print(_("""The ephemeral container is now started.
-
-You can enter it from the command line with: lxc-console -n %s
-The following IP addresses have be found in the container:
-%s""") % (dest.name,
- "\n".join([" - %s" % entry for entry in ips]
- or [" - %s" % _("No address could be found")])))
- sys.exit(0)
-
-# Now deal with the case where we want to run a command in the container
-if not ips:
- print(_("Failed to get an IP for container '%s'.") % dest.name)
- dest.stop()
- if dest.defined:
- dest.destroy()
- sys.exit(1)
-
-if os.path.exists("/proc/self/ns/pid"):
- def attach_as_user(command):
- try:
- username = "root"
- if args.user:
- username = args.user
-
- # This should really just use universal_newlines=True, but we do
- # the decoding by hand instead for compatibility with Python
- # 3.2; that used locale.getpreferredencoding() internally rather
- # than locale.getpreferredencoding(False), and the former breaks
- # here because we can't reload codecs at this point unless the
- # container has the same version of Python installed.
- line = subprocess.check_output(["getent", "passwd", username])
- line = line.decode(locale.getpreferredencoding(False)).rstrip("\n")
- _, _, pw_uid, pw_gid, _, pw_dir, _ = line.split(":", 6)
- pw_uid = int(pw_uid)
- pw_gid = int(pw_gid)
- os.setgid(pw_gid)
- os.initgroups(username, pw_gid)
- os.setuid(pw_uid)
- os.chdir(pw_dir)
- os.environ['HOME'] = pw_dir
- except:
- print(_("Unable to switch to user: %s" % username))
- sys.exit(1)
-
- return lxc.attach_run_command(command)
-
- retval = dest.attach_wait(attach_as_user, args.command,
- env_policy=lxc.LXC_ATTACH_CLEAR_ENV)
-
-else:
- cmd = ["ssh",
- "-o", "StrictHostKeyChecking=no",
- "-o", "UserKnownHostsFile=/dev/null"]
-
- if args.user:
- cmd += ["-l", args.user]
-
- if args.key:
- cmd += ["-i", args.key]
-
- for ip in ips:
- ssh_cmd = cmd + [ip] + args.command
- retval = subprocess.call(ssh_cmd, universal_newlines=True)
- if retval == 255:
- print(_("SSH failed to connect, trying next IP address."))
- continue
-
- if retval != 0:
- print(_("Command returned with non-zero return code: %s") % retval)
- break
-
-# Shutdown the container
-if not dest.shutdown(timeout=5):
- dest.stop()
-
-sys.exit(retval)
+++ /dev/null
-#!/usr/bin/env lua
---
--- top(1) like monitor for lxc containers
---
--- Copyright © 2012 Oracle.
---
--- Authors:
--- Dwight Engen <dwight.engen@oracle.com>
---
--- This library is free software; you can redistribute it and/or modify
--- it under the terms of the GNU General Public License version 2, as
--- published by the Free Software Foundation.
---
--- This program 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 General Public License for more details.
---
--- You should have received a copy of the GNU General Public License along
--- with this program; if not, write to the Free Software Foundation, Inc.,
--- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
---
-
-local lxc = require("lxc")
-local core = require("lxc.core")
-local getopt = require("alt_getopt")
-
-local USER_HZ = 100
-local ESC = string.format("%c", 27)
-local TERMCLEAR = ESC.."[H"..ESC.."[J"
-local TERMNORM = ESC.."[0m"
-local TERMBOLD = ESC.."[1m"
-local TERMRVRS = ESC.."[7m"
-
-local containers = {}
-local stats = {}
-local stats_total = {}
-local max_containers
-
-function printf(...)
- local function wrapper(...) io.write(string.format(...)) end
- local status, result = pcall(wrapper, ...)
- if not status then
- error(result, 2)
- end
-end
-
-function string:split(delim, max_cols)
- local cols = {}
- local start = 1
- local nextc
- repeat
- nextc = string.find(self, delim, start)
- if (nextc and #cols ~= max_cols - 1) then
- table.insert(cols, string.sub(self, start, nextc-1))
- start = nextc + #delim
- else
- table.insert(cols, string.sub(self, start, string.len(self)))
- nextc = nil
- end
- until nextc == nil or start > #self
- return cols
-end
-
-function strsisize(size, width)
- local KiB = 1024
- local MiB = 1048576
- local GiB = 1073741824
- local TiB = 1099511627776
- local PiB = 1125899906842624
- local EiB = 1152921504606846976
- local ZiB = 1180591620717411303424
-
- if (size >= ZiB) then
- return string.format("%d.%2.2d ZB", size / ZiB, (math.floor(size % ZiB) * 100) / ZiB)
- end
- if (size >= EiB) then
- return string.format("%d.%2.2d EB", size / EiB, (math.floor(size % EiB) * 100) / EiB)
- end
- if (size >= PiB) then
- return string.format("%d.%2.2d PB", size / PiB, (math.floor(size % PiB) * 100) / PiB)
- end
- if (size >= TiB) then
- return string.format("%d.%2.2d TB", size / TiB, (math.floor(size % TiB) * 100) / TiB)
- end
- if (size >= GiB) then
- return string.format("%d.%2.2d GB", size / GiB, (math.floor(size % GiB) * 100) / GiB)
- end
- if (size >= MiB) then
- return string.format("%d.%2.2d MB", size / MiB, (math.floor(size % MiB) * 1000) / (MiB * 10))
- end
- if (size >= KiB) then
- return string.format("%d.%2.2d KB", size / KiB, (math.floor(size % KiB) * 1000) / (KiB * 10))
- end
- return string.format("%3d.00 ", size)
-end
-
-function tty_lines()
- local rows = 25
- local f = assert(io.popen("stty -a | head -n 1"))
- for line in f:lines() do
- local stty_rows
- _,_,stty_rows = string.find(line, "rows (%d+)")
- if (stty_rows ~= nil) then
- rows = stty_rows
- break
- end
- end
- f:close()
- return rows
-end
-
-function container_sort(a, b)
- if (optarg["r"]) then
- if (optarg["s"] == "n") then return (a > b)
- elseif (optarg["s"] == "c") then return (stats[a].cpu_use_nanos < stats[b].cpu_use_nanos)
- elseif (optarg["s"] == "d") then return (stats[a].blkio < stats[b].blkio)
- elseif (optarg["s"] == "m") then return (stats[a].mem_used < stats[b].mem_used)
- elseif (optarg["s"] == "k") then return (stats[a].kmem_used < stats[b].kmem_used)
- end
- else
- if (optarg["s"] == "n") then return (a < b)
- elseif (optarg["s"] == "c") then return (stats[a].cpu_use_nanos > stats[b].cpu_use_nanos)
- elseif (optarg["s"] == "d") then return (stats[a].blkio > stats[b].blkio)
- elseif (optarg["s"] == "m") then return (stats[a].mem_used > stats[b].mem_used)
- elseif (optarg["s"] == "k") then return (stats[a].kmem_used > stats[b].kmem_used)
- end
- end
-end
-
-function container_list_update()
- local now_running
-
- now_running = lxc.containers_running(true)
-
- -- check for newly started containers
- for _,v in ipairs(now_running) do
- if (containers[v] == nil) then
- local ct = lxc.container:new(v)
- -- note, this is a "mixed" table, ie both dictionary and list
- containers[v] = ct
- table.insert(containers, v)
- end
- end
-
- -- check for newly stopped containers
- local indx = 1
- while (indx <= #containers) do
- local ctname = containers[indx]
- if (now_running[ctname] == nil) then
- containers[ctname] = nil
- stats[ctname] = nil
- table.remove(containers, indx)
- else
- indx = indx + 1
- end
- end
-
- -- get stats for all current containers and resort the list
- lxc.stats_clear(stats_total)
- for _,ctname in ipairs(containers) do
- stats[ctname] = containers[ctname]:stats_get(stats_total)
- end
- table.sort(containers, container_sort)
-end
-
-function stats_print_header(stats_total)
- printf(TERMRVRS .. TERMBOLD)
- printf("%-15s %8s %8s %8s %10s %10s", "Container", "CPU", "CPU", "CPU", "BlkIO", "Mem")
- if (stats_total.kmem_used > 0) then printf(" %10s", "KMem") end
- printf("\n")
-
- printf("%-15s %8s %8s %8s %10s %10s", "Name", "Used", "Sys", "User", "Total", "Used")
- if (stats_total.kmem_used > 0) then printf(" %10s", "Used") end
- printf("\n")
- printf(TERMNORM)
-end
-
-function stats_print(name, stats, stats_total)
- printf("%-15s %8.2f %8.2f %8.2f %10s %10s",
- name,
- stats.cpu_use_nanos / 1000000000,
- stats.cpu_use_sys / USER_HZ,
- stats.cpu_use_user / USER_HZ,
- strsisize(stats.blkio),
- strsisize(stats.mem_used))
- if (stats_total.kmem_used > 0) then
- printf(" %10s", strsisize(stats.kmem_used))
- end
-end
-
-function usage()
- printf("Usage: lxc-top [options]\n" ..
- " -h|--help print this help message\n" ..
- " -m|--max display maximum number of containers\n" ..
- " -d|--delay delay in seconds between refreshes (default: 3.0)\n" ..
- " -s|--sort sort by [n,c,d,m] (default: n) where\n" ..
- " n = Name\n" ..
- " c = CPU use\n" ..
- " d = Disk I/O use\n" ..
- " m = Memory use\n" ..
- " k = Kernel memory use\n" ..
- " -r|--reverse sort in reverse (descending) order\n"
- )
- os.exit(1)
-end
-
-local long_opts = {
- help = "h",
- delay = "d",
- max = "m",
- reverse = "r",
- sort = "s",
-}
-
-optarg,optind = alt_getopt.get_opts (arg, "hd:m:rs:", long_opts)
-optarg["d"] = tonumber(optarg["d"]) or 3.0
-optarg["m"] = tonumber(optarg["m"]) or tonumber(tty_lines() - 3)
-optarg["r"] = optarg["r"] or false
-optarg["s"] = optarg["s"] or "n"
-if (optarg["h"] ~= nil) then
- usage()
-end
-
-while true
-do
- container_list_update()
- -- if some terminal we care about doesn't support the simple escapes, we
- -- may fall back to this, or ncurses. ug.
- --os.execute("tput clear")
- printf(TERMCLEAR)
- stats_print_header(stats_total)
- for index,ctname in ipairs(containers) do
- stats_print(ctname, stats[ctname], stats_total)
- printf("\n")
- if (index >= optarg["m"]) then
- break
- end
- end
- stats_print(string.format("TOTAL (%-2d)", #containers), stats_total, stats_total)
- io.flush()
- core.usleep(optarg["d"] * 1000000)
-end
+++ /dev/null
-/*
- *
- * Copyright © 2013 Serge Hallyn <serge.hallyn@ubuntu.com>.
- * Copyright © 2013 Canonical Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <ctype.h>
-#include <errno.h>
-#include <getopt.h>
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include <lxc/lxccontainer.h>
-
-/* we pass fssize in bytes */
-static uint64_t get_fssize(char *s)
-{
- uint64_t ret;
- char *end;
-
- ret = strtoull(s, &end, 0);
- if (end == s) {
- fprintf(stderr,
- "Invalid blockdev size '%s', using default size\n", s);
- return 0;
- }
-
- while (isblank(*end))
- end++;
- if (*end == '\0') {
- ret *= 1024ULL * 1024ULL; /* MB by default */
- } else if (*end == 'b' || *end == 'B') {
- ret *= 1ULL;
- } else if (*end == 'k' || *end == 'K') {
- ret *= 1024ULL;
- } else if (*end == 'm' || *end == 'M') {
- ret *= 1024ULL * 1024ULL;
- } else if (*end == 'g' || *end == 'G') {
- ret *= 1024ULL * 1024ULL * 1024ULL;
- } else if (*end == 't' || *end == 'T') {
- ret *= 1024ULL * 1024ULL * 1024ULL * 1024ULL;
- } else {
- fprintf(stderr, "Invalid blockdev unit size '%c' in '%s', "
- "using default size\n",
- *end, s);
- return 0;
- }
-
- return ret;
-}
-
-static void usage(const char *me)
-{
- printf("Usage: %s [-s] [-B backingstore] [-L size[unit]] [-K] [-M] [-H]\n", me);
- printf(" [-p lxcpath] [-P newlxcpath] orig new\n");
- printf("\n");
- printf(" -s: snapshot rather than copy\n");
- printf(" -B: use specified new backingstore. Default is the same as\n");
- printf(" the original. Options include aufs, btrfs, lvm, overlayfs, \n");
- printf(" dir and loop\n");
- printf(" -L: for blockdev-backed backingstore, use specified size * specified\n");
- printf(" unit. Default size is the size of the source blockdev, default\n");
- printf(" unit is MB\n");
- printf(" -K: Keep name - do not change the container name\n");
- printf(" -M: Keep macaddr - do not choose a random new mac address\n");
- printf(" -p: use container orig from custom lxcpath\n");
- printf(" -P: create container new in custom lxcpath\n");
- printf(" -R: rename existing container\n");
- exit(EXIT_SUCCESS);
-}
-
-static struct option options[] = {
- { "snapshot", no_argument, 0, 's'},
- { "backingstore", required_argument, 0, 'B'},
- { "size", required_argument, 0, 'L'},
- { "orig", required_argument, 0, 'o'},
- { "new", required_argument, 0, 'n'},
- { "vgname", required_argument, 0, 'v'},
- { "rename", no_argument, 0, 'R'},
- { "keepname", no_argument, 0, 'K'},
- { "keepmac", no_argument, 0, 'M'},
- { "lxcpath", required_argument, 0, 'p'},
- { "newpath", required_argument, 0, 'P'},
- { "fstype", required_argument, 0, 't'},
- { "help", no_argument, 0, 'h'},
- { 0, 0, 0, 0 },
-};
-
-int main(int argc, char *argv[])
-{
- struct lxc_container *c1 = NULL, *c2 = NULL;
- int snapshot = 0, keepname = 0, keepmac = 0, rename = 0;
- int flags = 0, option_index;
- uint64_t newsize = 0;
- char *bdevtype = NULL, *lxcpath = NULL, *newpath = NULL, *fstype = NULL;
- char *orig = NULL, *new = NULL, *vgname = NULL;
- char **args = NULL;
- int c;
- bool ret;
-
- fprintf(stderr, "lxc-clone is deprecated in favor of lxc-copy.\n\n");
-
- if (argc < 3)
- usage(argv[0]);
-
- while (true) {
- c = getopt_long(argc, argv, "sB:L:o:n:v:KMHp:P:Rt:h", options,
- &option_index);
- if (c == -1)
- break;
- switch (c) {
- case 's':
- snapshot = 1;
- break;
- case 'B':
- bdevtype = optarg;
- break;
- case 'L':
- newsize = get_fssize(optarg);
- break;
- case 'o':
- orig = optarg;
- break;
- case 'n':
- new = optarg;
- break;
- case 'v':
- vgname = optarg;
- break;
- case 'K':
- keepname = 1;
- break;
- case 'M':
- keepmac = 1;
- break;
- case 'p':
- lxcpath = optarg;
- break;
- case 'P':
- newpath = optarg;
- break;
- case 'R':
- rename = 1;
- break;
- case 't':
- fstype = optarg;
- break;
- case 'h':
- usage(argv[0]);
- default:
- break;
- }
- }
-
- if (optind < argc && !orig)
- orig = argv[optind++];
-
- if (optind < argc && !new)
- new = argv[optind++];
-
- /* arguments for the clone hook */
- if (optind < argc)
- args = &argv[optind];
-
- if (!new || !orig) {
- printf("Error: you must provide orig and new names\n");
- usage(argv[0]);
- }
-
- if (snapshot)
- flags |= LXC_CLONE_SNAPSHOT;
- if (keepname)
- flags |= LXC_CLONE_KEEPNAME;
- if (keepmac)
- flags |= LXC_CLONE_KEEPMACADDR;
-
- /* vgname and fstype could be supported by sending them through the
- * bdevdata. However, they currently are not yet. I'm not convinced
- * they are worthwhile.
- */
- if (vgname) {
- printf("Error: vgname not supported\n");
- usage(argv[0]);
- }
- if (fstype) {
- printf("Error: fstype not supported\n");
- usage(argv[0]);
- }
-
- c1 = lxc_container_new(orig, lxcpath);
- if (!c1)
- exit(EXIT_FAILURE);
-
- if (!c1->may_control(c1)) {
- fprintf(stderr, "Insufficent privileges to control %s\n", orig);
- lxc_container_put(c1);
- exit(EXIT_FAILURE);
- }
-
- if (!c1->is_defined(c1)) {
- fprintf(stderr, "Error: container %s is not defined\n", orig);
- lxc_container_put(c1);
- exit(EXIT_FAILURE);
- }
- if (rename) {
- ret = c1->rename(c1, new);
- if (!ret) {
- fprintf(stderr,
- "Error: Renaming container %s to %s failed\n",
- c1->name, new);
- lxc_container_put(c1);
- exit(EXIT_FAILURE);
- }
- } else {
- c2 = c1->clone(c1, new, newpath, flags, bdevtype, NULL, newsize, args);
- if (c2 == NULL) {
- lxc_container_put(c1);
- fprintf(stderr, "clone failed\n");
- exit(EXIT_FAILURE);
- }
- printf("Created container %s as %s of %s\n", new,
- snapshot ? "snapshot" : "copy", orig);
- lxc_container_put(c2);
- }
- lxc_container_put(c1);
-
- exit(EXIT_SUCCESS);
-}
lxc-test-api-reboot lxc-test-state-server lxc-test-share-ns \
lxc-test-criu-check-feature lxc-test-raw-clone
-bin_SCRIPTS = lxc-test-automount \
+bin_SCRIPTS =
+if ENABLE_TOOLS
+bin_SCRIPTS += lxc-test-automount \
lxc-test-autostart \
lxc-test-cloneconfig \
lxc-test-createconfig \
lxc-test-unpriv \
lxc-test-usernic
endif
+endif
endif