😀

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

2022/11/28に公開

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

Discussion