News

LXC 3.0.2 リリースのお知らせ

2018 年 8 月 21 日

はじめに

LXC チームは LXC 3.0.2 のリリースをおしらせできることをうれしく思います!

Stable に対するバグフィックスのためのリリースですので、大きな変更はありません。バグフィックスと細かな使い勝手の改良にフォーカスしています。

ハイライト

  • ユーザ名前空間内ではデバイスを作成できるがオープンできないという Linux 4.18 での変更に合わせました
  • コンテナの起動時にネットワーク名前空間の ID を割り当てるようにしました
  • static な liblxc をビルドするようにしました これは、Netlink 経由でネットワークインターフェースとそのアドレスを効率的に取得するのに役立ちます
  • コードベース全体でスレッドセーフが強化されました
  • 文字列をよりセキュアに扱うために、strncpy()strncat() のすべてのインスタンスに、効率的な strlcpy()strlcat() の実装を追加しました
  • lxc-* ツール群(例: lxc-attachlxc-start)が liblxc 共有ライブラリとシンボルを共有するようになりました これによりコードベースのサイズが大幅に減りました
  • コード全体でコーディングスタイルの修正を行いました
CVE-2018-6556

このリリースでは、コミット CVE 2018-6556: verify netns fd in lxc-user-nic によって CVE-2018-6556 が修正されました。この問題は、lxc-user-nic がネットワークインターフェースを削除する際に、無条件でユーザから与えられたパスを開いてしまう問題です。

このコードパスは、非特権ユーザーが到達できないパスの存在をチェックするのに使われる可能性があります。また、読み込み専用の特別なカーネルファイル(ptmxprocsys)をオープンすることによる副作用を引き起こす可能性があります。

影響を受ける LXC のリリースは、2.0.9 を含む 2.0 以上のバージョン、3.0.2 より前の、3.0.0 を含む 3.0 以上のバージョンです。

バグ修正 (LXC)

  • Coverity が見つけた一連のバグを修正しました
  • lxc-usernsexec: クリーンアップとバグフィックスを行いました
  • log: CMD_SYSINFO() を追加しました
  • log: CMD_SYSERROR() を追加しました
  • state: s/sleep()/nanosleep()/
  • lxclock: ファイルロックの改良を行いました
  • lxccontainer: ファイルロックの改良を行いました
  • lxccontainer: F_OFD_GETLK のチェックを修正しました
  • netlink: __netlink_{send,recv,transaction} を追加しました
  • netns: ネットワーク名前空間の ID を割り当てるようにしました
  • MAINTAINERS: Wolfgang Bumiller 氏を追加しました
  • CVE 2018-6556: lxc-user-nic で netns の fd をチェックするようにしました
  • pam_cgfs: クリーンアップを行いました
  • log: デフォルトのログプライオリティを追加しました
  • tree-wide: unsigned longprctl() に与えるようにしました
  • macro: 新しいマクロヘッダーを追加しました
  • conf: EINVAL の際は "max" なしで devpts をマウントするようにしました
  • tree-wide: read()write()EINTR を扱うようにしました
  • tree-wide: pipe()pipe2() に置き換えました
  • confile: マウントオプションをフラグとデータに分離しました
  • conf: rootfs のセットアップを改良しました
  • autotools: -Wvla -std=gnu11 をデフォルトにしました
  • tree-wide: VLA を削除しました
  • tree-wide: strtok_r()lxc_iterate_parts() に置き換えました
  • utils: lxc_iterate_parts() を追加しました
  • apparmor: start-containerlxc-** を許可しました
  • apparmor: 最新のプロファイルに更新しました
  • apparmor: /usr/lib* のパスで mountpivot_root を許可しました
  • conf: ユーザ名前空間内では atime をロックするようにしました
  • conf: 部分的に functional device ノードを扱うようにしました
  • conf: /dev ディレクトリを作成するようにしました
  • autotools: liblxc の共有ライブラリとスタティックライブラリの両方をビルドするようにしました
  • namespace: 名前空間を標準の識別子に変換する API を追加しました
  • tree-wide: MSG_NOSIGNAL を設定するようにしました
  • tree-wide: ダミーファイルを作成する際には mknod() を使うようにしました
  • cgfsng: lxc.cgroup.use を参照するようにしました
  • cgroups: is_crucial_cgroup_subsystem() を削除しました
  • tree-wide: 不要なログプレフィックスを削除しました
  • tests: 全テストをクリーンアップしました
  • terminal: pty ファイルディスクリプタに FD_CLOEXEC を設定するようにしました
  • conf: lxc_setup_dev_console() を簡素化しました
  • tools: ツール類を手直ししました
  • autodev: Linux 4.18 での変更に合わせました
  • log: strerror を使った DEBUG, INFO, TRACE, NOTICE マクロを SYS* マクロに変更しました
  • log: lxc_log_strerror_r マクロを追加しました
  • network: 非特権 LXC が lxc.net.[i].script.up を実行するようになりました
  • conf: 必要なときだけ newuidmapnewgidmap を使うようになりました
  • autotools: クロスコンパイル時に TLS をサポートするようになりました

バグ修正 (LXC templates)

  • fedora: Fedora 28 をサポートを追加しました
  • templates: opensuse: openSUSE Leap 15 のサポートを追加しました
  • templates: opensuse: EOL となったディストリビューションのサポートを削除しました
  • templates: lxc-opensuse.in: キャッシュが完全に存在していることを保証するようにしました
  • templates: lxc-opensuse.in: openSUSE Leap 15 のキャッシュ URL を修正しました

バグ修正 (python3 バインディング)

  • README.md 内の Typo を修正しました

サポートとアップグレード

LXC 3.0.2 は 2023 年 6 月までサポートされる最新の LTS リリースです。 利用可能になった最新のバグ修正リリースに更新することをお勧めします。

ダウンロード

LXC 3.0.1 リリースのお知らせ

2018 年 6 月 5 日

はじめに

LXC チームは LXC 3.0.1 のリリースをおしらせできることをうれしく思います!

Stable に対するバグフィックスのためのリリースですので、大きな変更はありません。バグフィックスと細かな使い勝手の改良にフォーカスしています。

ハイライト

  • liblxc の様々な部分でスレッドセーフとなるように改良されました
  • Coverity によって見つかった問題を多数修正しました
  • seccomp の扱いに関していくつか改良が行われました。特に personality に関係する部分です
  • GCC 8 をサポートしました

バグフィックス (LXC)

  • tools: 初期化されていない変数を修正しました
  • storage: lvm fs の uuid 生成の問題を修正しました
  • lxc-oci: Cmd と Entrypoint のパースの問題を修正しました
  • lxc-oci: umoci コマンドの出力を減らしました
  • lxclock: スレッドセーフな *_OFD_* ロックを使うようにしました
  • locktests: テストスイートを修正しました
  • conf: umount がホストに伝播しないようにしました
  • doc: 日本語の lxc.container.conf(5) の翻訳を改良しました
  • lxc.init 内のシグナルの送出の問題を修正しました
  • rootfs pinning: NFS 上でピンファイルを隠しファイルにし、このファイルを削除しません
  • conf: テンポラリファイル作成の問題を修正しました
  • ringbuf: テンポラリファイル作成の問題を修正しました
  • static な libcap と shared な gnutls な場合のコンパイルの問題を修正しました
  • attach: 常に補助 (supplementary) グループを落とすようにしました
  • lxc init: デッドコードを削除しました
  • storage/rsync: エラー時にメモリを free するようにしました
  • tools/utils: エラー時にメモリを free するようにしました
  • lxc init: コーディングスタイルの変更を行いました
  • utils: 古い glibc で __NR_setns がない場合は定義するようにしました
  • attach: 常に補助 (supplementary) グループを落とそうとするようにしました
  • conf: エラー時には gid=5 オプションなしで devpts のマウントを試行するようにしました
  • execute: root をマッピングしていないアプリケーションコンテナの問題を修正しました
  • conf: run_script_argv() 中のネットワークタイプのチェックの問題を修正しました
  • seccomp: アーキテクチャの反転を扱えるようにしました (訳注: カーネルとユーザスペースとコンテナの間での様々な32bit,64bitの組み合わせを扱えるようにした)
  • seccomp: すべてのエラーを扱うようにしました
  • seccomp: 互換アーキテクチャの処理をクリーンアップしました
  • seccomp: ロギングを改良しました
  • tools: lxc-execute-d/–daemonize オプションの記載を man page に追加しました
  • seccomp: 機能と関係のない変更を行いました(訳注: 変数のリネーム)
  • lxc-oci: ダウンロードディレクトリを mkdir するようにしました
  • do_lxcapi_create: umask をセットするようにしました
  • lxc/tools/lxc_monitor: <stddef.h> の include が欠けていたので追加しました
  • pam-cgfs: cgroup 階層を作る場合はシステムの umask を無視するようにしました
  • チェックポイント時の CRIU に action script を指定するようにしました
  • cgfsng_attach 内のメモリリークを修正しました
  • list_active_containers 中のメモリリークを修正しました
  • HAVE_SETNS が設定されてない場合の tool_utils.c のビルドを修正しました
  • coverity: #1435210
  • coverity: #1435208
  • coverity: #1435207
  • coverity: #1435206
  • coverity: #1435205
  • coverity: #1435203
  • coverity: #1435200
  • coverity: #1435198
  • coverity: #1426734
  • lxccontainer: 機能と関係のない変更を行いました
  • lxccontainer: スレッドセーフな *_OFD_* ロックを使うようにしました
  • lxccontainer: do_lxcapi_is_running()
  • lxccontainer: do_lxcapi_freeze()
  • lxccontainer: do_lxcapi_unfreeze()
  • lxccontainer: スレッドセーフな open() + write() を使うようにしました
  • coverity: #1435263
  • execute ログファイルのロジックを修正しました
  • utils: LXC_PROC_PID_FD_LEN を追加しました
  • execute: 静的なバッファを使うようにしました
  • execute: 継承した fd を再チェックしないようにしました
  • TRACE/ERROR ログをいくつか追加しました
  • execute: -o によるパスの指定の引数の数を正しくカウントするようにしました
  • execute: 存在する init が見つかった時に init_path を設定するようにしました
  • genl: 使わないソースファイルを削除しました
  • coverity: #1248104
  • coverity: #1248105
  • coverity: #1425744
  • utils: 終端の \0 バイトをきちんと扱うようにしました
  • confile: gcc-8 向けに調整を行いました
  • network: gcc-8 向けに調整を行いました
  • network: 制限を IFNAMSIZ に合わせるようにしました
  • 設定値で指定するサイズの単位は大文字小文字を区別しなくなりました
  • utils: parse_byte_size_string() のコーディングスタイルを修正しました
  • strlcpy: strlcpy() を実装しました
  • tree-wide: s/strncpy()/strlcpy()/g
  • CODING_STYLE: strlcpy() についてのセクションを追加しました
  • tools: s/strncpy()/strlcpy()/g
  • Revert "tools: s/strncpy()/strlcpy()/g"
  • tools: s/strncpy()/memcpy()/
  • doc: 日本語の lxc-execute(1) に "-d/--daemon" オプションの説明を追加しました
  • doc: 日本語の lxc.container.conf(5) の単位の書き方の説明を修正しました
  • coverity: #1435604
  • coverity: #1435603
  • coverity: #1435602
  • coverity: #1425844
  • config: user namespace 内で /sys の読み書きができるようになりました
  • coverity: #1425836
  • coverity: #1248106
  • capabilities: ambient ケーパビリティを適用するようになりました
  • coverity: #1425802
  • cgroups: cgroup の扱いをリファクタリングしました
  • cgroups: freezer_state() を削除しました
  • seccomp: #ifdef SCMP_ARCH_AARCH64
  • conf: write_id_mapping() を簡素化しました
  • log: スレッドごとのコンテナ名プレフィックスを使えるようにしました
  • lxc-init: キャッチできないシグナルはスキップするようにしました
  • execute: サポートされている場合は execveat() を使うようになりました
  • tools: リクエストがあったときにのみログファイルを作るようにしました
  • seccomp: sscanf 用の配列の割り当て時の off-by-one エラーを修正しました
  • seccomp: 混乱させるコメント行を削除しました
  • seccomp: 不要な memset を削除しました
  • seccomp: システムコール引数のフィルタをパースする際の型の不一致を修正しました
  • lxcseccomp: ヘッダをクリーンアップしました
  • seccomp: parse_config_v1()
  • utils: add remove_trailing_newlines()
  • seccomp: get_v2_default_action()
  • seccomp: get_action_name()
  • seccomp: get_v2_action()
  • seccomp: fix get_seccomp_arg_value()
  • seccomp: parse_v2_rules()
  • seccomp: #ifdef 行を移動しました
  • seccomp: get_hostarch()
  • seccomp: scmp_filter_ctx get_new_ctx()
  • seccomp: do_resolve_add_rule()
  • seccomp: parse_config_v2()
  • seccomp: parse_config()
  • seccomp: lxc_read_seccomp_config()
  • tree-wide: s/sigprocmask/pthread_sigmask()/g
  • utils: task_blocking_signal() を修正しました
  • lxccontainer: シグナルを送る時の fd のリークを修正しました
  • confile: アーキテクチャを順に並べました
  • start: setns() の失敗をログするようにしました
  • seccomp: リークを修正しました
  • seccomp: (別の修正で削除された) アクションの定義をパースする際のエラーチェックを再度追加しました
  • seccomp: parse_config の行の扱いをリファクタリングしました
  • seccomp: 認められていないアクションの指定をエラーにするようにしました
  • seccomp: lxc_read_seccomp_config()
  • seccomp: parse_v2_rules()
  • seccomp: do_resolve_add_rule() をより厳格にしました
  • tools: グローバル設定オプションの lxc-create 内での扱いを修正しました
  • coverity: #1435806
  • coverity: #1435805
  • coverity: #1435803
  • coverity: #1435747
  • conf: 機能と関係のない変更を行いました
  • conf: is_execute を boolean にしました
  • conf: close_all_fds 変数を boolean にしました
  • conf: 構造体の mount 関係のメンバの配置を変えました
  • conf: tty の扱いを簡素化しました
  • conf: pts -> pty_max
  • utils: task_blocking_signal() を修正しました
  • network: ソケットハンドルのリークを修正しました
  • start: ns_clone_flags を -1 で初期化しないようにしました
  • conf: lxc_delete_tty() がクラッシュしないようにしました
  • start: リブートのマクロを追加しました
  • conf: root の idmap 構造体を const にしました
  • conf: tmp_umount_proc 変数を bool にしました
  • conf: va_end を呼ぶようにしました
  • confile: strprint() を改良しました
  • ハンドラの返り値の定義を変更しました
  • start: waitpid() のブロッキングの問題を修正しました
  • start: 未知の info.si_code をログするようにしました
  • tree-wide: いくつかのファイルのモードを修正しました
  • confile_utils: strprint() を追加しました
  • templates: 実際に DOWNLOAD_TEMP ディレクトリを作るようにしました
  • templates: download テンプレートを修正しました
  • lxc-update-config を修正しました

バグ修正 (LXC templates)

  • sshd: lxc.autodev を使うようにしました
  • sshd: init スクリプトにコンテナ名を渡すようにしました

サポートとアップグレード

LXC 3.0.1 は 2023 年 6 月までサポートされる最新の LTS リリースです。 利用可能になった最新のバグ修正リリースに更新することをお勧めします。

ダウンロード

LXC 3.0.0 リリースのお知らせ

2018 年 3 月 27 日

はじめに

LXC チームは LXC 3.0.0 のリリースをお知らせできることをうれしく思います!

このリリースは LXC 2.1.0 のリリース以来 6 ヶ月に及ぶ集中した作業の成果で、LXC プロジェクトの 3 つ目の LTS リリースとなります。そして、2023 年までサポートされます。

主な変更点

すべてのコマンドでの lxc-start <コンテナ名> という文法のサポート

LXC のコマンドラインツールは -n を省略してコンテナ名を指定して実行できるようになりました。例えば、以下のように実行できます:

chb@conventiont|~
> lxc-start xenial

chb@conventiont|~
> lxc-info xenial
Name:           xenial
State:          RUNNING
PID:            12765
Memory use:     15.24 MiB
KMem use:       3.72 MiB
Link:           veth99VMO3
 TX bytes:      858 bytes
 RX bytes:      2.49 KiB
 Total bytes:   3.33 KiB

chb@conventiont|~
> lxc-attach xenial
root@xenial:/# exit

chb@conventiont|~
> lxc-stop xenial

すべてのレガシーな設定項目の削除

LXC 3.0 以降、レガシーな設定項目はすべてサポートされません。 廃止された設定と、対応する新しい設定のすべてのリストは、LXC 2.1 リリースのお知らせ を参照してください。

lxc-update-config ツールを使って、古い無効な設定を新しいフォーマットに変換できます。

リソース制限を含む単一階層の cgroup のフルサポート

LXC が、新しい単一階層構造の cgroup (cgroup v2、cgroup2) を完全にサポートしました。この機能を使い、単一階層構造の cgroup で制限を設定するために、lxc.cgroup2.[コントローラ名] という設定項目を追加しました。 さらに詳しい情報を得るには、"LXC Lands Unified cgroup Hierarchy Support" というブログポストをご覧ください。

レガシーな cgmanager、cgfs cgroup ドライバの削除

LXC から、cgmanagercgfs というレガシーな cgroup ドライバを削除し、多数のコードを削除しました。さらに詳しい情報を得るには、"On The Way To LXC 3.0: Removal of cgmanager And cgfs cgroup Drivers" というブログポストをご覧ください。

テンプレートと言語バインディングの分離

コンテナイメージのビルドシステムの新しいプロジェクトである distrobuilder が立ち上がりましたので、従来のテンプレートベースのコンテナビルドシステムは削除されました。さらに詳しい情報を得るには、"On The Way To LXC 3.0: Splitting Out Templates And Language Bindings" というブログポストをご覧ください。

移行を簡単にするために、以前のテンプレートスクリプトと設定ファイルは 別のリポジトリ に残しており、LXC 3.0.0 と同時に lxc-templates としてリリースしています。

以下のテンプレートは LXC 3.0 ツリーにも残っており、フルサポートされます:

  • lxc-busybox (通常テストに使われる)
  • lxc-download (プロジェクトでビルド済みのイメージをダウンロードする)
  • lxc-local (ローカルでビルドされたイメージをインポートする (例えば distrobuilder などで))
  • lxc-oci (OCI アプリケーションコンテナイメージを使う)

cgroup PAM モジュールの LXC ツリーへの移動

LXC は常に非特権コンテナを完全にサポートしてきています。非特権コンテナは特権を持たないユーザが実行します。この実行を行うための重要な要素が、特権を持たないユーザが書き込み権を持つ cgroup を作成する PAM モジュールでした。この PAM モジュールが LXCFS から LXC に移されました。これにより、ユーザが完全に非特権のコンテナをさらに簡単に実行できるようになりました。 さらに詳細な情報を得るには、"On The Way To LXC 3.0: Moving The Cgroup Pam Module Into The LXC Tree (Including A Detour About Fully Unprivileged Containers)" というブログポストをご覧ください。

新しい OCI テンプレートの追加

このテンプレートで、OCI フォーマットからアプリケーションコンテナを作成できるようになります。例えば:

  • ../oci にあるローカルの OCI レイアウトからコンテナを作成するには:

sudo lxc-create -t oci -n a1 -- -u oci:../oci:alpine

  • docker hub からイメージを取得してコンテナを作成するには:

sudo lxc-create -t oci -n u1 -- -u docker://ubuntu

URL は skopeo copy と同じ形式で指定します。

コンソールのロギング用のシンプルで効率的なリングバッファ

LXC はコンテナのコンソールをファイルにロギングする機能をサポートしています。これによりコンテナ内のユーザが、実際にはホスト上で必要なだけたくさんのデータを書き込み、コンテナに与えられたクォータをバイパスできる可能性があるという不幸な副作用をもたらしました。

この基本的な実装は、コンテナの再起動ではリセットされない、非常に大きくなる可能性のあるファイルを読む必要があり、照会が少し厄介なものでもありました。

LXC 3.0 ではコンソールロギングにリングバッファが導入されました。このメモリ内のバッファはサイズ制限があり、LXC API の新しい関数で照会できます。いつでもリセットでき、コンテナのシャットダウン時にダンプすることもできます。

seccomp の引数を使ったシステムコールのフィルタ

引数を使ってシステムコールをフィルタリングするために、seccomp バージョン 2 の仕様が以下のような形に拡張されました:

syscall_name action [index,value,op,valueTwo] [index,value,op]...

ここでタプル [index,value,valueTwo,op] の引数は以下のような意味です:

  1. index (uint32_t): システムコール引数のインデックス。
  2. value (uint64_t): "index" で指定されるシステムコール引数の値。
  3. valueTwo (uint64_t, optional): "index" で指定されるシステムコール引数の値。このオプショナルな値は SCMP_CMP_MASKED_EQ との組み合わせで使うときのみ有効です。
  4. op (char *): システムコール引数の演算子。有効な演算子は libseccomp >= v2.3.2 で定義された定数です。

    • SCMP_CMP_NE or (!=)
    • SCMP_CMP_LE or (<=)
    • SCMP_CMP_EQ or (==)
    • SCMP_CMP_GE or (>=)
    • SCMP_CMP_GT or (>)
    • SCMP_CMP_MASKED_EQ or (&=)

    便宜上 liblxc は、上記の libseccomp 定数の後にかっこで示された標準の演算子表記も、同等の表記法として理解します。 同じシステムコールに対して複数のエントリを指定することは正しいことに注意してください。

拡張されたバージョン 2 プロファイルの例:

2
blacklist allow
reject_force_umount  # comment this to allow umount -f;  not recommended
[all]
kexec_load errno 1 [0,1,SCMP_CMP_LE][3,1,==][5,1,SCMP_CMP_MASKED_EQ,1]
open_by_handle_at errno 1
init_module errno 1
finit_module errno 1
delete_module errno 1
unshare errno 9 [0,0x10000000,SCMP_CMP_EQ]
unshare errno 2 [0,0x20000000,SCMP_CMP_EQ]

アプリケーションコンテナのデーモン化のサポート

最小限の動きをする init を pid 1 で実行し、指定したプログラムを pid 2 で実行するアプリケーションコンテナを、デーモンとして起動できるようになりました。

lxc-* ツールからのすべての内部シンボルの削除

lxc-* ツールは、もっぱら公開された LXC API にのみ、依存するようになりました。

hidepid={1,2} プロパティを使ってマウントされた /proc の扱い

ホストの /proc が、/proc/PID ディレクトリに対するアクセスを制限する hidepid={1,2} を指定してマウントされている場合でも、コンテナにアタッチできるようになりました。

マウント時のマウントプロパゲーションのサポート

lxc.mount.entrylxc.mount.fstab で指定されるマウントエントリに、マウントプロパゲーション (private, shared, slave, unbindable, rprivate, rshared, rslave, runbindable) が指定できるようになりました。

確実なスレッドセーフ

この項目に関する詳細は Mutexes And fork()ing In Shared Libraries というブログポストをご覧ください。

aufs ストレージドライバの削除

LXC 2.1 で廃止予定となっていた aufs ストレージドライバが、今回正式に削除されました。

コーディングスタイル、コードのクリーンアップ

コーディングスタイル に基づいて、コードベース全体に渡って広く、コードのクリーンアップを実行しました。

新たな設定項目

lxc.cgroup2.[controller name]

単一階層構造の cgroup (cgroup v2) に設定する値を指定します。controller name はコントロールグループそのままの名前です (訳注: cgroup 以下に現れるファイル名そのまま)。使える名前や指定する値の書式は LXC が指示することはありません。コンテナ実行時点のカーネルの機能に依存します。例えば lxc.cgroup2.memory.high のようになります。

lxc.hook.version

環境変数経由の新しいスタイルで引数を渡すには 1 に設定します。そうでなく、引数として渡すには 0 に設定します。この設定は、古い方法でスクリプトに引数として渡されているすべてのフック引数に影響します。特に、コンテナ名のセクション (例: 'lxc', 'net') とフックタイプ (例: 'clone', 'mount', 'pre-mount') 引数に影響します。新しいスタイルのフックが使われる場合、引数は環境変数として利用できます。コンテナ名は LXC_NAME に設定されます(これはこの設定項目に設定されている値とは関係なく設定されます)。セクションは LXC_HOOK_SECTION に設定されます。そしてフックタイプは LXC_HOOK_TYPE に設定されます。この設定は、コンテナの名前空間を参照するファイルディスクリプタのパスをどのように渡すかにも影響します。1 に設定した場合、名前空間ごとに別の環境変数 LXC_[NAMESPACE IDENTIFIER]_NS に設定されます。0 に設定すると、パスは stop フックの引数として渡されます。

lxc.execute.cmd

デフォルトで実行するバイナリのコンテナの root からの絶対パスを指定します。このオプションは execute() API 経由で呼ばれて実行されるアプリケーションコンテナのデフォルトバイナリを指定するために使います。システムコンテナの lxc.init.cmd に相当します。

lxc.init.cwd

ワーキングディレクトリとして使うコンテナ内の絶対パスです。

lxc.proc.[proc file name]

設定したい proc 以下のファイル名。指定できるファイル名は /proc/PID/ 以下に存在するものです。例えば lxc.proc.oom_score_adj = 10 のように使います。

lxc.console.buffer.size

このオプションを設定すると、LXC はインメモリのリングバッファを割り当てます。コンテナのコンソールはリングバッファに出力されます。リングバッファは少なくとも標準ページサイズの大きさでなければなりません。ページサイズより小さい値を与えた場合は、LXC はページサイズのリングバッファを割り当てます。ページサイズは通常は 4kB です。auto を指定すると、LXC は 128kB のリングバッファを割り当てます。リングバッファサイズを数値指定する場合、値がバイトに変換されるときに 2 の累乗になります。サイズ接頭辞付きの単位として kBMBGB が使えます。(この場合の変換は 1024 の倍数に基づいています。つまり kB == KiBMB == MiBGB == GiB という意味です。)

lxc.console.size

LXC は lxc.console.logfile で指定したコンソールログのサイズを、このオプションで設定した値に制限します。ログファイルのサイズは少なくとも標準ページサイズでなければなりません。ページサイズ以下の値を設定した場合は、LXC はログファイルのサイズをページサイズに設定します。ページサイズは通常は 4kB です。auto を指定すると、LXC はログファイルのサイズを 128kB に制限します。ログファイルサイズの値を数値指定する場合、値がバイトに変換されるときに 2 の累乗になります。サイズ接頭辞付きの単位として kBMBGB が使えます。(この場合の変換は 1024 の倍数に基づいています。つまり kB == KiBMB == MiBGB == GiB という意味です。) ディスク上のコンソールリングバッファとミラーになるようにしたい場合は、lxc.console.sizelxc.console.buffer.size の値を同じ値に設定します。

lxc.console.rotate

lxc.console.logfile で指定したコンソールログファイルをローテートするかどうかを指定します。

lxc.mount.entryrelative オプション

マウントポイントの指定で relative オプションを付けると、マウントされたコンテナの root からの相対パスとなります。

lxc.mount.entry = /dev/null proc/kcore none bind,relative 0 0

dev/null${LXC_ROOTFS_MOUNT}/dev/null と展開し、コンテナ内の proc/kcore にマウントします。

lxc.mount.auto で指定する cgroup マウントの force プロパティ

cgroup:mixed:force:

force を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は cgroup:mixed と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。

cgroup:ro:force:

force を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は cgroup:ro と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。

cgroup:rw:force:

force を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は cgroup:rw と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。

cgroup-full:mixed:force:

force を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は cgroup-full:mixed と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。

cgroup-full:ro:force:

force を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は cgroup-full:ro と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。

cgroup-full:rw:force:

force を指定すると、LXC はあらゆる状況でコンテナのための cgroup マウントを実行します。それ以外は cgroup-full:rw と同様です。これは主に cgroup 名前空間が有効な場合に便利です。この場合は完全に安全ですので、LXC は通常コンテナの init バイナリが cgroup をマウントしたままの状態にしておきます。

lxc.namespace.clone

コンテナ作成時に作成する名前空間を指定します。作成する名前空間はスペース区切りのリストで指定します。指定する名前空間名は、/proc/PID/ns ディレクトリ内に存在する標準の名前空間指示子でなければなりません。lxc.namespace.clone を明示的に設定していない場合は、カーネルがサポートするすべての名前空間と現在の設定が使われます。

新しいマウント、ネット、IPC 名前空間を作る場合は lxc.namespace.clone=mount net ipc と指定します。

lxc.namespace.keep

コンテナが、作成元のプロセスから継承する (新しい名前空間を作らずに元のプロセスの名前空間のまま実行する) 名前空間を指定します。継承する名前空間はスペース区切りのリストで指定します。指定する名前空間名は、/proc/PID/ns ディレクトリ内に存在する標準の名前空間指示子でなければなりません。lxc.namespace.keep はブラックリストを指定するオプションです。つまり、コンテナに特定の名前空間を使い続けることを強制したい場合に便利です。

ネットワーク、ユーザ、IPC 名前空間を元のプロセスの名前空間のままで実行したい場合は lxc.namespace.keep=user net ipc と指定します。

PID 名前空間を共有すると、ほとんどの init で動作しない可能性があることに注意してください。

コンテナが新しいユーザ名前空間をリクエストし、そのコンテナがネットワーク名前空間は継承したい場合は、ユーザ名前空間も同様に継承する必要があることに注意してください。

lxc.namespace.share.[namespace identifier]

他のコンテナやプロセスから継承する名前空間を指定します。[namespace identifier] には、/proc/PID/ns ディレクトリ内に現れる名前空間のひとつが入ります。

他のプロセスから名前空間を継承するには、lxc.namespace.share.[namespace identifier] の値をプロセスの PID に設定します。例えば lxc.namespace.share.net=42 のようになります。

他のコンテナから名前空間を継承するには、lxc.namespace.share.[namespace identifier] の値をコンテナ名に設定します。例えば lxc.namespace.share.pid=c3 のようになります。

標準の liblxc のパスとは異なるコンテナパスに存在する他のコンテナから名前空間を継承するには、lxc.namespace.share.[namespace identifier] をそのコンテナのフルパスで指定します。例えば lxc.namespace.share.user=/opt/c3 のようになります。

名前空間を継承するためには、呼び出し元が継承元のプロセスまたはコンテナに対して十分な権限を持っている必要があります。

システムコンテナ間での PID 名前空間の共有は、ほとんどの init システムではうまく動作しない可能性があることに注意が必要です。

ふたつのプロセスが異なるユーザ名前空間に存在し、そのうちのひとつが他のネットワーク名前空間を継承したい場合、通常はユーザ名前空間も同様に継承する必要があることに注意が必要です。

lxc.sysctl.[kernel parameters name]

設定したいカーネルパラメータを指定します。指定できるパラメータは /proc/sys 以下に存在するものです。 すべての sysctl パラメータが仮想化(名前空間化)されているわけではないことに注意してください。仮想化されていない sysctl を設定すると、システムワイドで設定が変更されてしまいます。 sysctl(8) 値を指定しないでこの設定を指定した場合は、この設定より前に設定されたパラメータをクリアします。

lxc.hook.start-host

コンテナのセットアップが済んだあと、コンテナの init を実行する直前に、ホストの名前空間で実行するためのフックです。

これはいくつかのユースケースを満たすはずです。一例が CNI のサポートです。 例えば、root 所有のコンテナ内のネットワーク設定を次のように置き換えます。

lxc.net.0.type = empty
lxc.hook.start-host = /bin/lxc-start-netns

where /bin/lxc-start-netns contains:

=================================

echo "starting" > /tmp/debug
ip link add host1 type veth peer name peer1
ip link set host1 master lxcbr0
ip link set host1 up
ip link set peer1 netns "${LXC_PID}"
=================================

NIC peer1 は期待通りコンテナ内に配置されました。 これが動作するためには、この時点では lxc-info は動作しないので、コンテナの init の pid を環境変数 LXC_PID として与える必要があります。

API 拡張

console_log()

新しい API 拡張

int console_log(struct lxc_container *c, struct lxc_console_log *log);

が追加されました。これは、新たに追加されたコンテナのインメモリリングバッファとのやりとりをサポートするために追加されました。次の構造体に利用可能な引数と返り値が含まれています。

struct lxc_console_log {
    /* Clear the console log. */
    bool clear;

    /* Retrieve the console log. */
    bool read;

    /* This specifies the maximum size to read from the ringbuffer. Setting
     * it to 0 means that the a read can be as big as the whole ringbuffer.
     * On return callers can check how many bytes were actually read.
     * If "read" and "clear" are set to false and a non-zero value is
     * specified then up to "read_max" bytes of data will be discarded from
     * the ringbuffer.
     */
    uint64_t *read_max;

    /* Data that was read from the ringbuffer. If "read_max" is 0 on return
     * "data" is invalid.
     */
    char *data;
};
reboot2()

新しい API 拡張として reboot2() が追加されました。この関数は再起動が成功するまで待ちます。この関数は引数としてタイムアウト値を取ります。タイムアウト値が > 0 の場合、reboot2() はタイムアウトに達するまで再起動を待ちます。もしタイムアウトが 0 に設定された場合、reboot2() は再起動を待ちません。もし -1 に設定された場合、reboot2() は無期限に再起動を待ちます。

CRIU の migrate() API 呼び出しに対する MIGRATE_FEATURE_CHECK

pre-copy や post-copy マイグレーションのようなマイグレーションの最適化機能においては、単純に CRIU のバージョンを見るだけでは、機能のサポートを判断できません。そのような機能はアーキテクチャ・カーネル・CRIU のコンビネーションに依存し、CRIU は機能がサポートされているかどうかを問い合わせるインターフェースを持っています。

migrate() API の呼び出し経由で、先に挙げたような機能のサポートを CRIU に問い合わせる LXC インターフェースが追加されました。LXD での最近の pre-copy マイグレーションのサポートでは、この機能が使われ、pre-copy マイグレーションを使うかどうかを自動で検出しています。

既存の migrate() API コマンドに加えて、新しいコマンド MIGRATE_FEATURE_CHECK を追加しました。

struct migrate_opts は、メンバ features_to_check によって拡張されています。これは、CRIU の機能を問い合わせるかどうかを指示するビットマスクです。

現時点では、FEATURE_MEM_TRACKFEATURE_LAZY_PAGES 機能がサポートされているかどうかを問い合わせるだけです。

attach() API 呼び出しに対する LXC_ATTACH_TERMINAL の追加

新しい端末の割り当てが API 自身に移されました。呼び出し元は LXC_ATTACH_TERMINAL を設定し、コンテナにアタッチする前に、ホストの devpts から割り当てられた新しい端末にアタッチするように要求できます。

サポートとアップグレード

LXC 3.0.0 は 2023 年 6 月までサポートされる最新の LTS リリースです。 LXC 1.0 に加えて LXC 2.0 は、致命的なバグ修正とセキュリティ修正のみなされます。

LXC チームは 3.0 ブランチへのアップグレードの計画を立てることを強くおすすめします。libpam-cgfs が LXC へ移動しますので、LXC 3.0 へのアップグレードと同時に LXCFS 3.0 へのアップグレードを行うと、機能のコンフリクトを避けることができるでしょう。

ダウンロード

コントリビューター

LXC 3.0.0 のリリースは、全部で 42 名の貢献によりリリースされました。

LXC 2.0.9 リリースのお知らせ 2017 年 10 月 19 日

このリリースは LXC 2.0 の 9 回目のバグフィックスリリースです。

バグ修正:

  • apparmor: コンテナが AppArmor namespace 内で起動できるようになりました
  • apparmor: apparmor の不要な deny を削除しました
  • caps: ifndef/define の定義をコードの冒頭部分に移動させました
  • cgfsng: 制限の適用に失敗したときにはエラーになるようにしました
  • cgfsng: cgfsng を使わない場合はログに出力するようにしました
  • cgfsng: cgroup のデータを設定した時のみデバッグ情報をログに出力するようにしました
  • cgroups: hybrid cgroup レイアウトを扱えるようになりました
  • cgroups: 変数のスコープを調整しました
  • cgroups: gcc-7 のバグを回避するようにしました
  • commands: abstract コマンドソケットの扱いとロギングを実装しました
  • commands: コマンドに対する足りていなかった変換を追加しました
  • commands: 意味のないコメントを削除しました
  • commands: EINTR を扱うようになりました
  • commands: ステートサーバのインターフェースをフレキシブルにしました
  • commands: lxc_make_abstract_socket_name() 関数を移動しました
  • commands: lxc_cmd_add_state_client() にリネームしました
  • commonds: typo を修正しました
  • conf: lxc-user-nic の使われ方に合わせました
  • conf: lxc_get_idmaps() を追加しました
  • conf: userns_exec_full() を追加しました
  • conf: すべての設定をクリアできるようになりました
  • conf: lxc.autodev を取得できるようになりました
  • conf: lxc.haltsignal を取得できるようになりました
  • conf: lxc.kmsg を取得できるようになりました
  • conf: lxc.rebootsignal を取得できるようになりました
  • conf: lxc.stopsignal を取得できるようになりました
  • conf: euid != 0 でも uid マッピングが書き込めるようになりました (訳注: 非特権ユーザが自身の id だけをマップできるようになりました)
  • conf: userns_exec_1() 中のメモリの二重解放を修正しました
  • conf: lxc.include をクリアするようにしました
  • conf: 空の値を二度チェックしなくなりました
  • conf: 間違ったネットワークインターフェースのタイプの UNION のチェックをしなくなりました
  • conf: NULL ポインタへの参照を防ぎました
  • conf: static なメモリを解放しないようにしました
  • conf: 初期化されていないメモリについてログ出力しないようにしました
  • conf: 行末のスペースを出力しなくなりました
  • conf: 設定されていない場合は tty を送らないようになりました
  • conf: lxc_get_config_item() を削除しました
  • conf: 多数のマッピングをしようとした際にエラーになるようにしました
  • conf: bionic でのビルドを修正しました
  • conf: libcap がない場合のビルドの問題を修正しました
  • conf: tty の作成時の問題を修正しました
  • conf: userns_exec_1() の問題を修正しました
  • conf: netdev->downscript 変数を free するようにしました
  • conf: 設定項目をクリアするコールバック関数を実装しました
  • conf: lxc_map_ids() 関数を改良しました
  • conf: tty の ID をシフトする関数を改良しました
  • conf: write_id_mapping() 関数を改良しました
  • conf: lxc-user-nic のバッファを増やしました
  • conf: lxc-user-nic の出力をログに記録するようにしました
  • conf: lxc_listconfigs -> lxc_list_config_items
  • conf: 設定項目をクリアする関数を一か所にまとめました
  • conf: 機能と関係ない変更を行いました
  • conf: コンテナの /dev をマウントする際には NOTICE() で出力するようにしました
  • conf: パフォーマンスの調整を行いました
  • conf: 設定ファイル中の改行を保存するようにしました
  • conf: lxc.idmap の設定値を正しくパースするようにしました
  • conf: 書き込まれる idmap を記録するようになりました
  • conf: 設定値をパースするほとんどのコードをリファクタリングしました
  • conf: ネットワークの削除をリファクタリングしました
  • conf: parse_idmaps() 中の不要な割り当てを削除しました
  • conf: 使われないマウントのコードを削除しました
  • conf: lxc_map_ids() を作りなおしました
  • conf: userns_exec_1() を作りなおしました
  • conf: tty を 2 つ同時に送るようにしました
  • conf: API を新しいコールバックシステムへ切り替えました
  • conf: uid,gidのマッピングは最小限だけ使うようにしました
  • conf: char の配列のチェックを正しく行うようになりました
  • conf: lxc-usernsexec コマンドの実行には run_command 関数を使うようにしました
  • console: ピアが exit した際には tty の状態をクリアし、0 を返すようにしました
  • console: 'stdin' が tty ではないときは winsize を調整するハンドルを追加しないようにしました
  • console: 'lxc_tty_state' のメモリリークを修正しました
  • console: 使われない変数割り当てを削除しました
  • core: MS_RDONLY でマウントされている場合は、MS_REMOUNT フラグ付きで remount するようにしました
  • core: x32 でエラーになっていたフォーマット文字列を修正しました
  • core: Android 向けに include を修正しました
  • core: メモリとリソースのリークを修正しました
  • core: cppcheck の警告をいくつか修正しました
  • core: 'stdoutfd' を代入していない 'ts->stdoutfd' のバグを修正しました
  • core: Android 向けに自前の mntent を include するようにしました
  • core: userns_exec_1() 関数内でロギング関数を呼ぶようにしました
  • core: __func__ マクロを削除しました
  • core: 使っていないマクロを削除しました
  • core: "priority" を "level" に置き換えました (訳注: ログ関連の定数名)
  • core: lxc.pc に prefix を追加した変更を元に戻しました
  • core: root -> am_root (訳注: 構造体のメンバ名の変更)
  • core: struct bdev -> struct lxc_storage (訳注: 構造体名の変更)
  • core: .gitignore を更新しました
  • core: ログのフォーマット文字列として %m の代わりに strerror(errno) を使うようにしました
  • criu: cmp_version() 関数を追加しまいた
  • criu: 初期化のチェックの際、正しいチェックを行うようにしました
  • doc: README に CII Best Practices のバッヂを追加しました
  • doc: コンソールの動きに関する説明を日本語の lxc.container.conf(5) に追加しました
  • doc: 環境変数の説明を追加しました
  • doc: lxc-monitor(1) にあった正規表現の typo を修正しました
  • doc: 非特権の場合の idmap の制限に関する説明を書き換えました
  • doc: README を書き換えました
  • doc: lxc.container.conf(5) を調整しました
  • doc: get_config_item の API ドキュメントを更新しました
  • execute: コンソールと標準の /dev のシンボリックリンクを有効にしました
  • init: 32 と 33 のシグナルに対するコメントを更新しました
  • init: include 定義の部分を調整しました
  • init: セッションリーダーになるようにしました
  • init: シグナル動作の初期化部分をループの外に移動しました
  • init: exec*() の失敗を報告するようになりました
  • init: systemd のサービスとして動作しているコンテナを停止する際には lxc-stop を使うようになりました
  • liblxc: 確実にメモリを free() するようにしました
  • liblxc: 要求に応じてのみ monitord を起動するようにしました
  • liblxc: エラー時の 5 秒のタイムアウトを削除しました
  • liblxc: snprintf() を使うようにしました
  • liblxc: userns_exec_full() を使うようにしました
  • lock: 機能と関係ない変更を行いました
  • lock: ロックファイルのオープンに失敗した場合は正しいエラーを返すようにしました
  • log: スタック破壊が起こらないようにしました
  • log: 新しい lxc_log_init を使用するようにしました
  • monitor: いくつかの関数で同時に複数の fd を送受信できるようにしました
  • monitor: lxc_cmd_state_server() 関数を追加しました
  • monitor: TRACE レベルのログ出力をいくつか追加しました
  • monitor: 不要なインクルードファイルのインクルードを削除しました
  • monitor: 不要な変数割り当てを削除しました
  • monitor: lxc_abstract_unix_connect 関数の不要な回避コードを削除しました
  • monitor: af_unix の不要な unlink を削除しました
  • network: 設定をクリアする関数に引数を追加しました
  • network: (訳注: ↑で追加した引数に) コールバック関数を設定するようにしました
  • network: ホストの veth デバイスに対する ifindex フィールドを追加しました
  • network: lxc_log_configured_netdevs() 関数を追加しました
  • network: 空のリンクに対する足りなかったチェックを追加しました
  • network: ネットワークカウンタを追加しました
  • network: MTU を無視する場合は警告を出力するようにしました
  • network: インターフェースの index をクリアするようにしました
  • network: 非特権ネットワークのための Open vSwitch を削除しました
  • network: struct lxc_netdev のすべてのフィールドの説明を追加しました
  • network: 作成できなかったネットワークデバイスを削除しないようにしました
  • network: ログの文法を修正しました
  • network: lxc_get_netdev_by_idx() 関数を追加しました
  • network: openvswitch のクリーンアップスレッドの PID をログに記録するようにしました
  • network: インターフェースインデックスをログに記録するようにしました
  • network: ホスト側の veth デバイスのインターフェースインデックスをログに記録するようにしました
  • network: veth_attr.pair と veth_attr.veth1 をログに記録するようにしました
  • network: config_value_empty() 関数を confile_utils に移動しました
  • network: 作成時にネットワークのバリデーションを行うようにしました
  • network: lxc_mkifname() を使う場面ではメモリを確保しないようにしました
  • network: 不要な変数割り当てを削除しました
  • network: netpipe を削除しました
  • network: 正しい名前とインターフェースインデックスを取得するようにしました
  • network: ホストの veth デバイスのインターフェースインデックスを取得するようにしました
  • network: ネットワーク作成部分を作り直しました
  • network: 非特権ネットワークでインターフェースインデックスを使うようにしました
  • network: 保存したネットワークデバイスの記録を止めました
  • network: 正しいネットワークデバイス名を使うようにしました
  • network: send()/recv() を使うようにしました
  • network: ネットワークを削除する場合は単一のヘルパ関数を使うようにしました
  • network: ネットデバイス名にはサイズを静的に割り当てた変数を使うようになりました
  • openvswitch: ポートをインテリジェントに削除するようにしました
  • seccomp: カーネルへのロードが成功したあとに seccomp フィルターをエクスポートするようにしました
  • seccomp: ログにアクション名を出力するようにしました
  • seccomp: s/n-new-privs/no-new-privs/g
  • seccomp: parse_config 関数のコメントを更新しました
  • start: lxc_free_handler() を追加しました
  • start: lxc_init_handler() を追加しました
  • start: すべてのハンドラのフィールドを文書化しました
  • start: idのマッピングなしで lxc_map_ids() を呼ばなくなりました
  • start: 継承した名前空間の fd は閉じなくなりました
  • start: data_sock を利用する側で fd を閉じなくなりました
  • start: pty スレーブのために std{in,out,err} を dup するようにしました
  • start: cgroup がかならずクリーンアップされるようにしました
  • start: lxc_check_inherited() を一般化しました
  • start: tty の fd の送受信をログに記録するようにしました
  • start: unshare(CLONE_NEWCGROUP) のあとで lxc_setup() するようにしました
  • start: 環境変数のセットアップをコンテナのセットアップの前に移動しました
  • start: LXC_LOG_LEVEL 環境変数をフックに与えるようにしました
  • start: 特権の場合に rootfs を pin するようにしました
  • start: 使われていない変数を削除しました
  • start: クライアントに状態が登録されていなくても、古い lxc-monitord にサーバ状態を送るようにしました
  • start: 環境変数を正しく設定するようにしました
  • start: SOCK_DGRAM から SOCK_STREAM に変更しました
  • start: 非特権の ID へのスイッチを特権が必要な処理が終わった最後の瞬間に行うようにしました
  • start: デーモンとして起動する場合は分離したソケットを使うようにしました
  • start: userns_exec_full() を使うようにしました
  • state: lxc_rmstate の宣言を削除しました
  • storage: storage_utils.{c.h} を追加しました
  • storage: segfault を防ぐようにしました
  • storage: 同じパスの場合は元のタイプをデフォルトにしました
  • storage: mkfs.* の出力を記録するようにしました
  • storage: "bdev" -> "storage" とリネームしました
  • storage: userns_exec_full() を使うようにしました
  • storage/dir: 必要なフラグを追加するために add-required_remount_flags 関数を使うようにしました
  • storage/loop: loop ファイルを検出するようにしました
  • storage/overlayfs: 間違ったパスを修正しました
  • storage/overlay: スナップショット時のoverlayfsを扱いを変更しました
  • template: userns.conf から廃止になった bind-mounts を削除しました
  • template: キャッシュされた rootfs をコピーする際に "rsync -SHaAX" を使うようにしました
  • template/alpine: ppc64le のサポートを追加しました
  • template/alpine: ファイルの存在チェック時にサイズが 0 でないこともチェックするようにしました
  • template/archlinux: ロケールを "en-US.UTF-8" から "en_US.UTF-8" に変更しました
  • template/centos: パッケージリストに cronie を追加しました
  • template/centos: i386 と x86_64 以外のアーキの CentOS では AltArch ミラーを使うようになりました
  • template/debian: aarch64 -> arm64 のマッピングを追加しました
  • template/debian: buster を有効なリリースとして追加しました
  • template/debian: getty@ の設定を強制しなくなりました
  • template/debian: デフォルトの Debian ミラーとして deb.debian.org を使うようになりました
  • template/download: 文法エラーを修正しました
  • template/download: shellcheck でスクリプトのサニタイズを行いました
  • template/opensuse: Tumbleweed をサポートするリリースに追加しました
  • template/opensuse: Tumbleweed でのソフトウェアの選択の問題を修正しました
  • template/opensuse: getty.target.wants が存在しない場合の処理を追加しました
  • template/opensuse: leap 42.3 をサポートしました
  • template/opensuse: Tumbleweed は update リポジトリを持たないので対応した処理を行うようにしました
  • template/plamo: コンテナのシャットダウン時の不要な処理を削除しました
  • template/ubuntu: netplan の判断を、config ディレクトリのチェックから netplan コマンドをチェックするようにしました
  • template/ubuntu: upstart の ssh ジョブは現在オプショナルなので、条件付きで mv するようにしました。
  • template/ubuntu: 新しいリリースではデフォルトで netplan をサポートするようになりました
  • tests: lxc-user-nic のテストを新しい文法に合わせました
  • tests: lxc_safe_{u}int() の異常系テストを追加しました
  • tests: アイテムをクリアするテストと設定ファイルのテストを追加しました
  • tests: lxc.rootfs.options の ro オプションのためのテストスクリプトを追加しました
  • tests: idmap パーサーのユニットテストを追加しました
  • tests: NULL ポインタへの参照を防ぎました
  • tests: 可能な場合は常に返り値と期待する値を比較するようにしました
  • tests: チェックの前にネットワークを定義するようにしました
  • tests: ユーザに対するプロセスがないときは失敗しないようにしました
  • tests: すべての設定項目に対するメソッドを強制するようになりました
  • tests: 不要な割り当てを削除しました
  • tests: テンポラリのコンテナディレクトリを削除するようになりました
  • tests: 短命のデーモン化するコンテナのテストを追加しました
  • tests: systemd のハイブリッドな cgroup をサポートしました
  • tools: 追加の cgroup のチェックを追加しました
  • tools: LXC_DEVEL が true の場合は "-devel" と表示するようにしました
  • tools/lxc-attach: /dev/tty がない状況でも利用できるようになりました
  • tools/lxc-checkconfig: "which" を使うようにしました
  • tools/lxc-checkconfig: CONFIG_NETFILTER_XT_MATCH_COMMENT を追加しました
  • tools/lxc-checkconfig: ステータスをチェックするプローブを追加しました
  • tools/lxc-execute: 失敗した場合はエラーメッセージを出力するようにしました
  • tools/lxc-ls: デフォルトですべてのコンテナを返すようになりました
  • tools/lxc-monitord: quit コマンドを受信したら exit するようになりました
  • tools/lxc-unshare: NULL ポインターを与えないようにしました
  • tools/lxc-user-nic: 新たにサブコマンド create, delete を追加しました
  • tools/lxc-user-nic: 削除しようとする前に db のチェックを行うようにしました
  • tools/lxc-user-nic: データベースエントリの追加時の問題を修正しました
  • tools/lxc-user-nic: メモリリークを修正しました
  • tools/lxc-user-nic: メモリを free するようにしました。エラーのチェックを追加しました
  • tools/lxc-user-nic: gcc-7 で警告がでないように変数を初期化するようにしました
  • tools/lxc-user-nic: 指定したユーザやリンク以外の行を削除しないようにしました
  • tools/lxc-user-nic: master と stable の差をなくしました
  • tools/lxc-user-nic: 二重の初期化を削除しました
  • tools/lxc-user-nic: ネットデバイスをリネームする処理を書き換えました
  • tools/lxc-user-nic: ロジックを簡素化しました
  • tools/lxc-user-nic: delete コマンドを実行する際にネットワーク名前空間上で必要な権限があるかどうかチェックするようにしました
  • tools/lxc-usernsexec: 不要な割り当てを削除しました
  • travis: ビルドを修正しました
  • utils: has_fs_type() と is_fs_type() を追加しました
  • utils: lxc_nic_exists() を追加しました
  • utils: lxc_safe_ulong() を追加しました。
  • utils: run_command を追加しました
  • utils: fork 後の子プロセス内で親の fd をクローズするようにしました
  • utils: サイズ 0 のバッファへ書き込まないようにしました
  • utils: lxc_popen() 内で stderr を複製するようにしました
  • utils: lxc_mount_proc_if_needed() を修正しました
  • utils: lxc_popen()/lxc_pclose() を修正しました
  • utils: realpath のメモリリークを修正しました
  • utils: 数字をパースする関数を修正しました
  • utils: ppc64le のビルドを修正しました
  • utils: ブロックされた信号を検出する方法を修正しました
  • utils: lxc_popen() 内の不要な割り当てを削除しました
  • utils: cgfsng.c から utils.{c,h} へヘルパ関数を移動させました
  • utils: lxc_deslashify() 関数を作りなおしました
  • utils: has_fs_type() にスイッチしました
  • utils: オーバーフローしてしまうので 1LU を使うようにしました
  • utils: stat の代わりに access を使うようにしました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.0.9 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable-2.0 ブランチが Github にあります。

LXC 1.0.11 リリースのお知らせ 19th of October 2017

このリリースは LXC 1.0 の 11 回目のバグフィックスリリースです。

バグ修正 :

  • apparmor: コンテナが AppArmor namespace 内で起動できるようになりました
  • apparmor: apparmor の不要な deny を削除しました
  • conf: libcap がない場合のビルドの問題を修正しました
  • conf: netdev->downscript 変数を free するようにしました
  • conf: write_id_mapping() 関数を改良しました
  • conf: 機能と関係ない変更を行いました
  • conf: 設定をパースする関数を全体的にリファクタリングしました
  • console: 機能と関係ない変更を行いました
  • core: __func__ マクロを削除しました
  • core: ログのフォーマット文字列として %m の代わりに strerror(errno) を使うようにしました
  • doc: README に CII Best Practices のバッヂを追加しました
  • doc: コマンドに対する足りていなかった変換を追加しました
  • doc: typo を修正しました
  • doc: lxc-monitor(1) にあった正規表現の typo を修正しました
  • doc: 非特権の場合の idmap の制限に関する説明を書き換えました
  • doc: get_config_item の API を更新しました
  • doc: README を更新しました
  • init: 32 と 33 のシグナルに対するコメントを更新しました
  • liblxc: snprintf() を使うようにしました
  • lock: 機能と関係ない変更を行いました
  • lock: ロックファイルのオープンに失敗した場合は正しいエラーを返すようにしました
  • monitor: af_unix の unlink 操作を削除しました
  • network: mtu を無視した場合の警告を追加しました
  • network: 機能と関係ない変更を行いました
  • seccomp: log にアクション名を表示するようにしました
  • seccomp: s/n-new-privs/no-new-privs/g
  • seccomp: parse_config 関数のコメントを更新しました
  • state: lxc_rmstate の宣言を削除しました
  • storage: gcc7 でビルドできるようにしました
  • template/archlinux: ロケールを "en-US.UTF-8" から "en_US.UTF-8" に変更しました
  • template/centos: パッケージリストに cronie を追加しました
  • template/centos: i386 と x86_64 以外のアーキの CentOS では AltArch ミラーを使うようになりました
  • template/debian: aarch64 -> arm64 のマッピングを追加しました
  • template/debian: buster を有効なリリースとして追加しました
  • template/debian: デフォルトの Debian ミラーとして deb.debian.org を使うようになりました
  • template/opensuse: getty.target.wants が存在しない場合の処理を追加しました
  • template/ubuntu: upstart の ssh ジョブは現在オプショナルなので、条件付きで mv するようにしました。
  • template: キャッシュされた rootfs をコピーする際に "rsync -SHaAX" を使うようにしました
  • tests: NULL ポインタへの参照を防ぎました
  • tests: attach のテストケースからテンポラリの lxcpath を削除しました
  • tools/usernsexec: 不要な割り当てを削除しました
  • tools: "which" を使うようにしました
  • travis: ビルドの修正を行いました
  • utils: fork 後の子プロセス内で親の fd をクローズするようにしました
  • utils: lxc_popen() 内で stderr を複製するようにしました
  • utils: lxc_popen()/lxc_pclose() を修正しました
  • utils: realpath のメモリリークを修正しました
  • utils: cppcheck の警告をいくつか修正しました
  • utils: 'stdoutfd' を代入していない 'ts->stdoutfd' のバグを修正しました
  • utils: lxc_popen() 内の不要な割り当てを削除しました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 1.0.11 のパッケージをリリースするでしょう。

LXC 開発元として、1.0 ユーザには 2.0 LTS リリースへのアップグレードを強くおすすめします。 1.0 ブランチは 2019 年 6 月までサポートが続きます。しかし現時点では、重大なバグフィックスとセキュリティホール対策のみがバックポートされます。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable-1.0 ブランチが Github にあります。

LXC 2.1.1 リリースのお知らせ 2017 年 10 月 19 日

このリリースは LXC 2.1 のはじめてのバグフィックスリリースです。

バグフィックス:

  • apparmor: apparmor の不要な deny を削除しました
  • cgfsng: 設定を持っているかどうかをチェックするようになりました
  • cgfsng: 制限の適用に失敗したときにはエラーになるようにしました
  • conf: 多数のマッピングをしようとした際にエラーになるようにしました
  • conf: lxc.kmsg と lxc.pivotdir を無視するようになりました
  • conf: 環境変数が設定されているときのみ、ワーニングを出力するようにしました
  • conf: 設定ファイル中の改行を保存するようにしました
  • conf: parse_idmaps() 中の不要な割り当てを削除しました
  • conf: 不要な NULL による初期化を削除しました
  • conf: x32 でのビルドの失敗を修正するため、適切な型として rlim_t を使うようにしました
  • console: ピアが exit した際には tty の状態をクリアし、0 を返すようにしました
  • console: 不要な変数割り当てを削除しました
  • core: userns_exec_full() 関数を追加し、それを使用するようにしました
  • criu: 初期化のチェックの際、正しいチェックを行うようにしました
  • doc: lxc.cgroup.dir の説明を日本語の lxc.container.conf(5) に追加しました
  • doc: lxc-update-config の manpage を追加しました
  • doc: 環境変数の説明を追加しました
  • doc: lxc-monitor(1) にあった正規表現の typo を修正しました
  • doc: 日本語の lxc(7) を更新しました
  • doc: 日本語の lxc-update-config(1) を追加しました
  • execute: コンソールと標準の /dev のシンボリックリンクを有効にしました
  • init: セッションリーダーになるようにしました
  • log: x32 でエラーになっていたフォーマット文字列を修正しました
  • log: スタック破壊が起こらないようにしました
  • monitor: 不要な変数割り当てを削除しました
  • network: 空のリンクのチェックを行うようにしました
  • network: インターフェースの index をクリアするようにしました
  • network: 機能と関係ない変更を行いました
  • network: 不要な変数割り当てを削除しました
  • network: ネットワークの削除の際は単一のヘルパを使うようにしました
  • start: 継承した名前空間の fd はクローズしないようにしました
  • start: 環境変数のセットアップをコンテナのセットアップの前に移動しました
  • start: LXC_LOG_LEVEL 環境変数をフックに与えるようにしました
  • start: 使われていない変数を削除しました
  • start: 環境変数を正しく設定するようにしました
  • start: 非特権の ID へのスイッチを特権が必要な処理が終わった最後の瞬間に行うようにしました
  • storage: lxc.rootfs.path がない場合の segfault を防止しました
  • storage: エラーメッセージ中の typo を修正しました
  • storage/lvm: 論理ボリュームが Thinpool であるときの処理を修正しました
  • storage/overlay: 正しくないメモリ操作を修正しました
  • storage/overlay: use after free を修正しました
  • storage/zfs: zfs の作成に失敗した場合は直接エラーを返すようにしました
  • template/alpine: ファイルの存在チェック時にサイズが 0 でないこともチェックするようにしました (-f => -s)
  • template/archlinux: ロケールを "en-US.UTF-8" から "en_US.UTF-8" に変更しました
  • template/debian: getty@ の設定を強制しなくなりました
  • template/plamo: コンテナのシャットダウン時の不要な処理を削除しました
  • tests: NULL ポインタへの参照を防ぎました
  • tests: 不要な変数割り当てを削除しました
  • tests: systemd のハイブリッドな cgroup をサポートしました
  • tools: LXC_DEVEL が true の場合は "-devel" を表示するようにしました (訳注: バージョン番号の話)
  • tools/lxc-unshare: NULL ポインタを与えないようにしました
  • tools/lxc-update-config: lxc.pivotdir と lxc.kmsg のエントリを削除するようにしました
  • tools/lxc-update-config: lxc.rootfs.backend 行を削除し、IPv4 アドレスを正しく扱えるようにしました
  • tools/lxc-user-nic: 二重の初期化を削除しました
  • tools/lxc-usernsexec: 不要な変数割り当てを削除しました
  • utils: サイズ 0 のバッファへ書き込まないようにしました
  • utils: lxc_popen() 内で stderr を複製するようにしました
  • utils: lxc_popen()/lxc_pclose() を修正しました
  • utils: lxc_popen() 内の不要な変数割り当てを削除しました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.1.1 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチが Github にあります。

LXC 2.1 リリースのお知らせ 2017 年 9 月 5 日

LXC チームは LXC 2.1 のリリースをお知らせすることを誇りに思います。 このリリースには LXC 2.0 以降に追加されたたくさんの機能が含まれています。

このリリースは LTS リリースではないことに注意してください。LTS リリースではありませんので、LXC 2.1 のサポートは 1 年間のみです。長い期間のサポートが必要なプロダクション環境では 2021 年 6 月までサポートされる LXC 2.0 を使い続けてください。

新機能

リソース制限のサポート

cgroupを使った制限を指定するのと同じように、コンテナの設定ファイル内で、制限名に "lxc.prlimit." というプレフィックスをつけて、カーネルが対応しているすべてのリソースの制限を設定できます。例えば、プロセス数の制限を設定し、同時に nice 値を指定するには、コンテナの設定ファイルで次のように指定します:

lxc.prlimit.nproc = unlimited
lxc.prlimit.nice = 4

非特権での Open vSwitch ネットワークのサポート

非特権ユーザで次のように openvswitch ネットワークを定義できるようになりました:

lxc.net.0.type = veth
lxc.net.0.link = ovsbr0
lxc.net.0.flags = up
lxc.net.0.name = eth0

LXC 2.1 は、シャットダウン時に openvswitch からホスト側の veth デバイスを適切に削除する処理を行います。

新たな設定項目 lxc.cgroup.dir

lxc.cgroup.dir を設定することで、コンテナ用の cgroup を作成する親となる cgroup 名を指定できるようになりました。lxc.cgroup.dir はシステムワイドの設定である lxc.cgroup.pattern を上書きします。

例えば、lxc.uts.name = c1 と設定されたコンテナに lxc.cgroup.dir = mycontainers と設定すると、LXC は cgroup 階層内のすべてのコントローラで、mycontainers/c1 という cgroup を作ります。

hybrid cgroup レイアウトのサポート

cgroup v2 が導入されてから、一部の init システムでは cgroup v1 のコントローラごとの階層と、空の cgroup v2 階層を同時に使える hybrid モードが使えるようになりました。hybrid モードを使うシステムは、通常は次と同じような cgroup レイアウトになります:

  /sys/fs/cgroup/blkio
  /sys/fs/cgroup/devices
  /sys/fs/cgroup/memory
  /sys/fs/cgroup/unified

マウントポイント /sys/fs/cgroup/unified は、通常は cgroup v2 階層の存在を示します。これは findmnt | grep cgroup2 が一致する行を返すかどうかをテストすることで確認できます。LXC 2.1 はこの hybrid モードをサポートします。

コンテナが割り当てることができる pty の数を制限する

lxc.pty.max を設定すると、LXC は、使える pty の数に指定した制限を設定した上で、コンテナの devpts をマウントします。例えば、lxc.pty.max = 10 と設定すると、コンテナは 10 個の pty だけしか割り当てられません。デフォルト値は 1024 です。

bool lxc_config_item_is_supported(const char *key) API 拡張

この関数は、特定の設定項目がライブラリでサポートされているかどうかをユーザが問い合わせるための関数です。この関数は、標準的な liblxc ライブラリや、新しい設定項目がバックポートされた liblxc よりもはるかに少ない設定オプションを持つ liblxc のバージョンを実行する組み込みユーザに特に役に立つでしょう。

新しいログ API 拡張

struct lxc_log {
    const char *name;
    const char *lxcpath;
    const char *file;
    const char *level;
    const char *prefix;
    bool quiet;
};

/*!
 *\brief Initialize the log
 *
 *\param log lxc log configuration.
 */
int lxc_log_init(struct lxc_log *log);

/*!
 * \brief Close log file.
 */
void lxc_log_close(void);

上記の構造体や関数は、ユーザが LXC のロギングを初期化できるようにするためのものです。liblxc の API を直接使うユーザには役に立つでしょう。

lxc-monitord が廃止予定に

LXC 2.1 から lxc-monitord バイナリは廃止予定になりました。デーモン化されたコンテナの起動には lxc-monitord はもう不要です。代わりに、LXC 2.1 では abstract unix ドメインソケットペアを使った実装に切り替えました。これは、LXD のような高度にスレッド化されたコンテナの起動において、起動するプロセスがひとつ少なくなるという利点があります。

また、重い負荷で行った新しい実装のテストで、このソリューションがより堅牢で信頼性が高いことがわかりました。

lxc-copytmpfs 上にスナップショットを作ります

-e オプションを付けて起動した一時的 (ephemeral) なコンテナは tmpfs 上に置かれます。 tmpfs 上にコンテナを置きながらデータの保存は要求できません。そして、バッキングストアとして overlay か aufs を使わなければならず、オリジナルのコンテナは directory でなくてはいけません。

overlay もしくは aufs ファイルシステムを使った一時的なスナップショットのために、ユーザの要求に応じて新しい tmpfs がコンテナディレクトリ上にマウントされます。これは最も簡単なオプションです。それ以外の場合は、現在の overlay と aufs スナップショットのマウントレイアウトを変更する必要があります。標準では overlay と aufs のスナップショットクローンのレイアウトは次のようになります:

        /var/lib/lxc/CLONE_SNAPSHOT/delta0      <-- upperdir
        /var/lib/lxc/CLONE_SNAPSHOT/rootfs
        /var/lib/lxc/CLONE_SNAPSHOT/olwork
        /var/lib/lxc/CLONE_SNAPSHOT/olwork/work <-- workdir

with the lowerdir being

        /var/lib/lxc/CLONE_PARENT/rootfs

upperdir と workdir がコンテナディレクトリ以下の共通のサブディレクトリ内に置かれていないということは、新しい tmpfs を単純に upperdir と workdir の下にマウントできないということになります。なぜなら overlayfs はこのふたつが同じファイルシステム上にあることを期待しているからです。

コンテナディレクトリ上に新しい tmpfs をマウントするので、upperdir (現在はデフォルトで "delta0" という名前) 内にクローン中に作成される、更新された /etc/hostname ファイルが隠されてしまいます。

したがって、ユーザが古い名前をクローンで保存しないように要求した場合は、このファイルを tmpfs 上に再作成します。 これで、通常のクローン処理での正確な動作をリストアするために必要なことすべてのはずです。 注: もしコンテナを再起動した場合、すべての変更は失われます。リブートごとに rootfs が再度マウントされますので、これを防ぐのは容易ではありません。

設定項目名の変更

コンテナの設定がより一貫性を持って行えるように、多数の設定項目の名前が変わりました。 LXC 2.1 では、すべての設定項目が "." で分けられた適切なネームスペースから構成されるサブキーを持つようになりました。

ネットワーク設定

ネットワークの設定で、新しいプレフィックスを導入しました。いくつかの項目はリネームされました。 LXC 2.1 からは、(以前の) "lxc.network" を使ったネットワークの設定項目は廃止予定という扱いになります。 これは "lxc.net" プレフィックスを使った設定に置き換えられます。 さらにインデックスを使わないネットワーク定義は廃止予定とマークされます。次のようなネットワーク設定は legacy なネットワーク設定であるとみなされます:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.network.name = wlp2s0

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.network.name = eno1

上の設定は 2 つの異なったネットワークを定義しています。LXC 2.1 以降は、次のように置き換えてください:

lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.link = lxcbr0
lxc.net.0.name = wlp2s0

lxc.net.1.type = veth
lxc.net.1.flags = up
lxc.net.1.link = lxcbr0
lxc.net.1.name = eno1

この方法だけで定義を行うと、定義する順序には依存しない、一貫性のある定義になる利点があります。 つまり、次のような 2 つのネットワークの設定と同等となります:

lxc.net.1.link = lxcbr0
lxc.net.0.name = wlp2s0
lxc.net.0.type = veth

lxc.net.1.type = veth
lxc.net.1.flags = up
lxc.net.0.flags = up
lxc.net.0.link = lxcbr0
lxc.net.1.name = eno1

同じインデックスの同じ設定が複数ある場合は、LXC は最後の設定を採用することに注意が必要です。これはこれまでのバージョンの LXC と同じ動作です。例えば:

lxc.net.2.link = lxcbr0
lxc.net.2.link = lxdbr0
lxc.net.2.link = br0
lxc.net.2.link = virbr0

上のような設定では、LXC は、最後の設定が virbr0 に設定されているため、ネットワークは virbr0 に関連付けられます。

変更された設定項目一覧

次の表は左の列に以前の設定項目 ("Legacy Key") を、右の列に変更後の設定項目 ("New Key") を一覧したものです。完全に削除された項目は、"New Key" に "-" と表記し、"Comments" 欄に "removed" と書いています。

Legacy Key                           | New Key                       | Comments
-------------------------------------|-------------------------------|---------
lxc.aa_profile                       | lxc.apparmor.profile          |
lxc.aa_allow_incomplete              | lxc.apparmor.allow_incomplete |
lxc.console                          | lxc.console.path              |
lxc.devttydir                        | lxc.tty.dir                   |
lxc.haltsignal                       | lxc.signal.halt               |
lxc.id_map                           | lxc.idmap                     |
lxc.init_cmd                         | lxc.init.cmd                  |
lxc.init_gid                         | lxc.init.gid                  |
lxc.init_uid                         | lxc.init.uid                  |
lxc.kmsg                             | -                             | removed
lxc.limit                            | lxc.prlimit                   |
lxc.logfile                          | lxc.log.file                  |
lxc.loglevel                         | lxc.log.level                 |
lxc.mount                            | lxc.mount.fstab               |
lxc.network                          | lxc.net                       |
lxc.network.                         | lxc.net.[i].                  |
lxc.network.flags                    | lxc.net.[i].flags             |
lxc.network.hwaddr                   | lxc.net.[i].hwaddr            |
lxc.network.ipv4                     | lxc.net.[i].ipv4.address      |
lxc.network.ipv4.gateway             | lxc.net.[i].ipv4.gateway      |
lxc.network.ipv6                     | lxc.net.[i].ipv6.address      |
lxc.network.ipv6.gateway             | lxc.net.[i].ipv6.gateway      |
lxc.network.link                     | lxc.net.[i].link              |
lxc.network.macvlan.mode             | lxc.net.[i].macvlan.mode      |
lxc.network.mtu                      | lxc.net.[i].mtu               |
lxc.network.name                     | lxc.net.[i].name              |
lxc.network.script.down              | lxc.net.[i].script.down       |
lxc.network.script.up                | lxc.net.[i].script.up         |
lxc.network.type                     | lxc.net.[i].type              |
lxc.network.veth.pair                | lxc.net.[i].veth.pair         |
lxc.network.vlan.id                  | lxc.net.[i].vlan.id           |
lxc.pivotdir                         | -                             | removed
lxc.pts                              | lxc.pty.max                   |
lxc.rebootsignal                     | lxc.signal.reboot             |
lxc.rootfs                           | lxc.rootfs.path               |
lxc.se_context                       | lxc.selinux.context           |
lxc.seccomp                          | lxc.seccomp.profile           |
lxc.stopsignal                       | lxc.signal.stop               |
lxc.syslog                           | lxc.log.syslog                |
lxc.tty                              | lxc.tty.max                   |
lxc.utsname                          | lxc.uts.name                  |

lxc-update-config スクリプト

LXC 2.1 には新しく lxc-update-config スクリプトが付属します。これは、以前の設定項目名を LXC 2.1 で有効な設定にアップグレードするのに使えます。次のように実行します

lxc-update-config -c /path/to/config

このスクリプトは、最初に現在の設定ファイルのバックアップを取得します。 バックアップファイルの名前は `.backup です。 バックアップファイルは、万が一、アップグレードで生成した設定ファイルが LXC 2.1 で使えないのに備えて作成します。 バックアップを生成したあと、スクリプトが以前の設定が新しい設定に置き換えます。

廃止予定の警告

LXC 2.1 は 2.1 より前の設定ファイルとの完全な下位互換性を持っています。 つまり、いかなる廃止予定の設定であっても、コンテナが使えなくなるようにはなりません。しかし、LXC 2.1 は廃止予定の設定があると警告を行います。コンテナの起動時に、LXC 2.1 は 一度だけ 次のような警告メッセージを出力します:

The configuration file contains legacy configuration keys.
Please update your configuration file.

すべてのユーザは、前述の lxc-update-config スクリプトを使って、設定ファイルを更新することをおすすめします。 コンテナでロギングが有効な場合、ログには検出された以前の設定項目に関する警告が含まれます。ログを使えば、手動で設定ファイルを更新するほうが好きなユーザの役に立つでしょう。

変更点

  • コア :

    • af unix: ソケット名を最大長まで指定できるようになりました (訳注: Abstract unix ソケットの名前)
    • af_unix: いくつかの関数で同時に複数の fd を送受信できるようにしました
    • android: 32bit の prlimit の実装を追加しました
    • API: lxc_log_init を API として公開しました
    • API: lxc_config_item_is_supported() 関数を追加しました
    • caps: lxc_{proc,file}_cap_is_set() 関数を追加しました
    • cgroups: hybrid cgroup レイアウトを扱えるようになりました
    • commands: EINTR を扱うようになりました
    • commands: lxc_cmd_state_server() 関数を追加しました
    • commands: API を新しいコールバックシステムへ切り替えました
    • conf: リソース制限を実装しました
    • conf: new{g,u}idmap で必要な特権を持っているかチェックするようになりました
    • conf: /dev/ptmx でバインドマウントを使うようになりました
    • conf: マウントオプションに MS_LAZYTIME を追加しました
    • conf: 設定されていない場合は tty を送らないようになりました
    • conf: tty を 2 つ同時に送るようにしました
    • conf: lxc-user-nic の出力をログするようにしました
    • conf: ネットワークの削除を再構築しました
    • conf: コア関数を書き直しました
    • conf: lxc_map_ids() 関数を改良しました (訳注: コマンドの権限と存在のチェックを追加)
    • conf: uid,gidのマッピングは最小限だけ使うようにしました
    • conf: euid != 0 でも uid マッピングが書き込めるようになりました (訳注: 非特権ユーザが自身の id だけをマップできるようになりました)
    • conf: /dev/console 上のすべてのマウントをアンマウントするようになりました
    • conf{,ile}: 以前の設定項目の場合、ユーザに一度だけ警告するようになりました
    • confile: lxc_get_idmaps() 関数を追加しました (訳注: コンテナが定義したidmapを取得する)
    • confile: コールバックシステムを作りなおして拡張しました
    • confile: パフォーマンスの調整を行いました
    • confile: "lxc.cgroup.dir" を追加しました
    • confile: namespace内の設定項目を一覧できる関数を追加しました (訳注: "lxc.net"のようにキーを与えると、そのnamespaceに属する設定項目を一覧する)
    • confile: lxc_getconfig() -> lxc_get_config()
    • confile: get_network_config_ops() 関数を改良しました
    • confile: lxc_list_net() のファイル内での位置を移動しました
    • confile: lxc_listconfigs -> lxc_list_config_items
    • confile: lxc_list_net() を作りなおしました
    • confile: lxc.seccomp --> lxc.seccomp.profile
    • confile: lxc.pts --> lxc.pty.max
    • confile: lxc.tty --> lxc.tty.max
    • confile: lxc.net.ipv6 --> lxc.net.ipv6.address
    • confile: lxc.net.ipv4 --> lxc.net.ipv4.address
    • confile: lxc.mount --> lxc.mount.fstab
    • confile: lxc.console --> lxc.console.path
    • confile: lxc.rootfs --> lxc.rootfs.path
    • confile: lxc.rootfs.backend は廃止予定になりました (訳注: lxc.rootfs.pathでパスと同時に設定するようになった。例: lxc.rootfs.path = btrfs:/path/to/root)
    • confile: lxc.utsname --> lxc.uts.name
    • confile: lxc.devttydir --> lxc.tty.dir
    • confile: シグナル用の namespace である lxc.signal を新設しました
    • confile: ログ用の namespace である lxc.log を新設しました
    • confile: コンテナの init 用の namespace である lxc.inet を新設しました
    • confile: lxc.limit --> lxc.prlimit
    • confile: lxc.pivotdir を廃止しました
    • confile: lxc.kmsg を廃止しました
    • confile: セキュリティ関連の namespace を適切に設定しました (訳注: lxc.apparmorlxc.selinux)
    • doc: 新しい設定項目に書き換えました
    • devpts: マウント時に max= を使うようになりました
    • lsm/AppArmor: コンテナが AppArmor namespace 内で起動できるようになりました
    • lxccontainer: インデックスで指定されたネットワークをすべてクリアするようになりました
    • lxccontainer: 新しいコールバックシステムに API を切り替えました
    • lxc-init: exec*() の失敗を報告するようになりました
    • lxc-user-nic: 指定したユーザやリンク以外の行を削除しないようにしました
    • lxc-user-nic: データベースにエントリを追加する際の問題を修正しました
    • lxc-user-nic: 消去する前にデータベースをチェックするようにしました
    • lxc-user-nic: delete コマンドを実行する際にネットワーク名前空間上で必要な権限があるかどうかチェックするようにしました
    • lxc-user-nic: ネットデバイスをリネームする処理を書き換えました
    • lxc-user-nic: 新たに create と delete というサブコマンドを追加しました
    • monitor: abstract ソケットのロジックを簡素化しました
    • network: 作成していないネットワークデバイスを削除しないようにしました
    • network: lxc_mkifname() を使う場面ではメモリを確保しないようにしました
    • network: netpipe の使用を削除しました
    • network: 正しいネットワークデバイス名を使うようになりました
    • network: 保存した物理ネットデバイスの記録を止めました
    • network: 正しいネットワークデバイス名とインターフェースインデックスを取得するようになりました
    • network: ネットデバイス名にはサイズを静的に割り当てた変数を使うようになりました
    • network: ホスト側の veth デバイスのインターフェースインデックスを取得するようになりました
    • network: ネットワーク作成部分を作り直しました
    • network: 非特権ネットワークのための Open vSwitch を削除しました
    • network: インターフェースインデックスをログに記録するようにしました
    • network: 非特権ネットワークでインターフェースインデックスを使うようにしました
    • network: レガシーネットワークではマイナス値を返すようにしました
    • network: 新しいネットワーク設定パーサをテストするようにしました
    • network: 新しいネットワークパーサを追加しました
    • network: 下位互換性を確保するようにしました
    • network: 設定アイテムのテストスイートを追加しました
    • openvswitch: ポートをインテリジェントに削除するようにしました
    • README: CII Best Practices のバッヂを追加しました
    • seccomp: 利用出来る場合は SCMP_FLTATR_ATL_TSKIP をセットするようにしました
    • start: lxc_check_inherited() を一般化しました
    • start: デーモンとして起動する場合は分離したソケットを使うようにしました
    • start: SOCK_DGRAM から SOCK_STREAM へ切り替えました
    • start: data_sock を使っている側が fd を close しないようにしました (訳注: fd を作成していない関数内で閉じないようにした)
    • start: cgroup が確実にクリーンアップされるようにしました
    • start: utmp をウォッチするのをやめました
    • start: unshare(CLONE_NEWCGROUP) のあとで lxc_setup() するようにしました
    • start: pty スレーブに std{in,out,err} を複製するようにしました
    • start: lxc_init_handler() を追加しました
    • start: lxc_free_handler() を追加しました
    • start: 特権の場合に rootfs を pin するようにしました
    • storage: lxc_storage_get_path() 関数を追加しました (訳注: コンテナディレクトリのパスを返す)
    • storage: storage_utils.{c.h} を追加しました
    • storage: "overlay" という名前も有効なバックエンド名として受け付けるようにしました
    • storage: ストレージ関係のファイル名やディレクトリ名に付いていた "bdev" という文字列を "storage" に変更しました。
    • storage/aufs: 廃止予定になりました
    • storage/btrfs: btrfs ストレージドライバを作りなおしました
    • storage/loop: loop ストレージドライバを作りなおしました
    • storage/lvm: lvm バックエンドを作りなおしました
    • storage/overlay: overlay ストレージドライバを作りなおしました
    • storage/overlay: スナップショットから正しくリストアされるようにしました
    • storage/overlay: 依存のトラッキングが正しく扱われるようにしました
    • storage/rbd: rbd ストレージドライバを作りなおしました
    • storage/zfs: zfs ストレージドライバを作りなおしました
    • tests: lxc.cgroup.dir のテストを追加しました
    • test: サブキーを取得するテストを追加しました
    • tests: idmap パーサのユニットテストを追加しました
    • tests: すべての設定項目に対してすべてメソッドが実装されているかのチェックを追加しました
    • tree-wide: struct bdev -> struct lxc_storage
    • utils: lxc_nic_exists() 関数を追加しました
    • utils: ファイルシステムタイプを判別する部分は has_fs_type() を使うように変更しました
    • utils: has_fs_type() + is_fs_type() を追加しました
    • utils: lxc_deslashify() 関数を作りなおしました
    • utils: lxc_make_abstract_socket_name() 関数を追加しました
    • utils: lxc_safe_ulong() 関数を追加しました (訳注: 数値の文字列を unsigned long に変換)
    • utils: lxc_unstack_mountpoint() 関数を追加しました (訳注: 与えたパスのマウントをすべてアンマウントする)
  • テンプレート:

    • templates/Alpine: ppc64le のサポートを追加しました
    • templates/Alpine: ランダムにミラーを選ぶのではなく dl-cdn.a.o をデフォルトのミラーとして使うようになりました
    • templates/Alpine: デフォルトリポジトリにコミュニティリポジトリを追加しました
    • templates/CentOS: i386 と x86_64 以外のアーキの CentOS では AltArch ミラーを使うようになりました
    • templates/CentOS: デフォルトを CentOS 7 にしました
    • templates/debian: デフォルトの Debian ミラーとして deb.debian.org を使うようになりました
    • templates/debian: buster を有効なリリースとして追加しました
    • templates/opensuse: leap 42.3 をサポートしました
    • templates/opensuse: Tumbleweed でのソフトウェアの選択の問題を修正しました
    • templates/opensuse: Tumbleweed をサポートするリリースに追加しました
    • templates/ubuntu: 新しいリリースではデフォルトで netplan をサポートするようになりました
    • templates/ubuntu: upstart の ssh ジョブは現在オプショナルなので、条件付きで mv するようにしました。
    • userns.conf: 必要がなくなった bind マウントは削除しました
  • ツール:

    • lxc-execute: 失敗時にエラーメッセージを表示するようにしました
    • lxc-update-config: レガシーなネットワークを変換できるようになりました
    • tools: 追加の cgroup のチェックを行うようになりました
    • tools: lxc-update-config を追加しました
    • tools/lxc-attach: /dev/tty がない環境でもアタッチできるようになりました
    • tools/lxc-checkconfig: CONFIG_NETFILTER_XT_MATCH_COMMENT を追加しました
    • tools/lxc-checkconfig: new[ug]idmap が setuid-root されているかを確認するようになりました
    • tools/lxc-ls: デフォルトではすべてのコンテナを返しますが、新しいフィルタとして定義済みのコンテナのみリストできるようになりました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.1 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチが Github にあります。

LXC 2.0.8 リリースのお知らせ 2017 年 5 月 11 日

このリリースは LXC 2.0 の 7 回目のバグフィックスリリースです。

重要な変更 :

  • セキュリティホール CVE-2017-5985 の修正
  • このバージョンで、すべてのテンプレートでデフォルトのパスワードは設定されなくなりました。代わりに、lxc-attach を使ってユーザの設定を行います。この変更により、(かなり安全性に問題のある) デフォルトユーザを使うように設定された、自動化された環境に影響があるでしょう。

バグ修正 :

  • lxc-start-ephemeral を Python 3.2 互換にしました
  • Typo を修正しました
  • sys/capability.h なしでもビルドできるようになりました
  • lxc-opensuse: リリースコード用のデフォルト値を修正しました
  • util: setproctitle 関数では常に malloc するようにしました (訳注: Issue #1407 の修正)
  • util: setproctitle 関数のコメントを更新しました
  • confile: lxc.network..ipv{4,6} が空の時、設定をクリアするようにしました
  • lxc_setup_tios(): SIGTTOU と SIGTTIN シグナルを無視するようにしました
  • lxc-net が失敗時には 0 でない値を返すようになりました
  • seccomp: amd64 ホスト上で x32 ゲストを許可するようにしました
  • HAVE_LIBCAP を追加しました (訳注: libcap に関係するビルド時の問題の解決)
  • c/r: bind マウントのときは --ext-mount-map だけを与えるようにしました
  • create_or_remove_cgroup 関数内で 'mkdir -p' を行うようにしました
  • clonehostname フック内では LXC_ROOTFS_MOUNT を使うようにしました
  • squeeze はサポート外のリリースとなったのでキーを削除しました
  • start: SIGCHLD 時は WARN() から NOTICE() にレベルを下げました
  • log: lxc_unix_epoch_to_utc() を修正しました
  • cgfsng: trim() 関数をより安全にしました
  • seccomp: SCMP_FLTATR_ATL_TSKIP が利用可能であれば設定するようにしました
  • lxc-user-nic: #include 宣言を順序よく並べ直しました
  • lxc-user-nic: 改良とバグフィックスを行いました
  • lxc-user-nic: 失敗時はリンクを削除するようにしました
  • conf: 特権コンテナのときだけ veth を削除しようとするようにしました
  • lxc-containers が複数のブリッジをサポートするよう修正しました
  • コードでタブとスペースが混在していたのを修正しました
  • lxc-alpine: デフォルトミラーをランダムで選択する代わりに dl-cdn.a.o を使うようにしました
  • lxc-checkconfig: new[ug]idmap が setuid root されているか確認するようになりました
  • [templates] archlinux: ファイルのコンフリクトを解決しました
  • [templates] archlinux: default_timezone 変数は不要なので削除しました
  • python3: char* が NULL になる可能性がある場合の対処を行いました
  • lxc-download.in / 鍵サーバ (keyserver) が環境変数で設定できるようなりました
  • lxc-download.in / 鍵サーバの変更をヘルプに追加しました
  • 変数チェックを既存のスタイルに合わせるように変更しました
  • tree-wide: を直接 include するようにしました
  • conf/ile: バッファが十分な長さになるようにしました
  • tree-wide: を直接 include するようにしました
  • tests: IPv6 ネットワーク上の実行をサポートしました
  • tests: コンテナを kill するようにしました (shutdown を待たなくなりました)
  • suggest_default_idmap で間違ったファイルを open していたのを修正しました
  • debian テンプレートで root のパスワードを設定しないようにしました
  • 安全でないパスワードを設定しないようにしました
  • altlinux、gentoo、openmandriva、pld テンプレートでデフォルトのパスワードを設定しないようにしました
  • tools: lxc_execute() がリターンコードを返して exit するようになりました
  • ネットワークのシャットダウン時には veth.pair.name を維持するようにしました
  • Makefile: static での clang の init.lxc ビルドを修正しました
  • /etc/sysconfig/lxc または lxc-net で USE_LXC_BRIDGE を使ってブリッジが無効化されている場合はブリッジの起動を待たなくなりました
  • print_stats() のバッファサイズを増やしました
  • POSIX シェル互換でない変数割当を修正しました (bug #1498)
  • APIの不変性に関する注意書きを削除しました (訳注: 1.0 より前の記述があった)
  • conf: ポインタアクセスでよりエラーになりにくくしました
  • conf: lxc_map_ids() で動作とは関係のない変更を行いました
  • caps: lxc_{proc,file}_cap_is_set() 関数を追加しました
  • conf: new{g,u}idmap コマンドのケーパビリティとsetuid をチェックするようになりました
  • conf: rootfs をマウントする際のログ出力を改良しました
  • ls: アクティブなコンテナの条件判断を簡単にしました
  • #1509 で混入した Typo を修正しました
  • attach|unshare: 間違ったコメントを修正しました
  • caps: Android ではファイルのケーパビリティチェックをスキップするようにしました
  • autotools: cap_get_file のチェックを追加しました
  • caps: ケーパビリティがサポートされていない場合は false を返すようにしました
  • conf: setup_pts() での動作とは関係のない変更を行いました
  • conf: /dev/ptmx では bind マウントを使うようにしました
  • conf: 動作とは関係のない変更を行いました
  • utils: LXD 向けの loop device ヘルパーを使うようにしました
  • ISSUE_TEMPLATE.md を作成しました
  • cgroups: cgfsng のデバッグを改良しました
  • issue template: Typo の修正を行いました
  • conf: lxc_setup_devpts() で fd をクローズするようにしました
  • conf: 動作とは関係のない変更を行いました
  • utils: lxc_mount_proc_if_needed() の調整を行いました
  • sshd テンプレートを Ubuntu 17.04 で動作するように修正しました
  • conf: マウントオプションを昇順で並べ直しました
  • conf: マウントオプションに MS_LAZYTIME を追加しました
  • monitor: exec() のエラー時に errno を報告するようになりました
  • af unix: ソケット名を最大長まで使えるようになりました
  • commands: NULL ポインタの参照を行わないようにしました
  • commands: 動作とは関係のない変更を行いました
  • lxccontainer: NULL ポインタの参照を行わないようにしました
  • monitor: abstract ソケットのロジックを簡素化しました
  • precise は最新の LTS ではないので、代わりに xenial を使うようにしました
  • 間違った exit ステータスを修正しました
  • conf: lxc_fill_autodev() の動作とは関係のない変更を行いました
  • conf: lxc_fill_autodev() から /dev/console を削除しました
  • conf: lxc_setup() の動作とは関係のない変更を行いました
  • conf: コンソール関数の動作とは関係のない変更を行いました
  • conf: lxc_setup_dev_console() を改良しました
  • conf: lxc_setup_ttydir_console() (訳注: 設定に従ってコンテナの /dev/console のマウント先を変更してマウントできるようにした)
  • config: /dev/console の bind マウントを削除しました
  • doc: コンソールの振る舞いについてマニュアルに追加しました
  • utils: lxc_unstack_mountpoint() 関数を追加しました
  • conf: /dev/console 上のすべてのマウントをアンマウントするようにしました
  • console: ピアの tty が割当できない場合に失敗するようになりました
  • start: umount2() を削除しました
  • conf: 動作とは関係のない変更を行いました
  • utils: lxc_unstack_mountpoint() で umount 回数が 2^31 より大きなケースを扱えるようにしました
  • CentOS でも systemd ユニットファイルをインストールするようにしました
  • (訳注: configure で) ubuntudebian の case をマージしました
  • start: lxc_spawn() に重要なコメントを追加しました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.0.8 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable-2.0 ブランチが Github にあります。

LXC 1.0.10 リリースのお知らせ 2017 年 5 月 11 日

このリリースは LXC 1.0 の 10 回目のバグフィックスリリースです。

重要な変更:

  • セキュリティホール CVE-2016-10124 の修正
  • セキュリティホール CVE-2017-5985 の修正

バグ修正 :

  • attach: lsm_openat() 関数の実装を簡素化しました
  • commands: ロギングの改良を行いました
  • utils: __LXC_NUMSTRLEN マクロを定義しました
  • tests; クリーンアップのエラーではテストが失敗とならないようにしました
  • conf: lxc.cap.drop と keep の同時使用ができない旨、きちんとエラー出力するようにしました
  • attach: lsm ラベルのファイルディスクリプタを close するようにしました
  • conf, attach: errno を保存して close を呼び出すようにしました
  • templates/lxc-debian.in: dpkg --print-foreign-architectures 実行の Typo を修正しました
  • templates/lxc-debian.in: ホストのアーキテクチャ ppc を powerpc として扱うようにしました
  • cherry-pick した際の errno の regression を修正しました
  • ホストの /usr/lib/systemd からコンテナ内のファイルを生成しないようにしました (訳注: opensuse テンプレート)
  • lxc-opensuse: poweroff.target を sigpwr.target にコピーする処理を削除しました
  • (訳注: ビルド時の) --enable-gnutls オプションを追加しました
  • tests: 不具合のある overlay モジュールでの非特権テストをスキップするようにしました (訳注: カーネルマージ前の Ubuntu の 3.13 カーネルの overlayfs)
  • major()/minor()/makedev() の検出に AC_HEADER_MAJOR を使うようにしました
  • lxc-start-ephemeral を Python 3.2 互換にしました
  • systemd: service ファイルで Delegate を有効にしました
  • confile: lxc.network..ipv{4,6} が空の時、設定をクリアするようにしました
  • seccomp: amd64 ホスト上で x32 ゲストを許可するようにしました
  • squeeze はサポート外のリリースとなったのでキーを削除しました
  • seccomp: SCMP_FLTATR_ATL_TSKIP が利用可能であれば設定するようにしました
  • lxc-checkconfig: new[ug]idmap が setuid root されているか確認するようになりました
  • python3: char* が NULL になる可能性がある場合の対処を行いました
  • lxc-download.in / 鍵サーバ (keyserver) が環境変数で設定できるようなりました
  • lxc-download.in / 鍵サーバの変更をヘルプに追加しました
  • 変数チェックを既存のスタイルに合わせるように変更しました
  • tests: IPv6 ネットワーク上の実行をサポートしました
  • tests: コンテナを kill するようにしました (shutdown を待たなくなりました)
  • suggest_default_idmap で間違ったファイルを open していたのを修正しました
  • lxc_setup_tios(): SIGTTOU と SIGTTIN シグナルを無視するようにしました
  • print_stats() のバッファサイズを増やしました
  • APIの不変性に関する注意書きを削除しました (訳注: 1.0 より前の記述があった)
  • conf: ポインタアクセスでよりエラーになりにくくしました
  • ISSUE_TEMPLATE.md を作成しました
  • issue template: Typo の修正を行いました
  • conf: マウントオプションを昇順で並べ直しました
  • commands: NULL ポインタへの参照をしないようにしました
  • commands: 機能と関係のない変更を行いました (訳注: デバッグログの追加、int -> size_t への修正)
  • lxccontainer: NULL ポインタへの参照をしないようにしました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 1.0.10 のパッケージをリリースするでしょう。

LXC 開発元として、1.0 ユーザには 2.0 LTS リリースへのアップグレードを強くおすすめします。 1.0 ブランチは 2019 年 6 月までサポートが続きます。しかし現時点では、重大なバグフィックスとセキュリティホール対策のみがバックポートされます。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable-1.0 ブランチが Github にあります。

LXC 2.0.7 リリースのお知らせ 2017 年 1 月 23 日

このリリースは LXC 2.0 の 7 回目のバグフィックスリリースです。

このリリースに含まれる主なバグフィックスは以下です:

  • attach: lsm ラベルのファイルディスクリプタを閉じるようしました
  • attach: 機能と関係のない変更を行いました (訳注: ログ出力の改良と関数内の処理の簡素化)
  • attach: lsm_opennat() を簡素化しました (訳注: 関数内の処理の簡素化)
  • caps: lxc_cap_is_set() 関数を追加しました
  • conf: attach: errno を保存して close を呼び出します
  • conf: drop と keep のどちらかだけを使用するようにわかりやすくレポートします (訳注: lxc.cap.(drop|keep)の両方が設定された場合のエラー表示をわかりやすくした)
  • conf: criu: make_anonymous_mount_file() 関数を追加しました (訳注: /tmp がないシステムのために tmpfile() の代わりに memfd_create() を使うようになった)
  • conf: suggest_default_idmap() 関数を修正しました (訳注: 数値を読み取るときにエラーになるので改行を削除するようにしました)
  • configure: --enable-gnutls オプションを追加しました
  • configure: memfd_create() システムコールの有無をチェックするようにしました
  • configure: gettid() が宣言されているかどうかチェックするようにしました
  • configure: major()/minor()/makedev() の検出に AC_HEADER_MAJOR を使うようになりました
  • conf: 機能と関係のない変更を行いました (訳注: ソースコードのフォーマット)
  • conf: スレッドセーフでない strsignal 呼び出しを削除し、ログ出力を改良しました
  • init: sysvinit の LSB ヘッダの Should-Start/Stop に cgroupfs-mount を追加しました
  • log: lxc_unix_epoch_to_utc() 関数を追加しました (訳注: UNIX Epoch をログ出力用の UTC 時刻文字列に変換)
  • log: lxc_unix_epoch_to_utc() 関数内にコメントを追加しました
  • log: タイムゾーンを変換する関数をすべて削除しました
  • log: 日付が確実に正しくフォーマットされるようにしました
  • log: lxc_unix_epoch_to_utc() を使うようにしました
  • log: スレッドで getpid() != gettid() の際に日時の代わりに "N/A" という文字列を出力するようにしました
  • log: スレッドセーフな localtime_r() を使うようにしました
  • lvm: ファイルディスクリプタのリークに関する警告を出力しないようにしました
  • lxccontainer: init の pid へのシグナルの送出に失敗したことをログに出力するようになりました
  • monitor: さらにロギングを行うようにしました
  • monitor: exit 時に mainloop がオープンしていたらクローズするようにしました (訳注: エラー時にきちんと後始末するようになった)
  • monitor: ログの改良を行い、ログレベルを DEBUG に設定しました
  • monitor: パイプのファイルディスクリプタが使用中であることをログ出力するようになりました
  • monitor: lxc-monitord を async シグナルセーフにしました
  • monitor: 機能と関係のない変更を行いました (訳注: ソースのフォーマットとログの改良など)
  • python3-lxc: s390x 上の api_test.py を修正しました
  • start: setgroups() の前に CAP_SETGID をチェックするようにしました
  • start: execute(lxc-execute) を修正し、setgroups() の呼び出しを改良しました
  • state: lxc_wait() 内で async シグナルセーフな関数を使うようにしました
  • templates: lxc-debian: ホスト上の /usr/lib/systemd から取得しようとしないようにしました
  • templates: lxc-debian: 起動時の getty サービスを修正しました
  • templates: lxc-debian: dpkg の --print-foreign-architectures オプションの Typo を修正しました
  • templates: lxc-debian: ppc アーキテクチャを powerpc として扱うようにしました
  • templates: lxc-opensuse: openSUSE のデフォルトリリースを Leap 42.2 にしました
  • templates: lxc-opensuse: libgcc_s1 を削除しました
  • templates: lxc-opensuse: poweroff.target から sigpwr.target へのコピーをしないようにしました
  • templates: lxc-opensuse: AppArmor を unconfined に設定するようになりました
  • templates: lxc-opensuse: Leap 42.2 向けの更新を行いました
  • tests; クリーンアップのエラー時にテストを失敗にしなくなりました
  • tests: 壊れた overlay モジュールでは非特権のテストを行わないようにしました
  • tools: ログ出力の改良を行いました
  • tools: lxc-start: c->is_defined(c) のチェックを削除しました (訳注: volatile コンテナを扱うためにコンテナの存在をチェックしなくなった)
  • tools: lxc-start: load_config の後に configfile を設定するようにしました
  • tools: O_RDONLY だけをチェックするようになりました (訳注: lxcpath のチェック)
  • tree-wide: 色々な場所のマクロのクリーンアップを行いました
  • tree-wide: variable length array を削除しました
  • tree-wide: Sic semper assertis! (訳注: ?? assert の使用を止めているようです)
  • utils: __LXC_NUMSTRLEN マクロを追加しました
  • utils: uid, gid, group を扱うのに便利なラッパー関数を追加しました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.0.6 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable-2.0 ブランチが Github にあります。

LXC 2.0.6 リリースのお知らせ 2016 年 11 月 23 日

このリリースは LXC 2.0 の 6 回目のバグフィックスリリースです。

重要な変更:

  • セキュリティホール CVE-2016-8649 の修正

バグ修正 :

  • utils: detect_ramfs_rootfs() の返り値を bool にしました
  • tests: detect_ramfs_rootfs() に対するテストを追加しました
  • (訳注: systemd の) lxc と lxc@ ユニットに対する "Documentation" オプションを追加しました
  • python のサンプルに utf-8 エンコーディングであることを明記しました
  • log: snprintf() の返り値の sanity チェックを行うようにしました
  • lxc-alpine: /dev/shm を tmpfs としてマウントするエントリを追加しました
  • archlinux: eth0 上で DHCP を実行するようにしました
  • archlinux: 名前解決の修正を行いました
  • lxc_strerror() への参照を削除しました (訳注: 昔存在した関数の宣言が残っていたので削除) Drop leftover references to lxc_strerror()
  • tests: s390x でのイメージダウンロードを修正しました
  • tools: lxc_attach 内でコーディングスタイルを修正しました
  • tools: overlay を有効なバックエンドにしました
  • tools: lxc-start のエラーレポートを改良しました
  • alpine: extra パッケージのインストールを修正しました
  • lxc-alpine: setfcap を drop しないようにしました
  • s390x: personality の seccomp の扱いを修正しました
  • tools: lxc_copy の引数の typo を修正しました
  • liblxc.so に対して libtool を使うようにしました
  • c/r: --veth-pair の代わりに --external を使うようにしました
  • c/r: 設定で名前が指定されていないインターフェースで使う数値をきちんとインクリメントするようになりました
  • c/r: macvlan インターフェースの checkpoint/restore をサポートしました
  • ubuntu: パッケージの更新に proc ファイルシステムが必要だったので修正しました
  • c/r: macvlan の処理で重複する部分を削除しました
  • c/r: デバイス名の生成に snprintf を使うようにしました
  • Android で動作するように libtool の扱いを調整しました
  • tests: lxc_error() と lxc_debug() を追加しました
  • container start: すぐに cgroup 名前空間を生成するようにしました
  • (訳注: spec ファイルの) python コードの include に python3_sitearch を使うようにしました
  • すべてのビルドされたファイルが一度だけ含まれるように rpm のビルドを修正しました
  • cgfs: 不正な free() を修正しました
  • OpenSUSE の build で obs-build も見つけるようにしました
  • --fancy と --fancy-format のヘルプをわかりやすくしました
  • lxc-ls の man ページの単語を修正しました
  • cgfs: print_cgfs_init_debuginfo() を追加しました
  • cgfs: /proc/self/cgroup 内の空行をスキップするようにしました
  • cgfs: NULL を明確にチェックするようにしました
  • tools: lxc-stop で正しい終了コードを使うようにしました
  • c/r: 明示的に criu 引数として bind マウントを発行するようにしました
  • log: LXC_LOG_BUFFER_SIZE を 4096 に増やしました
  • conf: シャットダウン時のネットワーク名前空間の移動とリネームをマージしました (訳注: シャットダウン時に物理NICをホストの名前空間に戻すときの移動とリネーム処理を単一ステップで行うようにしました)
  • c/r: dump 中の criu の標準出力への出力も保存するようになりました
  • c/r: ログ出力の文字列にある不要な行末の改行を削除しました
  • c/r: off-by-one エラーの修正を行いました
  • c/r: checkpoint/restore を実行する前に状態をチェックするようになりました
  • start: cgroup のセットアップが終了したあとに CLONE_NEWCGROUP を実行するようにしました
  • (訳注: /run を指す) シンボリックリンク /var/run を作成するようにしました
  • utils: lxc_append_string() を追加しました
  • cgroups: cpuset.cpus から隔離された CPU を削除しました (訳注: isolcpus オプション付きでシステムが起動した場合)
  • Update Ubuntu release name: zesty を追加し、wily を削除しました
  • templates: lxc-ubuntu-cloud.in に squashfs サポートを追加しました
  • cgroups: v2 階層構造のエントリをスキップするようにしました (訳注: コントローラを/proc/self/cgroupから検索する際の話。v2にはコントローラのエントリはないため)
  • runlevel 0 と 6 で lxc-net を停止するようにしました
  • gitignore に lxc.egg-info を追加しました
  • pkg-config が示す場所に bash completion をインストールするようになりました
  • conf: %m フォーマット指示子を使わないようにしました
  • debian: libui-dialog-perl に依存しなくなりました
  • cgroups: size_t を表示する場合は %zu フォーマット指示子を使うようにしました
  • lxc-checkpoint: (訳注: criu のバージョンに応じて) 自動的に --external か --veth-pair のどちらかを選択するようになりました
  • cgroups: cgfsng で segfault しないようにしました
  • utils: lxc_preserve_ns() を追加しました (訳注: 名前空間を示すファイルを取得する)
  • start: lxc_handler に netnsfd を追加しました
  • conf: lxc_preserve_ns() を使うようにしました
  • attach: lxc_preserve_ns() を使うようにしました
  • lxc_user_nic: lxc_preserve_ns() を使うようにしました
  • conf, start: ログ出力を改良しました
  • conf: ホストから明確に veth デバイスを削除するようにしました
  • conf, start: ネットワークの削除をよりスマートにしました
  • start, utils: preserve_ns() を改良しました
  • start, error: ログの改良を行いました
  • start, namespace: ns_info を namespace.{c,h} へ移動しました
  • attach, utils: バグ修正を行いました
  • attach: ns_info[LXC_NS_MAX] 構造体を使うようにしました
  • namespace: 常にユーザ名前空間へ最初にアタッチするようになりました
  • cgroup: isolcpus の処理を改良しました
  • cgroups: isolcpus ファイルが存在しない場合の処理を追加しました
  • utils: lxc_safe_uint() を追加しました
  • tests: lxc_safe_uint() のためのユニットテストを追加しました
  • utils: lxc_safe_int() を追加しました
  • tests: lxc_safe_int() のためのユニットテストを追加しました
  • conf/ile: lxc_safe_uint() 経由で ip アドレスのプレフィックスを取得するようにしました
  • confile: config_init_{u,g}id で lxc_safe_u/int を使うようにしました
  • conf/ile: config_pts() で lxc_safe_uint を使うようにしました
  • conf/ile: config_start() で lxc_safe_u/int を使うようにしました
  • conf/ile: config_monitor() で lxc_safe_uint を使うようにしました
  • conf/ile: config_tty() で lxc_safe_uint を使うようにしました
  • conf/ile: config_kmsg() で lxc_safe_uint を使うようにしました
  • conf/ile: config_lsm_aa_incomplete() で atoi の使用を止めました
  • conf/ile: config_autodev() で lxc_safe_uint() を使うようにしました
  • conf/ile: config_ephemeral() で atoi() の使用を止めました
  • utils: lxc_safe_int() を使うようにしました
  • lxc_monitord: lxc_safe_int() と exit() を使うようにしました
  • start: lxc_safe_int() を使うようにしました
  • conf: lxc_safe_{u}int() を使うようにしました
  • tools/lxc_execute: lxc_safe_uint() を使うようにしました
  • tools/lxc_stop: lxc_safe_uint() を使うようにしました
  • utils: lxc_safe_long() を追加しました
  • tests: lxc_safe_long() のためのユニットテストを追加しました
  • tools/lxc_stop: lxc_safe_long() を使うようにしました
  • tools/lxc_top: lxc_safe_int() を使うようにしました
  • tools/lxc_ls: lxc_safe_uint() を使うようにしました
  • tools/lxc_autostart: lxc_safe_{int,long}() を使うようにしました
  • tools/lxc_console: lxc_safe_uint() を使うようにしました
  • tools: 標準でない名前空間の識別子を置換するようにしました
  • LXC ブリッジで static な MAC アドレスを設定するようになりました
  • tests: overflow のテストを削除しました
  • attach: attach するプロセスに procfd を送らないようにしました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.0.6 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable-2.0 ブランチが Github にあります。

LXC 1.0.9 リリースのお知らせ 2016 年 11 月 23 日

このリリースは LXC 1.0 の 9 回目のバグフィックスリリースです。

重要な変更:

  • セキュリティホール CVE-2016-8649 の修正

バグ修正:

  • doc: lxc-create(1) の "-t" オプションを必須としました
  • ubuntu-cloud: 様々な修正を行いました
  • coverity: cgmanager の NULL ポインタ参照を回避しました
  • プロジェクト全体で /usr/bin/python3 の代わりに /usr/bin/env python3 を使うようにしました
  • Debian archive GPG キーリングが使えない時は取得するようにしました
  • preserve_ns 関数の動作を改良しました (訳注: /proc/self/ns 以下のファイルを取得してopenする際のエラーログが細かくでるようになった)
  • lxc_container struct: 構造体のメンバを足すときに、メンバの順序を変えないよう注意書きをコメントに追記しました
  • debian: キャッシュがない場合のコンテナ生成のバグを修正しました
  • lxc: lxc-start が wlan phys をサポートしました
  • apparmor: lxc.aa_profile = unchanged をサポートしました
  • seccomp: arm64 上の 32bit arm と ppc64 上の 32bit ppc をサポートしました
  • ARM と PPC に対しては条件付きのコンパイルを行うようにしました (訳注: それぞれをサポートする環境のみ関係するコードをコンパイルする)
  • prune_init_cgroup: NULL を参照しないようにしました
  • 展開されていない設定をクリアする際に 'lxc.mount.entry' が正しくクリアされない問題を修正しました
  • 上記の lxc.mount.entry の問題の Fix に伴う get_item テストの更新
  • seccomp プロファイルが定義されていないコンテナの attach 時の問題を修正しました
  • root で実行されていない場合、save_phys_nics 関数は即座にリターンするようになりました
  • lxc-checkconfig: zgrep に依存しなくなりました
  • 条件付きコンパイルのリファクタリングを行いました
  • swap の計算を修正しました
  • python-lxc: コンテナにアタッチした後に PyOS_AfterFork を呼ぶようにしました
  • ifaddrs.c 内でのバッファオーバーフローを修正しました
  • 値のない lxc.cap.drop の動作をドキュメントにしました
  • nlmsg_reserver() が NULL を返した場合に NULL ポインタを参照する問題を修正しました
  • apparmor による制限がされている場合には aa ラベルを変更しようとしないようにしました
  • coverity: preserve_ns は bool を返すので、int が返ることを期待するコードになっていたのを修正しました
  • apparmor: 'unconfined' ラベルを unconfined と認識するようになりました
  • bash completion: 'have' コマンドが廃止され '_have' になったので修正しました
  • ipv6_gateway を削除した場合に正しく NULL を設定するようにしました
  • stop フックで継承された fd を保存するようになりました
  • エラーメッセージで null 文字列を表示しないようにしました
  • Fedora テンプレート内のコメントを修正しました
  • リスト形式で指定するオプションの動作をドキュメントに明記しました
  • Python 製 lxc-ls でのロックパスの削除を修正しました
  • ネットワークの設定値をクリアする方法をドキュメントに記載しました
  • open_without_symlink: (訳注: パスをopenするユーティリティ関数で) prefix として与える文字列が空である場合も適切に処理するようになりました
  • lxc_setup_fs: /dev/shm が存在しない場合は作成するようになりました
  • cgmanager: tasks と cgroup.procs ファイルを chmod +x しなくなりした
  • cleanup: lxc_container::want_* 関数の説明コメントを更新しました
  • fedora テンプレート内の echo 行を修正しました
  • ${UTSNAME} は定義されていないので代わりに ${utsname} を使うようにしました
  • '.' ではじまる名前のコンテナを無視するようになりました
  • /dev のサイズを 500k に増やしました ( issue #781)
  • cgfs: パスから "init.scope" を削除するようにしました
  • apparmor: /run/{,lock} -> /var/run/{,lock/} への bind mount を許可しました
  • log.c:__lxc_log_set_file: (訳注: ログファイル名を表す引数) fname に NULL は許可されなくなりました
  • log.c:__lxc_log_set_file: (訳注: デフォルトのログファイルパスを) 上書きする際、ログファイルを完全にクローズするようにしました
  • mountall が sysfs を再マウントできるようになりました
  • cgroups: device cgroup の設定が EPERM で失敗した場合には処理が失敗しなくなりました
  • cgfs: devices cgroup に書き込む時は EACCES もチェックするようにしました
  • lxc: cgfs: lxcfs を扱うようになりました
  • lxc manpage の typo を修正しました
  • cgfs: 有効な cgroup のマウントポイントを確実に使うようにしました
  • cgfs: 冗長な出力を減らしました
  • doc: lxc-attach(1) の日本語 man を改良しました
  • doc: lxc-unshare(1) を改良しました
  • open_without_symlink: ELOOP 以外のエラーでは SYSERROR とならないようになりました
  • lxc-busybox: コンテナ rootfs 内で /etc/fstab を touch するようにしました
  • sync: 他のプロセスからのエラーをレポートするために LXC_SYNC_ERROR を追加しました
  • start: エラーをレポートするために LXC_SYNC_ERROR を使うようになりました
  • lxc-busybox: ダイナミックリンクされた Busybox に対する警告を削除しました
  • out-of-tree (VPATH) ビルドの際のインストールの問題を修正しました
  • デフォルトの Debian のミラーとして httpredir.debian.org を使うようにしました
  • Ubuntu の debootstrap 用に常にデフォルトのミラーを定義するようにしました
  • lxc-ubuntu: secondary アーキテクチャでのイメージビルドの問題を修正しました
  • Debian のリリース名を更新しました
  • btrfs_recursive_destroy を修正しました (訳注: 4.2 kernel 以降で非特権コンテナの場合にlxc-destroyが失敗していたのを修正)
  • ioctl 直後に errno を保存するようにしました
  • man page の Typo の修正 (Debian のlintian で発覚)
  • netlink_open: エラー時にソケットをクローズするようにしました
  • lxc_mount_auto_mounts(): 失敗時にメモリを解放するようにしました
  • doxygen が生成する一時ファイルを無視するようにしました
  • LXC_GENERATE_DATE でより良い日付フォーマットを使うようになり、SOURCE_DATE_EPOCH をサポートするようになりました
  • lxc.service.in から廃止された syslog.target を削除しました
  • メンテナを更新しました
  • lxc-checkconfig で標準出力がターミナルかどうかチェックするようになりました
  • Container.__init__ が失敗したとき PyErr を設定するようになりました
  • lxc_list_nicconfigs でキーとして type を追加しました
  • lxc-alpine: DHCP クライアントに強制的にホスト名を送るようにしました
  • sync: 想定外のメッセージサイズの時に失敗するようになりました
  • sync.c: 正しい型を使うようになりました (訳注: コード内の変数宣言の話)
  • lxc-centos: RHEL 7+ の時に ID = rhel の場合の処理を追加しました
  • userns のマッピングを設定した後に netns を unshare するようになりました
  • 設定ファイルの設定値をクオートできるようになりました
  • Fuse ファイルシステム用に fstype=fuse も許可されるようになりました (訳注: AppArmor の Fuse 用ルールに mount fstype=fuse を追加)
  • alpine テンプレートのネットワークインターフェース設定内の hostname 設定を修正しました
  • in6_addr が複数回定義されてしまう問題を修正しました
  • lxc-debian: init が必ずインストールされるようにしました
  • plamo: テンプレートを改良しました (訳注: 不要なパッケージの削除、起動サービスを最小限に)
  • AppArmor: lxc-start に対してマウントオプション make-rslave のルールを追加しました
  • Bionic ですべての lxcmntent.h の関数が宣言されるようにしました
  • lxc-debian: wheezy コンテナを作成する際に init が確実にインストールされるように修正しました
  • vlan タイプのインターフェースで MTU を設定できるようになりました
  • templates: locale が設定されていないことが原因の perl のノイジーな警告出力を防ぎました (訳注: Debian テンプレート)
  • lxc.pc に prefix を追加しました
  • conf: pty_info を解放したあと NULL に設定するようにしました
  • apparmor: 生成されたファイルをリフレッシュしました
  • tools: lxc-create の出力で抜けていた newline を追加しました
  • (訳注: lxc-download テンプレート内でダウンロード用の鍵で) long ID の代わりに full の GPG フィンガープリントを使うようになりました
  • utils: mips 用の signalfd システムコール番号を追加しました
  • seccomp: MIPS で seccomp を扱えるようにしました
  • seccomp: lxc_config_parse_arch に mips と mips64 のエントリを追加しました
  • seccomp: strerror() を修正しました (訳注: strerror に与える引数の修正)
  • confile: より多くのアーキテクチャを扱えるように lxc_config_parse_arch() 関数に定義を追加しました
  • seccomp: s390x のサポートを追加しました
  • seccomp: 複数回の include 指定を削除し、include の順序を整列させました
  • seccomp: 動作と関係ない変更を行いました (訳注: ソースコードのフォーマット、ログ出力の整形など)
  • templates: fedora テンプレート実行時に openssl コマンドがない場合にインストールするようにしました
  • doc/api/Doxyfile に FULL_PATH_NAMES=NO を設定しました
  • console: 正しいログファイル名を使うようにしました
  • lxczfs: 細かな修正を行いました
  • rsync に sparse ファイルを効率的に扱わせるようにしました
  • ppc64el の場合に lxc-create -t debian が失敗するのを修正しました
  • utils: lxc_string_split() を (訳注: 初期化されていないメモリ領域が返らないように) 修正しました
  • CentOS テンプレート中の "centos" という文字列を "CentOS" に修正しました
  • python のサンプルに utf-8 エンコーディングであることを明記しました
  • log: snprintf() の返り値の sanity チェックを行うようにしました
  • archlinux: eth0 上で DHCP を実行するようにしました
  • archlinux: 名前解決の修正を行いました
  • lxc_strerror() への参照を削除しました (訳注: 昔存在した関数の宣言が残っていたので削除)
  • s390x: personality の seccomp の扱いを修正しました
  • ubuntu: パッケージの更新に proc ファイルシステムが必要だったので修正しました
  • (訳注: spec ファイルの) python コードの include に python3_sitearch を使うようにしました
  • cgfs: 不正な free() を修正しました
  • cgfs: print_cgfs_init_debuginfo() を追加しました
  • cgfs: /proc/self/cgroup 内の空行をスキップするようにしました
  • tools: lxc-stop で正しい終了コードを使うようにしました
  • conf: シャットダウン時のネットワーク名前空間の移動とリネームをマージしました (訳注: シャットダウン時に物理NICをホストの名前空間に戻すときの移動とリネーム処理を単一ステップで行うようにしました)
  • (訳注: /run を指す) シンボリックリンク /var/run を作成するようにしました
  • cgfs: NULL を明確にチェックするようにしました
  • templates: lxc-ubuntu-cloud.in に squashfs サポートを追加しました
  • pkg-config が示す場所に bash completion をインストールするようになりました
  • conf: %m フォーマット指示子を使わないようにしました
  • debian: libui-dialog-perl に依存しなくなりました
  • Android でのビルドのために 'index' 関数を 'strchr' 関数に置き換えました
  • tree-wide: readdir_r() を readdir() に置き換えました
  • attach: attach するプロセスに procfd を送らないようにしました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 1.0.9 のパッケージをリリースするでしょう。

1.0 ユーザに対して、LXC開発元は 2.0 LTS リリースへのアップグレードを強くおすすめします。 1.0 ブランチは 2019 年 6 月までサポートが続きます。しかし現時点では、重大なバグフィックスとセキュリティホール対策のみがバックポートされます。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable-1.0 ブランチが Github にあります。

LXC 2.0.5 リリースのお知らせ 2016 年 10 月 5 日

このリリースは LXC 2.0 の 5 回目のバグフィックスリリースです。

このリリースの主なバグフィックスは以下です:

  • /tools/ に移動したプログラムの .gitignore 内の記載を修正しました
  • lxc-test-utils を .gitignore に追加しました
  • bdev: overlayfs のモジュール名をカーネルの正式な名前にしました
  • cleanup: tools: --name オプションを lxc-top のヘルプから削除しました
  • cleanup: lxc-execute のヘルプ出力のオプション部分の出力のホワイトスペースを揃えました
  • 長い ID の代わりにフルの GPG fingerprint を使うようにしました (訳注: lxc-download で使っている KEYID)
  • tools: --rcfile を共通オプションに移動しました
  • tools: load_config のあとに configfile を設定するようにしました
  • doc: --rcfile が共通オプションになったのをマニュアルに反映させました (日本語、韓国語 man も)
  • doc: 韓国語 lxc-attach(1) を更新しました
  • tools: exit の際は常に exit(EXIT_*) を使うようにしました
  • tools: main() 外の exit() 呼び出しを統一しました
  • utils: mips の signalfd システムコール番号を追加しました
  • seccomp: MIPS の seccomp ハンドリングを実装しました
  • seccomp: lxc_config_parse_arch に mips と mips64 のエントリを追加しました
  • seccomp: strerror() を修正しました
  • confile: lxc_config_parse_arch() にさらに arch を追加しました (訳注: ppc や arm など)
  • seccomp: s390x をサポートしました
  • seccomp: 複数回の include を削除し、include の順序を調整しました
  • seccomp: 機能的な部分以外の変更 (訳注: エラーメッセージの大文字小文字、コードのインデントの調整、コードの書き方の調整など)
  • templates: fd 200 の代わりに 9 を使うようにしました
  • templates: fedora では openssl パッケージが必要なのでテンプレート中で追加するようにしました
  • tools: lxc_device.c 内の返り値に boolean を使うようにしました
  • c/r: pidfile の代わりに /proc/self/tid/children を使うようにしました
  • c/r: 一部の arch の pid_t を修正しました
  • templates: debian でホストの arch 検出に mips を追加しました
  • cleanup: ヘルプ文字列の TAB をスペースに置き換えました
  • 余分な 'ret' を削除しました
  • c/r: pid のパースを試みたあとステータスを書き込むようにしました
  • doc/api/Doxyfile で FULL_PATH_NAMES=NO に設定するようしました
  • templates: halt.target -> sigpwr.target へのシンボリックリンクを削除しました
  • templates: 不要なディレクトリの作成をやめました
  • console: ログ出力時に正しい名前を使うようになりました
  • configure: --disable-werror を追加しました
  • tests: get_item テストを修正しました
  • templates: alpine テンプレートで正確なバージョンの cron を使うようになりました
  • c/r: migrate_opts 構造体のサイズが小さい場合、構造体の最後をゼロで埋めるようにしました
  • lxczfs: 細かい修正を行いました
  • c/r: valid_opts を必要に応じて free するようにしました
  • rsync でスパースファイルをより効率的に扱うようになりました
  • lxc-create -t debian が ppc64el の時に失敗するのを修正しました
  • c/r: コメントの typo を修正しました
  • cgroup: 階層に関係する新しい関数を追加しました
  • utils: lxc_deslashify を追加しました
  • c/r: チェックポイントの際に --cgroups-roots を与えるようになりました
  • cgroup: cgfsng_escape の変な hack を除去しました
  • cgroup: cgroup_canonical_path を削除しました
  • c/r: cgroup_num_hierarchies > 0 をチェックするようになりました
  • tools: lxc-ls -1 で末尾にスペースを追加しなくなりました
  • conf: netdev->link から mtu を取得するようになりました
  • conf: veth から mtu を取得するようになりました
  • c/r: リストア時にコントロール中の tty からデタッチするようになりました
  • tty からのアクセスがなく呼ばれる attach の場合、NULL ポインタの値を参照しようとしていた問題を修正しました
  • utils: lxc_string_split() を修正しました (訳注: 初期化されていない領域を返さないように修正)
  • tools: lxc_deslashify() が特別な場合を扱うようになりました
  • tests: lxc_deslashify() のユニットテストを追加しました
  • ALTLinux コンテナの作成をすべてのブランチで修正しました
  • utils: lxc_deslashify() でメモリを解放するようになりました
  • テンプレート中の CentOS 文字列の修正を行いました (訳注: centos -> CentOS の置換)
  • 開発リリースであることが検出できるように LXC_DEVEL を定義しました
  • tools: lxc-checkconfig の devpts のチェックを条件付きとしました (訳注: kernel 4.7 で DEVPTS_MULTIPLE_INSTANCES が削除されたので < 4.7 の時のみチェックするようになった)

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.0.5 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチが Github にあります。

LXC 1.1 EOL のお知らせ 2016 年 9 月 1 日

LXC 1.1 は EOL となりました。

stable-1.1 ブランチはクローズされ、今後このブランチに対するバグ修正やセキュリティ対策のリリースは行われません。

今でも LXC 1.1 をお使いの場合、なるべく早く 2.0 へアップグレードしてください。

現在、以下のリリースがサポート中です:

  • LXC 1.0.x が 2019 年 6 月 1 日まで
  • LXC 2.0.x が 2021 年 6 月 1 日まで

LXC 2.0.4 リリースのお知らせ 2016 年 8 月 15 日

このリリースは LXC 2.0 の 4 回目のバグフィックスリリースです。

このリリースの主なバグフィックスは以下です:

  • core: lxc.pc に prefix を追加しました
  • core: mount_entry 関数に持続的な dev エントリの際に NODEV の指定をスキップするための引数を追加しました
  • core: ns_info 構造体に欠けていた cgroup namespace を追加しました
  • core: attach: lxc-attach で unshare の代わりに setns を使うようにしました
  • core: bdev: include ファイルのサーチパスにサブディレクトリを追加して、呼び出し時にディレクトリを含めないようにしました
  • core: bdev: btrfs の subvolume の検出をよりスマートに行うようにしました
  • core: cgfsng: パスを前もって計算しないようにしました
  • path: cgfsng: is_lxcfs() と is_cgroupfs() を修正しました (訳注: 関数の返り値をきちんと返すようにしました)
  • core: cgroups: cgroup 関連のソースファイルを共通のサブディレクトリに移動させました
  • core: conf: free のあとに pty_info に NULL をセットするようにしました (訳注: リブート時の二重解放を防ぎます)
  • core: SIGRTMIN+3 の検出を行うようにしました (訳注: systemd でクリーンなシャットダウンを行うのに必要)
  • core: readdir_r() の代わりに readdir() を使うようにしました
  • core: vlan タイプのインターフェースの際に MTU を設定するようにしました
  • core: tools, tests: リポジトリを再編成しました (訳注: lxc の cli ツールのソースは tools ディレクトリ以下に移動しました)
  • c/r: CRIU の --action-script オプションをサポートしました
  • c/r: CRIU の --ghost-limit オプションをサポートしました
  • c/r: CRIU の dump を行っている間は (TCP の) in-flight を落とすようにしました
  • c/r: migrate_opts を適切に初期化するようにしました
  • c/r: ローカルな関数を static にしました
  • c/r: tmpnam() を mkstemp() に置き換えました
  • c/r: criu のバージョンを保持するようにしました
  • c/r: (訳注: エラー出力の) フォーマット書式に PRIu64 を使うようにしました
  • doc: lintian で見つかった typo を修正しました
  • doc: lxc-attach(1) に記載されていなかったオプションを追加しました
  • lxc-attach: -f/--rcfile オプションを追加しました
  • lxc-attach: ホワイトスペースのクリーンアップを行いました
  • lxc-create: 出力時に欠けていた改行を追加しました
  • lxc-ls: 正しいランタイムパスを使うようになりました
  • templates: alpine: 新しいアーキテクチャの追加を行いました
  • templates: alpine: /run を tmpfs でマウントするようになりました
  • templates: debian: テンプレート中の変数に対するクオートを追加しました (少なくとも $rootfs はカバーされました)
  • templates: debian: ロケールがないことによるうっとうしい perl の警告出力を防ぐようになりました
  • templates: debian: wheezy コンテナを作成した際のバグ再発を修正しました
  • templates: debian: shellcheck (Ubuntu: 0.3.7-5 amd64) の結果が良くなるようにしました
  • tests: lxc_string_in_array() に対するユニットテストを追加しました
  • tests: lxc_string_replace() に対するユニットテストを追加しました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.0.4 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチが Github にあります。

LXC 2.0.3 リリースのお知らせ 2016 年 6 月 28 日

このリリースは LXC 2.0 の 3 回目のバグフィックスリリースです。

LXC 2.0.3 は、LXC 2.0.2 に正しくない AppArmor プロファイルが含まれてしまったので、LXC 2.0.2 リリース直後にリリースしました。

このリリースのバグフィックスは以下です:

  • apparmor: 生成されたファイルの更新

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.0.3 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチが Github にあります。

LXC 2.0.2 リリースのお知らせ 2016 年 6 月 28 日

このリリースは LXC 2.0 の 2 回目のバグフィックスリリースです。

LXC 2.0.2 は使用せず、代わりに 2.0.3 を使用してください。2.0.3 では AppArmor に関する不具合を修正しています。

このリリースの主なバグの修正は以下の通りです:

  • apparmor: make-rslave を usr.bin.lxc-start に追加しました
  • apparmor: bind マウントと {r}shared/{r}private を許可しました
  • apparmor: マウントの移動を許可しました
  • apparmor: マウント状態の扱いを更新しました
  • core: 現在の autodev では不要なので lxc-devsetup を削除しました
  • core: in6_addr 構造体の多重定義を修正しました
  • core: Bionic ではすべての lxcmntent.h の関数宣言を含めるようになりました
  • c/r: criu の cgroup モードとして "full" を使用するようになりました
  • systemd: lxc@.service の使用時は、コンテナを foreground で起動するようになりました
  • templates: debian: 確実に init がインストールされるようにしました
  • templates: oracle: コンソールログインに関する修正を行いました
  • templates: plamo: いくつかの問題を修正しました
  • templates: ubuntu: デフォルトで apt-transport-https をインストールするようになりました
  • travis: 'make install' が確実に失敗しないようにしました
  • travis: VPATH ビルドのテストを行うようにしました
  • upstart: lxc-instance を Upstart クライアントとして適した形に変更しました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.0.2 のパッケージをリリースするでしょう。(訳注: 前述のように 2.0.2 の代わりに 2.0.3 を使用してください)

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチが Github にあります。

LXC 2.0.1 リリースのお知らせ 2016 年 5 月 16 日

このリリースは LXC 2.0 に対する最初のバグフィックスリリースです。

このリリースの主なバグの修正は以下の通りです:

  • apparmor: fuse ファイルシステム用に fstype=fuse も許可しました
  • attach: lxc-attach のテストを改造し、pty ロギングに対するテストを追加しました
  • attach: SIGWINCH ハンドラのセットアップが失敗しても attach が失敗しなくなりました
  • attach: lxc-attach の pts の扱いに関する色々な問題を修正しました
  • attach: コンソール pty を raw モードに変更しました (ncurses ベースのプログラムに対する修正)
  • attach: pty に ssh の raw セッティングを使うようにしました
  • bindings: python-lxc で create() 時に代入前に変数が参照されるのを修正しました
  • bindings: Container.__init__ が失敗した場合、PyErr をセットするようにしました
  • cgfsng: 必要なサブシステムが利用可能でない場合 cgfs ドライバを使うようにしました
  • cgfsng: systemd サブシステムがマウントされている必要はなくなりました
  • core: lxc_list_nicconfigs で足りなかったキー type を追加しました
  • core: 設定ファイルの値をクォートできるようになりました
  • core: log: 重複する定義を削除し、バッファサイズを増加させました
  • core: sync: 予期しないメッセージサイズの場合に正しく失敗するようになりました
  • core: userns のマッピングを設定した後に netns を unshare するようにしました (/proc/net の所有権の問題の修正)
  • core: コード解析で報告された様々なバグを修正しました
  • c/r: CRIU でより速い inotify のサポートを使うためのオプションを追加しました
  • c/r: あらゆるところで migrate_opts 構造体を渡すように再配置しました
  • doc: doxygen が生成する一時ファイルを無視するようにしました
  • doc: 再現可能なビルドとなるようにマニュアルページの生成日を調整しました
  • doc: MAINTAINERS ファイルを更新しました
  • doc: マニュアルページ翻訳の更新
  • init: sysvinit スクリプトに足りなかった lsb ヘッダを追加しました
  • init: ディストリビューションの仕様に依存する sysvinit スクリプトを生成しなくなりました
  • init: lxc.service.in から廃止された syslog.target を削除しました
  • lxc-attach: マニュアルにログオプションの説明を追加しました
  • lxc-checkconfig: 標準出力がターミナルでない場合にも見やすい出力となるようにしました
  • lxc-create: -B best オプションの修正を行いました
  • lxc-destroy: 重複する出力を行わないようにしました
  • lxc-ls: ipc の際のシステムコールの使用を減らしました
  • templates: Ubuntu テンプレートの minbase variant に apt-transport-https を追加しました
  • templates: Gentoo テンプレートのケーパビリティ名の typo を修正しました (sys_resource)
  • templates: RHEL7+ サポートのために CentOS テンプレートのロジックを修正しました
  • templates: ホスト名を送信するために Alpine の DHCP 設定を調整しました
  • templates: Oracle テンプレートのネットワーク設定を調整しました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.0.1 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチが Github にあります。

LXC 2.0.0 リリースのお知らせ 2016 年 4 月 6 日

LXC チームは LXC 2.0 のリリースをお知らせできることをうれしく思います!

ハイライト

  • 主要な LXC コマンドはすべて C 言語で書きなおされました
    • lxc-ls
    • lxc-device
    • lxc-copy
  • 新たに lxc-copy コマンドが lxc-clone と lxc-start-ephemeral の役割を引き継ぎました
  • コンテナのチェックポイント/リストアのサポートを多数改良しました
  • cgroup namespace のサポートを含む cgroup の扱いを完全に作り替えました
  • 色々なコマンドラインツールをより一貫性のあるものにしました
  • ストレージバックエンドの実装を再編成しました。Ceph RBD バックエンドの追加も含みます
  • 多数のバグフィックスを行いました。このバグフィックスのほとんどは 1.0 と 1.1 の次のリリースにバックポートする予定です
  • C API は 1.2 としてリリースしました。この C API は、前のバージョンとの後方互換性を維持します。

このリリースは合計 96 名のコントリビュータからの 720 コミットからなる貢献によってリリースできました。

新しい設定オプション

  • lxc.ephemeral: コンテナが一時的 (ephemeral) かどうかをコントロールします。一時的な場合はシャットダウン後に削除されます
  • lxc.rebootsignal: コンテナをリブートするために送出するシグナルを指定できます
  • lxc.hook.destroy: コンテナの削除時に呼ばれる新しいフックです
  • lxc.hook.stop: コンテナの名前空間 (Namespace) が解体される前に、コンテナ (の名前空間) への参照とともに、ホストの名前空間で実行されます
  • lxc.init_uid: lxc-execute が使うユーザを指定します
  • lxc.init_gid: lxc-execute が使うグループを指定します
  • lxc.monitor.unshare: 他のフックを実行する前にマウント名前空間を unshare できます

新機能

  • API:
    • API バージョンは 1.2 です。1.0、1.1 に対する完全な後方互換性を保っています
    • 新しいシンボル :
      • migrate_opts 構造体を使った checkpoint() の代替の追加を簡素化するために、新たに migrate() シンボルを追加しました
    • python3
      • create() にストレージバックエンドが与えられるようになりました
    • lua
      • get_ips() のサポートを追加しました
      • get_interfaces() のサポートを追加しました
      • rename() のサポートを追加しました
  • コア :
    • cgfsng: 新しい Linux カーネルに対応する新しい cgroup バックエンドドライバを追加しました
    • cgroup: 新しい cgroup 階層構造の部分的なサポートを追加しました
    • cgroup: cgroup namespace のサポートを追加しました
    • checkpoint: デフォルトの LXC コンテナのチェックポイント/リストアのサポートを追加しました
    • checkpoint: 非特権コンテナのチェックポイント/リストアのサポートを追加しました
    • checkpoint: page server のサポートを追加しました (訳注: ディスクレスでマイグレーションを行う CRIU の機能です)
    • config: lxc.aa_profile: "unchanged" が指定できるようになりました
    • config: lxc.init_cmd: 引数を指定できるようになりました
    • config: lxc.network.macvlan.mode: "passthru" モードのサポートを追加しました
    • config: lxc.rootfs.backend: ストレージバックエンドを明示的に指定できるようになりました (自動検出をバイパスします)
    • config: コンテナをネストするための設定ファイルとして新たに nesting.conf を追加しました
    • hooks: 新たに環境変数 LXC_CGNS_AWARE を追加しました。LXC が cgroup namespace をサポートする場合に 1 が設定されます (カーネルが cgroup namespace をサポートするかどうかは関知しません)。
    • hooks: 新たに環境変数 LXC_SRC_NAME を追加しました。クローンフックにおいて、コピー元のコンテナの名前が設定されます
    • hooks: 新たに環境変数 LXC_TARGET を追加しました。stop フックでコンテナがシャットダウンするのか (stop が設定される) 、リブートするのか (reboot が設定される) が設定されます
    • logging: ログのタイムスタンプが少し読みやすくなりました
    • lxc-usernet: ブリッジなしの veth インターフェースを使ったコンテナのサポートが追加されました
    • lxc-usernet: グループで制限をかけることができるようになりました (@ をプレフィックスに使います)
    • network: ブリッジの MTU をコンテナのデフォルトの MTU として使用するようになりました
    • start: プロセスのタイトルを読みやすくリネームしました
    • storage: 新たに Ceph RBD ストレージバックエンドを追加しました
  • 文書 :
    • すべての man pages に対する韓国語翻訳を追加しました
  • コマンド :
    • lxc-attach: 親のシェルに対する攻撃を防ぐために中間の pts デバイスを使うようになりました
    • lxc-clone: コンテナのリネームができるようになりました
    • lxc-start-ephemeral: バインドマウント先が変更できるようになりました
  • Init systems:
    • systemd: instanced service unit を追加しました (訳注: テンプレートファイルからユニットを実行するためのテンプレートファイルの追加)
  • テンプレート :
    • ALTLinux テンプレートを追加しました
    • Slackware テンプレートを追加しました
    • SPARCLinux テンプレートを追加しました
    • alpine: 追加パッケージのインストールができるようになりました
    • debian: デフォルトでは "main" だけ有効化し、引数で他のリポジトリを有効化できるようにしました
    • oracle: コンテナのタイムゾーンを設定しました
    • openssh: OpenSSH サポートを追加しました
    • ubuntu: ユーザが debootstrap の variant を指定できるように -v オプションを追加しました
    • ubuntu-cloud: vendor-data を指定できるようになりました

挙動の変更

  • lxc-autostart の起動順が逆になりました (正しい動きになりました) (訳注: lxc.start.order に指定した値の降順で起動していたのが昇順になった)
  • cgfsng cgroup バックエンドが推奨のバックエンドになりました
  • lxc.hook.post-stop が失敗した場合は、コンテナがリブートが失敗するようになりました

このリリースで、コマンドの中には大きく作り直されたものがあります。 我々は、コマンドラインツールは stable な ABI とはみなしていませんので、ご自身のスクリプトをテストして変更する必要があるかもしれません。 そのスクリプトを、LXC の stable な C API か、言語バインディングのどれかを使って書きなおすのがよりベターでしょう。

廃止予定の警告

"lxc-clone" と "lxc-start-ephemeral" コマンドは、"lxc-copy" に置き換えられ、将来廃止の予定です。 これらのコマンドは --enable-legacy フラグを使ってビルドできますが、使用の際に警告が表示されます。そして、LXC の将来のリリースで削除される予定です。

サポート

これは 2 度目の LXC の長期サポートリリースであり、2021 年 6 月 1 日までサポートされます。 前の長期サポートリリース版である LXC 1.0 も、2019 年 6 月 1 日までサポートされます。 そして、先の stable リリースである LXC 1.1 は 2016 年 9 月 1 日に EOL となります。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 2.0.0 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、master ブランチが Github にあります。

LXC 1.0.8 リリースのお知らせ 2015 年 11 月 9 日

このリリースは LXC 1.0 の 8 回目のバグフィックスリリースです。

重要な変更:

  • セキュリティホール CVE-2015-1331 の修正
  • セキュリティホール CVE-2015-1334 の修正

コア:

  • ネストしたコンテナをサポートするために include する nesting.conf を追加しました
  • CAP_AUDIT_READ と CAP_BLOCK_SUSPEND のサポートを追加しました
  • rootfs が指定されない場合でも autodev が動作するようになりました
  • 非特権コンテナの場合でもケーパビリティをドロップするようにしました
  • apparmor: /proc/kcore に対するアクセスをブロックするようにしました
  • apparmor: スレーブのバインドマウントに関する修正を行いました
  • apparmor: 最新の git master ブランチに同期しました
  • attach: 中間子プロセスで exit() の代わりに _exit() を使うようになりました
  • aufs: 非特権のクローンとマウントができるようになりました
  • ラッパーの代わりに /lib/apparmor/profile-load を直接呼ぶようにしました
  • cgmanager: attach: 'all' コントローラを使わなくなりました
  • cgmanager: check_supports_multiple_controllers 関数の最後でメモリを解放するようにしました
  • cgmanager: 非特権コンテナを $(curcgroup)/lxc/$(container0) 以下に配置するようにしました
  • lxc-clone が 'rsync -a' の代わりに 'rsync -aH' を使ってクローンするようになりました。これは Launchpad の Bug #1441307 への対応です
  • clone_paths: クローン先ディレクトリとして 'rootfs' を使うようになりました
  • config: lxc.*signal 用に色々なシグナルの定義を追加しました
  • デーモンでのコンテナ開始時、子プロセスは失敗時に return でなく exit するようになりました
  • Android 向けに bdev.c で MS_REC と MS_SLAVE を定義しました
  • Android 向けに MS_RELATIME を定義しました
  • Android 向けに O_PATH と O_NOFOLLOW を定義しました
  • cgmanager_list_controllers が利用できるかどうか検出するようになりました
  • do_lxcap_stop: コンテナが停止するまで待つようになりました
  • opentty が失敗した場合、std* ファイルディスクリプタをクローズしないようにしました
  • 非特権ユーザに対してデフォルトで seccomp を有効にしました
  • (lxc.mount.entry に指定する) create=dir と create=file を処理する関数を分けました
  • 定数がないことが原因の Android のビルドの問題を修正しました
  • rootfs が指定されない場合の自動マウントの不具合を修正しました
  • mpc85xx でビルドする際の問題を修正しました
  • IPv4/IPv6 アドレスをクリアする際の問題を修正しました
  • rootfs が指定されない場合のコンテナ作成の不具合を修正しました
  • attach 時のコントロール TTY の問題を修正しました
  • rootfs が指定されない場合の /dev のシンボリックリンクの不具合を修正しました
  • クローン時にファイルの拡張属性が失われる問題を修正しました
  • lxc-init(init.lxc) を見つけられない場合のエラーメッセージを修正しました
  • 一時的なコンテナを破壊する際の処理が不十分だったのを修正しました
  • 同じ ID の VLAN インターフェースを複数持つコンテナを起動する際の問題を修正しました
  • mount を呼ぶ際の入れ替わった引数の問題を修正しました (訳注:ramfs の rootfs の場合、/ を rprivate マウントする際のエラーの修正)
  • rootfs が指定されない場合の start フックの検証を修正しました
  • cgroup パス末尾の /init.scope を無視するようにしました
  • Init の error_num を 1 にしました (訳注:error_num (コンテナをトラッキングする終了コード) を適切に初期化するようになりました)
  • init: 古いバージョンの apparmor をサポートしました
  • lxc.mount.auto で ENOENT をスキップするようにしました
  • lxc_monitor: ファイルディスクリプタ集合 (pollfd 構造体の配列) のメモリリークの修正を行い、ファイルディスクリプタをクローズするようにしました
  • lxc_monitor: エラー時に正規表現関連の変数を解放するようにしました
  • lxc_mount_auto_mounts: NULL 判定をきちんと行った後に処理を行うようにしました
  • cgmanager 使用時に lxc.cgroup.use の値を使用するようになりました
  • LXC_CLONE_KEEPNAME の指定が正常に動作するようになりました
  • mount_entry_create_*_dirs() をより確実に動作するようにしました
  • overlayfs のマウントを直接行えるようにしました
  • rootfs が指定されない場合でも、必要な場合のみ /proc をマウントするようになりました
  • 標準入力が tty の時のみ、ファイルディスクリプタを再オープンするようになりました
  • lxcpath が設定されていないかデフォルトの場合のみ LOGPATH を使うようになりました
  • overlay: workdir が存在しない場合は作成するようになりました
  • リブートフラグを与えて、リブート時に以前の veth を消去するようになりました
  • ユーザネームスペース使用時、/proc のアンマウントの失敗を無視するようにしました
  • btrfs のサブボリュームを削除するようになりました
  • rpm: lxc-libs パッケージを lxc パッケージに対する依存パッケージとして追加しました
  • seccomp: aarch64 のサポートを追加しました
  • seccomp: ppc のサポートを追加しました
  • seccomp: umount -f を拒否するルールを追加しました
  • seccomp: ルールのパースの単純化と修正を行いました
  • tty でない場合はコントロール TTY のコードをスキップするようにしました
  • 適用前に cgroup のメモリの設定をソートするようにしました
  • aufs を使った一時的なコンテナのサポートを追加しました
  • コンテナの停止時にネットワークデバイスを確実に削除するようにしました
  • 標準ファイルディスクリプタの NULL 化処理を共通化しました
  • 存在する場合は /dev/loop-control を使うようになりました
  • 必要に応じてファイルシステム名として 'overlay' を使うようになりました
  • 使える場合は select の代わりに poll を使うようになりました
  • bash 補完で POSIX 互換の関数名を使うようになりました
  • Thin Provisioning を使わない LVM の場合に rdepends を使うようにしました (訳注: Thin Provisioning を使わない LVM の場合、スナップショットクローン元のコンテナが削除できなくなりました)
  • コンテナ作成時、rootfs が既に存在している場合も設定を保存するようになりました

ドキュメント :

  • 日本語の lxc.container.conf(5) に LXC が行うマウントに関する注意を追記しました
  • lxc-clone(1) の '-s' オプションの説明に zfs, aufs, overlayfs について追加しました
  • lxc.container.conf の man に create=dir と create=file についての説明を追加しました
  • -P のロングオプションをドキュメントに追加しました
  • lxc-create(1) に 'loop' バッキングストアオプションを追加しました
  • -P lxcpath と --version オプションを lxc-ls の man ページに追加しました
  • lxc-start-ephemeral(1) に '--storage-type' オプションを追加しました
  • lxc-ls(1) に -P と --version の説明を追加しました
  • man の共通オプションに --version の説明を追加しました
  • lxc-start-ephemeral(1) に 'attach' の使用に関する説明を追加しました
  • man ページの veth の説明をわかりやすくしました
  • lxc.container.conf(5) の lxc.group の誤訳を修正しました
  • CONTRIBUTING を更新しました
  • lxc-user-nic(1) で使われていない共通オプションの説明を削除しました
  • 日本語 man ページで翻訳されていなかったセクションタイトルを翻訳しました
  • MAINTAINERS の更新
  • lxc-autostart(1) の説明を更新しました

バインディング :

  • lua: 5.3 互換コードを修正しました
  • lua: blkio がない場合にクラッシュする問題を修正しました
  • lua: 5.3 互換に関して小さな修正を行いました

テスト :

  • Travis CI の cgmanager サポートを有効にしました
  • lxc-test-apparmor: 子プロセスが終了する前にパイプをフラッシュするようにしました
  • lxc-test-symlink: 絶対パスのシンボリックリンクを使ったテストを追加しました
  • Travis の設定を更新しました
  • /proc/self/cgroups でなく 'cgm listcontrollers' を使うようになりました

設定 :

  • lxc-net.conf: 停止時の処理中で set +e するようにしました

テンプレート :

  • lxc-alpine: 移植性を高めるために GNU BRE 拡張の使用を避けるようにしました
  • lxc-alpine: マウント前に /dev/shm を作成するようにしました
  • lxc-alpine: apk.static バイナリの検証を修正しました
  • lxc-alpine: オプションのパースに getopt を使うようになりました
  • lxc-alpine: 最新リリースの検出に yaml を使うようになりました
  • lxc-altlinux: "--clean" オプションのパースで引数を取らないように修正を行いました
  • lxc-altlinux: -z オプションでのチェックの際に、変数が未設定の場合に備えてクオートするようにしました
  • lxc-archlinux: systemd-sysctl サービスの修正を行いました
  • lxc-busybox: 非特権コンテナの修正を行いました
  • lxc-centos: yum --releasever に対する信頼性の高いチェックを追加しました
  • lxc-{centos|fedora}: --rootfs の値を使用するようになりました
  • lxc-centos: CentOS 7 でログインまでに非常に時間がかかる問題を修正しました
  • lxc-centos: CentOS 6 コンテナのブートの問題を修正しました
  • lxc-centos: "--clean" オプションのパースで引数を取らないように修正を行いました
  • lxc-centos: ヘルプにタブとスペースが混ざっているのを修正しました
  • lxc-centos: yum に releasever パラメータを与えるようにしました
  • lxc-centos: -z オプションでのチェックの際に、変数が未設定の場合に備えてクオートするようにしました
  • lxc-centos: ifcfg-eth0 中の DHCP_HOSTNAME に hostname の値を使うようにしました
  • lxc-debian: dpkg のマルチアーキ対応のチェック方法を変更しました
  • lxc-debian: $GREP_OPTIONS が設定されている場合は debootstrap が失敗していたのを修正しました
  • lxc-debian: Usage に "--clean" を追加しました
  • lxc-debian: dbus がインストールされていない場合のエラーを修正しました
  • lxc-debian: "--clean" オプションのパースで引数を取らないように修正を行いました
  • lxc-debian: ヘルプの改良
  • lxc-debian: -z オプションでのチェックの際に、変数が未設定の場合に備えてクオートするようにしました
  • lxc-debian: ロケールの再設定を行うようにしました
  • lxc-debian: unstable/sid の場合はセキュリティアップデートをスキップするようにしました
  • lxc-debian: stretch (Debian 9) イメージのサポートを追加しました
  • lxc-debian: dpkg がマルチアーキサポートかどうかチェックするようになりました
  • lxc-download: ヘルプの typo の修正
  • lxc-download: ヘルプの改良
  • lxc-download: --list をもっと便利にしました
  • lxc-fedora: "--mask-tmp" のサポートを追加しました
  • lxc-fedora: デフォルトを 22 にしましたが、20 の squashfs を使います
  • lxc-fedora: 22 は yum を使わないので、デフォルトを Fedora 21 にしました
  • lxc-fedora: "--clean" オプションのパースで引数を取らないように修正を行いました
  • lxc-fedora: fedora21 では fedora-repos パッケージが必要なので追加しました
  • lxc-fedora: ヘルプテキストを 80 カラムに揃えました
  • lxc-fedora: セカンダリアーキテクチャも扱えるようにしました (訳注:セカンダリアーキテクチャについてはFedoraProjectのWikiを参照)
  • lxc-fedora: -z オプションでのチェックの際に、変数が未設定の場合に備えてクオートするようにしました
  • lxc-fedora: systemd を使っている場合、lxc.kmsg = 0 を設定するようにしました
  • lxc-gentoo: veth をひとつだけ持っている場合は hwaddr を追加するようにしました
  • lxc-gentoo: /dev/shm を tmpfs としてマウントするエントリを追加しました
  • lxc-gentoo: dev/mqueue と dev/shm の作成の問題を修正しました
  • lxc-gentoo: --auth-key フラグの問題を修正しました
  • lxc-gentoo: wget の問題を修正しました
  • lxc-openmandriva: "--clean" オプションのパースで引数を取らないように修正を行いました
  • lxc-openmandriva: -z オプションでのチェックの際に、変数が未設定の場合に備えてクオートするようにしました
  • lxc-opensuse: 12.3 はもうすぐ EOL なのでデフォルトリリースを 13.1 に変更しました
  • lxc-opensuse: 不適切なビルドパッケージがインストールされている場合のみ、13.2/Thmbleweed 上での openSUSE コンテナの構築を無効化しました
  • lxc-opensuse: "--clean" オプションのパースで引数を取らないように修正を行いました
  • lxc-opensuse: -z オプションでのチェックの際に、変数が未設定の場合に備えてクオートするようにしました
  • lxc-opensuse: ビルドバージョンの検出に rpm を使うようにしました
  • lxc-oracle: /dev/shm の修正を行いました
  • lxc-ubuntu-cloud: コンテナが作成されないときに 0 で終了しないようになりました
  • lxc-ubuntu-cloud: tar.gz を tar.xz に置き換えました。tarball がない場合の自動生成を行わないようにしました
  • lxc-ubuntu: lucid のサポートをやめ、リリースリストを更新しました

コマンド :

  • いくつかの実行ファイルのヘルプの文法を修正しました
  • lxc-autostart: 壊れた出力を修正しました
  • lxc-checkconfig: バージョン 3 以上のカーネルで動作するように更新しました
  • lxc-create: テンプレートの絶対パスを与えた場合の -h オプションの問題を修正しました
  • lxc-create: --template オプションが必須になりました
  • lxc-destroy: overlayfs を使ったコンテナでもきちんと動作するようになりました
  • lxc-start: pid パラメータを追加しました (訳注:pid 名前空間も保持できるようになりました。ライブラリ側の変更点のような気がします)
  • lxc-start-ephemeral: pep-8 準拠と pyflakes3 を通すための修正
  • lxc-start-ephemeral: overlayfs の workdir オプションを扱えるようになりました
  • lxc-start-ephemeral: パスワードを直接パースするようにしました
  • lxc-usernsexec: ファイルディスクリプタ 0,1,2 を別々に再オープンするようになりました

これらの stable の修正は 59 名のコントリビュータによってなされました。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 1.0.8 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチは Github にあります。

LXC 1.1.5 リリースのお知らせ 2015 年 11 月 9 日

このリリースは LXC 1.1 の 5 回目のバグフィックスリリースです。

コア:

  • プロセスタイトルのリネームの扱いを修正しました (3.19 カーネル以上でのみ有効です)
  • overlayfs/aufs の扱いをいくつか改良しました
    • 必要なディレクトリが存在しない場合に作成するようにしました
    • 絶対パスの処理を改良しました
    • overlayfs を使ったコンテナのクローンの処理を改良しました
  • cgroup パス末尾の /init.scope を無視するようにしました (新しい systemd 対応です)
  • ブリッジに接続されていない veth デバイスを持つコンテナを Checkpoint/Restore できるようになりました
  • error_num (コンテナをトラッキングする終了コード) を適切に初期化するようになりました
  • lxc-usernsexec: ファイルディスクリプタ 0,1,2 を別々に再オープンするようになりました (標準入力が tty の時のみ)

Init スクリプト:

  • lxc-net: network-online.target の後で起動するようになりました

コマンド :

  • lxc-start: PID 名前空間も保持できるようになりました

テンプレート :

  • archlinux: systemd-sysctl サービスの修正を行いました
  • ubuntu-cloud: デフォルトで tar.xz tarball を使うようになりました (tar.gz はすぐに廃止される予定です)
  • ubuntu-cloud: エラー時は常に終了コード 1 で終了するようになりました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 1.1.5 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチ (stable-1.1) は Github にあります。

LXC 1.1.4 リリースのお知らせ 2015 年 10 月 6 日

このリリースは LXC 1.1 の 4 回目のバグフィックスリリースです。

重要な変更:

  • セキュリティホール CVE-2015-1335 の修正

コア:

  • setenv() を呼ぶ前に NULL ポインタのチェックを行うようにしました
  • (lxc.mount.entry に指定する) create=dir と create=file を処理する関数を分けました (訳注: 以下のふたつの項目とセットで lxc.mount* で設定されたマウントエントリを処理する関数のリファクタリングを行っています)
  • マウント用のエントリを処理する関数の分割と再構築を行いました
  • lxc.mount* を扱う関数を 3 つに分割しました
  • init: 古いバージョンの apparmor をサポートしました
  • LXC_CLONE_KEEPNAME の指定が正常に動作するようになりました
  • rootfs が指定されない場合の自動マウントの不具合を修正しました
  • rootfs が指定されない場合のコンテナ作成の不具合を修正しました
  • rootfs が指定されない場合の /dev のシンボリックリンクの不具合を修正しました
  • rootfs が指定されない場合でも autodev が動作するようになりました
  • rootfs が指定されない場合でも、必要な場合のみ /proc をマウントするようになりました
  • コンテナ作成時、rootfs が既に存在している場合も設定を保存するようになりました
  • rootfs が指定されない場合の start フックの検証を修正しました
  • コンテナの停止時にネットワークデバイスを確実に削除するようにしました
  • coverity: mount_entry_create_dir_file の修正を行いました
  • ネストしたコンテナをサポートするために include する nesting.conf を追加しました
  • realloc() のサイズの計算を修正しました
  • bdev_destroy() と bdev_destroy_wrapper() を追加しました
  • overlayfs_clone: rootfs をマウントして rsync を行うようにしました (訳注: overlayfs の非特権コンテナのクローンが行えるように修正しました)
  • lxc_rmdir_onedev: パスが存在しない場合でも失敗しなくなりました (訳注: 作成が不十分なコンテナの削除時にエラーがでないようになりました)
  • overlayfs_mount: delta ディレクトリが存在しない場合に作成するようにしました
  • ovl_rsync: umount を確実に行うようにしました
  • bdev.h の bdev_destroy() を使って bdev を削除するようにしました
  • インデントの修正を行いました
  • cmds: abstract socket の長さの問題を修正しました
  • coverity: 冗長な処理ブロックを削除しました
  • mount_proc_if_needed() で snprintf の返り値のチェックを行うようにしました
  • CAP_AUDIT_READ を追加しました
  • CAP_BLOCK_SUSPEND を追加しました
  • 処理の失敗時に確保されたメモリを解放するようにしました
  • Android 用に O_PATH と O_NOFOLLOW を定義しました
  • seccomp: aarch64 のサポートを追加しました
  • lxc-test-symlink: 絶対パスのシンボリックリンクを使ったテストを追加しました
  • lxc_mount_auto_mounts: NULL 判定をきちんと行った後に処理を行うようにしました
  • lxc_mount_auto_mounts 内の変数の型がおかしかったので修正しました

ツール :

  • コマンドが出力する使い方の文法を修正しました
  • lxc-checkconfig: カーネル設定オプションのチェックをいくつか追加しました
  • lxc-start-ephemeral: パスワードを直接パースするようにしました

ドキュメント :

  • -P オプションに対する長いオプション (--lxcpath) をドキュメントに追加しました
  • create=dir と create=file オプションの説明を lxc.container.conf に追加しました
  • lxc.system.conf(5) の lxc.cgroup.use の説明を更新しました
  • lxc-destroy(1) に共通オプションの説明を追加しました

テンプレート :

  • lxc-debian: stretch (Debian 9) イメージのサポートを追加しました
  • lxc-debian: contrib と non-free を含まない指定ができるようになりました
  • lxc-debian: dpkg コマンドが multiarch をサポートしているかチェックするようになりました
  • lxc-debian: lxc-debian テンプレートで dpkg が multiarch をサポートしているかどうかのチェック方法を変更しました
  • lxc-ubuntu: ubuntu.common.conf: /dev/mqueue をマウントするようにしました
  • lxc-debian: カーネルのアーキテクチャのみをチェックするようにしました
  • lxc-alpine: 移植性を向上させるため GNU BRE 拡張の使用を止めました
  • lxc-alpine: オプションをパースするために getopt を使うようにしました

これらの stable の修正は 14 名のコントリビュータによってなされました。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 1.1.4 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチ (stable-1.1) は Github にあります。

LXC 1.1.3 リリースのお知らせ 2015 年 8 月 14 日

このリリースは LXC 1.1 の 3 回目のバグフィックスリリースです。

変更点

重要な変更:

  • セキュリティホール CVE-2015-1331 の修正
  • セキュリティホール CVE-2015-1334 の修正
  • LXC 1.1 で生じた LXC 1.0 との ABI の非互換性に関する修正を行いました 大変申し訳ないことですが、この修正は LXC 1.1.0、1.1.1、1.1.2 でビルドしたバイナリは LXC 1.1.3 で再度ビルドする必要があることを意味します。しかし、この修正は LXC 1.0 とそのバグフィックスリリースに対するバイナリとの後方互換性を損なうよりも望ましいことです。

コア:

  • apparmor: ラッパーの代わりに /lib/apparmor/profile-load を直接呼ぶようにしました
  • aufs: 非特権コンテナのサポートを追加しました
  • bash: POSIX 互換の関数名を使用するようにしました
  • cgmanager: lxc.cgroup.use の値を使用するようになりました
  • cgmanager: /proc/self/cgroups の代わりに cgmanager の listcontrollers を使用するようになりました
  • cgroup: 正しい順序でメモリの制限を適用するようになりました
  • clone: ファイルシステムのケーパビリティを適切に扱うようになりました
  • clone: ハードリンクを適切に扱うようになりました
  • core: コンテナのロギングがスレッドセーフになりました
  • destroy: Btrfs のサブボリュームを適切に消去するようになりました
  • lua: Lua 5.3 をサポートするようになりました
  • lxc-net: いくつかバグを修正しました
  • lxc-net: IPv6 のサポートを追加しました
  • lxc-net: ifconfig の代わりに iproute を使うようになりました
  • monitor: コンテナのモニタを行うインターフェースの競合状態を修正しました
  • network: リブート時の veth のセットアップを適切に扱うようになりました
  • overlayfs: workdir がない場合に作成するようになりました
  • seccomp: セットアップコードを単純化し、ルールの解析を修正しました
  • start: デーモン化の際に常に FD 0-2 をクローズするようにしました
  • start: デーモンで起動する際の失敗をいくつかより適切に扱うようになりました
  • start: lxc-init が見つからない場合のエラーメッセージを改良しました
  • start: ユーザネームスペース使用時、/proc のアンマウントの失敗を無視するようにしました
  • start: 使用できる場合は、loop デバイスの設定に /dev/loop-control を使うようになりました
  • systemd: lxc-containers と lxc-net 間の起動時の競合状態を修正しました
  • 小さなメモリリークをいくつか修正しました (Coverity により)
  • チェックポイント/リストア機能の様々な改良を行いました
  • 様々なドキュメントの改良を行いました
  • 様々なテストの改良を行いました

コマンド:

  • lxc-autostart: stdout が tty でない場合に出力が壊れる不具合を修正しました
  • lxc-checkconfig: 新しいカーネルをサポートしました

テンプレート:

  • alpine: /dev/shm の扱いを修正しました
  • alpine: apk バイナリの検証を修正しました
  • centos: いくつかのバージョンの yum のサポートに関する修正を行いました
  • debian: GREP_OPTIONS が設定されている場合の debootstrap に関する修正を行いました
  • debian: dbus がインストールされていない場合のエラーを修正しました
  • debian: ロケールを再設定するようにしました
  • debian: unstable/sid の場合のセキュリティリポジトリをスキップするようにしました
  • fedora: セカンダリアーキテクチャのサポートを追加しました
  • fedora: Fedora 20 用の古いリリースリポジトリを更新しました
  • gentoo: /dev/mqueue と /dev/shm の扱いを修正しました
  • opensuse: ビルドバージョンを決定するために rpm を使うようになりました
  • oracle: /dev/shm の扱いを修正しました

これらの stable の修正は 31 名のコントリビュータによってなされました。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 1.1.3 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチ (stable-1.1) は Github にあります。

LXC 1.1.2 リリースのお知らせ 2015 年 4 月 10 日

このリリースは LXC 1.1 の 2 回目のバグフィックスリリースです。

変更点

  • core: attach 中の tty でない stdin に関する修正を行いました
  • core: コンテナのロギングの改良を行いました
  • core: 非特権コンテナの cgroup の扱いに関する修正を行いました
  • core: rootfs が overlayfs のコンテナをきちんと削除するようになりました
  • core: マルチスレッドの問題をいくつか修正しました
  • core: CRIU を使った checkpoint/restore に関する様々な修正を行いました
  • docs: lxc-attach-ephemeral のマニュアルをいくつかの点で更新しました
  • tests: apparmor テストでハングアップする問題を修正しました
  • centos: yum のバージョンを正確に検出するようになりました
  • centos: 間違ってホストの tty.conf を変更しないように修正を行いました
  • gentoo: /dev/shm のハンドリングを修正しました

これらの stable の修正は 9 名のコントリビュータによってなされました。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 1.1.2 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチ (stable-1.1) は Github にあります。

LXC 1.1.1 リリースのお知らせ 2015 年 3 月 16 日

このリリースは LXC 1.1 の初めてのバグフィックスリリースです。

変更点

  • config: デフォルトで FUSE へのアクセスが可能になりました (元々ほとんどのテンプレートそれぞれで許可されていました)
  • proc:mixed を使った場合、/proc/sys/net が書き込み可能になりました (ネットワーク設定に必要です)
  • バックグラウンドで起動している LXC プロセスに識別可能なタイトルを設定するようにしました
  • lxc.mount.auto が設定されている場合の get_config_item を修正しました
  • attach 時の tty の問題をいくつか修正しました
  • seccomp で powerpc のサポートを追加しました
  • oracle: 非特権の場合の lxc-console の修正を行いました
  • centos: 非特権の場合の lxc-console の修正を行いました
  • plamo: コンテナ内で /dev 以下のデバイスファイルの生成方法を変更しました
  • lxc-top: 長いコンテナ名の場合の表示の修正
  • LVM: Thin Provisioning を使わない LVM の場合に rdepends を使うようにしました (訳注: Thin Provisioning を使わない LVM の場合、スナップショットクローン元のコンテナが削除できなくなりました)
  • gentoo: base イメージのダウンロードの修正
  • 色々な部分での man pages の更新

これらの stable の修正は 13 名のコントリビュータによってなされました。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 1.1.1 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチ (stable-1.1) は Github にあります。

LXC 1.1.0 リリースのお知らせ 2015 年 1 月 30 日

LXC チームは LXC 1.1 のリリースを発表しました。

このリリースは 2016 年 1 月か、その時点で LXC の次のリリース (1.2) がなされていない場合は、次のリリースの 2 ヶ月後までサポートされます。

プロダクション環境での長期間のサポートが必要であれば、2019 年 4 月まで安定版リリースとしてサポートされる LXC 1.0 を使い続けることを強くおすすめします。

一方でそこまでの厳密さが不要であれば、LXC 1.1 を cgmanager 0.35 以降、lxcfs 0.5 以降と一緒に使うこともおすすめです。

注目の新機能

LXC 1.1 は CRIU を使ったコンテナのチェックポイント・リストアの機能を新たに導入しました。

コンテナ内の init として systemd の実行のサポートも大きな改良点です。lxcfs と最新の systemd の組み合わせで、特権、非特権の両方のコンテナが動作するでしょう。

init スクリプトが更新されました。これにより LXC を使ういかなるシステムでも、DHCP サーバと DNS サーバ機能を dnsmasq によって提供する lxcbr0 ブリッジがデフォルトとなり、同じように動くようになりました。現時点で systemd、sysvinit、upstart 向けの init スクリプトを提供しています。

このリリースは 84 名の開発者からのコントリビュートによりリリースできました。

新機能

  • lxc-autostart: 新たに -A/--ignore-auto オプションを追加しました (すべてのコンテナを起動できます)
  • lxc-ls: 新たな出力項目 "interface" を追加しました
  • centos/fedora: root_password_expired 環境変数を追加しました (デフォルト yes)
  • oracle: (メディアからを含めて) 任意の yum リポジトリからインストールできるようになりました
  • oracle: Oracle Linux 7 のサポートを追加しました
  • lxc-ls: --fancy オプションなしで group によるコンテナのフィルタリングができるようになりました
  • core: qemu-img 経由での qcow2 のサポートを追加しました
  • lxc-autostart: NULL グループのサポートを追加しました (lxc.start.auto は 1 に設定されているがグループには属していないコンテナ)
  • core: コメントと同様に展開されないバージョンの設定のトラッキング
  • opensuse: 共通設定を使うようになりました
  • core: lxc.cap.keep に none を設定できるようになりました
  • archlinux: 共通設定を使うようになりました
  • ubuntu: 利用可能な場合、btrfs の subvolume とスナップショットを使うようになりました
  • seccomp: 全てのディストリビューションでデフォルトの seccomp プロファイルを設定するようになりました (危険なシステムコールをブロックします)
  • core: Openvswitch のブリッジのサポート
  • core: lxc.environment のサポートの追加 (特別な環境変数の追加)
  • init: systemd, upstart, sysvinit スクリプトで同一のサポートの追加
  • core: CRIU を使ったコンテナのチェックポイントとリストアのサポート
  • core: 新しい aa_allow_incomplete フラグの追加。部分的な AppArmor のサポートでコンテナの起動が可能になりました
  • lxc-top: デフォルトでCバイナリ版がインストールされるようになりました (以前は lua スクリプトでした)
  • API: attach_interface と detach_interface が追加されました
  • lxc-device: デフォルトで C バイナリ版がインストールされるようになりました
  • lxc-config: lxc.cgroup.(use|pattern) が表示できるようになりました
  • core: 新たに lxc.init_cmd オプションを追加しました。デフォルトの init コマンドである /sbin/init を上書きします
  • lxc-start-ephemeral: 新たに --cdir オプションを追加しました (copy-on-write マウント)。
  • opensuse: 複数のリリースのサポート
  • core: lxc.include でディレクトリの include が可能になりました (全ての .conf 拡張子を持つファイルを include します)
  • core: 新たに common.conf.d ディレクトリが利用可能になりました。ユーザ、パッケージが全てのコンテナに反映させたい設定を追加できるようになりました
  • core: LXC が container_ttys 環境変数を設定するようになりました

動作の変更点

  • lxc-create で -t オプションが必須になりました。以前のようにテンプレートなしの場合は "none" を使用します
  • スナップショットがコンテナのディレクトリ内に保存されるようになりました
  • PER_LINUX32 に対する lxc.arch は i686 を出力するようになりました
  • lxc-execute: コンテナ内に lxc-init が見つからない場合はコンテナ内にバインドマウントされるようになりました
  • lxc-start: デーモン起動がデフォルトになりました
  • core: pivot_\root は lxc.pivotdir を使わずに行われるようになりました。この結果、このオプションは非推奨となり、将来は削除される予定です
  • Core: デフォルトでデーモンモードで起動するようになったので、close-all-fds もデフォルトになりました
  • core: lxc.autodev は作りかえられました。/dev/lxc は使いません。代わりにコンテナの /dev 上で直接 tmpfs をマウントします。非特権コンテナ上でも動くようになりました
  • core: lxc.autodev がデフォルトで有効になりました (lxc.autodev=1)
  • core: lxc.kmsg はデフォルトで無効になりました (lxc.kmsg=0)
  • core: clear_config_item はリスト (lxc_list) のみに影響するようになりました。他では set_config_item を使用してください
  • templates: 全てのテンプレートで lxc.mount.auto = cgroup:mixed proc:mixed sys:mixed を使うようになりました (安全なデフォルト設定です)

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションが長期サポートの 1.0 リリースの採用を続ける決定をしない場合は、すぐに LXC 1.1.0 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、master ブランチは Github にあります。

LXC 1.0.7 リリースのお知らせ 2014 年 12 月 5 日

このリリースは LXC 1.0 シリーズの 7 回目のバグフィックスとなるリリースです。

変更点

コア :

  • IPv4/IPv6 アドレスをキーに問い合わせたとき、ネットワークプレフィックスも含めるようにしました
  • apparmor: 'silent' マウントを黙って拒否するようにしました
  • デバッグ出力にファイル、関数、行数の情報を含めるようにしました
  • apparmor: プロセスに対する signal と ptrace を制限するようにしました
  • cgmanager: いくつか修正を行いました (訳注: 非特権コンテナで全てのコントローラを同じパスにマウントしていない時の操作が失敗することがある不具合を修正しました)
  • lxc: / が ramfs のときに pivot_root を呼ばないようにしました
  • lxc.mount.auto の後片付けを修正しました
  • conf.c: Android に対する MS_PRIVATE を定義しました
  • network: ifname パラメータを const に変更しました (訳注: ネットワークインターフェース関連の関数の引数を char から const char に変更しています)
  • network: if_nametoindex() の返り値のチェックを行うようにしました (訳注: 内部的に使用している関数の返り値が NULL でないかどうかのチェックを追加しました)
  • network: 名前空間を移動するときに allow lxc_network_move_by_index() でネットワークインターフェースの名前を変更できるようにしました
  • network: lxc_netdev_isup() という名前の関数の導入 (訳注: ネットワークインターフェースの状態が up か down かを取得する関数を追加しました)
  • lxccontainer.c: enter_to_ns 関数を enter_net_ns という名前に変更しました
  • root の場合でも非 root の場合でも lxc_global_config_value 関数がデフォルトの lxc.cgroup.pattern を返すようにしました
  • do_rootfs_setup: 返り値のバグを修正しました
  • lxc-start: rootfs がマウントされているときに rootfs のマウントをリトライしないようにしました
  • attach: confstr(_CS_PATH) を使わないようにしました
  • lxc_global_config_value: テーマを簡素化しました (訳注: グローバルの設定値用の内部変数の解放を簡素化して安全に解放するようにしました)
  • ipvX gatewayの値のミスマッチの修正をしました (設定値 ipvX.gateway 関係の内部処理で "ipvX_gateway" という文字列で比較していたので期待通りの処理が行われていない部分があったのを修正しました)
  • attach: stdin がリダイレクトされているときに sigint/sigkill を無視しないようにしました
  • cgmanager: "all" コントローラをサポートした 'attach' の修正を行いました
  • lxc/utils: 解放されたポインタの返り値に関する修正を行いました
  • conf.c: 関数名などで使っている 'instanciate' の綴りを 'instantiate' に変更しました
  • 間違った nlmsg_\len の長さを修正しました
  • read-only フラグが与えられているときは bind mount を再マウントするようにしました
  • lxc_clear_config_item 関数が idmaps をクリアできるようにしました
  • overlayfs と aufs のクローンを行うときの処理 (clone_path) をより確実に行えるようにしました
  • overlayfs: overlayfs ver.22 以上の場合にはマウントに workdir オプションを付けるようにしました
  • クローン時の問題を修正しました (訳注: aufs と overlayfs のクローンを行うときに問題が起こる場合があるのを修正しました)
  • veth のエラーの場合のロギングの改良を行いました
  • コメントの typo の修正を行いました
  • audit: capacity と reserve() を netlink メッセージに追加しました (訳注: netlink メッセージがオーバーフローしないようにしました)
  • rmdir と lxc_unpriv がマイナスの値を返さないようにしました
  • typo の修正をしました - https://github.com/vlajos/misspell_fixer を使って

バインディング :

  • src/python-lxc/setup.py を .gitignore に追加しました

Tests:

  • tests: 非特権のテストを修正しました
  • lxc-test-unpriv: /etc/lxc/lxc-usernet をクリアしないようにしました
  • lxc-test-unpriv: サブシステムごとに異なる cgroup である場合のテストを追加しました
  • tests: waitpid() が errno として EINTR を返したときにリトライするようにしました

コマンド :

  • lxc_start: コンテナが実行中のときは ERROR を返すようにしました (訳注: ↓で更に修正されて0を返すようになってます)
  • lxc-start: コンテナが実行中のときはエラーでなく 0 を返すようにしました
  • 古い lxc-ls コマンドをより適切に処理がなされるようにしました (訳注: python3 がインストールされていない場合にインストールされる古いシェル版の lxc-ls です)
  • lxc_info: fork する処理を呼ぶ前に stdout をフラッシュするようにしました

テンプレート :

  • lxc-gentoo テンプレートの typo を修正しました
  • busybox template: 非特権コンテナをサポートしました
  • busybox template: fstab が利用できる場合はマウントするようにしました
  • gentoo テンプレートで更に他の typo を修正しました
  • コンテナの代わりにキャッシュに apt proxy を作成するようにしました (訳注: Ubuntu テンプレート)
  • lxc-plamo: /dev/shm を tmpfs でマウントするようにしました
  • lxc-cirros: 非特権コンテナの作成と実行をサポートしました
  • lxc-openmandriva の typo を修正しました
  • lxc-centos の typo を修正しました
  • lxc-opensuse: openSUSE 13.2 環境上でのコンテナの作成を無効にしました
  • lxc-alpine: /dev/shm が確実に誰でも書き込み可能になるようにしました
  • lxc-alpine: コンソール用のデフォルトの tty を作成するようにしました
  • lxc-debian: パッケージインストール用のサポートを追加しました
  • lxc-debian: デフォルトミラーの修正を行いました
  • lxc-debian: PID 1 として systemd をサポートしました
  • lxc-debian: init のシステム設定の調整を行いました
  • lxc-debian: Wheezy と Jessie で udev サービスのマスクをおこないました 
  • lxc-opensuse: openSUSE Tumbleweed 上でのコンテナ作成を無効化し、検出を改良しました。

ドキュメント :

  • lxc(7) のカーネルと cgroup の情報を最新情報に修正
  • lxc-create の -t オプションを必須に変更
  • 日本語の lxc(7) のカーネルと cgroup の情報を最新情報に修正
  • タブ/スペースの一貫性

これらの stable の修正は 27 名のコントリビュータによってなされました。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。そして、各ディストリビューションがすぐに LXC 1.0.7 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチは Github にあります。

LXC 1.0.6 リリースのお知らせ 2014 年 9 月 24 日

このリリースは LXC 1.0 シリーズの 6 回目のバグフィックスとなるリリースです。

LXC 1.0 と将来リリースする LXC 1.1 の両方を簡単にサポートするために、このバージョンでは lxc-start に -F オプションを追加しました。(現在の 1.0 で) デフォルトでフォアグラウンドで起動している lxc-start ではこのオプションは不要ですが、この動きは LXC 1.1 で変わる予定です (訳注: バックグラウンドがデフォルトに変わる予定です)。1.0 で -F を導入したのは、アップグレード後も作成したスクリプトが変わらずに動くようにするためです。

変更点

  • rootfs_is_blockdev: rootfs が指定されていないときには実行されないようにしました (訳注: rootfs が指定されていない場合はストレージバックエンドがブロックデバイスかどうかチェックを行う処理を実行しないようにしました)
  • confile: netdev->priv を設定する前に netdev->type のチェックを行うようにしました
  • ubuntu.common 設定ファイル中の mountcgroups フックのコメント内での例示を削除しました (訳注: 例示は "lxc.mount.auto = cgroup:mixed" に置き換わっています)
  • mountcgroup フックファイルを削除しました
  • lxc_init が SIGPWR を扱えるようになりました
  • Sysvinit スクリプトを修正しました
  • 非特権コンテナ: 指定がない場合は次に利用可能な NIC 名を使用するようにしました
  • btrfs のエラーメッセージの typo を修正しました
  • apparmor: スレーブバインドマウントが可能になりました
  • 古いリリースに対する SELinux ポリシーの例を追加しました
  • idmap (idのマッピング) なしで非特権コンテナを作成しようとした場合に参考になるエラーメッセージを出力するようにしました
  • Android ではスレッドセーフでない getpwuid と getpwgid を使うようにしました
  • btrfs: 再帰的な subvolume の削除をサポートしました (v2)
  • '--log-priority' を '--logpriority' に修正しました (訳注: エラーメッセージ中の typo の修正)
  • デーモン化の際ファイルディスクリプタのリークを修正しました
  • monitord が起動する際のファイルディスクリプタのリークを修正しました
  • pts セットアップ時に確実に /dev/pts ディレクトリが存在するようにしました
  • LVM バックエンドのコンテナのスナップショットを禁止しました (訳注: LVM でスナップショットが正常に動作しないための一時的な処置です)
  • 設定項目として lxc.console.logpath を追加しました
  • coverity: null チェックの後に newname を使わないようにしました (訳注: クローン時のクローン先のコンテナが存在しないかどうかのチェックの際にテンポラリ変数を使わないように処理を変更した)
  • coverity: btrfs_node tree の malloc を正しいサイズで行うようにしました
  • --with-distro=raspbian が使用可能になりました (訳注: configure 時のオプション指定です)
  • cgmanager get/set: cgmanager で確実に子グループを刈り取るようにしました
  • デバッグ出力の追加
  • do_mount_entry: remount 時に必要であれば nexec, nosuid, nodev, rdonly フラグを追加するようにしました (訳注: 関連 https://lkml.org/lkml/2014/8/13/746)
  • command socket: 必要な場合にハッシュを使うようにしました (訳注: コンテナのコマンドソケット名が長すぎる場合にはハッシュを使うようにしました)
  • monitor: 長い lxcpath の場合のソケット名の計算を修正しました
  • btrfs の subvolume の削除が失敗した場合の出力の変更 (issue #315)
  • SIGKILL (CTRL-C) と SIGQUIT (CTRL-) を無視するようにしました (issue #313) (訳注: lxc-attach コマンドの処理です)
  • コンテナディレクトリを 0770 に chmod するようにしました
  • build: 分離したビルドとソースディレクトリのサポートの修正
  • mount_entry: statvfs を使うように変更しました (訳注: /proc/self/mountinfo をパースしていたのを変更しました)
  • lxc_mount_auto_mounts: 再マウント時に存在する nodev などのオプションをきちんと評価できるようにしました
  • statvfs: statvfs が存在しない場合に何もしないようにしました (android/bionic)
  • ifindex の初期化時のコンパイラの警告がでないようにしました (訳注: 内部で使っている変数初期化の際の警告の抑止です)
  • build: clean の際に設定テンプレートを削除しないようにしました (訳注: make clean 時です)
  • build: distutils のエラーを防ぐために srcdir から setup.py を実行するようにしました
  • コマンドソケット名の扱いの処理の変更をしました (v2)
  • lxc-cgm: ネストした chown の際の問題を修正しました
  • monitord (コンテナをモニタリングするデーモン) にコンテナの終了ステータスを報告するようになりました
  • cgmanager が 'all' サブシステムをサポートしている時は 'all' を使うようにしました (訳注: 原文は「'all' containers」となっていて、該当のコミットログもそうなっていますが、修正内容を見る限りは cgroup の複数のサブシステムを扱う話に見えますのでそのように訳しています→コミット)
  • log: quiet モードのバグを修正しました
  • lxc.c ビルド内のビルド時のエラー(ISO C90仕様違反)を修正しました
  • lxc_map_ids: 不要な newgidmap コマンドのチェックを行わないようにしました。コード中にその部分のコメントを追加しました。
  • コンテナ終了時に autodev 処理に使ったディレクトリを掃除するようにしました
  • MLでの議論で、リブート時は autodev 処理に使ったディレクトリを掃除しないようにしました
  • 少し異なったrmdir処理の呼び出しに起因するビルドの失敗を修正しました
  • IPv6アドレスとゲートウェイの表現の修正
  • lxc-start: -F (フォアグラウンド) オプションの追加
  • all: インラインコメントの使用をやめました (訳注: 付属の標準設定ファイルの話です)
  • centos: DHCPリクエストにホスト名を含めるようにしました
  • centos, fedora, gentoo: arch コマンドを uname -m に変更しました
  • altlinux: バグ修正をしました
  • archlinux: /etc/locale.conf にデフォルトのロケールを適切に設定するようにしました
  • centos template: mingetty 実行時に vhangup(2) が呼ばれないようにしました
  • download: wget が 3 度リトライをするようにしました
  • download: --keyserver オプションが実際に動作するようにしました
  • gentoo: インストール時のファイルとディレクトリがオリジナルのuid/gidを保持するようにしました
  • gentoo: portage distdir の決定に portageq を使用するようにしました
  • plamo: インストール時のファイルとディレクトリがオリジナルのuid/gidを保持するようにしました
  • plamo: バグを修正しました
  • ssh: DHCP サーバにホスト名を送るようにしました
  • ubuntu: $rootfs/run/shm の存在チェックを行わないようにしました
  • ubuntu: ヘルプを追加しました
  • lxc-test-{unpriv,usernic.in}: 確実に chgrp されるようにしました
  • lxc-test-unpriv: lxc-clone -s のテストを行うようにしました
  • tests: shutdown をテストする前に sync を呼ぶようにしました
  • tests: 使用可能であればダウンロードキャッシュをコピーするようにしました [v2]
  • 非特権の cgroup 管理のテストを修正しました
  • doc: 非特権の場合に veth.pair が無視されることを追記しました (日本語manでも追記しました)
  • doc: lxc-start(1) に -F オプションの説明を追加しました
  • doc: 日本語の lxc.container.conf(5) の SELinux の説明を更新しました
  • lxc-create(1) の -B オプションのパラメータに 'zfs' を追加しました
  • doc: 日本語の lxc.container.conf(5) に lxc.console.logpath の説明を追加しました
  • doc: 言語の修正
  • doc: 日本語の lxc.container.conf(5) の誤記を修正しました
  • lxc-snapshot(1) に destroy オプションの説明を追加しました
  • lxc.system.conf(5) に lxc.cgroup.use が cgmanager を使っているときは無視されることを追記しました

これらの stable の修正は 24 名のコントリビュータによってなされました。

このリリースの tarball は ダウンロードページ から取得できます。 そして、各ディストリビューションがすぐに LXC 1.0.6 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチは Github にあります。

LXC 1.0.5 リリースのお知らせ2014 年 7 月 14 日

このリリースは LXC 1.0 シリーズの 5 回目のバグフィックスとなるリリースです。

seccomp profile

通常のバグフィックス以外に、このリリースは重要な変更を一つ含みます。LXC が seccomp サポートでビルドされているシステムでは、コンテナは seccomp プロファイルが有効になります。このプロファイルにより、以下のシステムコールの呼び出しを防ぎます: kexec_load, open_by_handle_at, init_module, finit_module, delete_module.

これは特に、最近よく見られる "shocker" エクスプロイトのような攻撃を防ぐでしょう。

このプロファイルは新しいコンテナや、(共通の設定を lxc.include で読み込んでいる) 新しいスタイルの LXC 設定ファイルを使ったコンテナに適用されます。つまり、現時点では以下のディストリビューションに適用されます: centos, debian, fedora, gentoo, oracle, plamo, ubuntu.

コンテナの設定で "lxc.seccomp =" を追加することにより、このプロファイルの適用をオフにできます。

共通の設定を読み込む仕組みを使っていないコンテナでこの機能をオンにしたい場合は、"lxc.seccomp = /usr/share/lxc/config/common.seccomp" というような設定を、コンテナの設定ファイルに追加します。

変更点

  • core: 最近のカーネルで非特権コンテナが動作するように修正しました(訳注: 最近のカーネル = 3.15.1 or 3.14.8 以降)
  • core: -Werror=maybe-uninitialized を付けた時のビルドの問題を修正しました
  • core: seccomp: 解決できないシステムコールを使った時に失敗しないようにしました
  • core: lxc-init: ケーパビリティのドロップを強制しないようにしました
  • core: configure: LIBS から -lcap と -lselinux を分けました
  • core: configure: libexecdir の展開の問題を修正しました
  • core: seccomp: セクションで使えるアーキテクチャとして 'all' をサポートしました
  • core: seccomp: 32-bit のルールを修正しました
  • core: seccomp: すべてのテンプレートに対してデフォルトのフィルタを有効にしました
  • core: write_config 内のデータの破損を修正しました (訳注: 設定ファイルを書き出す際にデータが破損する可能性があったのを修正しました)
  • core: attach: 現在のパーソナリティ (personality) の問い合わせができていなかったのを修正しました
  • core: cgmanager: cgm_set と cgm_get は可能であれば絶対パスを使います (訳注: 非特権コンテナを起動したログインセッションと別のセッションから lxc-info, lxc-cgroup を実行できるようになりました)
  • core: cgmanager: cgm_get 内で @value が確実に NULL で終わるようにしました
  • core: cgmanager: シグナルのフィルタリング・パース部分のコードの最適化を行いました
  • core: apparmor: デフォルトで hugetlbfs を使えるようにしました (tmpfs と同様に hugetlb cgroup コントローラの使用が制限されていました)
  • find_fstype_db が空白行とコメント行を無視するようになりました (訳注: fstab ファイルで空白とコメント行が無視できるようになりました)
  • lxc-autostart: -P が与えられた場合、適切に扱うようになりました (訳注: -P はログの設定にのみ使い、コンテナリストの取得には使わなくなりました)
  • lxc-attach: 使い方の typo を修正しました
  • lxc-start: コンテナの終了コードを取得できるようにしました
  • lxc-stop: 不適切なタイムアウトの扱いを修正しました
  • lxc-device: --version オプションをサポートしました
  • lxc-ls: --version オプションをサポートしました
  • lxc-start-ephemeral: --version オプションをサポートしました
  • tests: 可能な限りダウンロードテンプレートを使わないようにしました
  • HOME が定義されていないとき失敗しなくなりました
  • tests: apparmor: 常に newline を付けた終了メッセージが出力されるようにしました
  • tests: エラーメッセージを明確にし、リターンコードを修正しました
  • tests: lxc-test-ubuntu は bind9-host を必要としなくなりました
  • lxc-debian: コード表記の統一化
  • lxc-debian: コード表記の修正
  • python3: attach_wait とスレッドを修正しました

これらの stable の修正は 11 名のコントリビュータによってなされました。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。 そして、各ディストリビューションがすぐに LXC 1.0.5 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチは Github にあります。

LXC 1.0.4 リリースのお知らせ2014 年 6 月 13 日

このリリースは LXC 1.0 シリーズの 4 回目のバグフィックスとなるリリースです。

変更点

  • core: cgmanager に対して nih_dbus_setup を呼ばないようにしました。これはnihのメインループを使うときだけ使うのが適切なものでしたが、lxc では使っていないためです。
  • core: lxc_infoでreallocのチェックをしていなかったのを修正しました。(cppcheckで発見)
  • core: スタートアップ時、全ての shared mount のエントリごとに slave のマークをつけるようにしました。
  • core: /devに作成するシンボリックリンクについて、作成前にすでに存在しているかどうかをチェックするようにしました。
  • core: fdのリークを修正しました。(coverityで発見)
  • core: lxc.archに設定する、文字列として全てのiX86が使用できるようになりました。(訳注: 'linux32', 'i386', 'i486', 'i586', 'athlon', 'linux64' が認識されるようになっています)
  • core: clang 3.4を使ってビルドするときの問題を修正しました。
  • core: 小さな .gitignore の typo を修正しました。
  • core: MUTEX_DEBUGGING時のビルドでのMAX_STACK_DEPTHの定義が抜けていたので追加しました。
  • core: mountall コマンドで問題が生じるので /sys/fs/cgroup を読み込み専用でマウントするのをやめました。
  • core: ケーパビリティをパースするロジックの共通部分を抜き出して一つの共通関数にしました。
  • core: lxc.mount.auto の cgroup と cgroup-full を指定した場合のデフォルト値を調整しました。これは CAP_SYS_ADMIN を保持しているかそうでないかによって選択されます。
  • core: btrfs を使っている時の、非特権でのコンテナの作成、クローン、消去をサポートしました。
  • core: cgmanager で名前付きのサブシステムをサポートしました。
  • core: cgmanager に接続した際、cgroup の絶対パスを使用し cgroups を変更するようにしました。これにより同じユーザーのユーザーセッションをまたいだ非特権 lxc-attach が可能になります。(訳注: lxc-cgroup コマンドも同様です)
  • core: cgmanager が name= 指定のサブシステムをサポートしているかどうかを検出するようになりました。
  • core: 全てのヘッダファイルでの ifndef/define のフォーマットを統一しました。
  • core: lxc-devsetup での bashism (bash特有の機能) を修正しました。
  • ポインタの値を参照した後の null チェックの修正を行いました (coverity で検出)
  • core: bdev_specs 構造体を export しました。これにより API を使う場合に引数として関数で使うことができるようになりました。
  • core: 要求されたスナップショットが実際に存在することを確認するまでは、コンテナを消去しないようにしました。(訳注: lxc-snapshot でスナップショットからコンテナをリストアするとき、リストアするコンテナ名を指定しないとスナップショット元のコンテナを破壊してからリストアを行っていましたが、存在しないスナップショット名を指定してもチェックなしに元のコンテナを破壊してしまっていたので、それを修正しました)
  • core: コンテナの personality を /proc 以下からでなく、コマンドインターフェース (訳注: lxc内部の関数によるインターフェースです) から取得するようにしました。これは 3.15 以上のカーネルで /proc/$$/personality へのアクセスが root に制限されたため、非特権コンテナへの attach に必要になりました。
  • core: シグナル番号の不適切な比較を修正しました。
  • core: -lcgmanger が LIBS 変数に入らないようにしました。(訳注: configure.ac の変更。cgmanager 内の関数の有無をチェックしたいだけなのに LIBS の中に -lcgmanager が入ってしまい、不要なリンクがされてしまうのを防いでいます。)
  • core: ケーパビリティを保持している時の誤ったログメッセージを修正しました。
  • core: 不正なコンテナのスナップショットを取得しようとした際にクラッシュしないよう修正しました。
  • core: root により開始された非特権コンテナに、ブロックデバイスを mount 可能にしました。
  • core: コンテナの開始に失敗した際の不適切なエラーメッセージを隠し、失敗をデバッグする方法を提案するようにしました。
  • core: コンテナの開始前に start hooks (訳注: lxc.hook.start) で指定されたプログラムの path を検証するようにしました。
  • core: failure 時に cgroup パス全体をログするようにしました。
  • apparmor: sem と msg sysctls への書き込みを許可するよう変更しました。
  • doc: lxc-clone man ページ中の typo を修正しました。
  • doc: 日本語 man ページの句読点を変更しました。(訳注: 'fix' というわけではありません。今までは句読点は「,.」(マルチバイトのカンマ、ピリオド) を使っていましたが、一般的な「、。」に変更しました。)
  • doc: lxc-ls man ページの typo を修正しました。
  • doc: いくつかのファイルでライセンスを訂正し、FSF のアドレスを修正しました。
  • doc: lxc.mount.entry での相対パスでの記述に関する説明を載せました。
  • doc: 古い項目が含まれていた TODO ファイルを削除しました。
  • doc: リネームされた man ページへの参照を修正しました。
  • doc: 英語 man ページと同期が取れていなかった部分を更新しました。
  • lxc-autostart: (訳注: master branch でなされた) autoboot/autostart の変更をバックポートしました。
    これは少なくとも systemd システムにて autostart 問題を解決するために必要となります。 この変更により、-g オプションにおける NULL group サポートが追加されました。(group name がない場合にコンマとして認識されます) 新しい特別な "onboot" group を追加し、init scripts (sysvinit, systemd と upstart) が NULL と onboot group 両方を開始するようにセットしました。
    これは boot 時に自動的に開始されない "onboot" group を既に利用していない限り、既存のユーザーに見える変更はありません。
  • lxc-create: "none" bdev type がドキュメント通りに動作するようにしました。
  • lxc-execute: exit する際のメモリリークを修正しました。
  • lxc-ls: ネストされたコンテナーに対して python のサポートがなくても動作するように修正しました。
  • lxc-user-nic: ブリッジが無くてもクラッシュしないようにしました。
  • alpine template: x86 に対して正しい lxc_arch を設定するようにしました。
  • archlinux template: sigpwr ハンドラーを追加しました。
  • archlinux template: lxc.root を btrfs backend のために修正しました。
  • download template: GPG セットアップを3回再試行するようにしました。
  • fedora template: systemd target のセットアップをいくつか修正しました。
  • oracle template: コンテナ内から db_load を使用するようにしました。
  • oracle template: いくつかの rpm scriptlets の warnings/errors を修正しました。
  • oracle template: lxc-patch.py を 644 に変更しました。(rpmlintの警告が修正されます)
  • oracle template: libvirt-lxc 用に securetty に pts/[1-4] を追加するようにしました。
  • oracle template: systemd システムで hostname をセットするようにしました。
  • oracle template: libvirt-lxc 環境での ssh ログインに失敗するのを修正しました。
  • plamo template: ワイヤレスインターフェースを設定しようとしないように変更しました。
  • sshd template: 正しい lxc-init パスを使用するようにしました。
  • python3: 非公式の python2.7 binding でも動作するよう、.py ファイルに若干の変更を加えました。
  • python3: hwaddr がテンプレートでセットされなくてもネットワークテストが失敗しないようにしました。
  • python3: create() に template name が渡されることを必須としないようにしました。
  • python3: 不正な global 設定キーでクラッシュしないように修正しました。
  • python3: snapshot() でクラッシュしないように修正しました。
  • tests: 全ての正しい cgroups に join する事を確認するようにしました。
  • tests: lxc-test-autostart 中の競合発生をワークアラウンドしました。

これらの stable の修正は 14 名のコントリビュータによってなされました。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。 そして、各ディストリビューションがすぐに LXC 1.0.4 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチは Github にあります。

LXC 1.0.3 リリースのお知らせ2014 年 4 月 8 日

このリリースは LXC 1.0 シリーズの 3 回目のバグフィックスとなるリリースです。

変更点

  • core: lxc_spawn 中で常に netpipe を初期化するようにしました (訳注: 非特権コンテナのリブート時に存在しないパイプに対してメッセージを送ることのないように lxc_spawn 中でパイプを初期化するように修正されています)
  • core: lxc-monitord.log が LXCPATH でなく LOGPATH に出力されるようになりました
  • core: monitord の予期しない終了に対してより適切に対応するようにしました
  • core: lxc-init をアーキテクチャやディストリビューション依存のパスから /sbin/init.lxc へ移動しました。 init.lxc をコンテナ内で見つけるときは、ハードコードされたパスではなく、$PATH を使って見つけます。
  • core: macvlan のデフォルトモードを private にしました
  • core: pre-mount hook を走らせる前に rootfs が shared でマウントされているかを確認するようにしました
  • apparmor: 現時点の upstream の apparmor に対応したプロファイルに更新しました。 古い apparmor のユーザは、パーサーがプロファイルのパースに失敗した場合、dbus, ptrace, signal の stanza をコメントにしても問題ありません
  • apparmor: 複雑なルールをより簡単に生成できるように中間プロファイルを使うようにしました。 これにより既存のプロファイルにいくつか問題が見つかり、それを修正しました。 /proc/sys のほとんどは kernel/shm/, net/, kernel/domainname, kernel/hostname に対する例外で適切にブロックされるようになりました。
  • apparmor: ネスティング時のプロファイルでデフォルトでは cgroupfs をブロックするようにしました。 ユーザは今後 cgroupfs のマウントが不要な cgmanager を使用するべきです
  • cgmanager: len == 0 の時発生する cgm_get のバグを修正しました
  • lxc-info: 重複する行を表示しないようにしました
  • sysvinit script: より適切に default.conf をパースするように wait_for_bridge を修正しました
  • tools: -1 での exit をやめ、一部例外を除き (ドキュメント化されています)、より一般的かつ一貫した exit code の 0 (成功時)と 1(失敗時)を利用するよう変更しました (訳注: 原文では "for lxc-start" とあり、lxc-start に対して一般的で一貫した exit code を採用した事になっていますが、別に lxc-start 以外の lxc-* にも同様の修正が加えられており、例外は lxc-stop に存在するので、上記のような訳としました)
  • archlinux template: network link が存在しない場合のデバッグ情報を追加しました
  • archlinux template: 色々な修正とクリーンアップを行いました
  • centos template: lxc.arch を適切に設定するようにしました
  • download template: ダウンロードの失敗を少し適切に処理するようにしました (訳注: ダウンロードに使う wget のタイムアウト値を 30 秒に設定しています)
  • fedora template: lxc.arch を適切に設定するようにしました
  • gentoo template: sshd が起動したのを確認するようにしました
  • gentoo template: locale が生成されるようにしました
  • gentoo template: lxc-console がきちんと動作するように tty の設定を行うようにしました
  • oracle template: upgrade時に実行されるパッチスクリプトを追加する事によりupdate時の問題を修正しました
  • tests: apparmorプロファイルのテストを追加しました
  • tests: 遅い ARM での失敗のケースの修正としてタイムアウト値を増やしました
  • tests: 常に http_proxy と https_proxy の値を使用するようにしました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。 そして、各ディストリビューションがすぐに LXC 1.0.3 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチは Github にあります。

LXC 1.0.2 リリースのお知らせ2014 年 3 月 27 日

このリリースは LXC 1.0 シリーズの 2 回目のバグフィックスとなるリリースです。

変更点

  • core: lxc.network.type = none を指定した場合の不具合を修正しました
  • core: シャットダウン時にコマンドの呼び出し元に SIGPIPE が送られないように修正しました
  • core: シャットダウン時に全ての "phys" で指定された NIC をホストに戻すようにしました
  • core: stdin,stdout,stderr fds に関し、コンテナ自身のものを使用するように修正しました
  • core: newgidmap コマンドの存在チェックがきちんとなされるように修正しました
  • core: {get|clear}_config_item で lxc.mount.auto の情報を扱えるようにしました
  • core: netns(ネットワーク名前空間)のファイルディスクリプタのリークを修正しました
  • core: オプショナルなマウントの際に SYSERROR が発生しないようにしました
  • cgmanager: スレッド使用時の競合、データ破損、クラッシュを防ぐために mutex を使って cgmanager へのアクセスを行うようにしました
  • cgmanager: デーモンへの接続が失敗した時は ERROR でなく DEBUG を使用するようにしました (失敗の場合 cgfs へのフォールバックを行うので)
  • cgmanager: 使われなくなった dbus コネクションが残らないようにしました
  • cgmanager: cgroup のパスが正しくないとき、消去処理を実行しないようにしました
  • lxc-ls: コンテナがネストしている場合のパフォーマンスを最適化しました
  • lxc-ls: スワップ (memory cgroup の swap 制限機能) が有効な場合の表示の不具合を修正しました
  • lxc-ls: サポートしているカラム全てをヘルプで表示させるようにしました
  • man: lxc-create manpage でバッキングストアの指定 "best" の説明を追加しました
  • man: lxc-autostart の manpage に -a と -g の説明を追加しました
  • tests: cgroup リストのハードコードをやめました
  • tests: startone でデーモン化を行うようにしました (テストが静かになります)
  • tests: cgmanager だけが実行されている時のテストをサポートしました
  • tests: busybox が使用可能な場合は使うようにしました (テストのスピードアップのため)
  • tests: test-concurent でのファイルディスクリプタのリークを修正しました
  • templates: userns を使ったコンテナで共通して (bind マウントして) 使用するデバイスのリストを更新しました
  • busybox template: busybox がシンボリックリンクの場合も失敗しないようにしました
  • centos template: SIGPWR を受け取った時にシャットダウンするようにしました
  • centos template: 適切なデフォルトの localtime を使うようにしました
  • debian template: /etc/mtab を /proc/mounts へのシンボリックリンクにしました
  • debian template: -c オプションの後の引数を -c で処理しないようにしました
  • fedora template: SIGPWR を受け取った時にシャットダウンするようにしました
  • fedora template: 適切なデフォルトの localtime を使うようにしました
  • fedora template: x86_64 環境上での i686 コンテナの作成時の不具合を修正しました
  • opensuse template: 文法エラーを修正しました

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。 そして、各ディストリビューションがすぐに LXC 1.0.2 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチは Github にあります。

LXC 1.0.1 リリースのお知らせ2014 年 3 月 6 日

このリリースは LXC 1.0 シリーズの最初のバグフィックスとなるリリースです。

変更点

  • core: / が rshared でマークされているのを検出し、正しく動作するようになりました。 これは systemd が使われているシステム上で LXC を使う場合、マウントテーブルがコンテナ内で重複してしまう問題と、lxc-attach がコンテナの rootfs にアタッチできない問題を修正します。
  • core: 正しくない形式の lxc.id_map でクラッシュする問題を修正しました
  • core: コンテナが開始した後に更に cgroup を作成する時の問題を修正しました
  • core: phys インターフェースを持つコンテナがリブート時にクラッシュする問題を修正しました
  • core: パーミッションの問題の検出とレポートを改良しました
  • core: 特権のない場合の操作を共通のコードを使うように変更しました。 これは newuidmap/newgidmap コマンドが使用可能な場合はそれを使用し、もし使用出来ない場合は root の時のみ uid_map/gid_map へ直接書き込みを行うようになっています。
  • core: btrfs スナップショットのリストアの問題を修正しました
  • core: クローンの際にデータロスにつながる可能性があったのを修正しました
  • core: コンテナの root ユーザをユーザのホスト上の uid/gid にマッピングしている場合に、2 度同じマッピングを行おうとする問題を修正しました
  • core: overlayfs 上に存在するコンテナのスナップショットのリストア時の問題を修正しました
  • core: ログに使用する変数を TLS (訳注: スレッド局所記憶) 中に置くようにしました
  • apparmor: プロファイルの変更に onexec を使用するのをやめました。 これは少なくとも overlayfs 上では信頼できないことが証明されています
  • bash completion: 間違った shebang を削除しました
  • cgmanager: コンテナの開始後、アクティブな接続を維持しないようにしました
  • cgmanager: スレッドでも動作するように修正しました
  • README の更新
  • lua: --prefix で指定したディレクトリ以下に lua のファイルをインストールするようにしました
  • lxc-create: dir バックエンド使用時に --dir オプションが有効になるように修正しました
  • lxc-device: wlan デバイスを正しく扱うようになりました
  • lxc-ls: --nesting オプションが非特権コンテナでも動作するように修正しました
  • lxc-start-ephemeral: tmpfs のパーミッションを 0777 の代わりに 0755 に設定するようにしました
  • python3: get_global_config_item 関数が export されるように修正しました
  • seccomp: init がキャッチした seccomp ポリシーの侵害をキャッチできるようになりました
  • systemd: 正しい場所に unit ファイルが置かれるように修正しました
  • templates: 非特権コンテナ内のシステムコンテナを検出するようになりました (lxc-download)
  • tests: lxc-test-concurrent 中に hang する可能性があったのを修正しました
  • upstart: LXC_DOMAIN で指定されたものに対するリクエストを転送しなくなりました (dnsmasq)

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。 そして、各ディストリビューションがすぐに LXC 1.0.1 のパッケージをリリースするでしょう。

個々の変更点に興味がある場合、そして開発の履歴を見たい場合、stable ブランチは Github にあります。

LXC 1.0.0 リリースのお知らせ2014 年 2 月 20 日

はじめに

LXC チームが LXC 1.0 のリリースをアナウンスできるのは大きな喜びです!

このリリースは、最初の安定版リリースとして位置づけられる重要な節目となるリリースです。コンテナのセキュリティ、ツールの一貫性、ドキュメントの更新、複数の言語に対するバインディングなど、広範囲に渡る改良を提供しています。

60 名を超える人が貢献した、最高の LXC のリリースとなります! この成果は個人のラップトップから、携帯電話、クラウドインスタンスまで多様な分野で目にすることができるでしょう。そして、LXC 1.0 のリリースにより、LXC の利用が更に拡大し、多数の新しいエキサイティングなプロジェクトで利用される事を確信しています。

どのような変更がされ、開発がどのように進んだのかをご覧になりたい場合は、メインリポジトリが Github にあります。

新機能について

LXC 1.0 は 10 ヶ月に及ぶ開発と、1000 を超えるコミットからなり、LXC の構造を広範囲に変更する作業を含みますので、このリリースの変更をまとめるのはほとんど不可能に近いですが、以下にハイライトをいくつかあげます:

  • 完全な非特権コンテナのサポート
  • 公開された stable な API (liblxc1)
  • lua と python3 に対する公式の API バインディング (ツリーに含まれます)
  • Goruby に対する公式 API バインディング (ソースツリー外)  
  • 以下をサポートする柔軟なバッキングストアシステム:
    • standard directories (default)
    • btrfs
    • zfs
    • lvm
    • loop devices
    • aufs
    • overlayfs
  • コンテナのクローンとスナップショットのサポート
  • 不要なコマンドを整理しつつ、より充実したコマンドラインツール
  • 更新され、より充実したドキュメント
  • あらかじめ生成されたイメージを元にしたコンテナの新しい作成方法
  • 人気のあるディストリビューションが動作するコンテナを作成できるテンプレート

LXC の紹介と、1.0 の新機能のいくつかにハイライトを当てたブログ記事のシリーズが こちら で公開されています。

LXC 1.0 は最初の安定版リリースであり、少なくとも Ubuntu 14.04LTS が EOL(end of life) に達する 2019 年 4 月までのメンテナンスが約束されます。5 年を少し超えるサポートですよ!

stable ブランチは別に管理され、必要に応じてバックポートされます。頻繁に 1.0 のバグフィックス版を出す予定なので、各ディストリビューションは単純にそれを使用すれば良く、stable ブランチを自身でフォローする手間を省くことができます。

バグレポートと連絡先

バグレポートは Github に提出するようにおねがいします。Github のアカウントを作成したくない場合は、メールで適切な メーリングリスト に送ってください。 パッチについても同様です。どちらかというと lxc-devel メーリングリストに直接パッチを送ってもらえる方がうれしいですが、Github に直接 pull request を送ってもらっても受け付けます。

LXC 1.0 は、2013 年 9 月にプロジェクトのメンテナが変わってから最初のリリースでもあります。我々は Daniel Lezcano 氏の偉大な業績と、LXC に対する長年に渡る取り組みに感謝の意を表したいと思います。そして彼の新しいプロジェクトの成功を祈ります!

現在のプロジェクトメンテナは Serge HallynStéphane Graber です。