MacOS X 10.13 (High Sierra) 上で xhyve を利用して FreeBSD 12.0R を動かしてみました。
xhyve は FreeBSD の bhyve を移植したもので、MacOS X の Hypervisor.framework を利用しているそうです。
xhyve のインストール
今回は MacPorts の xhyve を利用しました。(長い目で見ると、Github の最新版を利用した方が安心かもしれません)
$ port info xhyve
xhyve @20181126 (emulators)
$ sudo port install xhyve
FreeBSD 12.0R のインストール
まず、インストール先のディスク・イメージを作成します。今回は 32G バイトで作成しました。
$ mkfile -n 32g fairy-fbsd12.img
次に、このディスク・イメージに FreeBSD 12.0R をインストールします。
xhyve の引数は若干複雑なので、インストール用 shell script を用意します。
オリジナル: /opt/local/libexec/xhyve/xhyverun-freebsd.sh.sample
上記ファイルをコピーして、shell 変数を下記のように書き換えました。
IMG="fairy-fbsd12.img"
BOOTVOLUME="../isoimages/FreeBSD-12.0-RELEASE-i386-dvd1.iso"
このインストール用 shell script を起動するとインストーラーが立ち上がります。
$ sudo fairy-install.sh
インストーラー起動直後の時間待ちをスキップするために Enter を押したい場合は、Enter (もしくは Ctrl-J)を2回押す必要があるようです。また、MacOS X の Terminal を利用している場合は、Console type として「xterm」と答えるとよいようです。
Console type [vt100]: xterm
インストールが完了すると、xhyve は一旦終了します。
ここで、インストール用 shell script をコピー、編集して起動用 shell script を作成します。修正箇所は、下記の通り shell 変数の BOOTVOLUME の値のみです。
IMG="fairy-fbsd12.img"
BOOTVOLUME=$IMG
この起動用 shell script を起動すると、今インストールした FreeBSD 12.0R が起動します。
$ sudo fairy-run.sh
カーネルの再構築
動作確認を兼ねて、カーネルを再構築してみました。
# cd /usr/src/sys/i386/conf
「GENERIC」というファイルをコピーして編集して「FAIRY」というファイルを作成しました。
そして、以下を実行しました。
# cd /usr/src
# make buildkernel KERNCONF=FAIRY LD=ld.lld
# make installkernel KERNCONF=FAIRY LD=ld.lld
【注】なお、FreeBSD 12.0R では「LD=ld.lld」を付けないとエラー「kernel requires linker ifunc support」が下記の通り発生しました。
make[2]: "/usr/src/sys/conf/kern.pre.mk" line 127: amd64/arm64/i386 kernel requires linker ifunc support
カーネルをインストールすると、/boot/kernel 以下に多数のファイルがコピーされます。カーネル自体は /boot/kernel/kernel です。
ここで reboot すると、xhyve は終了します。改めて起動用 shell script を起動すると、今構築したばかりのカーネルが起動します。
ちなみに、shutdown すると下記のように表示されます。そしてキーを押すと xhyve は終了します。
The operating system has halted.
Please press any key to reboot.
リンク集
- xhyve
- Hypervisor Framework (Apple)
- Ubuntu 16 on xhyve on MacOS X (法楽日記, 2019-01-04)
- Ubuntu 18 on xhyve on MacOS X failed again (法楽日記, 2019-01-06)