Back to the news overview

LXC 2.0.0 リリースのお知らせ

2016/04/06

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 にあります。