Upgrade to Pro — share decks privately, control downloads, hide ads and more …

boot2docker の format-me の話

boot2docker の format-me の話

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

Kazuhiro NISHIYAMA

January 28, 2018
Tweet

More Decks by Kazuhiro NISHIYAMA

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  4. 仕組み
    VirtualBox で VM 作成
    ISO から起動
    仮想 HDD に書き込みが必要なデータを保

    バージョンアップが ISO の差し替えと再起
    動だけで可能
    3/16

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    15/16

    View full-size slide

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

    View full-size slide