{ 2014.1.29 }

PackerでVagrantで使うVirtualBox用のboxを生成する

    はてなブックマーク - PackerでVagrantで使うVirtualBox用のboxを生成する
    このエントリーをはてなブックマークに追加

    小山です。

    久しぶりにEmacsの設定を見直そうとしたら、自分のあまりのelisp脳の衰退に驚愕しました。

    さて、明日の1月30日はFusic 勉強会 #6が開催されます。

    Fusic勉強会 #6

    自分は「実践Vagrantを利用したサーバ移行 (VagrantのMultiVM設定からさくらVPSの複数台構成まで)」というタイトルで発表をします。

    内容としては

    いままで複数台構成の専用サーバで数年運用していたシステムを、複数台構成のさくらVPSに移行するプロジェクトが発生。移行前にまずはVagrantのMulti-Machine機能を使ってローカル上で複数台環境を構築、サーバの設定を全てAnsibleに移行し、ローカルでテスト。最終的にそのAnsible設定を『そのまま』実行して複数台構成のさくらVPSへの移行を実現。

    という内容なのですが、実は上の話の前に「PackerでVagrant用boxを作る」という作業がありました。

    明日の勉強会ではその話は飛ばしますので、ここで紹介したいと思います。

    なお、今回の内容はまさに「OSXでpackerでCentOS6.4のVirtualBox VMを作成する」を参考に作業したものですので、是非こちらもご覧ください。

    Packerとは何?

    VMWareやVirtualBoxを開発で利用するようになってから結構立つかと思いますが、最近はVagrantとかPackerとかDockerとかいろいろ便利と言われるツールがでてきて、混乱しますね(自分はしました)。

    で、今回利用するPackerとは何で、どこが便利なのか、良く分からない人もいるかと思います。

    Packerの正確な説明は、皆さんがググった結果や他のサイトにお任せしますが、「個人的で局所的」なPackerの利便性の説明をしてみます。

    VirtualBoxを便利に使うためのVagrantを便利に使うためのPacker

    既に「VirtualBox」と絞ってしまっていますが、「個人的で局所的」なのでご勘弁を。

    VirtualBoxなどの仮想環境を使ったことがある人は多いと思いますが、そのVMの生成のためには「(isoなどを利用した)OSのインストール」が必要で、毎回毎回「インストール時間分」時間がかかっていました。

    それをVirtualBoxの「仮想イメージのインポート/エクスポート機能」をつかって、時間の短縮した人もいるかと思いますが、その部分を担っているのがVagrantです。

    Vagrantは「box」という仮想イメージを管理し、必要に応じてその仮想イメージからVMを簡単にVirtualBoxに生成できるわけです。
    (さらにVMwareでも!的な話は省略します)

    じゃあ、その「box」はどこからもってくるの?となるわけですが、まず2つが考えられます。

    • ネット上に公開されているboxを利用
    • VirtualBox内で動いているVMから生成

    「ネットで公開されているboxは何がインストールされているかわからないからちょっと。。。」という人は必然的に「VirtualBox内で動いているVMから生成」となるわけですが、じゃあ、その「VirtualBox内で動いているVM」はどうやって作るの?また自分でisoから作るの?面倒!となるわけです。

    (Vが頭文字の単語が頻出して、だんだん禅問答みたいになってきましたが、もう少しだけがんばってください)

    その最後の面倒な部分を担うのがPackerです(と、思っています)。

    Packerは、例えば「VirtualBoxのVMをisoから作成し、そこからVagrant用boxを作る」という部分を、「JSONで記述された設定ファイル(といくつかのスクリプト)」を用意するだけで自動化してくれるのです。

    個人的なPackerのポイントは「JSONで記述された設定ファイル(といくつかのスクリプト)」という部分です。

    JSONやスクリプトはバイナリと違い、自分で読めるので、「ネットで公開されているもの」を使いやすいのです。

    ChefのコミュニティCookbookのように夢が広がりますね(Ansible使いですが)。

    Packerでboxを作ってみる

    VirtualBoxは既にインストールしてある前提です。Packerのインストールは「INSTALL PACKER」を参考にしてください。

    今回はCentOS6.5のVirtualBox用boxを作ります。Packerはv0.5.1を前提にしています。

    Packer用JSONファイルを探す

    自分でpacker.jsonを記述するのは面倒なので、インターネット上から設定を探します。
    github.com/hnakamur/my-packer-template-files がとても素晴らしいので、こちらを使います。

    $ git clone github.com/hnakamur/my-packer-template-files

    設定の中身を確認する

    $ cd my-packer-template-files/centos6.5

    centos6.5/template.json を確認するとprovisionersでいくつかスクリプトを実行しているようなので、それぞれのスクリプトで何が実行されているか確認します。

    例えばcentos6.5/scripts/vagrant.sh のスクリプトはVagrantで使う前提の設定をしてくれているなど、いろいろな設定が実行されています。感謝しかありません。

    Packerを実行する

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

    はい。終わりです。packer_virtualbox-iso_virtualbox.boxというboxが生成されているので、こちらのVagrantのboxとして追加するだけです。

    $ vagrant box add centos6.5 packer_virtualbox-iso_virtualbox.box

    最後に

    ここまで見ていただいた方はおわかりかと思いますが、
    Qiitaの参考URLも、使ったPacker用JSONもHiroaki Nakamuraさんが公開されているものです。
    素晴らしい情報を提供していただいたNakamuraさんにこの場を借りて御礼を言いたいと思います。
    どうもありがとうございます!

    というわけで、続きはFusic勉強会 #6で!

    comments

    1. […] PackerでVagrantで使うVirtualBox用のboxを生成する | Fusic Developers Weblog: […]