News

LXC 2.0.11 リリースのお知らせ

12th of March 2019

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

2.0.11 の数日前に 2.0.10 をリリースしましたが、ファイルがいくつか欠けており、Android でビルドできない状態であったため、これを修正した 2.0.11 をリリースしました。

以下の変更点は 2.0.9 から 2.0.11のものすべてです。

セキュリティ上の修正

CVE-2018-6556 の修正

lxc-user-nic がネットワークインターフェースを削除するような要求を受けたとき、ユーザーが与えたパスを無条件に open します。このコードが、非特権ユーザーが他の方法では到達できないパスの存在をチェックするのに使われる可能性がありました。特別なカーネルファイル(ptmx、proc、sys)を(読み取り専用で) open することで副作用を引き起こすのに使われる可能性もあります。詳しくは CVE-2018-6556 をご覧ください。

CVE-2019-5736 の修正

CVE-2019-5736 を修正しました。この問題は、すべてのコンテナランタイムを苦しめる大きなセキュリティ上の問題で、特権を持つコンテナにアタッチする際に悪用されます。バグの詳細とそれをどのように修正するかは このページ で読むことができます。

主なバグ修正

設定ファイルのないコンテナを扱えるようになりました

例えば、次のようなコンテナが期待通りに動くようになりました:

lxc-start -n <container-name> -f /path/to/conf \
-s 'lxc.id_map = u 0 100000 65536' \
-s 'lxc.id_map = g 0 100000 65536' \
-s 'lxc.rootfs = /path/to/rootfs' \
-s 'lxc.init_cmd = /path/to/initcmd'

アタッチの際に正しい名前空間の継承処理を行うようになりました

lxc_attach が、アタッチするために特定の名前空間を指定する呼び出し元と、特定の名前空間を要求しない呼び出し元を正しく区別するようになりました。後者は、すべての名前空間にアタッチされるという意味に lxc_attach が処理します。これにはすべての継承した名前空間を含める必要があります。

testingunstable の Debian コンテナが作成できるようになりました

次の stable の名前に関わらず testing のコンテナを作成できることは、テスト用途を含むがそれに限らない、いくつかの状況で役立ちます。すなわち、buster がリリースされても、明示的に bullseye に切り替える必要がないということは、ずっと testing を追跡し続けることができるということです。そのように行った上で、unstable (これは sid と同じです)も有効にしてみましょう。これも同様にできるでしょう。

CAP_SYS_ADMIN なしのコンテナが可能になりました(cgroup の扱いに関係する)

cgroup 名前空間がサポートされているけれども CAP_SYS_ADMIN を持っていない場合、コンテナのために(訳注: LXC が) cgroup をマウントする必要があります。CAP_SYS_ADMIN を持たない特権、非特権コンテナの両方で可能になります。

cgroup2 の扱いの改良

cgroup2 がより一般的になってきているので、LXC 2.0.11 では cgroup2 に関して広く改良がなされています。

cgroup の read-only マウントのサポート

これは、コンテナに CAP_SYS_ADMIN がなくて、そのため再マウントができない場合に特に便利な機能です。

SIGTERM を使ってコンソールから exit できるようになりました

これにより、コントロールシーケンスなしでコンソールセッションからきれいに exit できます。代わりに SIGTERM を対象のプロセスに送ると、LXC はきれいにコンソールセッションを終了させます。

アプリケーションコンテナの実行時に与える引数の数を正しく計算するようになりました

exec に渡す引数の数を、特定の条件下で間違って計算していました。このリリースで確実に正しく引数の数を計算し、exec に渡すようになりました。

コード全体から不要なロックを削除しました

古いバージョンの LXC はスレッドセーフを保証するために、色々な場所で mutex を使っていました。これらのコードパスを注意深く再デザインすることで、コードからすべての mutex を削除できました。これにより、簡略化が行え、コンテナの起動や停止のような様々な操作でスピードアップが図れました。

cgroup 名前空間の保護の問題を修正しました

これにより競合が取り除かれ、キャッシュされたファイルディスクリプタが、ホストでなく確実にコンテナの cgroup 名前空間を参照するようになります。

アプリケーションがホストの PID 名前空間を共有できるようになりました

以前のバージョンの LXC は、ホストの PID 名前空間を共有できませんでした。このバグ修正リリース以降、これを正しく行うことができます。

非常に寿命が短いアプリケーションコンテナを正しく扱うようになりました

これまでのバージョンでは、極端に寿命が短いアプリケーションコンテナを正しく処理するのが困難でした。例えば LXC は TOCTOU が原因で、コンテナがすでにシャットダウンしていてもまだ実行中であると誤って報告し、再起動を拒否する可能性がありました。これは不要な遅延を引き起こします。そして、このような寿命の短いコンテナの出力が stdout に書かれると、出力が失われたり切り詰められたりする可能性がありました。このリリースでこれらの問題を修正しました。

hidepid=1hidepid=2 でマウントされたコンテナを正しく処理するようになりました

これまでのバージョンでは、hidepid=1 もしくは hidepid=2 でマウントされた /proc を持つ非特権コンテナに非特権ユーザーとしてアタッチすると、LXC は必要な情報を /proc から取得できないため失敗していました。これを修正しました。

cgroup 名前空間がサポートされている場合でも、強制的に cgroup をマウントできるようになりました

ユーザーが lxc.mount.auto = cgroup:mixed:force もしくは lxc.mount.auto = cgroup:ro:force もしくは lxc.mount.auto = cgroup.rw.force と指定できるようになりました。

cgroup 名前空間がサポートされている場合、LXC は init システムが cgroup をマウントすると想定しているため、cgroup をマウントしてほしい場合でもコンテナ用に cgroup をマウントしません。ユーザーが CAP_SYS_ADMIN なしでコンテナを実行したい場合に、この仮定はすでに破られていました。

例えば systemd ベースのコンテナは、systemd がプロセスを追跡するために cgroup をマウントする必要があるので起動しません(legacy cgroup(cgroup v1)の場合は systemd という名前の階層、unified cgroup(cgroup v2)の場合は単一の階層)。この問題は、コンテナが CAP_SYS_ADMIN を持っているかどうかを検出して解決しました。もし持っていない場合は、LXC が cgroup のマウントを実行します。

しかし、他にも cgroup 名前空間がサポートされているときにコンテナ用に cgroup をマウントできるようにすべきケースがあります。

  • init システムが自身では cgroup をマウントしない: cgroup をマウントしない init システムでは、コンテナ内部で cgroup がマウントされるのを防ぐためにカスタムの LSM プロファイルと組み合わされた場合に、cgroup が利用できません
  • アプリケーションコンテナ: アプリケーションコンテナは通常自身では cgroup をマウントしません
  • read-only cgroup: 例えば、アプリケーションに自身が所属する cgroup の内部を見せつつ、コンテナ内から cgroup の制限を変更するのを防ぐには cgroup を read-only でマウントすることができれば便利です。これもアプリケーションコンテナには便利です。systemd が動作しているシステムコンテナは、通常は cgroup が read-only でマウントされていると動作しません。

その他のバグフィックス

2.0.11 には、最新の LXC からチェリーピックした、ほぼ 1 年半の間のバグフィックスが含まれます。次が全リストです。(訳注: 翻訳はありません)

  • tools: allow lxc-attach to undefined containers
  • utils: move memfd_create() definition
  • utils: add lxc_cloexec()
  • utils: add lxc_make_tmpfile()
  • utils: add lxc_getpagesize()
  • utils: add lxc_safe_long_long()
  • utils: parse_byte_size_string()
  • utils: add lxc_find_next_power2()
  • namespace: use lxc_getpagesize()
  • lxc-debian: allow creating testing and unstable
  • Call lxc_config_define_load from lxc_execute again
  • Fix typo in lxc-net script
  • Add missing lxc_container_put
  • lxc-debian: don't write C.* locales to /etc/locale.gen
  • attach: correctly handle namespace inheritance
  • cgfsng: fix cgroup2 detection
  • cgroups: enable container without CAP_SYS_ADMIN
  • lxc-start: remove unnecessary checks
  • start: close non-needed file descriptors
  • handler: make name argument const
  • start: close data socket in parent
  • monitor: do not log useless warnings
  • network: reap child in all cases
  • conf: reap child in all cases
  • storage: switch to ext4 as default filesystem
  • tools: fix help output of lxc-create
  • attach: handle namespace inheritance
  • cgroups/cgfsng: keep mountpoint intact
  • cgroups/cgfsng: cgfsns_chown() -> cgfsng_chown()
  • cgroups/cgfsng: support MS_READONLY with cgroup ns
  • log: check for i/o error with vsnprintf()
  • cgroupfs/cgfsng: tweak logging
  • cgroups/cgfsng: remove is_lxcfs()
  • cgroups/cgfsng: fix get_controllers() for cgroup2
  • cgroupfs/cgfsng: improve cgroup2 handling
  • config: remove SIGRTMIN+14 as lxc.signal.stop
  • commands: non-functional changes
  • console: non-functional changes
  • console: non-functional changes
  • lxc-test-unpriv: fix the overlayfs mount error
  • attach: allow attach with empty conf
  • tools/lxc_attach: removed api logging
  • console: fix console info message
  • Add missing dependency libunistring
  • cgroups/cgfsng: adapt to new cgroup2 delegation
  • console: report detach message on demand
  • lxccontainer: enable daemonized app containers
  • console: use correct escape sequence check
  • console: prepare for generic signal handler
  • console: exit mainloop on SIGTERM
  • commands: non-functional changes
  • lxccontainer: non-functional changes
  • commands: fix state socket implementation
  • lxc_init: set the control terminal in the child session
  • lxc-test-unpriv: check user existence before removing it
  • Fixed typo on lxc.spec.in
  • conf: move CAP_SYS_* definitions to utils.h
  • start.c: always switch uid and gid
  • Use AX_PTHREAD config script to detect pthread api
  • utils.h: Avoid duplicated sethostname implementation
  • tools/lxc_cgroup: remove internal logging
  • tools/lxc_autostart: remove internal logging
  • tools/lxc_clone: remove internal logging
  • tools/lxc_console: remove internal logging
  • tools/lxc_create: remove internal logging
  • tools/lxc_destroy: remove internal logging
  • tools/lxc_device: remove internal logging
  • tools/lxc_execute: removed internal logging
  • tools/lxc_freeze: remove internal logging
  • tools/lxc_info: removed internal logging
  • criu: detect veth name
  • lxccontainer: various container creation fixes
  • storage: remove unused declaration
  • tools/lxc_ls: remove internal logging
  • tools/lxc_copy: remove internal logging
  • tools/lxc_monitor: removed internal logging
  • tools/lxc_snapshot: removed internal logging
  • tools/lxc_start: removed internal logging
  • tools/lxc_stop: removed internal logging
  • tools/lxc_top: removed internal logging
  • tools/lxc_unfreeze: removed internal logging
  • tools/lxc_unshare: removed internal logging
  • tools/lxc_usernsexec: removed internal logging
  • tools/lxc_wait: removed internal logging
  • confile: fix memory leak
  • utils: declare sethostname() static inline
  • lxc_unshare: Add uid_mapping when creating userns
  • Update gentoo.moresecure.conf.
  • Add new dependency to Slackware template
  • Add bash completion to list backing store types for lxc-create -B - Backing Store types are hard-coded (Not sure how to get programmatically) - Closes #1236
  • Fix SETCOLOR_FAILURE evaluation
  • Insert missing "echo" after "is_enabled"
  • conf: prevent null pointer dereference
  • criu: initialize status
  • confile: remove dead assignment
  • criu: silence static analysis
  • attach: do not fail on non-existing namespaces
  • test: reenable Coverity integration
  • lxc_execute: properly figure out number of needed arguments
  • arguments: move to tools/ subdirectory
  • start: set loglevel correctly
  • commands: don't traverse whole list
  • commands: don't lock atomic operations
  • commands: don't lock the whole command
  • start: don't lock setting the state
  • commands: allow waiting for all states
  • test: add state server tests
  • commands: tweak locking
  • lxccontainer: restore non-blocking shutdown
  • commands: tell mainloop to reap client fd on error
  • commands: return -ECONNRESET to caller
  • execute: pass logfile to lxc-init
  • lxccontainer: handle execute containers correctly
  • lxc_init: move up to src/lxc
  • init: rework dumb init
  • lxc_init: add custom argument parser
  • tests: expand tests for shortlived init processes
  • coverity: #1425734
  • coverity: #1425735
  • coverity: #1425739
  • coverity: #1425929
  • coverity: #1425923
  • coverity: #1425922
  • coverity: #1425921
  • coverity: #1425895
  • coverity: #1425890
  • coverity: #1425889
  • coverity: #1425888
  • lxc: Distinguish pthread_mutex_unlock error messages
  • travis: Fix build failure
  • coverity: #1425893
  • coverity: #1425886
  • coverity: #1428855
  • coverity: #1425884
  • coverity: #1425883
  • coverity: #1425879
  • tools: block using lxc-execute without config file
  • conf: avoid spawning unnecessary subshells
  • coverity: #1425874 + cleanup
  • lxccontainer: only attach netns on netdev detach
  • lxccontainer: cleanup {attach,detach}_interface()
  • coverity: #1425870
  • coverity: #1425869
  • coverity: #1425867
  • coverity: #1425866
  • coverity: #1425863
  • coverity: #1425862
  • coverity: #1425860
  • coverity: #1425859
  • coverity: #1425858
  • coverity: #1425857
  • start: do not unconditionally dup std{in,out,err}
  • tools: exit success when lxc-execute is daemonized
  • start: fix cgroup namespace preservation
  • init: don't kill(-1) if we aren't in a pid ns
  • SHARE_NS options should be before OPT_USAGE
  • commands: fix race when open()/close() cmd socket
  • namespace: add lxc_raw_clone()
  • utils: use lxc_raw_clone() in run_command()
  • lxc_init: fix cgroup parsing
  • tests: s/lxc.init.cmd/lxc.init_cmd/g
  • commands_utils: add missing mutex
  • [monitor] wrong statement of break
  • cgfsng: Add new macro to print errors
  • attach: simplify significantly
  • attach: use lxc_raw_clone()
  • attach: handle /proc with hidepid={1,2} property
  • tests: expand lxc_raw_clone() tests
  • namespace: add lxc_raw_getpid()
  • tree-wide: s/getpid()/lxc_raw_getpid()/g
  • namespace: comment lxc_{raw_}clone()
  • namespace: add lxc_raw_clone_cb()
  • start: use lxc_raw_clone_cb() where possible
  • start: log closing cmd socket and STOPPED state
  • start: make us dumpable
  • start: simplify cgroup namespace preservation
  • start: fix death signal
  • start: handle setting death signal smarter
  • mainloop: add mainloop macros
  • mainloop: capture output of short-lived init procs
  • lxc_config: Add -h and --help flags handler
  • start: properly cleanup mainloop
  • console: do not allow non-pty devices on open()
  • mainloop: use epoll_create1(EPOLL_CLOEXEC)
  • conf: adapt idmap helpers
  • conf: adapt userns_exec_1()
  • conf{ile}: detect ns{g,u}id mapping for root
  • cgfsng: use init {g,u}id
  • conf: detect if devpts can be mounted with gid=5
  • gentoo: Add support for .xz tarballs
  • configure.ac: fix the check for static libcap
  • conf: write "deny" to /proc/[pid]/setgroups
  • conf: non-functional changes
  • conf: rework userns_exec_1()
  • cgfsng: only establish mapping once
  • Fix broken indentation
  • Include -devel suffix in version string
  • Add return check for 'lxc_cmd_get_name'
  • fix up lxc-usernsexec's exit status
  • add some idmap parsing error messages
  • confile: improve log messages
  • console: move pty creation to separate function
  • start: non-functional changes
  • console: add some pty helpers
  • attach: cleanup attach_child_main()
  • console: adapt lxc_console_mainloop_add()
  • console: add lxc_pty_map_ids()
  • attach: minor tweaks
  • tools: honor --console and --console-log
  • start: non-functional changes
  • console: set SFD_CLOEXEC on signal fd
  • lxc-alpine: allow retaining sys_ptrace per container
  • utils: do not rely on unitialized variable
  • test: log error on failure
  • utils: check suffix length
  • lxccontainer: restore blocking wait()
  • freezer: non-functional changes
  • commands: add LXC_CMD_SERVE_STATE_CLIENTS
  • start: don't log stop/continue for non-init processes
  • fix lxc_error_set_and_log to match the docs
  • lxc.init: correctly exit with the app's error code
  • remember the exit code from the init process
  • start: don't return false when the container's init exits nonzero
  • lxc-execute: actually exit with the status of the spawned task
  • set exit status to 1 in the unknown si_code case
  • console: cleanup
  • test: fix console tests
  • attach_options: reduce delta
  • attach: reduce delta
  • cgroups: reduce delta
  • bla
  • Revert commit "bla" with bad commit message
  • cgfsng: reduce delta
  • tools: fix android
  • Create console when the rootfs is NULL
  • unlink lxc-init
  • coverity: #1427668
  • coverity: #1427639
  • coverity: #1427638
  • coverity: #1427191
  • coverity: #1427190
  • coverity: #1426734
  • coverity: #1426694
  • start: fix mainloop cleanup goto statements
  • Modify .gitignore
  • Fix comments and add check in lxc_poll.
  • lsm: non-functional changes
  • lsm: add lsm_process_label_fd_get()
  • lsm: add lsm_process_label_set_at()
  • apparmor: do not call aa_change_profile()
  • autotools: do not link against libapparmor
  • network.c: Remove ip_forward_set and callers
  • [cgfsng] show wrong errno
  • better check for lock dir
  • better unprivileged detection
  • debian: Use iproute2 instead of iproute
  • tools: make "-n" optional
  • lsm: do not #ifdefine
  • debian: We must use iproute on wheezy
  • lxc-init: use SIGKILL after alarm timeout
  • monitor: send SIGTERM to the container when SIGHUP is received
  • lxc.init: ignore SIGHUP
  • cgroups: get controllers on the unified hierarchy
  • cgroups: cgfsng_create: handle unified hierarchy
  • cgroups: cgfsng_attach: handle unified hierarchy
  • cgroups: cgfsng_get: handle unified hierarchy
  • cgroups: cgfsng_set: handle unified hierarchy
  • cgroups: handle limits on the unified hierarchy
  • cgroups: more consistent naming
  • attach: set the container's environment variables
  • attach: non-functional changes
  • cgfsng: do MS_REMOUNT
  • cgfsng: non-functional changes
  • templates: CentOS fixes
  • cgroups: add check for lxc.cgroup.use
  • selinux: simplify check for default label
  • lsm: fix missing @ in function documentation
  • cgfsng: add required remount flags
  • define am_guest_unpriv
  • Restore most cases of am_guest_unpriv
  • coverity: #1429139
  • coverity: #1426734
  • coverity: #1425971
  • fix userns helper error handling
  • console: they are really not necessary
  • Modify .gitignore
  • Fix lxc-console hang
  • conf: support mount propagation
  • lxclock: remove pthread_atfork_handlers
  • cgfsng: simplifications and fixes
  • CONTRIBUTING: update
  • CODING_STYLE: add CODING_STYLE.md
  • cgroups: use correct mask for chmod()
  • CODING_STYLE: add section for str{n}cmp()
  • tests: remove lxc-test-ubuntu
  • utils: fix lxc_p{close,open}()
  • start: don't call close on invalid file descriptor
  • console: ensure that fd is marked EBADF
  • README: add coverity
  • confile: add "force" to cgroup:{mixed,ro,rw}
  • cgfsng: order includes
  • cgfsng: fully document struct hierarchy
  • cgfsng: fully document struct cgfsng_handler_data
  • cgfsng: fully document remaining variables
  • cgfsng: free_string_list()
  • cgfsng: cg_legacy_must_prefix_named()
  • cgfsng: move cg_legacy_must_prefix_named()
  • cgfsng: add me to authors
  • cgfsng: append_null_to_list()
  • cgfsng: string_in_list()
  • cgfsng: must_append_controller()
  • cgfsng: get_hierarchy()
  • cgfsng: lxc_cpumask()
  • cgfsng: lxc_cpumask_to_cpulist()
  • cgfsng: get_max_cpus()
  • cgfsng: cg_legacy_filter_and_set_cpus()
  • cgfsng: copy_parent_file()
  • cgfsng: cg_legacy_handle_cpuset_hierarchy()
  • cgfsng: controller_lists_intersect()
  • cgfsng: controller_list_is_dup()
  • cgfsng: controller_found()
  • cgfsng: all_controllers_found()
  • cgfsng: cg_hybrid_get_controllers()
  • cgfsng: cg_hybrid_get_mountpoint()
  • cgfsng: copy_to_eol()
  • cgfsng: controller_in_clist()
  • cgfsng: cg_hybrid_get_current_cgroup()
  • cgfsng: must_append_string()
  • cgfsng: trim()
  • cgfsng: lxc_cgfsng_print_hierarchies()
  • cgfsng: lxc_cgfsng_print_basecg_debuginfo()
  • cgfsng: cg_hybrid_init()
  • cgfsng: cg_is_pure_unified()
  • cgfsng: cg_unified_get_current_cgroup()
  • cgfsng: cgfsng_init()
  • cgfsng: recursive_destroy()
  • cgfsng: cg_unified_create_cgroup()
  • cgfsng: create_path_for_hierarchy()
  • cgfsng: remove_path_for_hierarchy()
  • cgfsng: cgfsng_create()
  • cgfsng: cgfsng_enter()
  • cgfsng: cgfsng_chown()
  • cgfsng: mount_cgroup_full()
  • cgfsng: cgfsng_mount()
  • cgfsng: recursive_count_nrtasks()
  • cgfsng: recursive_count_nrtasks()
  • cgfsng: cgfsng_escape()
  • cgfsng: build_full_cgpath_from_monitorpath()
  • cgfsng: __cg_unified_attach()
  • cgfsng: cgfsng_attach()
  • cgfsng: cgfsng_get()
  • cgfsng: cgfsng_set()
  • cgfsng: convert_devpath()
  • cgfsng: cg_legacy_set_data()
  • cgfsng: __cg_legacy_setup_limits()
  • lxccontainer: use wait_for_pid()
  • start: remove duplicate lxc_monitor_send_state()
  • tree-wide: remove locking around openpty()
  • {commands,start}: remove element from list first
  • start: use correct prefix for includes
  • start: print_top_failing_dir()
  • start: close_ns()
  • start: preserve_ns()
  • start: lxc_check_inherited()
  • start: signal_handler()
  • start: lxc_poll()
  • start: lxc_init_handler()
  • start: lxc_init()
  • start: lxc_abort()
  • start: start()
  • start: post_start()
  • start: lxc_destroy_container_on_signal()
  • start: do_destroy_container()
  • cgfsng: enable "force" for "cgroup-full"
  • confile: backport parts of network parsing
  • utils: add LXC_PROC_PID_FD_LEN
  • CVE 2018-6556: verify netns fd in lxc-user-nic
  • utils: include linux/types.h
  • cgfsng: fix off-by-one error
  • lxccontainer: do_lxcapi_start()
  • lxccontainer: do_lxcapi_create()
  • lxccontainer: do_lxcapi_get_interfaces()
  • lxccontainer: do_lxcapi_get_ips()
  • lxccontainer: do_lxcapi_clone()
  • lxccontainer: do_add_remove_node()
  • lxccontainer: do_lxcapi_detach_interface()
  • lxclock: {un}lock_mutex()
  • utils: lxc_popen()
  • utils: run_command()
  • network: lxc_create_network_unpriv_exec()
  • network: lxc_delete_network_unpriv_exec()
  • lxccontainer: config_file_exists()
  • lxccontainer: ongoing_create()
  • lxccontainer: create_partial()
  • lxccontainer: create_partial()
  • lxccontainer: lxc_container_free()
  • lxccontainer: lxc_container_{get,put}()
  • lxccontainer: do_lxcapi_is_defined()
  • lxccontainer: do_lxcapi_state()
  • lxccontainer: is_stopped()
  • lxccontainer: do_lxcapi_is_running()
  • lxccontainer: do_lxcapi_freeze()
  • lxccontainer: do_lxcapi_unfreeze()
  • lxccontainer: do_lxcapi_console_getfd()
  • lxccontainer: lxcapi_console()
  • lxccontainer: load_config_locked()
  • lxccontainer: do_lxcapi_load_config()
  • lxccontainer: do_lxcapi_want_daemonize()
  • lxccontainer: do_lxcapi_want_close_all_fds()
  • lxccontainer: do_lxcapi_wait()
  • lxccontainer: am_single_threaded()
  • lxccontainer: push_arg()
  • lxccontainer: split_init_cmd()
  • lxccontainer: free_init_cmd()
  • lxccontainer: lxcapi_start()
  • lxccontainer: lxcapi_startl()
  • lxccontainer: do_create_container_dir()
  • lxccontainer: create_container_dir()
  • criu: criu_version_ok()
  • criu: do_restore()
  • criu: du_dump()
  • cgfsng: fix get_hierarchy() for unified hierarchy
  • fix download template for /tmp as tmpfs or noexec
  • CODING_STYLE: add section about _exit()
  • commands: remove mutex from state client list
  • lxc-snapshot: fix segfault
  • lxc_init: don't mount filesystems
  • cgfsng: non-functional changes
  • mainloop: add LXC_MAINLOOP_ERROR
  • config: start with a full capability set
  • CODING_STYLE: remove duplicate _exit() entry
  • CODING_STYLE: clang-format
  • CODING_STYLE: arrays of structs
  • CODING_STYLE: add languages to highlight
  • Add a workaround for a build issue with old versions of libcap
  • usernsexec: init log fd
  • cgroups: don't escape if we're not real root
  • Revert "cgroups: don't escape if we're not real root"
  • conf: fix clang warning when building w/o libcap
  • fix handler use-after-free
  • Rename ifup/down and remove usless parameter passing
  • conf: simplify lxc_fill_autodev()
  • start: always make us dumpable
  • lxclock: use thread-safe OFD fcntl() locks
  • locktests: fix test suite
  • fix signal sending in lxc.init
  • lxc init: remove dead code
  • lxc init: coding style
  • utils: define __NR_setns if missing on old glibcs
  • conf: ret-try devpts mount without gid=5 on error
  • do_lxcapi_create: set umask
  • Fix the memory leak in cgfsng_attach
  • Fix memory leak in list_active_containers
  • coverity: #1435208
  • coverity: #1435207
  • coverity: #1435205
  • coverity: #1435198
  • lxccontainer: use thread-safe OFD locks
  • lxccontainer: non-functional changes
  • lxccontainer: do_lxcapi_is_running()
  • lxccontainer: do_lxcapi_freeze()
  • lxccontainer: do_lxcapi_unfreeze()
  • lxccontainer: non-functional changes
  • lxccontainer: non-functional changes
  • lxccontainer: non-functional changes
  • coverity: #1435263
  • fix logic for execute log file
  • execute: use static buffer
  • execute: do not check inherited fds again
  • lxc-unshare: add missing declaration
  • execute: account for -o path option count
  • genl: remove
  • coverity: #1425744
  • utils: account for terminating \0 byte
  • network: silence gcc-8
  • network: adhere to IFNAMSIZ limit
  • autodev: adapt to changes in Linux 4.18
  • strlcpy: add strlcpy() implementation
  • tree-wide: s/strncpy()/strlcpy()/g
  • CODING_STYLE: add section about using strlcpy()
  • tools: s/strncpy()/strlcpy()/g
  • Revert "tools: s/strncpy()/strlcpy()/g"
  • coverity: #1435604
  • coverity: #1435603
  • coverity: #1425836
  • coverity: #1248106
  • coverity: #1425844
  • config: allow read-write /sys in user namespace
  • capabilities: raise ambient capabilities
  • coverity: #1425802
  • lxc-init: skip signals that can't be caught
  • tree-wide: s/sigprocmask/pthread_sigmask()/g
  • utils: fix task_blocking_signal()
  • lxccontainer: fix fd leaks when sending signals
  • confile: order architectures
  • tools: fix lxc-create with global config value
  • tools: fix lxc-create with global config value II
  • coverity: #1435805
  • coverity: #1435803
  • utils: fix task_blocking_signal()
  • network: fix socket handle leak
  • conf: va_end was not called.
  • confile: improve strprint()
  • start: fix waitpid() blocking issue
  • start: log unknown info.si_code
  • tree-wide: handle EINTR in some read()/write()
  • conf: copy mountinfo for remount_all_slave()
  • support tls in cross-compile
  • Fix typo
  • coverity: #1425777
  • coverity: #1425779
  • coverity: #1425794
  • coverity: #1425795
  • coverity: #1425841
  • coverity: #1425849
  • coverity: #1425836
  • conf: only use newuidmap and newgidmap when necessary
  • arguments: improve some operations
  • coverity: #1425781
  • tools: restore lxc-create log behavior
  • fix getpwnam() thread safe issue
  • attach: fix double free
  • coverity: #1436916
  • fix getpwuid() thread safe issue
  • fix getgrgid() thread safe issue
  • coverity: #1437017
  • coverity: #1425778
  • coverity: #1425760
  • coverity: #1425766
  • coverity: #1425767
  • coverity: #1425768
  • storage: Resource leak
  • include: add getgrgid_r()
  • coverity: #1425770
  • coverity: #1425771
  • coverity: #1425789
  • coverity: #1425792
  • coverity: #1425793
  • coverity: #1425799
  • coverity: #1425810
  • coverity: #1425813
  • coverity: #1425818
  • coverity: #1425819
  • coverity: #1425824
  • coverity: #1425825
  • coverity: #1425837
  • coverity: #1425840
  • coverity: #1425846
  • coverity: #1425789
  • coverity: #1425855
  • coverity: #1437027
  • secure coding: strcpy => strlcpy
  • secure coding: network: strcpy => strlcpy
  • btrfs: fix btrfs_snapshot()
  • include: add strlcat() implementation
  • btrfs: fix get_btrfs_subvol_path()
  • secure coding: #2 strcpy => strlcpy
  • fix fd handle leak
  • fix pointer c is dereferenced after checking null
  • commands: simplify lxc_cmd()
  • monitor: change exit() => _exit() system call in child process
  • move some comments in lxc.spec.in
  • log: add lxc_log_strerror_r macro
  • log: account for Android's Bionic's strerror_r()
  • CODING_STYLE: add section about using strlcat()
  • coverity: #1425816
  • start: don't unconditionally open("/dev/null")
  • log: thread-safety backports
  • attach: simplify lxc_attach_getpwshell()
  • coverity: #1437936
  • coverity: #1437935
  • lxclock: change error log using strerror to SYSERROR
  • conf: the atime flags are locked in userns
  • coverity: #1438067
  • change log macro of error case from lxc_ambient_caps_up/down
  • nl: avoid NULL pointer dereference
  • conf: s/pipe()/pipe2()/g
  • conf: always close pipe in run_userns_fn()
  • criu: s/pipe()/pipe2()/
  • lxccontainer: cleanup do_lxcapi_get_interfaces()
  • lxccontainer: s/pipe()/pipe2()/g
  • cmd: s/pipe()/pipe2()/g
  • cmd: s/write()/lxc_write_nointr()/g
  • cmd: s/read()/lxc_read_nointr()/g
  • criu: s/read()/lxc_read_nointr()/g
  • criu: s/write()/lxc_write_nointr()/g
  • lxccontainer: s/write()/lxc_write_nointr()/g
  • lxccontainer: s/read()/lxc_read_nointr()/g
  • network: s/read()/lxc_read_nointr()/g
  • network: s/write()/lxc_write_nointr()/g
  • sync: s/read()/lxc_read_nointr()/g
  • sync: s/write()/lxc_write_nointr()/g
  • log: handle EINTR in read()
  • caps: handle EINTR in read()
  • coverity: #438136
  • READEM: update Serge's mail address
  • MAINTAINERS: add Wolfgang Bumiller
  • CONTRIBUTING: Update reference to kernel coding style
  • CONTRIBUTING: Link to latest online kernel docs
  • CONTRIBUTING: Direct readers to CODING_STYLE.md
  • CODING_STYLE: Mention kernel style in introduction
  • CONTRIBUTING: Add 'be' to fix grammar
  • CODING_STLYE: Simplify explanation for use of 'extern'
  • CODING_STLYE: Remove sections implied by 'kernel style'
  • CODING_STYLE: Fix non-uniform heading level
  • CODING_STYLE: Update section header format
  • autotools: add --{disable,enable}-thread-safety
  • attach: don't shutdown ipc socket in child
  • attach: report standard shell exit codes
  • storage: src cannot be truncated
  • commands: backport robust infrastructure
  • Fixing compile error when compiling for android
  • Fixing hooks functionality Android where 'sh' is placed under /system/bin
  • caps: check uid and euid
  • CVE-2019-5736 (runC): rexec callers as memfd
  • rexec: don't include non-existing header
  • utils: add missing sealing flags
  • include: add fexecve() for Android's Bionic
  • fexecve: remove unnecessary #ifdef
  • fexecve: use correct name
  • rexec: handle legacy kernels
  • cve-2019-5736: add test for rexec
  • change version to 2.0.10 in configure.ac
  • autotools: handle getgrgid_r on bionic
  • autotools: add memory_utils.h to Makefile.am
  • change version to 2.0.11 in configure.ac

ダウンロード

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

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

LXC 3.1 リリースのお知らせ

13th of December 2018

はじめに

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

これは、メジャーな LTS や LTS のバグフィックスのためのリリースではなく、それに向けての中間的な新機能を盛り込んだリリースです。将来的にはこの作業をさらに進める予定です。しかし、このリリースのサポートは限定的なものになります。これは、開発の大部分はプロダクション環境向けの LTS リリースにフォーカスしているためです。

新機能

AppArmor でのいくつかの再マウントオプションの有効化

読み書き可能なバインドマウントは MAC 制限をすり抜けるのを防ぐために、一部のパスで制限する必要があります。しかし、読み込み専用のバインドマウントではこのような問題はありません。さらに nosuidnodevnoexec フラグの組み合わせでも問題となることはなく、この組み合わせは新しいバージョンの systemd で必要になります。このような理由から、これらのオプションと ro,remount,bind との組み合わせではマウントを許可します。

ユーザースペースから setsockopt() 経由で使える、新しいソケットオプションである NETLINK_DUMP_STRICT_CHK を使って、ダンプリクエスト時にヘッダーと属性の厳密なチェックを要求できます。

ダンプリクエストに追加するヘッダーや属性のデータをもとにしたカーネル側のフィルタリングのようなダンプ機能を利用するには、ユーザースペースは NETLINK_DUMP_STRICT_CHK と 0 でない値で setsockopt() を呼ばなければなりません。これは LXC がネットワーク名前空間から情報を効率的に取得するのに使う IFA_TARGET_NETNSID の利用に必要です。

コンテナ起動時の新たなキーリング割り当て

ホストのキーリングを隔離して保護するために、LXC コンテナはそれぞれ、起動時に新しいキーリングを割り当てようとします。

完全な cgroup2 のサポート

LXC はしばらくの間、厳密な権限委譲モデルを守らずに cgroup2 をサポートしてきました。現在は cgroup2 をフルにサポートしました。

コンテナからネットワークデバイスとアドレスを取得する効率的な方法の実装

LXD チームが行ったカーネルでの作業によって、コストのかかる fork()setns() システムコールを実行する必要なく、ネットワーク名前空間を問い合わせることができるようになりました。代わりに、ネットワーク名前空間はネットワーク名前空間識別子を使って識別します。LXC は、このような新しいネットワーク名前空間が使えるバージョンと、getifaddrs() を非常に改良し安全になったバージョンである netns_getifaddrs() を使うようになりました。これは getifaddrs() の厳格なスーパーセットです。

API に lxc_has_api_extension() を追加

今後実装される新しい API が追加されるたびに、lxc_has_api_extension() に与えるユニークな名前が与えられます。これは LXD の API 拡張のチェックをモデルにしています。これにより、API ユーザーが特定の API 拡張がサポートされているかどうかを LXC インスタンスに問い合わせることができるようになります。

lxc.cgroup.relative 設定キーの追加

新たに設定項目として lxc.cgroup.relative を追加しました。この設定で LXC に root cgroup へエスケープしないように指示できます。これにより、ユーザーは cgroup2systemd が強制する制限を遵守するのが容易になります。具体的には、LXC コンテナを systemd サービスとして実行できます。

(コンテナ)起動時の新しいネットワーク名前空間識別子の割り当て

コンテナごとに、起動時に割り当てるユニークなネットワーク名前空間識別子を持つようになりました。LXC はこれを使い、ネットワーク名前空間上で実行する操作を大幅にスピードアップします。(ネットワークデバイスの設定や取得)。

lxc.rootfs.managed 設定キーの追加

LXC インスタンスがコンテナストレージを管理しているかどうかを示すために使える新しい設定キーを追加しました。LXC がストレージを管理していない場合、LXC はコンテナストレージ変更しません。例えば、API c->destroy(c) を呼び出すと、destroy フックが実行されますが、実際に rootfs は削除しません(もちろん、フックが LXC の背後でそのような処理を実行しない限り)。

すべての VLA の削除

LXC はデフォルトで -Wvla を付けてコンパイルされるようになりました。

AppArmor プロファイルの生成

この機能は lxd の AppArmor プロファイル生成機能のコピーです。この機能は、cgroup 名前空間、AppArmor 名前空間とスタッキングのサポートのような機能を検出しようとします。そして条件付きで、プロファイルの非特権コンテナ向けのパーツを持ちます。

これにより、次のように設定が変更されます:

  • lxc.apparmor.profile = generated
    'generated' という固定値を設定するとこの機能を使います。設定しない場合、次の設定で明示的に指定しない限りは、機能的な変更はありません
  • lxc.apparmor.allow_nesting
    これは真偽値を設定します。有効な場合、次のような変更が行われます: generated な AppArmor プロファイルが使われる場合、ネストしたコンテナを使うのに必要な変更が含まれます。通常のマウントポイントに加えて、lxcfs のオーバーレイなしで、/dev/.lxc/proc/dev/.lxc/sysprocfssysfs のマウントポイントに含まれます。generated な AppArmor プロファイルが使われている場合は、直接読み書きはできません
  • lxc.apparmor.raw
    プロファイルに加える、生の AppArmor プロファイル行のリストです。generated なプロファイルを使っているときのみ有効です

apparmor_parser のキャッシュを使うために、./configure オプションに --with-apparmor-cache-dir を追加します。

マウントを挿入する API の追加

この作業は、LizaTretyakova の学士論文の一部としてなされました。開発チームは、この素晴らしい仕事についてとてもハッピーですし、感謝もしています!

コンテナの実行中に、動的にマウントを操作できることは、ユーザーからの長年の要望で、LXD では長い間サポートされてきた機能でした。この機能は主に次のような使用例を可能にします:

  • 実行中のコンテナに対してマウントを挿入する
    この機能により、ユーザーはコンテナに動的にマウントを追加できます。例えば、ディスクスペースが足りなくなる前にコンテナに新たに専用のストレージデバイスを追加するようなことです。
  • デバイスのホットプラグが可能に
    コンテナに新しいデバイスを追加するためには、コンテナの実行中にマウントを操作することが必要です。具体的には、CAP_MKNOD のようなデバイスノードを作成できるケーパビリティが落とされているような特権コンテナや、非特権コンテナはデバイスを作成できません。このようなデバイスは、ホストの名前空間上でホスト上の十分な特権を持ったプロセスによって作成され、コンテナにマウントとして挿入されることが必要です。

この目的で、新たにふたつの API 呼び出しが追加されました:

int (*mount)(struct lxc_container *c, const char *source, const char *target,
                    const char *filesystemtype, unsigned long mountflags, const void *data,
                    struct lxc_mount *mnt);

int (*umount)(struct lxc_container *c, const char *target, unsigned long mountflags,
                      struct lxc_mount *mnt);

lxc.monitor.signal.pdeath の追加

lxc モニタープロセスが exit した際に、コンテナの init に送るシグナルを設定します。デフォルトでは SIGKILL が設定されています。つまり、lxc モニタープロセスが死んだ場合は、コンテナのプロセスすべてが kill されることになります。lxc モニタープロセスが死んでもコンテナを起動したままにしておきたい場合はこれを 0 にセットします。

liblxc の共有と静的ライブラリのビルド

デフォルトで、LXC では共有と静的の両方のライブラリがビルドされるようになりました。

Linux カーネル 4.18 で行われた mknod() の変更への適応

55956b59df33 ("vfs: Allow userns root to call mknod on owned filesystems.")

上のコミットで、Linux では、CAP_MKNOD が有効な場合は、ユーザー名前空間内の root による mknod() ができるようになりました。 しかし、これで作られたデバイスノードは実用になりません。なぜなら、

static struct super_block *alloc_super(struct file_system_type *type, int flags,
                                       struct user_namespace *user_ns)
{
        /* <snip> */

        if (s->s_user_ns != &init_user_ns)
                s->s_iflags |= SB_I_NODEV;

        /* <snip> */
}

が、ファイルシステムに SB_I_NODEVE を設定するからです。init のユーザー名前空間以外で作られたデバイスノードが open() されるとき、次の呼び出しにヒットします:

bool may_open_dev(const struct path *path)
{
        return !(path->mnt->mnt_flags & MNT_NODEV) &&
                !(path->mnt->mnt_sb->s_iflags & SB_I_NODEV);
}

これにより EPERM が発生します。なぜなら、デバイスノードは非 init のユーザー名前空間が所有するファイルシステム上に存在し、SB_I_NODEV により、デバイスノードへのアクセスが許可されないからです。LXC は、このケースを正しく扱うようになりました。

アプリケーションコンテナの実行に execveat() を使用

アプリケーションコンテナは、そのワークロードを実行するために、最小限の機能を持つ init システムに依存します。コンテナ内にバインドマウントしたファイルを開くことでアプリケーションコンテナを実行する代わりに、シンプルに execveat() にファイルディスクリプタを渡します。これにより、アプリケーションコンテナがより安全にシンプルに起動します。

ロギング時のスレッドごとのコンテナ名出力が可能に

異なるコンテナを実行しているが、単一のログファイルを共有しているスレッドはそれぞれ、コンテナ名をログに出力することで識別できるようになりました。

cgroup の扱いのリファクタリング

cgroup のコンストラクタ実装を、よりシンプルで、スレッドセーフなオンデマンドモデルの cgroup ドライバーの初期化モデルに置き換えました。 cgroup 初期化コードをコンストラクタ内で実行することは、共有ライブラリがマップされるたびに cgroup をパースするコードが走ることを意味します。これは不要なオーバーヘッドでした。よりクリーンな実装は、必要になったときにオンデマンドで cgroup ドライバーを割り当てることです。

フック実行時に ambient ケーパビリティを上げる

非常に制限されたコンテナ(例えば、単一の root 以外のユーザーにのみマッピングされて実行している非特権コンテナ)では、起動時に特権が必要な操作を実行できませんでした。 フックの実行時に ambient ケーパビリティを上げることで、exec を超えて特権を維持できます。

非特権コンテナ内で /sysrw でマウント可能に

LXD チームによる新しいカーネルへの取り組みにより、ユーザー名前空間内へ uevent を送ることができるようになりました。これは、コンテナ内で udev が実行できるようになったことを意味します。この前提条件は、/sysrw でマウントされていることです。そうでなければ、udev は起動を拒否します。

strlcpy()strlcat() を追加、strncpy()strncat() を廃止

strlcat()strlcpy() は常に有効な文字列を返し、適切に切り詰めのチェックができますので、文字列の扱いがより安全になりました。

コンパイラベースのハードニング

デフォルトで、LXC は次のようなコンパイラが持つ様々なハードニングのオプションを有効にします:

-Wimplicit-fallthrough
-Wcast-align
-Wstrict-prototypes
-fstack-clash-protection
-fstack-protector-strong
--mcet -fcf-protection
-Werror=implicit-function-declaration

スレッドセーフに関する改良

コードベースはマルチスレッド環境で使えるように、より強化されました。

seccomp: アーキテクチャースタッキングのサポート

例えば次のようなケースなどをサポートできるようになりました:

  • 32bit コンテナを実行する 64bit カーネルと 64bit ユーザースペース
  • 64bit コンテナを実行する 64bit カーネルと 32bit ユーザースペース
  • 64bit コンテナを実行する 32bit コンテナを実行する 64bit カーネルと 64bit ユーザースペース
  • ...

コンテナ内に uid 0 がないアプリケーションコンテナのサポート

コンテナ内の uid 0 に対するマッピングを持たないコンテナが起動できるようになりました。 サンプルの設定は次のようなものです:

lxc.include = /usr/share/lxc/config/common.conf
lxc.include = /usr/share/lxc/config/userns.conf
lxc.arch = linux64
lxc.rootfs.path = dir:/home/brauner/.local/share/lxc/c1/rootfs
lxc.uts.name = c1
lxc.net.0.type = empty
lxc.hook.mount =

# ホスト上の uid, gid 1000 のみがコンテナ内の uid, gid 1001 にマップされる
lxc.idmap = u 1001 1000 1
lxc.idmap = g 1001 1000 1

# コンテナ内の uid, gid を 1001 に切り替える
lxc.init.uid = 1001
lxc.init.gid = 1001

gid マウントオプションがないカーネル上での devpts マウントのサポート

古いカーネルは特定のグループへのアクセスを許可するための gid マウントオプションをサポートしません。LXC はこのケースを自動的に扱い、カーネルで gid マウントオプションがサポートされている場合のみ、gid = 5 を追加します。

バグ修正

LXC 3.1.0 は LXC 3.0.1、3.0.2、3.0.3 と同じバグ修正がすべて含まれています。

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

LXC 3.1 は LTS リリースではありません。したがって、LXC 3.2 がリリースされるまでのみサポートされます。強力なサポートのコミットが必要なユーザーは LTS リリースを使い続けることをおすすめします。

ダウンロード

LXC 3.0.3 リリースのお知らせ

22nd of November 2018

はじめに

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

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

ハイライト

  • コンパイラが持つよりセキュアなバイナリを生成するための機能を使うためにビルドフラグを見直しました
  • 新しいカーネルで使える netlink の厳格なプロパティチェックのサポートを追加しました
  • netlink の新しいインターフェース・アドレスの netns API のサポートを追加しました
  • 起動時のカーネルキーリングの処理を追加しました

バグ修正 (LXC)

  • CONTRIBUTING: カーネルのコーディングスタイルへのリファレンスを更新しました
  • CONTRIBUTING: カーネルの最新のオンラインドキュメントへリンクするようにしました
  • CONTRIBUTING: CODING_STYLE.md を参照するように記載しました
  • CODING_STYLE: 最初にカーネルのコーディングスタイルについて記載しました
  • CONTRIBUTING: 文法間違いを修正しました
  • CODING_STLYE: extern の使い方の説明を簡単にしました
  • CODING_STLYE: カーネルのコーディングスタイルに含まれるセクションを削除しました
  • CODING_STYLE: Markdown のセクションヘッダを調整しました
  • lxc_init: remove_self 関数内で s/SYSDEBUG()/SYSERROR()/g
  • tools: デフォルトのログプライオリティを追加し、コードのクリーンアップをしました
  • storage_utils: 重複している関数を移動させました
  • tools: lxc-exec のコマンドラインのパースの問題を修正しました
  • lseek - integer overflow を修正しました
  • cmd: lxc-usernsexec の include を並べ直しました
  • cmd: lxc-usernsexec で utils.{c,h} のヘルパーを使うようにしました
  • cmd: lxc-usernsexec を簡素化してクリーンアップしました
  • cmd: lxc-usernsexec で安全な数字のパーサーを使うようにしました
  • macro: 新たにマクロを追加したり、移動したり、削除したりしました。それらのマクロを使っていた部分を更新しました
  • tools: (訳注: lxc-autostart で)コンテナの起動が完全に失敗したのか、一部のコンテナのみ失敗したのかを示すようにしました
  • storage, storage_utils: 子プロセスでは exit() の代わりに _exit() を使うようにしました
  • conf: tty セットアップ時の path と lxcpath の混同を修正しました
  • cmd: 使用前に変数を再割当てしないようにしました
  • cmd: count 変数のスコープ範囲を減らしました
  • cmd: clang-format が見つけたフォーマットの問題を修正しました
  • utils: {file,string}\_utils.{c,h} に分離しました
  • pam_cgfs: liblxc と同じソースからビルドするようにしました
  • conf: 完全に非特権な場合の devpts マウントの問題を修正しました
  • attach: 構造体の宣言を先頭に移動させました
  • Makefile: 未定義シンボルを許さないようにしました
  • autotools: コンパイラが十分に新しいかどうかチェックするようにしました
  • log: strerror_r() の複数バージョンを扱えるようにしました
  • autotools: --{disable,enable}-thread-safety を追加しました
  • log: ENFORCE_THREAD_SAFETY エラー時にビルドを失敗させるようにしました
  • {file,string}_utils: NO_LOG を削除しました
  • initutils: 不要なコメントを削除しました
  • string_utils: 不要なヘッダの include を削除しました
  • string_utils: remove_trailing_slashes() を追加しました
  • Makefile: 最後の pam_cgfs の特別なケースを削除しました
  • conf: 足りないヘッダを追加しました
  • typo を修正しました
  • ifaddrs: getifaddrs() の安全な実装を追加しました
  • Makefile: 条件によって ifaddrs.h を include するようにしました
  • execute: 非特権の場合は lxc-init のロギングをスキップするようにしました
  • execute: /proc/1/fd/<nr> の代わりに /proc/self/fd/<nr> を与えるようにしました
  • tests: get_item.c をクリーンアップしました
  • build: musl に対する修正を行いました
  • configure: ヘッダのチェック順序を変更しました
  • compiler: compiler.h を追加しました
  • commands: lxc_cmd_get_init_pid() のエラー時は -1 を返すようにしました
  • tests: basic.c を追加しました
  • tests: Makefile のクリーンアップを行いました
  • commands: init pid に対する EPIPE 時は必ず -1 が送られるようにしました
  • Makefile: 正しく noinst_HEADERSifaddrs.h を追加されるようにしました
  • tree-wide: 静的な配列には sizeof を使うようにしました
  • commands: intmax_t を与えるようにしました
  • commands: ポインタに変換する前に割り当てるようにしました
  • macro: 正しくバッファの長さを計算するようにしました
  • caps: 配列境界への不正なアクセスを修正しました
  • utils: 安全なプログラムにしました
  • nl: 重複する define を削除しました
  • 文法エラーを修正しました
  • commands: エラーメッセージを改良しました
  • file_utils: add lxc_recv_nointr() を追加しました
  • commands: errno を設定し、-1 を返すようにしました
  • log: errno を上書きしないようにしました
  • log,nl: errno を保存するようにしました
  • tree-wide: s/recv()/lxc_recv_nointr()/g
  • file_utils: lxc_send_nointr() を追加しました
  • tree-wide: s/send()/lxc_send_nointr()/g
  • log: log_append_logfile() で新たにエラーパスを追加しました
  • lxccontainer: ポインターの逆参照の問題を修正しました
  • lxc: --disable-werror を付けた場合のビルドの問題を修正しました
  • utils: get_ns_uid() を改良し、get_ns_gid()lxc_switch_uid_gid() を追加しました
  • attach: id の切り替えをよりスマートに扱うようになりました
  • start: 不要なシステムコール呼び出しを防ぐようにしました
  • utils: lxc_setgroups()lxc_switch_uid_gid() は bool を返すようにしました
  • lxccontainer: (訳注: int を使っていたのを)正しく pid_t を使うようにしました
  • conf: sysfs:mixed のときの余計な MS_BIND を削除しました
  • network: lxc_netns_set_nsid() 内で正しい型を使うようにしました
  • network: lxc_netns_get_nsid() を追加しました
  • remove unused variables
  • file_utils: 使っていない関数を削除しました
  • network: 細かい調整を行いました
  • log: 共通関数を追加しました
  • attach: 子プロセスで ipc ソケットを shutdown しないようにしました
  • log, security, file_utils: 広すぎる、一貫性のない全ユーザー向けのパーミッションを修正しました
  • attach: 標準的なシェルの終了コードを返すようになりました
  • af_unix: set sockaddr で重複するコードを削除するために関数を追加しました
  • lxccontainer: set_cgroup_item() からロックを削除しました
  • apparmor: configure で指定した rootfs のパスを見るようにしました(訳注: apparmorで指定しているrootfsのパスが決め打ちだった) (closes #2617)
  • conf: realpath() でバッファオーバーフローを防ぐために2つ目のパラメータとして null を使うようにしました
  • start: s/backgrounded/daemonize/g
  • cgfsng: __cgfsng_ops attribute でマークしました
  • autotools: -Wimplicit-fallthrough を追加しました
  • cgroup: コンテナ特有の cgroup 関数をリネームしました
  • cgroups: s/fullcgpath/container_full_path/g
  • cgroups: 欠けていた string.h の include を追加しました
  • cgroups: s/base_cgroup/container_base_path/g
  • autotools: 間違った AX_CHECK_COMPILE_FLAG のテストを修正しました
  • compiler: s/__fallthrough__/__fallthrough/g
  • compiler: s/__noreturn__/__noreturn/g
  • tree-wide: sizeof()SIZEOF2STRLEN() で置き換えました
  • compiler: bionic では __attribute__((noreturn)) を定義するようにしました
  • autotools: -Wcast-align, -Wstrict-prototypes のサポートを追加しました
  • network: netns_getifaddrs() の実装を追加しました
  • tree_wide: netns_getifaddrs() に切り替えました
  • netns_ifaddrs: キャストを安全とマークしました
  • autotools: ビルドの問題を修正しました
  • stop: freezer が利用可能な場合のみ freeze するようにしました
  • doc: 文書を少し調整しました
  • cgfsng: get_hierarchy() で errno を ENOENT に設定するようにしました
  • cgfsng: s/cgfsng_destroy/cgfsng_payload_destroy/g
  • cgfsng: s/25/INTTYPE_TO_STRLEN(pid_t)/g
  • compiler: bionic で __noreturn を修正しました
  • compiler: __hot attribute を追加しました
  • netns_ifaddrs: 欠けていた include を追加しました
  • tree-wide: bionic でのビルドを修正するために include を修正しました
  • template: OCI テンプレートが文字のユーザー情報を扱えるようになりました
  • btrfs: btrfs コンテナでの問題を修正しました
  • oci-template: /etc/passwd,group がない場合のロジックを追加しました
  • configure: -Wimplicit-fallthrough のチェックを修正しました
  • utils: lxc_setup_keyring() を追加しました
  • autotools: -z relro-z now をサポートしました
  • netns_ifaddrs: IFLA_STATS{64} を正しく扱うようにしました
  • syscall_wrappers: pivot_root() を追加しました
  • raw_syscalls: lxc_raw_execveat() を追加しました
  • raw_syscalls: lxc_raw_clone{_cb}() を追加しました
  • raw_syscalls: lxc_raw_getpid() を追加しました
  • tests: 欠けていたビルド時の依存情報を追加しました
  • netns_ifaddrs: struct rtnl_link_stats64 だけを使うようにしました
  • cgroups: 不要な行を削除しました
  • netns_iaddrs: 使われていない関数を削除しました
  • parse: MAP_POPULATE を使って設定ファイルを prefault するようにしました
  • cgfsng: 小さい競合状態を防ぎました
  • utils: lxc_set_death_signal() を修正しました
  • cgfsng: v1 cpuset 階層を最初に扱うようにしました
  • syscall_wrappers: 関数の定義をいくつか移動させました
  • raw_syscalls: lxc_raw_gettid() を移動しました
  • tools: lxc-start: 使われていない引数を削除しました
  • tools: lxc-unshare: 不要な初期化を削除しました
  • parse: access() のチェックを削除しました
  • parse: 設定のパースに失敗したときはエラーを報告するようにしました
  • attach: シグナルマスクのリセットを行うようにしました
  • start: ログレベルを変更しました
  • attach: 足りなかった pthread.h の include を追加しました
  • netns_ifaddrs: NETLINK_DUMP_STRICT_CHK を使ったチェックを行うようにしました
  • parse: 失敗したログを出力するようにしました
  • test: 不正な設定キーをテストするようにしました
  • confile: 使っていない変数を削除しました
  • parse: 初期化していないぽいんたへのアクセスを修正しました
  • rpm パッケージ作成時の静的ライブラリの問題を修正しました
  • rpm install の post セクションのスクリプトエラーを修正しました
  • conf: prlimit のセットアップ時のログを出力するようにしました
  • conf: lxc.mount.entry 後に verify_start_hooks() を実行するようにしました
  • checkpoint: do_dump() 実行時の問題を修正しました
  • monitor: ログのクリーンアップを行いました
  • monitor: モニターのソケット名が長すぎないかチェックするようになりました
  • commands_utils: 抽象(abstract) UNIX ソケット名生成のコードの冗長さを改良しました
  • autools: -fno-strict-aliasing を使うようにしました
  • checkconfig: カーネルバージョンが取得できない場合の処理を追加しました
  • lxc-init: /dev/console にログを出力するようにしました
  • autotools: --disable-commands を指定した場合のビルドの問題を修正しました
  • string_utils: バッファオーバーフローの問題を修正しました
  • include: strlcpy() を簡素化しました
  • raw_syscalls: 常に関数が返り値を返すようにしました
  • confile: append_unexp_config_line() の問題を修正しました
  • parse: パース中の設定値の更新から保護するようにしました
  • parse: 初期化されていない値を修正しました
  • tree-wide: コーディングスタイルの修正を行いました
  • start, commands: 簡素化しました
  • autotools: コンパイラベースの hardening を行うようにしました
  • confile: グローバル変数を上書きしないようにしました
  • cgfsng: インクリメントを分岐の外に出しました
  • cmd/lxc_init, monitord, tools: グローバル変数を上書きしないようにしました
  • state,conf: チェックの繰り返しを削除しました
  • conf: lxc_pivot_root() 内で O_CLOEXEC を使うようにしました
  • lxccontainer: goto ターゲットからチェックを削除しました
  • start: 0 より小さい値を取れないようにしました
  • tools/lxc_stop: 正しくチェックするようにしました
  • coverity によって見つかった問題を修正しました
  • storage_utils: エラーハンドリングを追加しました
  • parse, storage_utils: クリーンアップしました
  • スペルの修正を行いました
  • include: macro.h を正しく include するようにしました
  • 不要なスペースを削除しました
  • caps: readlxc_read_nointr で置き換えました
  • log: writelxc_write_nointr に置き換えました
  • pam_cgfs: ファイルユーティリティ関数の重複を削除しました
  • cgfs: ユーティリティ関数の重複を削除しました
  • pam_cgfs: cap と log に対する依存を削除しました
  • utils: 例外の場合に errno をログに出力するようにしました
  • lvcreate コマンドに -qq オプションを追加しました。これにより LVM サブシステムが lxc-create コマンドのハングアップを防ぐために no と答えることを防ぎます
  • utils: キーリングの割当失敗を致命的としないようにしました
  • autotools: lxc-{create,copy} のビルドの問題を修正しました <!--fix lxc-{create,copy} build -->
  • cgfsng: 要求仕様から freezer を削除しました
  • start: cgroup_exit() を二度呼ばないようにしました

バグ修正(LXCテンプレート)

  • alpine: setpcap を drop するのをオプショナルにしました
  • plamo: デフォルトバージョンを 7.x にしました
  • sabayon: ディレクトリが存在するときに失敗しないようにしました

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

  • このリリースでは変更はありません。バージョンを上げただけです

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

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

ダウンロード

LXC 3.0.2 リリースのお知らせ

21st of August 2018

はじめに

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 リリースのお知らせ

5th of June 2018

はじめに

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 リリースのお知らせ

27th of March 2018

はじめに

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.1.1 リリースのお知らせ

19th of October 2017 このリリースは 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 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.0.9 リリースのお知らせ

19th of October 2017 このリリースは 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 2.1 リリースのお知らせ

5th of September 2017 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 リリースのお知らせ

11th of May 2017 このリリースは 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 リリースのお知らせ

11th of May 2017 このリリースは 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 リリースのお知らせ

23rd of January 2017 このリリースは 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 1.0.9 リリースのお知らせ

23rd of November 2016 このリリースは 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.6 リリースのお知らせ

23rd of November 2016 このリリースは 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 2.0.5 リリースのお知らせ

5th of October 2016 このリリースは 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 のお知らせ

1st of September 2016 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 リリースのお知らせ

15th of August 2016 このリリースは 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 リリースのお知らせ

28th of June 2016 このリリースは 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 リリースのお知らせ

28th of June 2016 このリリースは 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 リリースのお知らせ

16th of May 2016

このリリースは 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 リリースのお知らせ

6th of April 2016 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 リリースのお知らせ

9th of November 2015 このリリースは 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 リリースのお知らせ

9th of November 2015 このリリースは 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 リリースのお知らせ

6th of October 2015 このリリースは 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 リリースのお知らせ

14th of August 2015 このリリースは 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 リリースのお知らせ

10th of April 2015 このリリースは 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 リリースのお知らせ

16th of March 2015 このリリースは 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 リリースのお知らせ

30th of January 2015 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 リリースのお知らせ

5th of December 2014

このリリースは 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 リリースのお知らせ

24th of September 2014

このリリースは 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 リリースのお知らせ

14th of July 2014

このリリースは 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 リリースのお知らせ

13th of June 2014

このリリースは 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 リリースのお知らせ

8th of April 2014

このリリースは 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 リリースのお知らせ

27th of March 2014

このリリースは 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 リリースのお知らせ

6th of March 2014

このリリースは 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 リリースのお知らせ

20th of February 2014

はじめに

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 です。