PackerでVagrant Boxを作成する際のトラブルシューティング

Pocket

packer

Packer はJSONで記述した構成ファイルに従って $ packer build コマンド一発でVMイメージを作成でき、さらにVagrant BoxやAmazon EC2のイメージにエクスポートできる超クールなツールです。ちなみに開発者はVagrantの開発者で有名なMitchell Hashimoto氏です。

今回はPackerでVagrant Boxの作成の自動化をしようとした際にハマったポイントとその解決方法について報告します。

トラブルその1: SSHに接続できずタイムアウトする

packer build の実行中に

==> virtualbox: Waiting for SSH to become available...

と表示されたままタイムアウトしてビルド失敗になる場合や、vagrant up 実行中に

[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.

と表示されたままタイムアウトになる場合です。

VirtualBox のポートフォワーディングが効いているかどうかを確認する

ポートフォワーディングが有効になっていないとPackerやVagrantはゲストOSのSSHサーバに接続することができません。ファイアウォール等でブロックしている可能性もあります。

SSHクライアントで手動でゲストOSにアクセスできるかどうか調査すると解決の糸口が見えるかもれません。

トラブルその2: vagrant up 時にSSHの認証に失敗する

以下のようなメッセージが出てしまう場合です。

SSH authentication failed! This is typically caused by the public/private
keypair for the SSH user not being properly set on the guest VM. Please
verify that the guest VM is setup with the proper public key, and that
the private key path for Vagrant is setup properly as well.

1. /home/vagrant/.ssh/authorized_keys を確認する

Vagrantが使う公開鍵が authorized_keys に登録されていないとSSHで認証エラーになります。登録されていない場合は https://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pubauthorized_keys に追加してください。

$ curl https://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub >> /home/vagrant/.ssh/authorized_keys

2. PubkeyAuthentication が有効かを確認する

sshdの設定で PubkeyAuthentication が有効になっていないと Vagrant は公開鍵認証ができずに失敗します。/etc/ssh/sshd_config の設定を確認してみてください。

3. sudoers を正しく設定する

Vagrantのは非tty環境からsudoを叩きますが、sudoersの設定でこれが禁止されている場合があります。その場合は以下のようにしてユーザ vagrantrequiretty オプションを無効化しておきます。

Defaults:vagrant !requiretty

トラブルその3: /vagrant のマウントに失敗する

VM起動直後、以下のように共有ディレクトリのマウントが失敗した旨のメッセージが出る場合です。

[default] -- /vagrant
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant-root /vagrant

Guest Additions がインストールされているかどうか確認する

Guest Additions がないと共有機能は使用できませんので未インストールの場合はインストールする必要があります。

PackerはGuest AdditionsのISOイメージのダウンロードはしてくれますがインストールまではやってくれないので、PackerにGuest Additionsをインストールするスクリプトprovisionersに追加しておきます。またマウントポイントである /vagrant というディレクトリも事前に作成する必要があります。

#!/bin/bash

sudo mkdir /tmp/isomount
sudo mount -t iso9660 -o loop /home/vagrant/VBoxGuestAdditions.iso /tmp/isomountsudo /tmp/isomount/VBoxLinuxAdditions.run install
sudo umount /tmp/isomount
sudo rm -rf /tmp/isomount

# マウントポイントを作成しておく
sudo mkdir -p /vagrant
 "provisioners": [
    {
      "type": "shell",
      "script": "provisioners/install_vbox_guest_additions.sh"
    }
 ],

なおCentOSの場合はインストールに gcckernel-devel が必要になるので (参考: http://www.virtualbox.org/manual/ch04.html)、Kickstartの実行中や他のprovisionersで事前にインストールしておく必要があります。

投稿者紹介

齊藤 潤
サーバ運用もできるプログラマと化した、2013年入社の元新人エンジニアです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください