2014-08-01から1ヶ月間の記事一覧

setns(2)を使う方のめも

今日はLinuxカーネルもくもく会 #3 でsetns(2)のユーザーランド側の挙動を見てみようと思って実験してみたのでメモ。 カーネル側の動作についてはTenForwardさんによる[Linux][Container] setns を UTS Namespace をネタにおっかけるが参考になります。 で、…

φ(・・*)ゞ ウーン mount namespaceめも

mount namespaceを作成するカーネル側の関数としてはcreate_mnt_ns()とcopy_mnt_ns()の2つがあるんだけどcreate_mnt_ns()のほうはbtrfsとnfs4しか使っていない模様。 これら2個のコールフローは以下のような流れ。 btrfsの場合はサブボリュームをマウントす…

cordovaでios simulatorの起動でハマっためも

mac

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:実行中プロセスの名前空間切り替え

Linuxで名前空間に関して設定できるのはclone(2)、unshare(2)、setns(2)で、このうち実行中のプロセスの名前空間を変更できるのは後者の2個なんですが、カーネル側ではkernel/nsproxy.cにあるswitch_task_namespaces()が実際の処理を行ってます。そんなわけ…

CLONE_NEWPIDを調べる:getpid()とpid namespace

CLONE_NEWPIDをclone(2)のflagsに付けて新しいプロセスを親プロセスと別のpid namaspaceで動かすことができますね。この時にどうやってpidを正しくプロセスに見せているのか知りたかったのでgetpid()を見てみました。 まずこんなコードを動かしてみます。あ…

Linux: コンテナ型の仮想化サポートとkuid_t、kgid_t

前回の日記でふと思ったuser_namespace構造体とは何?というのを調べているんだけどその過程で出てきたkuid_tとkgid_tのメモ。 定義自体はinclude/linux/uidgid.hにあって、このような形でとくに面白いものでもない。 20 typedef struct { 21 uid_t val; 22 …

create_new_namespaces()めも

軽くめも。fork(2)の場合は親プロセスの名前空間を引き継ぐけど、clone(2)、unshare(2)、set_ns(2)などは名前空間に関するフラグが設定でき、これはカーネル内だとcreate_new_namespaces()にて行われる。 create_new_namespaces()の処理内容としてはcreate_n…

nsproxyとfork()周りのめも

軽くnsproxyと初期化周りのめもを。 Linuxでは名前空間の管理にはnsproxy構造体が使われていて定義はinclude/linux/nsproxy.hにある。 中身はこのような形で5つの名前空間が管理されている。 29 struct nsproxy { 30 atomic_t count; 31 struct uts_namespac…