Vagrantで使用するCentOSのboxをWindows7でVeeweeを使って作成

作成するBox

CentOS 6.3 64bit
他のバージョンも同じ感じで作成できます。

環境

Windows 7 Professional 64bit SP1
msysgit 1.8.5.2
VirtualBox 4.3.6
Vagrant 1.4.3
Ruby 2.0.0-p353

msysgitをインストール

以下から最新版をダウンロードする
http://code.google.com/p/msysgit/downloads/list
ダウンロードしたときは「Git-1.8.5.2-preview20131230.exe」が最新でした。

インストールを進めると以下のダイアログが表示されますので、
「Run Git and included Unix tools from the Windows Command Prompt」を選択してインストールします。
f:id:shiroemons:20140208131621p:plain

簡単に言うとこれを選択してインストールすれば、LinuxのコマンドがいろいろWindows上で使用できます。

VirtualBoxをインストール

以下から最新版をダウンロードする
https://www.virtualbox.org/wiki/Downloads
ダウンロードしたときは、「VirtualBox-4.3.6-91406-Win.exe」が最新でした。

特に気にせずインストールを進める。

Vagrant のインストール

以下から最新版をダウンロードする
http://www.vagrantup.com/downloads.html
ダウンロードしたときは、「Vagrant_1.4.3.msi」が最新でした。

Vagrantインストール後、再起動を要求されるので再起動します。

Ruby、DevKit のインストール

以下から最新版をダウンロードする
http://rubyinstaller.org/downloads/
ダウンロードしたときは、
Ruby:「rubyinstaller-2.0.0-p353.exe」
DevKit:「DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe」
が最新でした。

因みに32bit版をダウンロードしました。
64bit版でも問題なかったですが、別件で、使おうとしたnokogiriが64bit版に対応してなかったから;;

Ruby

Rubyのインストールを進めると以下のダイアログが表示されますので、
Ruby の実行ファイルへ環境変数 PATH を設定する」を選択してインストールします。
f:id:shiroemons:20140208131624p:plain

DevKit

DevKitは、任意の場所に展開します。今回は、「C:\DevKit」に展開します。
コマンドプロンプトを開き以下のコマンドを実行し、DevKitをインストールします。

> cd C:\DevKit
> ruby dk.rb init
> ruby dk.rb install

Bundler のインストール

コマンドプロンプトを開き以下のコマンドを実行し、Bundlerをインストールします。

> gem install bundler --no-ri --no-rdoc

Veewee

前準備

改行コードの問題を減らすための対応。
チェックアウトするときに行末の LF を CRLF に自動変換されないように無効にします。

> git config --global core.autocrlf false

作業フォルダは適当に。
CentOSのISOをダウンロードするので、Cドライブ以外が良いかと思います。

Veeweeをclone

> git clone git://github.com/jedi4ever/veewee.git

フォルダ移動とbundle install

> cd veewee
> bundle install

これで、Veeweeを使える環境が整いました。

Box の作成

テンプレートの表示

> bundle exec veewee vbox templates

Box 作成

今回は、CentOS 6.3 64bit版のBoxを作ります。

> bundle exec veewee vbox define 'CentOS-6.3-x86_64' 'CentOS-6.3-x86_64-minimal'

上記を実行すると、Veeweeフォルダ配下に definitions/CentOS-6.3-x86_64 が作成されます。

設定をカスタマイズ

ks.cfg

言語とキーボードの設定やSELinuxの設定などなど

自分は以下に変更しています。

lang ja_JP.UTF-8
keyboard jp106
timezone --utc Asia/Tokyo

SELinuxが有効になっている場合は、無効にしておく。(CentOS 5.9のboxを作った時に行った設定)

selinux --enforcing

上記を以下のように。

selinux --disabled

ファイル開いて書き換えるのが面倒なので、sedコマンドで置換したりしてます。

> cd definitions\CentOS-6.3-x86_64
> cp -ip ks.cfg ks.cfg.bak
> sed -i -e "s/lang en_US\.UTF-8/lang ja_JP\.UTF-8/g" ks.cfg
> sed -i -e "s/keyboard us/keyboard jp106/g" ks.cfg
> sed -i -e "s/timezone UTC/timezone --utc Asia\/Tokyo/g" ks.cfg

definition.rb

このファイルで仮想マシンのディスクサイズやメモリ、OSのイメージファイルのダウンロード先、
インストール作業自体のタイムアウトや標準のインストールが終わったあとの追加のインストール作業の設定が可能です。

ISOファイルをダウンロードするミラーサーバーを以下に変更

http://ftp.riken.jp/Linux/centos/

デフォルトだと、ISOファイルが削除されているので変更は必須かと。
あと上記のミラーサーバーだと古いバージョンのCentOSのISOも残してるので重宝してますw

不要なインストールはここで、コメントアウトする。

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

puppetクライアントのインストールが必要がない場合は、

    #"puppet.sh",

のようにします。

これもsedコマンドで置換したりしてます。

> cp -ip definition.rb definition.rb.bak
> sed -i -e "s/www\.mirrorservice\.org\/sites\/mirror\.centos\.org/ftp\.riken\.jp\/Linux\/centos/g" definition.rb
> sed -i -e "s/\"puppet\.sh\",/#\"puppet\.sh\",/g" definition.rb
ruby.sh

デフォルトで記載されているものを削除、以下に修正する。

cd /tmp
wget http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz || fail "Could not download Ruby source"
tar xzvf ruby-2.0.0-p353.tar.gz
cd ruby-2.0.0-p353
./configure
make && make install
cd /tmp
rm -rf /tmp/ruby-2.0.0-p353
rm /tmp/ruby-2.0.0-p353.tar.gz
ln -s /usr/local/bin/ruby /usr/bin/ruby # Create a sym link for the same path
ln -s /usr/local/bin/gem /usr/bin/gem # Create a sym link for the same path

デフォルトのままでは、ruby 1.8.7 がインストールされます。
chef.shでインストールされる chef が ruby 1.8.7 で使えなくなって失敗したため、Ruby 2.0.0 をインストールしました。

sedコマンドで置換した時にフォルダ移動したので前のフォルダに戻る。

cd ../../

boxをビルド

> bundle exec veewee vbox build 'CentOS-6.3-x86_64'

途中ISOファイルをダウンロードするか聞かれるので、 yes を入力し Enter を押します。

Download? (Yes/No) yes[Enter]

ISOファイルがダウンロードされ、自動的に VirtualBox のウインドウが起動し、OSのインストールが進んでいきます。
仮想マシンで64bitのOSが動作できない場合、途中で失敗します。しかしコマンドプロンプトではエラーが表示されず、中々返ってこないので、
VirtualBox のウインドウを確認してるとすぐ気づきます。
あまりないけど、1回あったので記載しておきます。

このビルドは結構時間が掛かります。

ISOファイルは、Veeweeフォルダ直下のisoフォルダにダウンロードされています。

boxをエクスポート

> bundle exec veewee vbox export 'CentOS-6.3-x86_64'

上記のコマンドで、起動しているCentOSに、シャットダウンコマンドが送られるので、
VirtualBox のウインドウでCentOSにログインし、シャットダウンする必要はありません。

エクスポートが完了すると、Veeweeフォルダ直下に以下のboxファイルができます。

CentOS-6.3-x86_64.box

ユーザー情報

ユーザー パスワード
vagrant vagrant
veewee veewee
root vagrant