今だからこそ 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つに書かれていると見ていい。
設定ファイルを修正する
基本的にはこのまま動くだろうが、いくつか修正
- base.sh
- splite-devel を削除
- 必要ないし...
- splite-devel を削除
- definition.rb
- :memory_size => 1024
- 必要に応じて
- :iso_src => "http://ftp.riken.jp/Linux/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso" に変更
- 「iso が見つからない」と怒られた場合はここを修正すれば良い。
- :iso_md5 は変える必要はなし。http://ftp.riken.jp/Linux/centos/6.4/isos/x86_64/md5sum.txt を見る。
- :postinstall_files => chef.sh, puppet.sh を削除
- 今回は必要ないかもしれない
- 必要に応じて追記したり、コメントアウトしたり。
- :memory_size => 1024
- ks.cfg
- keyboard => jp106
- 日本語使いたい
- lang => ja_JP.UTF-8
- 日本語使いたい
- timezone => Asia/Tokyo
- 日本時間がいい
- keyboard => jp106
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 を自作したら、色々なところで使いまわせるのが、便利なところでしょう。