Ubuntu
vagrant
packer
BOX

UbuntuのisoイメージからVagrant boxを作る方法

More than 3 years have passed since last update.

背景

ネット上に公開されているboxではなく、最新のバージョンでのVagrantのboxが必要になった。

目的

最新のisoイメージから最短で〜.boxファイルを生成してVagrantで利用できるようにします。

動作確認環境

os x ver10.9.5

必要なもの

  • homebrew
terminal
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"```
  • Vagrant
terminal
brew install vagrant
  • Packer
terminal
brew tap homebrew/binary
brew install packer

手順

packerのテンプレートの取得

Github上のテンプレートがとても便利なのでこちらを利用します。

terminal
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ではなくても問題無いです。

JSON,template.json
(略)
      "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ハッシュ値が出力されます。
terminal
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を一部修正する

そのまま実行するとアップグレードされてしまうので、該当箇所をコメントアウトする。

scripts/postinstall.sh
apt-get -y update
apt-get -y upgrade
   ↓
#apt-get -y update
#apt-get -y upgrade

Packerを実行→boxファイル出力

Packerの以下のコマンドでboxを生成。

terminal
packer build -only=virtualbox-iso template.json

マシンスペックによりますが、数十分くらいで自動で終了し
「packer_virtualbox-iso_virtualbox.box」が生成されます。
※Virtualboxやterminal内でいろいろとコマンドが自動で実行されますが触らず放置しておいてください。

vangrant box addでboxファイルを登録

先ほど生成したboxファイルをvagrantコマンドで登録します。

terminal
vagrant box add my-ubuntu14.04 packer_virtualbox-iso_virtualbox.box

「my-ubuntu14.04」の部分は任意で変更可能です。
適当にわかりやすい名前をつけてください。
数分待つと、boxが登録されます。以下のコマンドで確認出来ます。

terminal
vagrant box list

出力
my-ubuntu14.04  (virtualbox, 0)

Vagrantで登録したboxを利用する

適当なからのフォルダを作成し、そのフォルダの中に移動してから
以下のコマンドを実行します。

terminal
vagrant init my-ubuntu14.04

実行すると「Vagrantfile」が生成されるので、最低限の設定をします。

(略)
↓コメントを外して有効化し、適当なipアドレスを設定します。
config.vm.network "private_network", ip: "192.168.33.10"
(略)

設定したら早速起動させます。

terminal
vagrant up

起動させたUbuntuの確認

vagrant upが正常に終了したら、sshで起動したUbuntuサーバにアクセスしてみます。

terminal
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が出来ないことに気づいたのでその対処を追記しました。