chef-soloで使用するvirtualbox(vagrant)をveeweeを使用して作る
入門ChefSolo-InfrastructureasCode-1.0.0を買ってchefにハマっています。
Vagrantbox.esのvirtualboxですが外部にあるのでいつ変更されるかわからないとなるとせっかく作ったchefが思わぬところでエラーになるかもしれないのでveeweeを使ってカスタマイズして作ろうと思った時のメモ
ゴール
centos6.4-x86-minimalをカスタマイズして自分用のcentos6.4のvboxを作成すること
写経時間
約30分
環境
- mac-osx
事前準備に必要なもの
-
virtualbox
-
ruby 1.9.3p327 (rbenv) ※1.9.3-p286でもいけた
-
xcode
※ commandLineToolが必要です。入れていない方はInstalling Command Line Tools on OS X Mountain Lionを参考にインストールしておいてください。 -
XQuartz ※入れていない方はXQuartzいってXQuartz-2.7.4.dmgをポチっと押してインスコしておいてください
-
git
参考にしたサイト
vagrantとは?
vm(virtualbox,vmware)をコマンドラインで作成、起動などができるもの
chef-soloやるだけなら特に必要はないが、chef-soloをやる場合に何回も壊しては作るを繰り返すことになるので合ったほうが便利
ちなみにvagrantでもなくてもvirtualboxのコマンドでも頑張れば同様なことはできる。
chef-soloを使う為の箱の自動化処理部分を担ってくれる
veeweeとは?
vagrantで使用するvboxを作成するために補助してくれるツール
veeweeのテンプレートを使用していろんなOSのvagrantを作成することができます。
chef-soloを使う為の箱の設定を細かく簡単に指定できるツール。
vagrant(公式サイト)からのインストール
vagrantからDownloadとこいってインストールしてきてください。
公式はinstallerを各OSに提供しています。
コマンドラインがお好きな方はマウントまでこれで
curl -o Vagrant.dmg http://files.vagrantup.com/packages/64e360814c3ad960d810456add977fd4c7d47ce6/Vagrant.dmg
hdiutil mount Vagrant.dmg
bundlerを入れる
Vagrantで再現可能な仮想マシン開発環境をMacに構築すると一緒です
gem install bundler
veeweeをgitでcloneする
Vagrantで再現可能な仮想マシン開発環境をMacに構築すると一緒です
git clone git://github.com/jedi4ever/veewee.git
cd veewee
bundle install
veewee用のvagrantを入れる
veeweeのGemfileを修正してbundleのvagrantを入れる
#修正前
group :test do
gem "rake"
#gem "vagrant" , "1.0.7" #コメントアウトになってるので
#gem "chef"
#gem "knife-windows"
end
#修正後
group :test do
gem "rake"
gem "vagrant" , "1.0.7" #コメントアウトを外す
#gem "chef"
#gem "knife-windows"
end
cd veewee
bundle update
bundle install
veewee用といってるのは公式vagrantinstallerのvagrantではbasebox defineコマンドがないので入れられない為veewee用のvagrant (1.0.7)を入れる必要があるのです。
※ココらへんはruby知らないのでよくわからん。
veeweeのテンプレートからcentos6.4-x86-minimalを自分用にコピーする
説明合ってるのかな?
bundle exec vagrant basebox define {任意の名前} CentOS-6.4-x86_64-minimal
このコマンドでveewee/defintions
に{任意の名前}という名前のディレクトリが作成され設定ファイル郡ができます
defineの後の引数はvbox名にもなるのでお好きな名前でどうぞ
自分用に設定をカスタマイズする
自分が編集した部分は下記です
veewee/definitions/centos6.4-x86/definition.rb
:disk_size => '25600', #Mバイト単位で指定してください。今回は25GBで設定しました
:iso_src => "ftp://ftp.riken.jp/Linux/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso", #これ変更しないと時間かかる
veewee/definitions/centos6.4-x86/definition.rbでユーザーとかも変更出来ます。
veewee/definitions/centos6.4-x86/ks.cfg
lang ja_JP.UTF-8 #日本語
timezone Asia/Tokyo #timezone
veewee/definitions/centos6.4-x86/base.sh
vmを作成後に実行するものっぽい
yum -y install gcc make gcc-c++ kernel-devel-`uname -r` zlib-devel openssl-devel readline-devel sqlite-devel perl wget dkms nfs-utils rsync
#最後にrsync追加した
最後にrsyncを追加したのはVagrantbox.esのcentos6.4-x86には最初rsyncが入ってなくchef soloを実行しようとするとエラーになったので最初に入れます。
(そもそもこれが原因でvboxをインストール後ワンライナーでchefでインストール出来ないじゃんって思ってイラッと来てveeweeに手を出した)
きっとchef solo自体がリモートのosにchefコマンドを実行するのにrsyncを使ってる為だと思います。(きっとそう)
vboxをビルド(作成する)
iso落とす?って質問されますので「Yes」って答えた後はコーヒーでも飲んでじっくり待ちましょう(約10分くらい)
bundle exec vagrant basebox build centos6.4-x86
また最後に
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 7222 -l veewee 127.0.0.1
とコンソールで出力されるのでコピーして作成されたvboxにssh越しにログインできるか確認してください(パスワードはveewee/definitions/centos6.4-x86/definition.rbで設定したもの今回ならveewee)
vboxファイルのエキスポート
Vagrantで再現可能な仮想マシン開発環境をMacに構築すると一緒です(助かりました)
これでインポート用のベースとなるvboxは作成完了です。
(veeweeの役目もここまで)
bundle exec vagrant basebox export {任意の名前}
#{任意の名前}.boxというvboxができます
veeweeで作った{任意の名前}.boxを使用する
veeweeはあくまでosの雛形を作成するのが目的なのでveewee以外のディレクトリで作業したほうがいいと思います(別にそのままやっても問題無いです)
mkdir chef-soloでchefりたいディレクトリ
cd chef-soloでchefりたいディレクトリ
vagrant box add {任意の名前} veeweeで作成した.vboxのパス #vagrantにboxを追加
vagrant init {任意の名前} #設定ファイルVagrantfileを作成する
vagrant up #vboxを立ち上げる
以上でchef-soloまでの前準備は以上です。
Vagrantで再現可能な仮想マシン開発環境をMacに構築するには大変お世話になりました。
vagrantでよく使うコマンド
コマンド | 説明 |
---|---|
vagrant init | vboxの管理用設定ファイルを作成する(基本初回のみ) |
vagrant up | 作ったvboxの起動 |
vagrant ssh | sshでvboxにログイン |
vagrant ssh-config | vboxのssh設定を教えてくれる。(defaultのみ) |
vagrant ssh-config --host host名 | vboxのssh設定をHost名を変更して出力する。出力内容をホストOSの~/.ssh/configに貼り付ければssh 任意名前とかでssh接続ができる |
vagrant halt | vboxの停止(電源ポチ) |
vagrant reload | vboxの再起動 |
vagrant resume | vboxのレジューム |
vagrant package | vboxのパッケージを作るコマンド詳細は割愛 |
ハマリどころまとめ
何回も同じもの作ってるとエラーになる
そんな時はカレントユーザーにある
~/.vagrant.dをmvしましょう。
(正直中身は知りません)
大体のエラーの時に一回これをmvすると上手く行く
要は設定を新規にするのです。
Vagrantfileがすでにあるよって怒られる
そんな時はカレントディレクトリにある
Vagrantfileをmvしましょう。
(vboxの設定項目です。)
A VirtualBox machine with the name 'centos6.4-x86' already exists.って怒られる
vboxを削除するか
vagrant box add {任意の名前} --force veeweeで作成した.vboxのパス
--forceをつけましょう。(強制的に作り直します)
所感
ちなみにrubyは全く知りません。
classってどうやって作るの?レベルです。
でも少しやればできるレベルでした。(基本は設定いじるだけなのでrubyを書くことはない)
昔と現在で設定ファイルの書き方が若干変わってるみたいなのでそんな時はvagrant公式のドキュメントを見てみましょう。opscode(chefの開発元)みたいに膨大なドキュメントとかないので英語でも見やすいです。
chefをやってみたい!!って方の手助けになればと思います。
Discussion