[Vagrant & VirtualBox] VirtualBox: guest OS に OS X Mavericks (10.9) をインストールする

繰り返しテストできる環境を作れないかなと調べてみたら、なんと OS X を guest OS としてインストールできました。

事前確認

公式サイト情報をもとに進めます。

ちなみに、Mountain Lion と Lion もインストール可能なようです。

ホストの環境

利用している Mac のスペックは以下の通りです。

  • MacBook Pro 13-inch, Mid 2009
  • OS X 10.9.2
  • VirtualBox 4.3.8
% virtualbox --help
Oracle VM VirtualBox Manager 4.3.8
(C) 2005-2014 Oracle Corporation
All rights reserved.

ECC memory を積んでいないか確認する

ホストに ECC memory を積んでいる場合、boot 時に kernel panic を起こすらしいので確認します。

  • アップルメニュー - 詳しい情報 から「システム情報」を起動。
  • ハードウェア - メモリ を選択。

2014-03-22_iesd_01

積んでいませんでした。
なお、後述の iesd コマンドのオプションを変更することで、ECC memory を積んだハードにも対応しているそう。

ライセンスについて

上記2サイトでも触れられていますが、 OS X の SLA(pdf) によるとMac上の仮想環境に2つまでVMを作れるとのこと。
Apple 製品であれば認められているようでありがたいです。

OS X インストーラをダウンロードする

まず、AppStore.app から Mavericks のインストーラをダウンロードします。
ダウンロード終了後インストーラが立ち上がりますが、そのまま何もせずに終了します。

iesd をインストールする

gem での配布に変わったようです。

gem install もしくは、bundle install します。

% bundle init
Writing new Gemfile to /Users/****/projects/vagrant/OSX_Mavericks/Gemfile
% subl Gemfile
Gemfile
# A sample Gemfile
source "https://rubygems.org"
gem "iesd", "~> 1.0.3"
% bundle install --path vendor/bundle

インストールディスクを作成する

iesd コマンドで、OS X インストーラからインストールディスクを作成します。
インストールする OS X のバージョンにより異なりますので、公式で確認してください。

% iesd -i /Applications/Install\ OS\ X\ Mavericks.app -o Mavericks.dmg -t BaseSystem
==> Mounting /Applications/Install OS X Mavericks.app/Contents/SharedSupport/Ins
Mounted: /var/folders/lm/j7nt_lrs6372pqj70j_64fbm0000gn/T/d20140320-32499-1en5s14
==> Mounting /var/folders/lm/j7nt_lrs6372pqj70j_64fbm0000gn/T/d20140320-32499-1e
Mounted: /var/folders/lm/j7nt_lrs6372pqj70j_64fbm0000gn/T/d20140320-32499-ypospv/d20140320-32499-8doygi
==> Copying /var/folders/lm/j7nt_lrs6372pqj70j_64fbm0000gn/T/d20140320-32499-1en
Copied: /var/folders/lm/j7nt_lrs6372pqj70j_64fbm0000gn/T/d20140320-32499-ypospv/d20140320-32499-8doygi/System/Installation/Packages
==> Unmounting /var/folders/lm/j7nt_lrs6372pqj70j_64fbm0000gn/T/d20140320-32499-
Unmounted: /var/folders/lm/j7nt_lrs6372pqj70j_64fbm0000gn/T/d20140320-32499-ypospv/d20140320-32499-8doygi
==> Merging /var/folders/lm/j7nt_lrs6372pqj70j_64fbm0000gn/T/d20140320-32499-ypo
Merged: /var/folders/lm/j7nt_lrs6372pqj70j_64fbm0000gn/T/d20140320-32499-81r8hh/BaseSystem.dmg
==> Unmounting /Applications/Install OS X Mavericks.app/Contents/SharedSupport/I
Unmounted: /var/folders/lm/j7nt_lrs6372pqj70j_64fbm0000gn/T/d20140320-32499-1en5s14
  /Users/****/projects/vagrant/OSX_Mavericks/Mavericks.dmg

Mavericks.dmg というインストールディスク用のイメージファイルが作成されました。

VirtualBox へインストールする

公式によると下記が要件とのこと。

  • Operating System Version: Mac OS X (64 bit)
  • Base Memory: 2048 MB (larger is better)
  • EFI 有効化

VM を作成する

  • VirtualBox を起動。
  • 新規仮想マシン名を「OS X Mavericks」とする。

2014-03-22_iesd_02

仮想マシン名に応じてオプションが自動選択されました。
あとは通常通り設定します。特に項目は変更せずそのまま進めました。

2014-03-22_iesd_03

2014-03-22_iesd_04

2014-03-22_iesd_05

VM の設定を確認する

設定 - システム から、EFI が有効化されていることを確認します。

2014-03-22_iesd_06

公式にも補足がありますが、起動に失敗する場合チップセットを変更するとうまくいくことがあるようです。
今回は必要ありませんでした。

VM を起動してインストールを開始する

設定を確認したら、VM を起動します。
インストールディスクを要求されますので、作成した Mavericks.dmg を選択します。

2014-03-22_iesd_07

仮想HDが表示されずドキッとしますが、NFS+フォーマットされていないからですね。
ディスクユーティリティを使って消去した後、いつも通りインストールを始められます。

2014-03-22_iesd_09

2014-03-22_iesd_10

以上で、インストール完了後に無事起動しました。
すばらしい。

起動後の設定

インストールディスクのイジェクトと、使いやすいようにいくつか設定を加えておきます。

  • デスクトップにマウントされているインストールディスクを取り出す。
  • 日本語が入力できるよう システム環境設定 - キーボード - 入力ソース から「ことえり」を追加。
  • システム環境設定 - 日付と時刻 - 時間帯 を日本時間に修正。
  • セキュリティとプライバシー - 一般 の「スリープ解除にパスワードを要求」を外す。

Xcode をインストールする

Apple Developer からダウンロードしてインストールしておきます。

※ AppSore からはダウンロードが終了せず。時間がかかっているだけかもしれません。

2014-03-22_iesd_12

スナップショットを作成しておく

いつでもこの状態にロールバックできるよう、忘れずにスナップショットを作成しておきます。
guest OS を終了してから作成すると、容量を節約できるそう。

2014-03-22_iesd_11

不明点

現状、コピペーができない等いくつか不便な点もありますが、うまく動いているよう。

  • ゲストとホスト間のクリップボード共有ができない。
  • ゲストとホストと VirtualBox のショートカットがいろいろかぶって混乱する。
  • 後述の SMC ERROR

またダウンロードとインストールは、表示される以上に時間がかかりました。
停止しているのかと思うくらい。
余裕のあるときにセットアップすることをお勧めします。

補遺

SMC::smc**** ERROR

起動時のログを眺めていると、SMC::smc**** ERROR という表示を見つけました。
System Management Controller (SMC) のエラーらしいです。

2014-03-22_iesd_08

guest OS 側で調べると、確かにエラーが確認できました。

% grep SMC /var/log/system.log

この辺りの知識がなさすぎて予想でしかないが、本来は存在しないハードと Boot ROM で起動しているからなのかな。
(仮想VM上では、VirtualBox という Boot ROM 名称になっています)