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

年中アイス

いろいろつらつら

PackerでProvisionerが実行されてるけど、boxに残らない時の対処

Packer

2013/11/25追記訂正

改めて、 mitchellh / packer-ubuntu-12.04-dockerからcloneしてpacker buildを実行すると今度はうまくいき、provisionerが適用されている状態のboxが生成されました。特にshutdown -P nowはいじってません。

んー、なんでだろうと思うと、前回の記事が11/7,その後11/8にいくつかコミットされており、それによって発生しないようになった?と思い、clone後、その手前に戻してみたんですが、成功。

さらには、自分の失敗していたtemplate.jsonでも再度実験するとprovisionerが適用される始末。。。もう正直よくわからん状態です。その時は、-Pと-hして、もう一度-Pして適用されないとこまで確認したんですが。。。

ただ、結果としてprovisionerが適用された状態でboxができないのは、-Pオプションは関係ないということ。

isoイメージをダウンロードし直したのが何か関係あるのかぐらいしかわかりません。

もし同じ症状の方は一度試してみるのはいいかもしれません。

ーーー追記ここまで

前に書いたエントリで、provisionerが実行されてるログがあるのに、boxファイルをvagrantで使うと、その内容が全然適用されてない。と書いていましたが、無事解決しました。

Packerでboxを作る際に、失敗した原因を事細かに書いておられた先人の方をたまたま別の調べ物で発見しました。

Packerを使ってVagrantのBoxを作る方法を一つずつ説明する/index - ヽ(´・肉・`)ノログ

ここに、こう書いてありました。

わかるだろうか. provisioning 中に curl でダウンロードしたはずの .ssh/authorized_keys が, 改めて仮想環境を立ち上げてみると存在していない.

ここは本当に原因を掴むのに苦労した.皆にはこんな思いをして欲しくないので大きく 3 回書いておく.

provisioning終了時のshutdownをgracefulに行わないと仮想環境にデータが残らない

provisioning終了時のshutdownをgracefulに行わないと仮想環境にデータが残らない

provisioning終了時のshutdownをgracefulに行わないと仮想環境にデータが残らない

provisioning終了時のshutdownをgracefulに行わないと仮想環境にデータが残らない

なん・・・だと・・・!?まさに同じところではまっていた。

そこで wheezy64.json

"shutdown_command": "sudo shutdown -h now"

というコマンドを追加する.

ん?確かこれは書いてたような。。。と思って確認してみたら、オプションが-Pでした。

"shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now",

-hに修正

"shutdown_command": "echo 'vagrant' | sudo -S shutdown -h now",

これを直して、再度Packer buildを実行したら、無事にprovisonerが適用された状態のboxが出来上がっていました。

いろいろWeb上のを参考に作っていたんですが、-Pになっているケースが多いような。Packer作っている方のも-Pなんですよね。。。環境に依存するんでしょうか。
packer-ubuntu-12.04-docker/template.json at master · mitchellh/packer-ubuntu-12.04-docker · GitHub

何にせよ、原因と解決法を書いてくださった方にものすごく感謝です。そしてまたはまる人の役に立てれば。

確認環境