geek.conf.2

あるエンジニアの備忘録

vagrant/chef-soloでいろいろprovisioningしたvmware fusionをbox化してAtlasにアップロード

※ローカルはmac OS X Yosemiteです。

1. Vagrant plugin for vmware fusionをインストール
# vagrant plugin install vagrant-vmware-fusion
# vagrant plugin license vagrant-vmware-fusion license.lic
※license.licはhashicorpから買う。確か$79だった。

2.centos6.4のvmware fusion用boxをadd
www.vagrantbox.es
から適当に。
# vagrant box add centos6-vmware_fusion https://dl.dropbox.com/u/5721940/vagrant-boxes/vagrant-centos-6.4-x86_64-vmware_fusion.box

3.vagrant up --provider=vmware_fusionする
このままprovisioningすると以下のエラーがでる。
default: Waiting for HGFS kernel module to load...
これを回避するためにprovisioningせずにただupして、sshして以下のコマンドを実行する。
echo "answer AUTO_KMODS_ENABLED yes" | sudo tee -a /etc/vmware-tools/locations

4.一旦box化
# cd .vagrant/machines/default/vmware_fusion/xxxxxxxx/
# /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -d Virtual\ Disk.vmdk
※Defragment
# /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k Virtual\ Disk.vmdk
※Shrink
# rm -f vmware*.log
# tar cvzf centos-6.6-vmware_fusion-tmp.box ./*

5.box addする
# vagrant box remove centos6-vmware_fusion
# vagrant box add centos6-vmware_fusion centos-6.6-vmware_fusion-tmp.box

6.chef-soloでprovisioningしてserverspecでテスト
Vagrantfileでvagrant up --provider=vmware_fusion
※cookbookやらspecは適当に。
Vagrantfileについて
config.vm.box = "centos6-vmware_fusion"とする。
ミソはconfig.ssh.insert_key = falseを追加すること。
なんかv1.7.0以上だとinsecure keyっていうここのキーペアを利用している場合、replaceするらしい。DLしたvmware fusion用boxはここのキーペアを利用しているので、とりあえずreplaceしないようにconfig.ssh.insert_key = falseを追加する。

あとsudoレシピでvagrantユーザを追加しています。じゃないとserverspecをsudoでやると失敗します。

7.正式box化の準備
vagrant sshでprovisioningしたvagrant boxにログインして
box化のためのお掃除をする。
# vagrant ssh
$ sudo yum clean all
$ sudo rm -rf /tmp/*
$ sudo rm -f /var/log/wtmp /var/log/btmp
$ history -c
$ sudo shutdown -h now

8.正式box化
# cd .vagrant/machines/default/vmware_fusion/yyyyyyyy/
# /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -d Virtual\ Disk.vmdk
※Defragment
# /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k Virtual\ Disk.vmdk
※Shrink
# rm -f vmware*.log
# tar cvzf centos-6.6-vmware_fusion-cust.box ./*

9.正式box add
# vagrant box remove centos6-vmware_fusion
# vagrant box add centos6-vmware_fusion centos-6.6-vmware_fusion-cust.box

10.vagrant up からのserverspecでprovisioning
# vagrant up --provider=vmware_fusion --provision-with serverspec
※エラーが出ないことを確認する

11.Atlasにアップロード
centos-6.6-vmware_fusion-cust.boxをAtlasにアップロードする。
tsubauaaa/centos6.6-tsuba

12.box add
vagrant box add tsubauaaa/centos6.6-tsuba --provider=vmware_fusion
※とかアップロード先のAtlasのbox名およびproviderを指定する。

コードはこちら:tsubauaaa/Vagrant/centos6_vmware_fusion

vagrant