本文へスキップ

Development

VMware Fusion 5 で OS X Mountain Lion のベース Box を作成する

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

7 分で読めます

はじめる前に

あらかじめ注意しておきたい点がいくつかあります。

  • 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 を選択した状態で、次の操作を行います。

  1. Apple のメニューバーから「仮想マシン > VMware Tools をアップデート…」を選択します。メニュー項目は「VMware Tools をインストール」、「VMware Tools を再インストール」、「VMware Tools をアップデート」のいずれかの表記になっている場合があります。
  2. 表示されたダイアログで「インストール」をクリックします。

ゲスト側では次の操作を行います。

  1. ディスクイメージがマウントされたら、Install Vmware Tools パッケージをダブルクリックします。
  2. インストールが完了するまで、デフォルトのプロンプトに従って進めます。インストール中に管理者パスワードの入力を求められる点に注意してください。
  3. インストールが完了したら再起動します。
  4. プロンプトが表示されたら再度ログインします。

これで、この記事の残りの部分では、必要に応じてホストとゲストの間でコマンドをコピー&ペーストできるようになりました。

OS のアップデート

Box を起動するたびに必要となるアップデートの数を減らすため、ソフトウェアアップデートを実行しておきます。

  1. ターミナルを開いて次のコマンドを実行します。
$ sudo softwareupdate --install --all
  1. アップデートが完了するまで待ってから再起動します。必要に応じて、またはアップデートがなくなるまで繰り返します。

OS X のファイアウォールを無効にする

OS X のファイアウォール設定はデフォルトで無効になっています。「セキュリティとプライバシー」の設定を確認し、無効になっていることを確かめましょう。

  1. 「システム環境設定 > セキュリティとプライバシー」を開きます。
  2. 「ファイアウォール」タブを選択します。
  3. ファイアウォールが「切」になっていることを確認します。

この記事は Box のセキュリティについて扱うものではないため、簡単にするためにファイアウォール設定はオフにしておきます。より厳しい制限が必要な場合は、「ファイアウォールオプション…」をお好みで調整してください。

リモートログインを有効にする

Vagrant が OS X の Box に SSH で接続できるようにするには、リモートログインを有効にするだけで十分です。

  1. 「システム環境設定 > 共有」を開きます。
  2. リモートログイン にチェックを入れてオンにします。
  3. 任意: 必要に応じてアクセス権限を変更します。デフォルトでは すべてのユーザ が選択されています。このオプションを これらのユーザのみ: に変更する場合は、作成した 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 まで小さくできます。

  1. ターミナルを開いて次のように入力します。
$ diskutil secureErase freespace 0 Macintosh HD
$ sudo halt

Box の仕上げ

ここから先の作業はすべてホスト上で行います。

  1. ターミナルを開き、仮想マシンを保存した場所にディレクトリを移動します。通常は ~/Documents/Virtual Machines/ です。
  2. 仮想マシンの .vmwarevm ファイルの中にディレクトリを移動します。

metadata.json の作成

  • ターミナルで次のコマンドを実行します。
$ vi metadata.json
  • エディターに次の内容を入力します。
{ "provider": "vmware_fusion" }
  • ファイルを保存します。
  • エディターを終了します。

仮想マシンの縮小

  1. ターミナルを開いて次のように入力します。
$ /Applications/VMware Fusion.app/Contents/Library/vmware-vdiskmanager -k
  1. 続けて「スペース」を入力し、VM の仮想ディスクファイルのパスを入力します。
  2. Return キーを押します。

これで仮想ディスクが約 7.48GB まで縮小されているはずです。

仮想マシンのパッケージング

tar と gzip を使って仮想マシンをパッケージすると、Box のサイズを小さくできます。Box 化した後の VM はおよそ 5.63GB になるはずです。

  1. ターミナルで次のコマンドを実行します。
$ 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
共有