書き物

技術とか作った物の話とか愚痴文句感想など

Windows で Vagrant 用の FreeBSD-9.1-RELEASE-i386 の Box を作る

最近では、サーバーの設定も自分の手でするのではなく、フレームワークに管理させる方法が良いみたいですね。ということで、買いました。

この中で、設定が正しくサーバーへ適用されるかのテスト環境として Vagrant が紹介されていました。Vagrant を導入すれば、サーバーの実行環境を 10 分かそこらで準備出来るようです。 Vagrantで簡単仮想マシン構築 | Ryuzee.com

僕が対象としている OS は FreeBSD だったのですが、「A list of base boxes for Vagrant - Vagrantbox.es」には 64bit 版しか無く、いざ環境を構築してみても、実行出来ませんでした。BIOS 設定を変えたら出来るという話もありましたが、それでも無理でした。

調べてみると、VeeWee というオリジナルの Vagrant 用 Box を作るツールがある模様。しかし VeeWee の Box のテンプレートを見たところ、64bit 版だったり、サーバーでなかったりと、希望の物はありません・・・。

ということで、32bit 版 FreeBSD の最新版で Vagrant 用の Box を作ってみます。

対象環境

1. VirtualBox インストーDownloads – Oracle VM VirtualBox」から「VirtualBox-4.2.10-84105-Win.exe」をダウンロード、インストールします。 インストール先の「VirtualBox」フォルダへパスを通しておきます。

2. Ruby インストー Windows7 だと権限周りで RubyGems での環境構築が若干面倒くさそうな気配です。なので、「Downloads」から 7z 形式(ruby-2.0.0-p0-i386-mingw32.7z)でダウンロード、解凍、配置、パスを通しました。

また、Vagrant を使うには「Development Kit」も必要なようです。上記ページから「DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe」をダウンロード、解凍(ダブルクリックしても無反応でしたが、7z で解凍したらうまくいきました。)、インストールしました。インストール方法はこちら→「DevKitのインストール - Railsインストール

3. Vagrant / Veewee インストー Vagrant公式だと V1.1.5(2013/04/09 時点)ですが、VeeWee などのプラグインが最新版だと動かないので、RubyGems に登録されているバージョン(1.0.7)をインストールします。 「vagrant ユーザよ、その VM は安全なのか? (veewee のすゝめ) - Hack like a rolling stone」の「veewee のインストール」を参考にインストールします。 (ちなみに、この時「Gemfile」に “gem ‘sahara’” を入れておくと、sahara もインストール出来ます。この記事内では使いませんが・・・) なお、途中の “bin/vagrant” は、Windows だと “ruby bin/vagrant” で実行可能です。

4. Box の作成 基本的な手順は「veeweeでVagrant用仮想マシン(Base Box)を作成する - jitsu102’s blog」の「Base Box の作成」の通りにコマンドプロンプトでコマンドを打てば良いですが、ところどころ自分で工夫します。

4.1. 定義作成 以下コマンドでとりあえず枠組みだけは標準のテンプレートで作っておきます。 ruby bin/vagrant basebox define FreeBSD-9.1-RELEASE-i386 freebsd-9.0-RELEASE-amd64 カレントディレクトリに「.definitions\FreeBSD-9.1-RELEASE-i386」が出来るので、その中身を「veewee/templates/freebsd-9.1-RELEASE-amd64 at master · jedi4ever/veewee · GitHub」の 3 ファイルで置き換えます。

次に「.definitions\FreeBSD-9.1-RELEASE-i386\definition.rb」を以下の通り修正します。

4.2. Box にする OS のインストー 以下のコマンドを実行します。 ruby bin/vagrant basebox build FreeBSD-9.1-RELEASE-i386 ISO ファイルのダウンロード、FreeBSD のインストール、Box にするにあたっての各種設定が自動で行われます。 (結構時間かかる)

注意点としては、 ISO ファイルのダウンロードが完了すると、VirtualBox が立ち上がり、「.definitions\FreeBSD-9.1-RELEASE-i386\definition.rb」の以下のコマンドがコンソールへ入力されるのですが、 :boot_cmd_sequence => [ ‘’, ‘load geom_mbr’, ‘’, ‘load zfs’, ‘’, ‘boot -s’, ‘’, ‘’, ‘/bin/sh’, ‘mdmfs -s 100m md1 /tmp’, ‘dhclient -l /tmp/dhclient.lease.em0 em0’, ‘’, ‘echo “Sleeping for 10 seconds, then running install script.”’, ‘sleep 10 ; fetch -o /tmp/install.sh http://%IP%:%PORT%/install.sh && chmod +x /tmp/install.sh && /tmp/install.sh %NAME%’ ], このコンソールへの入力作業が僕の環境では非常に不安定で、入力がダブったり、タイミングがずれたりと、正しくコマンドを入力してくれませんでした。もし同じ問題が起きるのであれば、「:boot_cmd_sequence」の内容をダミーの値にしておいて、直接自分で手入力した方が確実なような気がします。 途中の環境変数「%IP%」「%PORT%」「%NAME%」は、「:boot_cmd_sequence」へ'echo' とかでダミーコマンドにしておけば、内容を確認できます。

4.3. Box の出力 以下コマンドで、4.2 の時に VirtualBox 上にインストールされた FreeBSD が box ファイルとして出力されます。 ruby bin/vagrant basebox export FreeBSD-9.1-RELEASE-i386 完了したらカレントディレクトリへ「FreeBSD-9.1-RELEASE-i386.box」が作成されます。

5. Vagrant で実行veeweeでVagrant用仮想マシン(Base Box)を作成する - jitsu102’s blog」の「仮想マシンの起動」に則り、box ファイルの取り込みから、実行まで出来ます。

OS の操作は SSH 経由で行います。 Vagrant には ruby ../../bin/vagrant ssh という SSH 接続のコマンドが用意されていますが、Windows では使えないようです。 このコマンドを実行すると、接続先情報が表示されるので、何か他の SSH クライアントで接続しましょう。 (ユーザー、パスワードは共に “vagrant” です。)

以降はこの Box を基に、手軽に OS を再構築したり破棄したり自由自在です。

終わりに 何となく仕組みがわかったので、また OS が更新されたら、また自分で Box を作れそうな気がします。Chef Solo 弄るわ!

1 点疑問が、 ruby bin/vagrant haltFreeBSD のシャットダウンが出来ますが、電源までは自動で切れないようです。そのため、このコマンドが返ってきません。(「:shutdown_cmd」の “shutdown -p now” が効いていない?) VirtualBox マネージャーから電源を切れば良いのですが、いちいち立ち上げるのが面倒です。なんか良い感じの設定があるんですかね?