Vagrantでboxイメージを作る

Vagrantで動いている仮想マシンのイメージファイルを作るには package サブコマンドを使います。

1
2
3
4
5
$ vagrant package test-k3s -o ./dev-ebpf.box
==> test-k3s: Attempting graceful shutdown of VM...
==> test-k3s: Clearing any previously set forwarded ports...
==> test-k3s: Exporting VM...
==> test-k3s: Compressing package to: /Users/masumi/works/playground/training-k8s/ebpf-dev.box

ここでは作られるboxファイルや推奨されるboxファイルの作り方について整理します。

フォーマット

作られるboxファイルはtar形式のアーカイブになっていて次のような構成でした。

1
2
3
4
5
6
7
$ tar tvf ./dev-ebpf.box
-rw-------  0 masumi staff    1675 12 25 10:28 ./vagrant_private_key
-rw-r--r--  0 masumi staff 5871167488 12 25 10:28 ./box-disk002.vmdk
-rw-r--r--  0 masumi staff         25 12 25 10:28 ./metadata.json
-rwx------  0 masumi staff      13152 12 25 10:20 ./box.ovf
-rw-r--r--  0 masumi staff        630 12 25 10:28 ./Vagrantfile
-rw-r--r--  0 masumi staff      72192 12 25 10:20 ./box-disk001.vmdk

metadata.json はプロバイダーなどの情報が含まれています。 Box File Formatによると、Boxファイルは旧形式らしくBoxのバージョニングや更新に対応できません。これらの機能のためにはBoxファイルと別にBox Metadataファイルが必要になります。 またBoxファイルにはBox Infoを含める事で vagrant box list -i に追加情報を提供できます。Boxファイルにファイルを追加で含めるには –include オプションでファイルを列挙します。

Boxファイルに含まれている Vagrantfile は仮想マシンを起動するとき(up)の最初に読まれます。 たとえば起動した時のネットワークを反映した初期化を施したりできます。

box.ovf はOVFディスクリプタです。 オープン仮想化フォーマット(OVF) | DMTFで仕様を確認できます。 xxx.vmdk ファイルはディスクイメージです。こここのpdfが詳しそうです。 公式の入り口はここしか見つけられていません。

作りかた

下の2つを確認してください。

いろいろとありますが、Vagrantではメモリもディスクも修正できるから適切なデフォルト値でユーザーに負担をかけない。USBなど使う事の少ないデバイスを設定しない。ネットワークの設定は起動のたびに変わるので udevのルールに気を付ける。 vagrant ユーザーがデフォルトで使われるので sudo やパスワードなど気を付ける。sshの鍵も登録する。あたりが大事そうでした。

おわりに

vagrant package で作られる box ファイルをきっかけに調べました。 中身のイメージもわいてきました。 次は Packer を使ってマシンイメージ作成をバージョン管理できるようにしておきたいと思います。

comments powered by Disqus