Vagrant のゲストOS に HighSierra や Mojave で動作検証や開発環境を簡単に構築したい。
- 「新しい Mac を購入したが Mojave 入りなので HighSierra を新規インストールできない1ため、アプリの動作検証ができない」
- 「サポートの問い合わせが来たが、macOS の画面まわりがわからない」
- 「『Mac 対応?それ美味しいの?』と言われたので検証してみたい」
- 「プレーンな macOS でビルドやテストをしたい」
TL; DR (今北産業)
VirtualBox と Vagrant がインストールされていて OS 1 つぶん(50 GB)以上の空き容量があれば簡単です。
$ mkdir mojave && cd $_
$ curl -o Vagrantfile https://KEINOS.github.io/Vagrantfile_for_macOS/Vagrantfiles/Vanilla_GUI_v10.14.1
$ vagrant up
🐒 ブート時の
UEFI
画面で "mapping table error" が出でShell>
で止まる場合は、どのパーティション(FS1:
やFS2:
など)にあるboot.efi
を選んで良いのかわからない状態になっています。
Shell> FS1:
もしくはShell> FS2:
と打ってからls
コマンドで/System/
があるパーティションを選び、cd \System\Library\CoreServices
に移動(バックスラッシュに注意)してboot.efi
があるか確認したら、boot.efi
を実行してください。/EFI
しかない場合はハズレのパーティションなのでexit
コマンドで抜けて、再度continue
を選んで振り出しに戻ってください。
- 参考動画: Virtualbox UEFI Shell startup.nsh Error Fixed (MacOS, Linux, Windows any OS) @ Youtube
vagrant
ユーザのパスワードはvagrant
です。
TS; DR (HighSierra/Mojave の開発環境のベースをゲスト OS に)
VirtualBox と Vagrant がインストール2されていれば、(ダウンロードに時間かかるけど)以下のワンライナーで日本語の macOS が CUI モードで起動します。もちろん GUI モードでも起動できますが、macOS で自作コマンドが動くかといった検証であれば CUI の方が軽いです。
なお、下記の各々のワンライナーは、Vagrant Cloud から Box イメージをダウンロード&起動して ssh
接続します。
以下は、10.13.6 へアップデートだけ済んだバニラ状態の日本語 HighSierra です。
vagrant init -m KEINOS/macOS.10.13.6_Japanese && vagrant up && vagrant ssh
以下は、ほぼバニラ(git
だけ入った)状態の日本語 Mojave です。
vagrant init -m KEINOS/macOS.10.14.1_Japanese && vagrant up && vagrant ssh
-
動作確認済み環境
- Vagrant v2.2.4/v2.2.5
- VirtubalBOX v6.0.4 r128413/6.0.12r133076
- ホストOS: macOS HighSierra(OSX 10.13.6), Mojave(OSX 10.14.4)
- その他動作確認済み環境一覧 | HighSierra の Box @ GitHub
- その他動作確認済み環境一覧 | Mojave の Box @ GitHub
-
SSH 接続時に「Timed out while waiting for the machine to boot.」が出る場合
- VM(仮想マシン) を再起動(
vagrant halt
してから、再度vagrant up
)します。詳しくは以下を参照。
- VM(仮想マシン) を再起動(
Vagrantfile のサンプル集
各々を Vagrantfile
として保存し、$ vagrant up
で起動します。
- ヘッドレス(CLI モード)で Mac を起動させて、他のマシンから VNC アクセス(Mac だと画面共有)可能なサンプル
- HighSierra @ GitHub
- Mojave @ GitHub
- ローカルのファイル/ディレクトリを、ヘッドレス(CLI モード)の Mac にマウントして起動させるサンプル
- Mojave @ GitHub
- 注意事項:マウントするタイミングで親機のパスワード入力を求められます。
- Homebrew 入りのヘッドレス(CLI モード)の Mac を起動するサンプル
- Mojave @ GitHub
-
Wineskin 入りのヘッドレス(CLI モード)の Mac を起動するサンプル
- Mojave @ GitHub
その他の Vagrantfile のサンプル集 @ GitHub
基本仕様
- VirtualBox >= 6.0.3
- Vagrant >= 2.2.3
- リポジトリ: https://github.com/KEINOS/Vagrantfile_for_macOS @ GitHub
- この Vagrant Box は Mac/iOS 向けのアプリ開発および動作確認専用です。Mac mini で Bootcamp の Windows10 でも動作したらしいのですが、筆者の MacBookPro には空き容量がなく macOS でしか検証しておりません。なお、ご利用の際は Apple の OS 利用ライセンスに同意したものとし、自己責任でご利用ください。
HighSierra の Vagrant BOX イメージ
- ゲスト OS:macOS HighSierra(OSX 10.13.6)
- 日本語、アップデート以外の追加インストールなし
- イメージサイズ: 12.4 GB
- 想定ダウンロード時間: 2時間(SpeedTest CLI: Download = 93.14 Mbit/s)
- https://app.vagrantup.com/KEINOS/boxes/macOS.10.13.6_Japanese @ Vagrant Cloud
$ vagrant cloud search highsierra
| NAME | VERSION | DOWNLOADS | PROVIDERS |
+-------------------------------+---------+-----------+------------+
| KEINOS/macOS.10.13.6_Japanese | 0.0.4 | 13 | virtualbox |
+-------------------------------+---------+-----------+------------+
$ vagrant box add KEINOS/macOS.10.13.6_Japanese
$ mkdir highsierra && cd $_
$ vagrant init -m KEINOS/macOS.10.13.6_Japanese
$ ls
Vagrantfile
$ vagrant up
$ vagrant ssh
CI などでの用途を前提としているため、デフォルトではヘッドレス起動(CLI モード:gui=false
)になっています。デスクトップの通常起動(GUI モード)で起動させたい場合は Vagrantfile で .gui
を true
に設定します。vagrant
ユーザーのパスワードは vagrant
です。
Vagrant.configure("2") do |config|
config.vm.box = "KEINOS/macOS.10.13.6_Japanese"
config.vm.provider "virtualbox" do |vb|
vb.gui = true
end
end
mkdir highsierra && cd $_
curl -o Vagrantfile https://KEINOS.github.io/Vagrantfile_for_macOS/Vagrantfiles/Vanilla_GUI_v10.13.6
vagrant up
Mojave の Vagrant BOX イメージ
- ゲスト OS:macOS Mojave(OSX 10.14.1)
- 日本語、アップデートおよび
git
以外の追加インストールなし
- 日本語、アップデートおよび
- イメージサイズ: 8.68 GB
- 想定ダウンロード時間: 1.5時間(SpeedTest CLI: Download = 93.14 Mbit/s)
- https://app.vagrantup.com/KEINOS/boxes/macOS.10.14.1_Japanese @ Vagrant Cloud
$ vagrant cloud search mojave
| NAME | VERSION | DOWNLOADS | PROVIDERS |
+-------------------------------+---------+-----------+----------------+
| ashiq/osx-10.14 | 0.1 | 878 | virtualbox |
| yzgyyang/macOS-10.14 | 10.14.4 | 463 | virtualbox |
| scoreyou/baseMac | 0.1 | 20 | virtualbox |
| KEINOS/macOS.10.14.1_Japanese | 0.0.3 | 17 | virtualbox | ← これ
| msl/macos_mojave_10.14 | 1.1.0 | 15 | vmware_desktop |
| adasilva/Mojave | 1.0 | 7 | virtualbox |
+-------------------------------+---------+-----------+----------------+
$ vagrant box add KEINOS/macOS.10.14.1_Japanese
$ mkdir mojave && cd $_
$ vagrant init -m KEINOS/macOS.10.14.1_Japanese
$ ls
Vagrantfile
$ vagrant up
$ vagrant ssh
CI などでの用途を前提としているため、デフォルトではヘッドレス起動(CLI モード:gui=false
)になっています。
そのため、通常起動(GUI モード)で起動させたい場合は Vagrantfile で vb.gui
を true
に設定します。vagrant
ユーザーのパスワードは vagrant
です。
Vagrant.configure("2") do |config|
config.vm.box = "KEINOS/macOS.10.14.1_Japanese"
config.vm.provider "virtualbox" do |vb|
vb.gui = true
end
end
mkdir mojave && cd $_
curl -o Vagrantfile https://KEINOS.github.io/Vagrantfile_for_macOS/Vagrantfiles/Vanilla_GUI_v10.14.1
vagrant up
-
【HighSierra に OS をダウングレードできない】
Mac マシンは、購入時にプリインストールされている macOS より低いバージョンの macOS はインストールできない仕様になっています。
そのため古いソフトや現在利用しているソフトのバージョンが、新しい macOS に対応していない場合、ハード(マシン)が壊れた場合は中古マシンを買わざるを得なくなります。新しいマシンを使いたい場合は、基本的に古いソフトを諦めるか、新しいバージョンのソフトを購入する必要があります。Adobe や CAD ソフトなどが、昔のように買い切りでなく、月々払いになったのも、買い替えを半ば強要する Apple のエコ・システムに便乗したとも言えます。問題は、開発側はサポートのために古いマシンをキープし続ける必要があることです。 ↩ -
【VirtualBox と Vagrant のインストール】
macOS の場合、Homebrew がインストールされていれば、brew cask install virtualbox
およびbrew cask install virtualbox-extension-pack
コマンドで VirtualBox がインストールできます。
Vagrant もbrew cask install vagrant
コマンドでインストールできます。VirtualBox とは
Oracle 社の仮想化アプリ。
仮想的にマシンを作り、そこに OS をインストールすることで異なる OS 上でも特定の OS を使えるようにするためのアプリ。VirtualBox (の仮想マシン)上で動く OS をゲスト OS と呼び、VirtualBox アプリ自体がインストールされている OS をホスト OS と呼んでいる。似たような仮想化アプリには、手法や技術は異なるが VMware, Hyper-V, Docker などがある。仮想とはいえマシンではあるので、そこに OS をインストールする場合、OS (のライセンス)によっては別途シリアル番号やライセンスキーが必要だったり、利用制限があるので注意が必要である。「VirtualBox」@ Wikipedia,Vagrant とは
HashiCorp 社の各種仮想アプリを管理するツール。
VirtualBox/VMware/Docker などの仮想化アプリをコマンドで操作することができるツール。仮想化アプリ自身もコマンドで操作可能だがアプリごとにコマンドが異なるため、Vagrant を通すことで操作を一本化できる。例えば、ゲスト OS の立ち上げ、コピー、クローン、削除、スナップショットだけでなく、ゲスト OS 上でのスクリプト実行といった操作が行える。これにより各々の仮想化アプリのメリットを活かして(適材適所で)使えるため、CI といったテストやビルドや自動化に使われる。このような総括的なツールやアプリを使い、自動化することをオーケストレーションという。「Vagrant(ソフトウェア)」@ Wikipedia ↩