Vagrant+VirtualBoxでMac中にUnityビルド用のMac環境をマルチに作る
概要
Vagrant側で同じMac VMを立ち上げまくっておけば、iOS/Androidとかが同時にビルドできる。
Dockerが流行ってきてる今、Platformから逃げられないの時代遅れだと思いますがまあはい。
Unityを複数立ち上げてるとろくな目に合わないしJenkinsからの制御とかが面倒くさいので、
自動化を容易にするためにやってみる。
MacはもともとMac内VMを2台まで立ち上げられるライセンスなこともあるし、
MacをホストにゲストにMac x 2 を用意して、
同一Unityプロジェクトの複数環境同時ビルドを可能にする。
最終的に、ビルド開始 ~ 完了時までを、Vagrantから起動してるMacインスタンスで行う。
Xcodeの設定とかも一つのMacインスタンスでどうにかできるので、ラク。
VirtualBoxにMacを入れる
以下が参考になる。
[Vagrant & VirtualBox] VirtualBox: guest OS に OS X Mavericks (10.9) をインストールする
http://www.d-wood.com/blog/2014/03/24_5880.html
Mac VMをまず1つだけ作る。この時点で2つ作る必要は無い。boxを作る際の原型にあたる。
このときのVirtualBox名はVM_NAME、
内部にインストールするMac OSのユーザー名はVM_INTERNAL_USERNAME とする。
App Store からMavericksをDL
特に何の注意点も無い。
iesdのインストール
gem install iesd
ルートじゃない場合、権限系の調整は必要。
dmgを作る
iesdを使ってMavericksのdmgを作る。特に何の注意点も無い。
dmgをVirtualBoxに食わせる
ここではまった。
メモリを4gbにしたらインストーラ自体が起動しなかった。
デフォルトサイズの2gbで作って後で変更とかかな。
Mac向けの各種設定を行う
いろいろ落としてProvisioningとかCertificateとか。
Xcodeの設定とか、Unityの設定とか。Androidの環境セットとか。
大変面倒くさいが一回で済む。
VirtualBox内のMacにVagrantからの通信を想定して設定を行う
あとでVagrantからsshで入るので、port番号を2222番(vagrantがデフォルトでセットするport forwarding 設定)を作る。
VMマネージャ > 設定 > ポートフォワーディング
ホストの2222番ポートをゲストの22番ポートに繋ぐ。
最後にsshログインを可能にする。
ホストマシンから、pubキーをゲストに入れて、sshで入れればOK。
ssh VM_INTERNAL_USERNAME@localhost -p 2222
ここまでで、Mac VMの用意は完了。
Vagrantで使用する用の準備に入る。
Vagrantをインストール
http://www.vagrantup.com/downloads.html
以上
VirtualBox上のMacVMをVagrant用にパッケージングする
以下が参考になる
Creating a new Vagrant base box from an existing VM
http://abhishek-tiwari.com/hacking/creating-a-new-vagrant-base-box-from-an-existing-vm
vagrant package --base VM_NAME --output ~/Desktop/Boxies/OUTPUT.box
VagrantからMacインスタンスを起動
起動後、sshでの接続を行うために、Vagrantが繋ぎに行く設定をセットしないといけない。
VagrantFile ファイルを作る
vagrant init ~/Desktop/Boxies/OUTPUT.box
VagrantFile に以下を追加
config.ssh.username = "VM_INTERNAL_USERNAME"
config.ssh.private_key_path = "PATH_OF_SSH_PRIVATE_KEY"
起動
vagrant up
で、無事sshで接続されて完了することを確かめられると思う。
ここまでで、VagrantからMac VMが使えて、sshで接続できる環境は完成。
Unityのビルド、Xcodeでのプロジェクトコンパイル、その後のflightとかを行うのは、VM側になる。
Unityのシングルプロジェクト問題、Xcodeのビルド環境問題、Androidのビルド環境問題を解決できる感じ。
ビルド後のパッケージのアップロードとかは、そのままVM側で行う処理にしちゃった方が良いと思う。
以上。