Edited at

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