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

繰り返しテストできる環境を作れないかなと調べてみたら、なんと OS X を guest OS としてインストールできました。
[markdown]
> * [OSX – Mac上のVirtualBoxにMavericksをインストールする – Qiita](http://qiita.com/hnakamur/items/fca6379213a3033cb29d)
## 事前確認
公式サイト情報をもとに進めます。
> * [OS X on OS X](http://ntk.me/2012/09/07/os-x-on-os-x/)
ちなみに、Mountain Lion と Lion もインストール可能なようです。
### ホストの環境
利用している Mac のスペックは以下の通りです。
* MacBook Pro 13-inch, Mid 2009
* OS X 10.9.2
* VirtualBox 4.3.8
“`prettyprinted
% virtualbox –help
Oracle VM VirtualBox Manager 4.3.8
(C) 2005-2014 Oracle Corporation
All rights reserved.
“`
### ECC memory を積んでいないか確認する
ホストに ECC memory を積んでいる場合、boot 時に kernel panic を起こすらしいので確認します。
* `アップルメニュー – 詳しい情報` から「システム情報」を起動。
* `ハードウェア – メモリ` を選択。
積んでいませんでした。
なお、後述の iesd コマンドのオプションを変更することで、ECC memory を積んだハードにも対応しているそう。
### ライセンスについて
上記2サイトでも触れられていますが、 OS X の [SLA(pdf)](http://images.apple.com/legal/sla/docs/OSX109.pdf) によるとMac上の仮想環境に2つまでVMを作れるとのこと。
Apple 製品であれば認められているようでありがたいです。
## OS X インストーラをダウンロードする
まず、AppStore.app から Mavericks のインストーラをダウンロードします。
ダウンロード終了後インストーラが立ち上がりますが、そのまま何もせずに終了します。
## iesd をインストールする
gem での配布に変わったようです。
> * [iesd | RubyGems.org | your community gem host](https://rubygems.org/gems/iesd)
> * [ntkme/iesd](https://github.com/ntkme/iesd)
`gem install` もしくは、`bundle install` します。
“`prettyprinted
% bundle init
Writing new Gemfile to /Users/****/projects/vagrant/OSX_Mavericks/Gemfile
% subl Gemfile
“`
“`ruby:Gemfile
# A sample Gemfile
source “https://rubygems.org”
gem “iesd”, “~> 1.0.3”
“`
“`prettyprinted
% bundle install –path vendor/bundle
“`
## インストールディスクを作成する
iesd コマンドで、OS X インストーラからインストールディスクを作成します。
インストールする OS X のバージョンにより異なりますので、公式で確認してください。
“`prettyprinted
% 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」とする。
仮想マシン名に応じてオプションが自動選択されました。
あとは通常通り設定します。特に項目は変更せずそのまま進めました。
### VM の設定を確認する
`設定 – システム` から、[EFI](http://ja.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface) が有効化されていることを確認します。
> * [システム設定 | VirtualBox Mania](http://vboxmania.net/content/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E5%AE%9A)
公式にも補足がありますが、起動に失敗する場合チップセットを変更するとうまくいくことがあるようです。
今回は必要ありませんでした。
> * [Mavericks を VirtualBox へインストールする方法 | Route3800](http://route3800.blogspot.jp/2013/11/mavericks-virtualbox.html)
### VM を起動してインストールを開始する
設定を確認したら、VM を起動します。
インストールディスクを要求されますので、作成した `Mavericks.dmg` を選択します。
仮想HDが表示されずドキッとしますが、NFS+フォーマットされていないからですね。
ディスクユーティリティを使って消去した後、いつも通りインストールを始められます。
以上で、インストール完了後に無事起動しました。
すばらしい。
## 起動後の設定
インストールディスクのイジェクトと、使いやすいようにいくつか設定を加えておきます。
* デスクトップにマウントされているインストールディスクを取り出す。
* 日本語が入力できるよう `システム環境設定 – キーボード – 入力ソース` から「ことえり」を追加。
* `システム環境設定 – 日付と時刻 – 時間帯` を日本時間に修正。
* `セキュリティとプライバシー – 一般` の「スリープ解除にパスワードを要求」を外す。
### Xcode をインストールする
Apple Developer からダウンロードしてインストールしておきます。
> * [Apple Developer (日本語)](https://developer.apple.com/jp/)
※ AppSore からはダウンロードが終了せず。時間がかかっているだけかもしれません。
## スナップショットを作成しておく
いつでもこの状態にロールバックできるよう、忘れずにスナップショットを作成しておきます。
guest OS を終了してから作成すると、容量を節約できるそう。
> * [仮想PCで学ぶ「体当たり」Windowsシステム管理:第10回 Oracle VM VirtualBoxを使う(後) (3/3) – @IT](http://www.atmarkit.co.jp/ait/articles/1010/14/news128_3.html)
## 不明点
現状、コピペーができない等いくつか不便な点もありますが、うまく動いているよう。
* ゲストとホスト間のクリップボード共有ができない。
* ゲストとホストと VirtualBox のショートカットがいろいろかぶって混乱する。
* 後述の SMC ERROR
またダウンロードとインストールは、表示される以上に時間がかかりました。
停止しているのかと思うくらい。
余裕のあるときにセットアップすることをお勧めします。
## 補遺
> * [How to install OS X on VirtualBox – Robert Setiadi Website](http://www.robertsetiadi.net/install-os-x-virtualbox/)
### SMC::smc**** ERROR
起動時のログを眺めていると、`SMC::smc**** ERROR` という表示を見つけました。
[System Management Controller (SMC)](http://en.wikipedia.org/wiki/System_Management_Controller) のエラーらしいです。
guest OS 側で調べると、確かにエラーが確認できました。
“`prettyprinted
% grep SMC /var/log/system.log
“`
この辺りの知識がなさすぎて予想でしかないが、本来は存在しないハードと Boot ROM で起動しているからなのかな。
(仮想VM上では、VirtualBox という Boot ROM 名称になっています)
> * [Intel ベースの Mac の EFI および SMC ファームウェアアップデート](http://support.apple.com/kb/HT1237?viewlocale=ja_JP)
> * [kernel errors after updating to 10.8.5 – mac野郎なのか](http://fanblogs.jp/macyarounanoka/archive/66/0)
[/markdown]