#背景
ネット上に公開されているboxではなく、最新のバージョンでのVagrantのboxが必要になった。
#目的
最新のisoイメージから最短で〜.boxファイルを生成してVagrantで利用できるようにします。
#動作確認環境
os x ver10.9.5
#必要なもの
- homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"```
- Vagrant
brew install vagrant
- Packer
brew tap homebrew/binary
brew install packer
-
VirtualBox
こちらからダウンロードしてください。
Macの場合は「for OS X hosts」。 -
boxにしたいUbuntuのisoイメージ
Ubuntuのオフィシャルページから取得してください。
#手順
packerのテンプレートの取得
Github上のテンプレートがとても便利なのでこちらを利用します。
git clone https://github.com/hnakamur/my-packer-template-files.git
my-packer-template-filesというディレクトリができるのを確認します。
template.jsonのカスタマイズ
先ほどgit coloneしたディレクトリの
my-packer-template-files/ubuntu12.04に中にtemplate.jsonがあります。
ubuntu12.04ディレクトリに移動して必要な部分を書き換えます。
※box化したいisoファイルのバージョンが12.04ではなくても問題無いです。
(略)
"type": "virtualbox-iso",
"boot_command": [
"<esc><esc><enter><wait>",
"/install/vmlinuz noapic preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg <wait>",
"debian-installer=en_US auto locale=en_US kbd-chooser/method=us <wait>",
"hostname={{ .Name }} <wait>",
"fb=false debconf/frontend=noninteractive <wait>",
"keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA keyboard-configuration/variant=USA console-setup/ask_detect=false <wait>",
"initrd=/install/initrd.gz -- <enter><wait>"
],
"boot_wait": "4s",
"disk_size": 10140,
"guest_os_type": "Ubuntu_64",
"http_directory": "http",
"iso_checksum": "ca2531b8cd79ea5b778ede3a524779b9",
"iso_checksum_type": "md5",
"iso_url": "/Users/myaccount/iso/ubuntu-14.04.1-server-amd64.iso",
(略)
書き換える箇所は「 "type": "virtualbox-iso" 」配下の以下の項目
設定項目 | 設定値(例) | 説明 |
---|---|---|
iso_checksum | ca2531b8cd79ea5b778ede3a524779b9 | 対象のisoのmd5ハッシュ値(調べる必要あり) |
iso_url | /Users/myaccount/iso/ubuntu-14.04.1-server-amd64.iso | isoファイルまでのフルパス |
- md5ハッシュ値を調べる
以下コマンドでmd5ハッシュ値が出力されます。
md5 /Users/myaccount/iso/ubuntu-14.04.1-server-amd64.iso
出力
MD5 (/Users/myaccount/iso/ubuntu-14.04.1-server-amd64.iso) = ca2531b8cd79ea5b778ede3a524779b9
scripts/postinstall.shを一部修正する
そのまま実行するとアップグレードされてしまうので、該当箇所をコメントアウトする。
apt-get -y update
apt-get -y upgrade
↓
#apt-get -y update
#apt-get -y upgrade
Packerを実行→boxファイル出力
Packerの以下のコマンドでboxを生成。
packer build -only=virtualbox-iso template.json
マシンスペックによりますが、数十分くらいで自動で終了し
「packer_virtualbox-iso_virtualbox.box」が生成されます。
※Virtualboxやterminal内でいろいろとコマンドが自動で実行されますが触らず放置しておいてください。
vangrant box addでboxファイルを登録
先ほど生成したboxファイルをvagrantコマンドで登録します。
vagrant box add my-ubuntu14.04 packer_virtualbox-iso_virtualbox.box
「my-ubuntu14.04」の部分は任意で変更可能です。
適当にわかりやすい名前をつけてください。
数分待つと、boxが登録されます。以下のコマンドで確認出来ます。
vagrant box list
出力
my-ubuntu14.04 (virtualbox, 0)
Vagrantで登録したboxを利用する
適当なからのフォルダを作成し、そのフォルダの中に移動してから
以下のコマンドを実行します。
vagrant init my-ubuntu14.04
実行すると「Vagrantfile」が生成されるので、最低限の設定をします。
(略)
↓コメントを外して有効化し、適当なipアドレスを設定します。
config.vm.network "private_network", ip: "192.168.33.10"
(略)
設定したら早速起動させます。
vagrant up
起動させたUbuntuの確認
vagrant upが正常に終了したら、sshで起動したUbuntuサーバにアクセスしてみます。
ssh vagrant@192.168.33.10
※初期ID:PASSWDは共に「vagrant」です。
必要に応じて、sudoコマンドを利用してapt-getや設定をしてください。
またrootに切り替えたい場合はsudo su
を利用してください。
まとめ
Packerを利用してisoからUbuntuのvagrant boxを生成する方法を紹介しました。
git cloneさせてもらったmy-packer-template-files内にcentos版のものも
入っているので、CentOSのものが必要になったらそちらを利用すると
きっとサクッと作れると思います。
間違い等、ありましたらご指摘をお願いします。
参考サイト
以下のサイトを参考にさせていただきました。ありがとうございました。
VirtualBox - PackerでVagrant用のBoxを作成したときのメモ - Qiita
http://qiita.com/ryurock/items/28690f2b1553601d684d
OSXでpackerでCentOS6.4のVirtualBox VMを作成する - Qiita
http://qiita.com/hnakamur/items/da0ed14192a18405f704
PackerでVagrantで使うVirtualBox用のboxを生成する | Fusic Developers Weblog
http://blog.fusic.co.jp/archives/3796
追記 [2015/03/28]
利用させて頂いているpackerのテンプレートの中の「scripts/postinstall.sh」のアップグレードコマンドの部分を
そのままに利用すると意図したバージョンのboxが出来ないことに気づいたのでその対処を追記しました。