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 を作ってみます。
対象環境
- Windows 7 Home Premium
- VirtualBox 4.2.10r84104
- ruby 2.0.0p0 (2013-02-24) [i386-mingw32]
- Vagrant 1.0.7
- VeeWee 0.3.7
- FreeBSD-9.1-RELEASE-i386
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」を以下の通り修正します。
- 「:os_type_id」を "FreeBSD" に修正
- 「:iso_file」を "FreeBSD-9.1-RELEASE-i386-dvd1.iso" に修正
- 「:iso_src」を "http://ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/9.1/FreeBSD-9.1-RELEASE-i386-dvd1.iso" に修正 (公式の ISO ファイルの URL は ftp ですが、なぜか ftp だとうまくいかなかったので http にします。)
- 「:iso_md5」を "dd07dc30035806cabd136f99ccab7eac" に修正 (ここの通りです。)
- 「:shutdown_cmd」を "shutdown -p now" に修正
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 => [
‘
このコンソールへの入力作業が僕の環境では非常に不安定で、入力がダブったり、タイミングがずれたりと、正しくコマンドを入力してくれませんでした。もし同じ問題が起きるのであれば、「: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 halt
で FreeBSD のシャットダウンが出来ますが、電源までは自動で切れないようです。そのため、このコマンドが返ってきません。(「:shutdown_cmd」の “shutdown -p now” が効いていない?)
VirtualBox マネージャーから電源を切れば良いのですが、いちいち立ち上げるのが面倒です。なんか良い感じの設定があるんですかね?