Rabbit Slide Show

boot2docker の format-me の話

2018-01-28

Description

[LILO, 東海道らぐ, openSUSE MeetUP and 関西Debian 勉強会 LT大会](https://debianjp.connpass.com/event/76814/)での発表資料です。

Text

Page: 1

boot2docker の format-
me の話
Kazuhiro NISHIYAMA
LILO, 東海道らぐ, openSUSE MeetUP and
関⻄Debian 勉強会 LT⼤会
2018/01/28
Powered by Rabbit 2.2.1

Page: 2

⾃己紹介
Ruby コミッターなど
Twitter, GitHub: @znz
1/16

Page: 3

boot2docker とは?
Docker 専⽤軽量ディストリビューション
v18.01.0-ce で 45MB の iso
https://github.com/boot2docker/
boot2docker/releases
昔は独⾃の cli で使⽤
今は Docker Machine が⼀般的
VirtualBox, Hyper-V の時に boot2docker を
使⽤
2/16

Page: 4

仕組み
VirtualBox で VM 作成
ISO から起動
仮想 HDD に書き込みが必要なデータを保
存
バージョンアップが ISO の差し替えと再起
動だけで可能
3/16

Page: 5

format-me?
仮想 HDD を初期化するためのトリック
https://github.com/boot2docker/
boot2docker/blob/master/rootfs/
rootfs/etc/rc.d/automount
パーティションテーブルがなければ、先頭が
boot2docker, please format-me なのを
確認して HDD をフォーマット
4/16

Page: 6

作成側 (1) tar を作成
tar の内容
"boot2docker, please format-me" とい
うファイル名と内容のファイルが先頭
続いて公開鍵を  .ssh/authorized_keys"
と  .ssh/authorized_keys2" として追加
5/16

Page: 7

作成側 (1) 実装箇所
https://github.com/docker/machine/
blob/49dfaa70fdc869c65d9f6c50c355
624356ab383b/libmachine/mcnutils/
b2d.go#L488
https://github.com/boot2docker/
boot2docker-cli/blob/master/
virtualbox/machine.go
6/16

Page: 8

作成側 (2) VMDK 作成
VBoxManage convertfromraw stdin
path size --format VMDK
標準⼊力に tar の内容
tar そのままをディスクの内容として作成
7/16

Page: 9

作成側 (2) 実装箇所
https://github.com/docker/machine/
blob/
e1a03348ad83d8e8adb19d696bc7bcf
b18ccd770/drivers/virtualbox/disk.go
https://github.com/boot2docker/
boot2docker-cli/
blob/8a3999640ae7be3493c80a0220
3eba8c381d2d5c/virtualbox/disk.go
8/16

Page: 10

気になった点 (1) 疑問点
tar が偶然 MBR などと誤認識されないか?
MBR は先頭 512 バイトの末尾が 55 AA
9/16

Page: 11

気になった点 (1) tar 調査
http://www.redout.net/data/tar.html に
よると tar ヘッダーが 512 バイトで末尾は
prefix
ファイル名は  boot2docker, please
format-me" なので prefix の末尾2バイト
はゼロ
10/16

Page: 12

気になった点 (1) MBR 調査
MBR の 55 AA になることはない
GPT も先頭は MBR 互換なので⼤丈夫
パーティションテーブルと誤認識される可
能性はなさそう
11/16

Page: 13

気になった点 (2) 疑問点
先頭 4096 バイトを /userdata.tar とし
て保存しているのは⼤丈夫?
内容に関係なく無条件に 4096 バイト
12/16

Page: 14

気になった点 (2) tar 調査
http://www.redout.net/data/tar.html に
よると、末尾にバイナリーゼロ (1024 バイ
ト) がつくらしい
末尾を読みすぎるのは⼤丈夫そう
13/16

Page: 15

気になった点 (2) 内容
公開鍵が⼤きすぎるとはみ出しそう
https://github.com/docker/machine/blob/
ab3b7acb9792271dcd349da731150757a9
346183/libmachine/ssh/keys.go で⾃前で
2048 ビット固定の RSA 鍵を作っていたので⼤
丈夫そう
カスタマイズして 4096 ビットにするとダメか
も (ビルドが面倒そうで試してない)
14/16

Page: 16

気になった点 (2) 続き
authorized_keys2 はもう不要そうなの
で削っても良さそう
楕円曲線暗号の鍵にすれば、⼩さくできそ
う
15/16

Page: 17

まとめ
boot2docker は docker-machine で使わ
れている
初回起動時に HDD の先頭をチェックして
⾃動フォーマットしている
Powered by Rabbit 2.2.1
16/16

Other slides