scramble cadenza

技術ネタのガラクタ置き場

今だからこそ veewee のおさらい

イントロ

敢えて packer ではなく、veewee 使ってみるの巻。packer は後日。
packer 使うにも veewee のテンプレートを流用できるし、ついでに veewee も使えるようになっておいて損はないはず。
AWS 使わないなら veewee でも packer でも変わらないですから。

と言い訳じみてますが、せっかく蓄えた知識なので、吐き出して整理したいがために書いてみた記事であったりします。

用語集

veewee って何?

veewee とは「box」を創りだしてくれるツールです。 Vagrant という別のツールがあり、Vagrant は boxを元に、バーチャルマシン上に環境を構築してくれるものです。

つまり veewee 単体では box を作るだけであまり意味はなく、Vagrant とセットで使われるものです。

box って何?

box とは「環境の種」のようなものです。

上で述べたとおり、Vagrant は box を使って build を行います。すると「種」から環境を構築してくれるわけです。

veewee では「種」を巻く場所も決めることができます。(場所 = プロバイダ のことです)
また、種は再度埋めれば同じ花が咲くように、「新しく環境を作っても、消して再度やり直し」が可能です。

ところで veewee は box を「テンプレート」と呼ばれる設定ファイルから作成します。 なので設定を書けば、自在に box を作成することができます。

プロビジョニング(provisioning) って何?

provisioning とは「ユーザー任意の環境を事前準備し、提供する」の意味です。先程から環境環境って、環境って一体なによ?というと具体的には以下が該当します

  • OS
  • サーバーの初期設定
    • iptables とか hosts とか...
  • リポジトリ管理されているパッケージ、ライブラリ
    • gcc とか、make とか...
  • ソースコード
    • github 上に上がっている自分用のアプリケーションとか...

などなどです。
時々 「provisioning ツール」なんて言葉を聞くのですが、これは 所謂 chef, Ansible, などの構成管理ツールとほぼ同義で、veewee も(ギリギリ)その仲間だったりします。(多分)

プロバイダ(provider) って何?

環境を構築する場所」 を指します。
例えば 「Virtual box」とか「AMI」とか「VMware」などが挙げられます。
Vagrant, veewee では引数にプロバイダを指定して、コマンドを実行することがあります。

重要なんですが veewee では AMI(AWS) は使えません。使いたい場合は packer を使いましょう

準備

veewee は gem で提供されているので、インストールします。
jedi4ever/veewee

$ gem install bundler
$ touch Gemfile #=> gem 'veewee' と書いておく
$ bundle install --path vendor/bundle

bundler で install するほうが、 install 失敗した場合に Try and Error がやりやすくなるため、このようにしています。
が、普通に gem install veewee でもよいかと思います。

今のところ以下の環境で動いています。

  • OSX 10.8.5
  • veewee (0.3.12)
  • vagrant(1.3.5) ← 公式サイトの dmg でインストール

この記事では virtual box で使う用の box を生成してみることにします。

virtual box 用以外の provider の box を作りたければ、以下のコマンドの "vbox" の部分を、それぞれ"fusion" , "kvm", "pararel" に置き換えればよいです。簡単ですね。
詳しくはヘルプ見るべし。

テンプレートを作る

テンプレートとは box を作成するための設定ファイル群のことを言います。
これも veewee のお力で、コマンドライン一発で自動生成できます。

今回は数あるテンプレートのうち、「CentOS-6.4-x86_64-minimal」を作ってみることに。

$ bundle exec veewee vbox define <boxname> 'CentOS-6.4-x86_64-minimal'

boxname はなんでも良く、今回はまんま 'CentOS-6.4-x86_64-minimal' に。
この名前は definitions 配下に作られる directory の名前になります。

どんなテンプレートが用意されているのか、確認するのは以下。

$ bundle exec veewee vbox templates

このコマンドで、テンプレート一覧が見れる。windows, ubuntu, Fedora, なんでもござれ。

definition を実行すると、以下のように設定ファイルが生成されます。

.
└── definitions
    └── CentOS-6.4-x86_64-minimal # <= 先ほどの <boxname> で directory が切られる!
        ├── base.sh
        ├── chef.sh
        ├── cleanup.sh
        ├── definition.rb
        ├── ks.cfg
        ├── puppet.sh
        ├── vagrant.sh
        ├── virtualbox.sh
        ├── vmfusion.sh
        └── zerodisk.sh

設定ファイルのうち、特に重要なのは2つ。

  • ks.cfg
    • OS を install している最中の boot コマンドっぽいもの
    • ks = kick start のこと(?)
    • 言語を設定したり、ネットワークを設定したり、ユーザー作ったり、....
  • definition.rb
    • 作成された設定ファイルを取りまとめているファイル
    • cpu はいくつ? メモリのサイズは? ディスク容量はいくつにする? とかを書く。
    • postinstall_files で install 後に実行するシェルスクリプトを羅列することができる。
      • 実はここに他の base.sh, chef.sh などが書かれていたりする。

definition.rb にも書いてあるけれど、他は OS が入った後に呼び出されるシェルスクリプトなので、重要な設定はこの2つに書かれていると見ていい。

設定ファイルを修正する

基本的にはこのまま動くだろうが、いくつか修正

box を作ってみる

$ bundle exec veewee vbox build 'CentOS-6.4-x86_64-minimal'

「The box CentOS-6.4-x86_64-minimal was built successfully!」と表示されたら、成功。
続いて現在の設定で作った box を export します。

$ bundle exec veewee vbox export CentOS-6.4-x86_64-minimal

これでローカルに "CentOS-6.4-x86_64-minimal.box" が作成できました

まとめ

veewee を使って box を自作する方法と、忘れがちな用語をまとめました。
一度 box を自作したら、色々なところで使いまわせるのが、便利なところでしょう。