3.8 で実装が完了した! ということで楽しみにしていたユーザ名前空間 (User Namespace) ですが,3.8 の時点ではカーネルのかなりの機能を無効にしないと有効に出来ない状態でした.これでは手元のカーネルをユーザ名前空間を有効にして make できないなあと思って放置していました (テスト用の環境作れよ > オレ :p).なので 前回 までは lxc の実装からユーザ名前空間の機能を追ってみるという企画になっていました.
ちなみに 3.8 の時点でオフにする必要があったのは以下 USER_NS が依存している UIDGID_CONVERTED の関係でした.
config UIDGID_CONVERTED # True if all of the selected software conmponents are known # to have uid_t and gid_t converted to kuid_t and kgid_t # where appropriate and are otherwise safe to use with # the user namespace. bool default y # Networking depends on NET_9P = n # Filesystems depends on 9P_FS = n depends on AFS_FS = n depends on CEPH_FS = n depends on CIFS = n depends on CODA_FS = n depends on GFS2_FS = n depends on NCP_FS = n depends on NFSD = n depends on NFS_FS = n depends on OCFS2_FS = n depends on XFS_FS = n (3.8.5 の init/Kconfig)
ファイルシステム方面で uid, gid でのチェックが入る所の実装が大幅に済んでなかった (というかソレ用のパッチがマージされなかった?) というわけです.3.9 ではこれらの実装部分がマージされ,これが大幅に減りました (この辺り? > Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace).
# Filesystems depends on XFS_FS = n (3.9 の init/Kconfig)
XFS は残念ながらお引き取り頂いて,早速ユーザ名前空間有効のカーネルを作ってみました.
CONFIG_USER_NS=y CONFIG_UIDGID_CONVERTED=y CONFIG_UIDGID_STRICT_TYPE_CHECKS=y
この辺りですね.:-)
で,起動すると
root@enterprise:~# cd /proc/1/ns root@enterprise:/proc/1/ns# ls -l 合計 0 lrwxrwxrwx 1 root root 0 5月 7日 19:41 ipc -> ipc:[4026531839] lrwxrwxrwx 1 root root 0 5月 7日 19:41 mnt -> mnt:[4026531840] lrwxrwxrwx 1 root root 0 5月 7日 19:41 net -> net:[4026531955] lrwxrwxrwx 1 root root 0 5月 7日 19:41 pid -> pid:[4026531836] lrwxrwxrwx 1 root root 0 5月 7日 19:41 user -> user:[4026531837] lrwxrwxrwx 1 root root 0 5月 7日 19:41 uts -> uts:[4026531838]
ちゃんと user というファイルが出来ていますね! (このファイルに関しては Linux 3.8 で改良された Namespace 機能と lxc-attach コマンド - TenForwardの日記 をどうぞ :-)
はい.今日はほぼ中身がありませんが,ここで時間切れです (^^;)