読者です 読者をやめる 読者になる 読者になる

Vagrant用のBox(FreeBSD)をPackerで作成(成功)

FreeBSD Packer Vagrant vagrant

前回は失敗でした。

真面目にPackerのドキュメント読みながら
VeeWeeのdefinition.rbと見比べてみて、この部分を変えたらうまくいきました。

変更点

変更前:

  "builders": [

      ...

      "shutdown_command": "shutdown -h -p now",

      ...

  "provisioners": [
    {
      "type": "shell",
      "script": "postinstall.sh",
    }
  ],

変更後:

  "builders": [

      ...

      "shutdown_command": "echo 'shutdown -p now'|su -",

      ...

  "provisioners": [
    {
      "type": "shell",
      "script": "postinstall.sh",
      "override": {
        "virtualbox": {
          "execute_command": "cat '{{.Path}}' | su -"
        }
      }
    }
  ],

shutdown_command

これだと、一般ユーザーではPermission Deniedになってしまうので、
suを使って実行するかたちに変えます。

execute_command

参考にした元のJSONだとecho 'vagrant'|sudo -S sh '{{.Path}}'となっていたけど、
FreeBSDだとはじめはsudoが入ってなくてエラーが出てしまうので外していました。

結果

で、やってみたらうまくいきました。

つぎに、vagrantにboxを追加します。

> vagrant box add freebsd91-packer .\freebsd-packer.box
> vagrant init freebsd91-packer
> vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'freebsd91-packer'...
[0K[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] Failed to connect to VM!
Failed to connect to VM via SSH. Please verify the VM successfully booted
by looking at the VirtualBox GUI.

なぜかここでWaiting for VM to boot. This can take a few minutes.のまましばらく待ったあげく、 sshがタイムアウトして失敗する、という現象が発生します。(なんでなんでしょう。。)
でも、vagrant sshするとふつうにVMに入れます。

ということでたぶん成功です。たぶん。

ということで、最終的に使ったJSONはこんな感じです:

Simple JSON definition file for Packer.

改善点?

あといじりたいところはいくつか。

1. ports からビルドすると遅い

VeeWeeに用意されているpostinstall.shだと、portからいちいちビルドしちゃうので遅いです。 まあportsのほうが確実なのかもしれませんが、packageつかってやる方に変えたいかも。

veewee/templates/freebsd-9.1-RELEASE-amd64/postinstall.sh at master · jedi4ever/veewee

2. ISOイメージが重い

うちのネットあんま早くないので、disc1をもってくるのはちょっと重いんです。
bootonlyのイメージか、mfsBSDでできると軽くていいな。
でもそうすると"boot_command"は書き換えないとだめなので、
めんどくさくてやらない予感がします...。

3. vagrant upに失敗する

これはほんとなんでなんでしょう。気になる。
sshdが起動するタイミング?

感想

いやしかしほんと、boxから作らないといけないとかめんどくさいけど、
世の中のFreeBSD使いのひとはどうしてるんでしょう。
vagrantなんて使わないんでしょうか。
でもPackerにはFreeBSDのコミッターの人関わってるし。。うーん。