2014-08-01から1ヶ月間の記事一覧
今日はLinuxカーネルもくもく会 #3 でsetns(2)のユーザーランド側の挙動を見てみようと思って実験してみたのでメモ。 カーネル側の動作についてはTenForwardさんによる[Linux][Container] setns を UTS Namespace をネタにおっかけるが参考になります。 で、…
mount namespaceを作成するカーネル側の関数としてはcreate_mnt_ns()とcopy_mnt_ns()の2つがあるんだけどcreate_mnt_ns()のほうはbtrfsとnfs4しか使っていない模様。 これら2個のコールフローは以下のような流れ。 btrfsの場合はサブボリュームをマウントす…
cordovaでios simulatorを起動させるのに↓のようなコマンド使った時にSimulator session timed out.とか言われて起動しなくてハマった訳です/(^o^)\ $ cordova emulate ios -d 〜略〜 ** BUILD SUCCEEDED ** 2014-08-15 23:03:07.318 ios-sim[7899:507] st…
Linuxで名前空間に関して設定できるのはclone(2)、unshare(2)、setns(2)で、このうち実行中のプロセスの名前空間を変更できるのは後者の2個なんですが、カーネル側ではkernel/nsproxy.cにあるswitch_task_namespaces()が実際の処理を行ってます。そんなわけ…
CLONE_NEWPIDをclone(2)のflagsに付けて新しいプロセスを親プロセスと別のpid namaspaceで動かすことができますね。この時にどうやってpidを正しくプロセスに見せているのか知りたかったのでgetpid()を見てみました。 まずこんなコードを動かしてみます。あ…
前回の日記でふと思ったuser_namespace構造体とは何?というのを調べているんだけどその過程で出てきたkuid_tとkgid_tのメモ。 定義自体はinclude/linux/uidgid.hにあって、このような形でとくに面白いものでもない。 20 typedef struct { 21 uid_t val; 22 …
軽くめも。fork(2)の場合は親プロセスの名前空間を引き継ぐけど、clone(2)、unshare(2)、set_ns(2)などは名前空間に関するフラグが設定でき、これはカーネル内だとcreate_new_namespaces()にて行われる。 create_new_namespaces()の処理内容としてはcreate_n…
軽くnsproxyと初期化周りのめもを。 Linuxでは名前空間の管理にはnsproxy構造体が使われていて定義はinclude/linux/nsproxy.hにある。 中身はこのような形で5つの名前空間が管理されている。 29 struct nsproxy { 30 atomic_t count; 31 struct uts_namespac…