VMware Fusion 5 で OS X Mountain Lion のベース Box を作成する
VMware Fusion 5 を使って OS X Mountain Lion 用の Vagrant ベース Box を作成する方法を解説します。VM のセットアップからパッケージングまでの全工程を丁寧に説明し、Mac OS X で一貫した開発環境を実現します。Vagrant のワークフローの手軽さを活かして Apple のオペレーティングシステム上でテストしたい開発者に最適です。

はじめる前に
あらかじめ注意しておきたい点がいくつかあります。
- OS X の仮想マシンはサイズが大きくなります。OS X のベース Box はおよそ 5.65GB になります。これは、Vagrant がポータビリティのために推奨している Box サイズを超えていますが、避けようがありません。この点を念頭に置き、十分なディスク容量を確保するとともに、Box を起動する際には気長に待つ心構えをしておいてください。大きな Box ほどダウンロードとクローンに時間がかかります。私は開発と管理の目的でこの作業を行っているので、繰り返しテストできることを考えれば起動時間は許容範囲です。取得にかかる時間を短縮したい場合は、クラウドではなくネットワーク内のローカル HTTP サーバーで Box をホストするのもよいでしょう。ただし、これは任意です。
- Vagrant のバージョンは 1.3.0 以上でなければなりません。1.3.0 より前のバージョンでは、回避策やハックなしに OS X をサポートしていませんでした。
動作確認環境
この記事は以下の環境でテストしています。
- Apple OS X Mountain Lion(ホスト & ゲスト)
- VMware Fusion 5.0.3
- Vagrant 1.3.5
- Vagrant のプラグイン vagrant-vmware-fusion 2.0.8
注: OS X Mavericks のホスト & ゲストでも同じ手順で作成できますが、VMware Fusion 6.x 以上が必要です。
VMware Fusion で OS X の仮想マシンを作成する
VMware Fusion で新しい仮想マシンを作成します。
VMware Fusion で OS X の VM を作成したことがない方は、チュートリアルのリクエストを残してください。ここでは、作成方法はすでにご存じのものとして進めます。VMware Fusion で仮想マシンを作成する際の注意点は以下のとおりです。
- VM を保存する際、ファイル名を mountain64-1_vmware.vmwarevm に変更します。
- 仮想マシンのハードディスク設定を変更し、ハードドライブを 2GB のファイルに分割しないようにします。
- システムの初回起動時には、初期ユーザーのフルネーム、ユーザー名、パスワードの各フィールドに
vagrantを入力します。
ゲスト OS の設定
特に断りのない限り、以下の手順はすべてゲスト OS 内で行うものとします。
VMware Tools のインストール
最初のステップとして、ホストとゲストの間でコピー&ペーストできるように VMware Tools をインストールします。
ホスト側で VMware Fusion を選択した状態で、次の操作を行います。
- Apple のメニューバーから「仮想マシン > VMware Tools をアップデート…」を選択します。メニュー項目は「VMware Tools をインストール」、「VMware Tools を再インストール」、「VMware Tools をアップデート」のいずれかの表記になっている場合があります。
- 表示されたダイアログで「インストール」をクリックします。
ゲスト側では次の操作を行います。
- ディスクイメージがマウントされたら、Install Vmware Tools パッケージをダブルクリックします。
- インストールが完了するまで、デフォルトのプロンプトに従って進めます。インストール中に管理者パスワードの入力を求められる点に注意してください。
- インストールが完了したら再起動します。
- プロンプトが表示されたら再度ログインします。
これで、この記事の残りの部分では、必要に応じてホストとゲストの間でコマンドをコピー&ペーストできるようになりました。
OS のアップデート
Box を起動するたびに必要となるアップデートの数を減らすため、ソフトウェアアップデートを実行しておきます。
- ターミナルを開いて次のコマンドを実行します。
$ sudo softwareupdate --install --all
- アップデートが完了するまで待ってから再起動します。必要に応じて、またはアップデートがなくなるまで繰り返します。
OS X のファイアウォールを無効にする
OS X のファイアウォール設定はデフォルトで無効になっています。「セキュリティとプライバシー」の設定を確認し、無効になっていることを確かめましょう。
- 「システム環境設定 > セキュリティとプライバシー」を開きます。
- 「ファイアウォール」タブを選択します。
- ファイアウォールが「切」になっていることを確認します。
この記事は Box のセキュリティについて扱うものではないため、簡単にするためにファイアウォール設定はオフにしておきます。より厳しい制限が必要な場合は、「ファイアウォールオプション…」をお好みで調整してください。
リモートログインを有効にする
Vagrant が OS X の Box に SSH で接続できるようにするには、リモートログインを有効にするだけで十分です。
- 「システム環境設定 > 共有」を開きます。
- リモートログイン にチェックを入れてオンにします。
- 任意: 必要に応じてアクセス権限を変更します。デフォルトでは すべてのユーザ が選択されています。このオプションを これらのユーザのみ: に変更する場合は、作成した vagrant ユーザーを追加してください。
Vagrant の insecure key のダウンロード
vagrant ユーザーは、SSH キーを使って Box への認可されたアクセスを得ます。
$ mkdir -p /Users/vagrant/.ssh
$ chmod 0700 /Users/vagrant/.ssh
$ curl -o /Users/vagrant/.ssh/authorized_keys --url https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
$ chmod 0600 /Users/vagrant/.ssh/authorized_keys
$ chown -R vagrant /Users/vagrant/.ssh
パスワードなしの sudo を設定する
vagrant ユーザーにはパスワードなしの sudo 権限が必要です。ターミナルで次のコマンドを実行します。
$ sudo visudo
必要に応じて、以下の行を追加または変更します。
Defaults env_keep += 'SSH_AUTH_SOCK'
Defaults:vagrant !requiretty
# Add the vagrant user at the end of the file
vagrant ALL=NOPASSWD: ALL
保存して終了します。
ゲストの最適化
この時点で VMware ファイルのサイズを確認すると、起動中で約 16.26GB、シャットダウン時で約 14.11GB になっているはずです。ここで VM をシャットダウンして縮小しても、VM のサイズはほとんど減りません。減るのはわずか 0.02GB 程度です。
しかし、ゲストディスクの空き領域をゼロで埋めてから縮小すれば、VM をおよそ 7.48GB まで小さくできます。
- ターミナルを開いて次のように入力します。
$ diskutil secureErase freespace 0 Macintosh HD
$ sudo halt
Box の仕上げ
ここから先の作業はすべてホスト上で行います。
- ターミナルを開き、仮想マシンを保存した場所にディレクトリを移動します。通常は ~/Documents/Virtual Machines/ です。
- 仮想マシンの .vmwarevm ファイルの中にディレクトリを移動します。
metadata.json の作成
- ターミナルで次のコマンドを実行します。
$ vi metadata.json
- エディターに次の内容を入力します。
{ "provider": "vmware_fusion" }
- ファイルを保存します。
- エディターを終了します。
仮想マシンの縮小
- ターミナルを開いて次のように入力します。
$ /Applications/VMware Fusion.app/Contents/Library/vmware-vdiskmanager -k
- 続けて「スペース」を入力し、VM の仮想ディスクファイルのパスを入力します。
- Return キーを押します。
これで仮想ディスクが約 7.48GB まで縮小されているはずです。
仮想マシンのパッケージング
tar と gzip を使って仮想マシンをパッケージすると、Box のサイズを小さくできます。Box 化した後の VM はおよそ 5.63GB になるはずです。
- ターミナルで次のコマンドを実行します。
$ tar -cvzf mountain64-1_vmware.box ./*
圧縮が完了したら、.box ファイルをより適切なプロジェクトの作業ディレクトリか Web サーバーに移動します。この例では ~/workspace/vagrant-example を使用します。このフォルダはおそらくまだ存在しないので、当然ながら移動する前に作成しておいてください。
Vagrant の OS X ベース Box を起動する
ターミナルでプロジェクトのワークスペース ~/workspace/vagrant-example にディレクトリを移動し、次のコマンドを実行します。
$ vagrant box add mountain64 mountain64-1_vmware.box
$ vagrant init mountain64 mountain64-1_vmware.box
この時点で、仮想マシンをヘッドレスモードで実行したい場合は、次のコマンドを実行するだけです。
$ vagrant up --provider=vmware_fusion
GUI モードで実行したい場合は、プロジェクトのワークスペースに生成された Vagrantfile を編集し、次の行を追加します。
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.provider :vmware_fusion do |v|
v.gui = true
end
# Existing Vagrantfile generated template...
その後、次のコマンドを実行します。
$ vagrant up --provider=vmware_fusion
成功すると、ターミナルに次のような出力が表示されます。
Bringing machine 'default' up with 'vmware_fusion' provider...
[default] Cloning VMware VM: 'mountain64'. This can take some time...
[default] Verifying vmnet devices are healthy...
[default] Preparing network adapters...
[default] Fixed port collision for 22 => 2222. Now on port 2200.
[default] Starting the VMware VM...
[default] Waiting for the VM to finish booting...
[default] The machine is booted and ready!
[default] Forwarding ports...
[default] -- 22 => 2200
[default] Configuring network adapters within the VM...
[default] Enabling and configuring shared folders...
[default] -- /Users/username/workspace/vagrant-example: /vagrant