Edited at

chef-soloで使用するvirtualbox(vagrant)をveeweeを使用して作る

More than 5 years have passed since last update.

入門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を入れる


veewee/Gemfile

#修正前

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


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


veewee/definitions/centos6.4-x86/ks.cfg

lang ja_JP.UTF-8 #日本語

timezone Asia/Tokyo #timezone


veewee/definitions/centos6.4-x86/base.sh

vmを作成後に実行するものっぽい


veewee/definitions/centos6.4-x86/base.sh

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分くらい)


veewee/definitions/centos6.4-x86/base.sh

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をやってみたい!!って方の手助けになればと思います。