つれづれ日記 2016年1月

予定

毎日


2016年1月26日 (火曜日)

07:04:01 # Life Proof General をインストールしてからEmacsのアイコンが軍人っぽくなってる。 Proof Generalを起動してからアイコン変わるなんてどうやってるんだろうとおもったら常になってるだけだった。これはどうしたらよいものか。

2016年1月22日 (金曜日)

07:21:42 # Life unshare mount namespace の基本的な使い方についてのまとめ。 最近のmountコマンドはMS_SHAREDでマウントしているので、ネームスペースをまたがってマウントすることになる。/proc/self/mountinfoshared:[ID]というフラグがついている。 clone(CLONE_NEWNS)これからマウント操作を別ネームスペースで行いたい親ディレクトリのmount(2) にMS_PRIVATEを与える。 mount(1) には--make-privateオプションがある。 一連の基本的な動作はこんな感じか。

	  unshare(CLONE_NEWNS)
	  chroot()
	  mount("none", "/", NULL, MS_PRIVATE, NULL)
	  mount("/proc", "/proc", "proc", MS_MGC_VAL, NULL)
	

これで結果としてcat /proc/self/mountinfo をみるとsharedじゃない/procがマウントできる。

263 58 8:4 /var/cache/pbuilder/sid-chroot / rw,noatime - ext4 /dev/sda4 rw,errors=remount-ro,data=ordered
264 263 8:4 /home /home rw,noatime shared:1 - ext4 /dev/sda4 rw,errors=remount-ro,data=ordered
266 263 0:56 / /proc rw,relatime - proc /proc rw
	

2016年1月21日 (木曜日)

07:17:58 # Life shared subtreeの挙動がよくわからず調べてた。 デフォルトの挙動は結構わかりにくいかも。 clone(NEWNS)で新しいマウントネームスペースにしてもデフォルトのマウントオプションは全部sharedであるということに気づくのと、SharedなのはDentryなので親NSから隠したいのならマウント対象の親ディレクトリをPrivateにしないといけないということに気づくまでなんでこうなるのかよくわからなかった。 確認するには /proc/self/mountinfo. shared:50 とか書いてあるんだけど、これはグループ「50」で共有されているという意味らしい(Documentation/filesystems/proc.txt)。

	  mount namespace を unshareしたchrootの中で
	  # mount --make-private /home
	  # mount --bind /hogefuga /home/secret-directory
	

2016年1月14日 (木曜日)

07:15:58 # Life coqc コマンドを実行したらvファイルからvoファイルが生成される。 このvoファイルってなんだろう。

2016年1月13日 (水曜日)

06:30:01 # Life なんかCoqちょっといじっててよくわからないなぁとおもってググった。 証明とプログラムってどういう関係があるんだよというのがいまいち直感的じゃなかったんだけど。 Curry Howard Isomorphismを眺めていてなんか腑に落ちた。 あとなんかこのブログ、昔読んでた記憶が蘇ってきた。 具体的には、Coq触ろうとして挫折するたびに読んでる。

2016年1月2日 (土曜日)

10:01:49 # Life 2015年はばたばたしてました。2016年はどうかな。

17:52:06 # Life 昨年のAndroid関連。 仕事で必要ではなかったのかもしれないけど、いじっているついでにおそるおそる初めてのAOSP Masterへの変更をいれてみた感じ。 今数えたら2つだけだけどそんなもんだっけな。 Androidではinitrdで起動してそのままsystem.imgを/systemにマウントして使うという仕組みになっているんだけど、 masterではsystem.imgを/にできるように起動イメージの作り方が変更できるようになっていたんだけどそれで/vendorディレクトリへのシンボリックリンクが作成されないという問題があったので修正した: Fix non-vendor.img configuration. あと Android の Bionicは自前でELFローダーをもっているんだけど、x86_64 ELF ローダーのリロケーションでデータが破壊されていたので気づいた Do not depend on host bits to get the right size to write.をアップストリームにコミットしてました。 ARCでは Bionic担当としていろいろ細かい変更はしていたんだけど結局アップストリームに突っ込んだのはこのくらいなのかな。 コードベースをLベースでいじっていたらMasterはMのその先の状態でBionicは大胆に書き換わっていたのがハイライト。

興味があると見てみると面白いと思うけど、BionicのコードベースはCの標準ライブラリなんだけど内部的にはC++11を使いまくっていて LambdaでFor_eachで回していたりするのが素敵。 Linkerではmalloc とか new とかそのまま使えないのでちゃんと SoinfoListAllocator というカスタムアロケーターを用意して使っていて なんか素敵。 Bionic Loader愛でる会とかしたら数人くらいには需要があるか。誰得。

18:24:02 # Life pbuilderについてつらつらと。 2013年からメンテナンスを止めていたのだけどやっと継承してくれるチームが現れて2015年の6月から活発にメンテナンスされている。Cowdancerも拾ってくれたみたいなので素晴らしい。qemudancerもだいぶめんどくさい状態のままだと思うんだけどメンテされているっぽい。 テストがあまり書かれていないし実装を試行錯誤した結果bashとCで書かれた部分で機能が重複しているし大変だと思うんだけどにやにやしながら眺めてる。 そもそもcowbuilderはbashでpbuilderをメンテするのが辛いのでCで書きなおそうと思って書き始めたC-pbuilderプロジェクトというのがてもとにあってそれで試験的に実装したプロジェクトだったと思う。cowdancerはLD_PRELOADハックなんだけどこれも安定して動いてはいるけど動かないケースは明確にあるんだし今日実装し直すんだったらFUSEとかで書き直したいところ。 適当なUnionfsを使えばいい気もするし、VMレベルでのブロックデバイスのスナップショットを活用すればいいんじゃないか。


Junichi Uekawa