Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

boot2docker の format-me の話

92 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

boot2docker の format-me の話

  1. 1. boot2docker の format- me の話 Kazuhiro NISHIYAMA LILO, 東海道らぐ, openSUSE MeetUP and 関⻄Debian 勉強会 LT⼤会 2018/01/28 Powered by Rabbit 2.2.1
  2. 2. ⾃己紹介 Ruby コミッターなど Twitter, GitHub: @znz 1/16
  3. 3. boot2docker とは? Docker 専⽤軽量ディストリビューション v18.01.0-ce で 45MB の iso https://github.com/boot2docker/ boot2docker/releases 昔は独⾃の cli で使⽤ 今は Docker Machine が⼀般的 VirtualBox, Hyper-V の時に boot2docker を 使⽤ 2/16
  4. 4. 仕組み VirtualBox で VM 作成 ISO から起動 仮想 HDD に書き込みが必要なデータを保 存 バージョンアップが ISO の差し替えと再起 動だけで可能 3/16
  5. 5. format-me? 仮想 HDD を初期化するためのトリック https://github.com/boot2docker/ boot2docker/blob/master/rootfs/ rootfs/etc/rc.d/automount パーティションテーブルがなければ、先頭が boot2docker, please format-me なのを 確認して HDD をフォーマット 4/16
  6. 6. 作成側 (1) tar を作成 tar の内容 "boot2docker, please format-me" とい うファイル名と内容のファイルが先頭 続いて公開鍵を �.ssh/authorized_keys" と �.ssh/authorized_keys2" として追加 5/16
  7. 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
  8. 8. 作成側 (2) VMDK 作成 VBoxManage convertfromraw stdin path size --format VMDK 標準⼊力に tar の内容 tar そのままをディスクの内容として作成 7/16
  9. 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
  10. 10. 気になった点 (1) 疑問点 tar が偶然 MBR などと誤認識されないか? MBR は先頭 512 バイトの末尾が 55 AA 9/16
  11. 11. 気になった点 (1) tar 調査 http://www.redout.net/data/tar.html に よると tar ヘッダーが 512 バイトで末尾は prefix ファイル名は �boot2docker, please format-me" なので prefix の末尾2バイト はゼロ 10/16
  12. 12. 気になった点 (1) MBR 調査 MBR の 55 AA になることはない GPT も先頭は MBR 互換なので⼤丈夫 パーティションテーブルと誤認識される可 能性はなさそう 11/16
  13. 13. 気になった点 (2) 疑問点 先頭 4096 バイトを /userdata.tar とし て保存しているのは⼤丈夫? 内容に関係なく無条件に 4096 バイト 12/16
  14. 14. 気になった点 (2) tar 調査 http://www.redout.net/data/tar.html に よると、末尾にバイナリーゼロ (1024 バイ ト) がつくらしい 末尾を読みすぎるのは⼤丈夫そう 13/16
  15. 15. 気になった点 (2) 内容 公開鍵が⼤きすぎるとはみ出しそう https://github.com/docker/machine/blob/ ab3b7acb9792271dcd349da731150757a9 346183/libmachine/ssh/keys.go で⾃前で 2048 ビット固定の RSA 鍵を作っていたので⼤ 丈夫そう カスタマイズして 4096 ビットにするとダメか も (ビルドが面倒そうで試してない) 14/16
  16. 16. 気になった点 (2) 続き authorized_keys2 はもう不要そうなの で削っても良さそう 楕円曲線暗号の鍵にすれば、⼩さくできそ う 15/16
  17. 17. まとめ boot2docker は docker-machine で使わ れている 初回起動時に HDD の先頭をチェックして ⾃動フォーマットしている 16/16Powered by Rabbit 2.2.1

×