読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

Veeweeでplenv入りのBoxを作る!

vagrant

いろいろありまして(察して下さい), Veeweeを使って, plenvを導入済みのVagrant用Boxを作る機会があったので, それについていろいろまとめておきます.

参考資料

この記事を書くにあたって, 次のサイトの情報を参考にさせて頂きました.
この場を借りて御礼申し上げます. ありがとうございました.

Vagrant 1.2.2とveeweeとberkshelfで仮想マシンを作る
veeweeを使ってVagrant用のboxを自分で作る方法

Veeweeのインストール

MacのMountain Lionに入れたVagrant 1.2.7の場合,

$ vagrant plugin install veewee

てな感じでインストールしようとすると, エラーが出たのでrbenvを使って導入します.

$ brew install rbenv
$ brew install ruby-build
$ echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.zshrc
$ exec $SHELL -l
$ rbenv install 1.9.3-p448
$ rbenv rehash
$ rbenv global 1.9.3-p448
$ gem install bundler
$ rbenv rehash

Homebrew, 楽でいいですね.
というわけで, お次はrbenvで導入したRubyとBundlerを使ってVeeweeを入れて行きましょう.

$ git clone https://github.com/jedi4ever/veewee.git ~/veewee
$ cd ~/veewee
$ bundle install

これでVeeweeの導入が終わりました.
いちいち'~/veewee'に移動してコマンドを入力するのは面倒なので, かなりバッドノウハウな感じがしますが,

#!/bin/sh
cd ~/veewee
bundle exec bin/veewee $@

こんな感じのシェルスクリプトを使って, 実行するようにしています.

ひな形の生成

それでは, VeeweeでBoxを作って行きましょう.
まずはBoxのひな形を作ります.

$ veewee vbox define CentOS-6.4-perl 'CentOS-6.4-x86_64-minimal'

このコマンドで, CentOS 6.4をベースとしたBoxのひな形を用意することができます.
今回は, perl入りのBoxなので, 「CentOS-6.4-perl」という名前にしてみました.

なお, デフォルトで定義されているひな形については,

$ veewee vbox templates

で確認することができます.

...さて, 作成したひな形は, '~/veewee/definations'に配置されます.

$ cd ~/veewee/definations
$ ls
CentOS-6.4-perl5.16.3

ディレクトリの中身は, こんな感じです.

cd ~/veewee/definations/CentOS-6.4-perl5.16.3
$ ls
base.sh       cleanup.sh    ks.cfg        vagrant.sh    vmfusion.sh
chef.sh       definition.rb puppet.sh     virtualbox.sh zerodisk.sh

Veeweeでボックスを作る際に, このディレクトリ内にあるシェルスクリプトを実行して, 任意の環境を作り出すことができます.
実行させたいシェルスクリプトは, 'defination.rb'の,

  :postinstall_files => [
    "base.sh",
    #"chef.sh",
    #"puppet.sh",
    "vagrant.sh",
    "virtualbox.sh",
    #"vmfusion.sh",
    "cleanup.sh",
    "zerodisk.sh"
  ],

この部分で指定します.
デフォルトでは, 'chef.sh'や'puppet.sh'が有効なのですが, あまり使わないのでコメントアウトしたりしています.

例えばですが, インストール時に自動的にGitも入れておきたい場合, 'git.sh'というファイルに

yum -y install git

と書いておいて, 'defination.rb'に

  :postinstall_files => [
    "base.sh",
    #"chef.sh",
    #"puppet.sh",
    "vagrant.sh",
    "virtualbox.sh",
    #"vmfusion.sh",
    "git.sh",
    "cleanup.sh",
    "zerodisk.sh"
  ],

と書いておけば, 'git.sh'が自動的に実行され, yumを使ってGitがインストールされるようになります.

Boxの生成

それでは, いよいよBoxを生成していきます.

$ veewee vbox build CentOS-6.4-perl

後は自動的にOSのISOをダウンロードしたり, VirtualBoxが動き出したりして, 初期設定を行なってくれます.
これで, 指定されたひな形に従ったVMが立ち上がりました. sshで繋いで, plenvを入れましょう.

$ ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p xxxx -l veewee xxx.xxx.xxx.xxx

おそらく, 最後にこのようなVMへのアクセス方法が出力されているはずなので, これにしたがってVMにつなげます.
パスワードは, 特に変更していなければ'veewee'になっているはずです.

初期状態では, 立ち上げたVMに対して'veewee'というユーザーでログインするので, plenvを使ってPerlを導入するのであれば, vagrantで使う'vagrant'ユーザーに切り替える必要があります.

$ su - vagrant

で切り替えましょう. パスワードは, 指定していなければ'vagrant'のはずです.

まあぶっちゃけ,

$ ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p xxxx -l vagrant xxx.xxx.xxx.xxx

というコマンドを使えば, 多分直接'vagrant'ユーザーでVMにつなげる事ができると思います.

Boxの出力

plenvを入れたり, Perlを導入したり, cpanmを入れたりして, 満足のいくBoxが仕上がったら, Boxを出力してVagrantで使えるようにしましょう.

※plenvの導入法については, こちらの記事とかを参考にどうぞ.

$ veewee vbox export 'CentOS-6.4-perl'

後は, 生成したBoxをvagrantに追加するだけです.

$ veewee vbox add 'CentOS-6.4-perl'

このBoxからVMを立ち上げると, Veeweeで設定した通りの環境がVMで使えるようになっているはずです.

まとめ

Veeweeを使って, Vagrant用のBoxを生成する方法をまとめてみました.

この辺で公開されているBoxを使うのは, 趣味の場面はともかく, 業務の場面だといろいろ危険が危ない感じがするので, VeeweeでいちからBoxを作った方が安心できそうですね.
いろいろと, 自分にとって都合のいい初期設定を行う事もできますし.