法楽日記

デジタル散策記&マインド探訪記

FreeBSD 12.0R on xhyve on MacOS X

MacOS X 10.13 (High Sierra) 上で xhyve を利用して FreeBSD 12.0R を動かしてみました。

xhyveFreeBSDbhyve を移植したもので、MacOS XHypervisor.framework を利用しているそうです。


xhyve のインストール

今回は MacPortsxhyve を利用しました。(長い目で見ると、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.

リンク集