FreeBSD は仮想マシンイメージも配布されているのに FreeBSD ハンドブックの第2章 FreeBSD のインストールには 「これらはインストール用のイメージではなく、 すでに設定済みの (“すでにインストールされた”) インスタンスで、すぐに起動して、 インストール後の作業を行うことができます。」 と書いてあるだけで、起動方法が書いていなかったのですが、色々試していたら起動して使えました。

動作確認環境

  • MacBook Pro(14インチ、2021), Apple M1 Pro
  • macOS Monterey 12.2.1
  • QEMU emulator version 6.2.0
  • FreeBSD-13.0-RELEASE-arm64-aarch64.qcow2.xz

ダウンロード

FreeBSD を入手する から仮想マシンイメージの aarch64 のリンク先を開いて、 FreeBSD-13.0-RELEASE-arm64-aarch64.qcow2.xz をダウンロードしました。

展開

とりあえず $HOME/tmp を作ってそこに展開しました。

mkdir -p ~/tmp
xzcat ~/Downloads/FreeBSD-13.0-RELEASE-arm64-aarch64.qcow2.xz > ~/tmp/FreeBSD-13.0-RELEASE-arm64-aarch64.qcow2

GUI で実行

-M の machine として virt QEMU 6.2 ARM Virtual Machine (alias of virt-6.2) を使いました。

-cpu を指定しないと何も出てこなかったので、適当に試して起動できた -cpu max を使いました。

-M-cpu のハードウェアの種類の指定はちゃんと調べていないので、もっと良い指定があるかもしれません。

起動するには bios が必要なので、 Debian や Ubuntu なら qemu-efi-aarch64 に入っている /usr/share/qemu-efi-aarch64/QEMU_EFI.fd を、 macOS の Homebrew で入れた qemu なら /opt/homebrew/Cellar/qemu/*/share/qemu/edk2-aarch64-code.fd を指定します。

-device virtio-gpu-pci をつけておくと BIOS の画面は virtio-gpu-pci に出て、カーネルが起動してからは serial0 の方に出ていました。

-m 2g-smp 4 は QEMU でよく使うメモリと CPU の指定です。

最後にディスクイメージを指定しています。

qemu-system-aarch64 -M virt -cpu max -device virtio-gpu-pci -bios /opt/homebrew/Cellar/qemu/6.2.0/share/qemu/edk2-aarch64-code.fd -m 2g -smp 4 ~/tmp/FreeBSD-13.0-RELEASE-arm64-aarch64.qcow2

CUI で実行

-serial mon:stdio -nographic で標準入出力に monitor0serial0 を接続して、 GUI なしで起動しました。

違いの理由は調べられていないのですが、 -device virtio-gpu-pci を残したままだと黒背景で、つけないと白背景 (または黒背景、つまり元の端末の設定のまま) になりました。

qemu-system-aarch64 -M virt -cpu max -bios /opt/homebrew/Cellar/qemu/6.2.0/share/qemu/edk2-aarch64-code.fd -m 2g -smp 4 -serial mon:stdio -nographic ~/tmp/FreeBSD-13.0-RELEASE-arm64-aarch64.qcow2

ディスクのリサイズ

デフォルトのディスクサイズだと小さいので、 How to Resize a Disk in FreeBSD を参考にしてリサイズしました。

まず qemu-img でディスクイメージをリサイズします。

% qemu-img info ~/tmp/FreeBSD-13.0-RELEASE-arm64-aarch64.qcow2
file format: qcow2
virtual size: 5.03 GiB (5402853376 bytes)
disk size: 2.58 GiB
cluster_size: 65536
Format specific information:
	compat: 0.10
	compression type: zlib
	refcount bits: 16
% qemu-img resize ~/tmp/FreeBSD-13.0-RELEASE-arm64-aarch64.qcow2 20G
Image resized.
% qemu-img info ~/tmp/FreeBSD-13.0-RELEASE-arm64-aarch64.qcow2
file format: qcow2
virtual size: 20 GiB (21474836480 bytes)
disk size: 2.58 GiB
cluster_size: 65536
Format specific information:
	compat: 0.10
	compression type: zlib
	refcount bits: 16

次に起動中の以下の FreeBSD のロゴがでている画面で 2 を押してシングルユーザーモードで起動します。

\  ______               ____   _____ _____
  |  ____|             |  _ \ / ____|  __ \
  | |___ _ __ ___  ___ | |_) | (___ | |  | |
  |  ___| '__/ _ \/ _ \|  _ < \___ \| |  | |
  | |   | | |  __/  __/| |_) |____) | |__| |
  | |   | | |    |    ||     |      |      |
  |_|   |_|  \___|\___||____/|_____/|_____/      ```                        `
												s` `.....---.......--.```   -/
 /-----------Welcome to FreeBSD------------\    +o   .--`         /y:`      +.
 |                                         |     yo`:.            :o      `+-
 |  1. Boot Multi user [Enter]             |      y/               -/`   -o/
 |  2. Boot Single user                    |     .-                  ::/sy+:.
 |  3. Escape to loader prompt             |     /                     `--  /
 |  4. Reboot                              |    `:                          :`
 |  5. Cons: Dual (Video primary)          |    `:                          :`
 |                                         |     /                          /
 |  Options:                               |     .-                        -.
 |  6. Kernel: default/kernel (1 of 2)     |      --                      -.
 |  7. Boot Options                        |       `:`                  `:`
 |                                         |         .--             `--.
 |                                         |            .---.....----.
 \-----------------------------------------/

そのまま Enter で /bin/sh を起動して、 gpart show で確認します。

CORRUPT になっているので gpart recover vtbd0 しておきます。

gpart resize -i 3 vtbd0 でパーティションをリサイズして、 service growfs onestart でファイルシステムもリサイズします。

そして poweroff で停止してから qemu を起動しなおします。

Enter full pathname of shell or RETURN for /bin/sh:
root@:/ # gpart show
=>       3  10552443  vtbd0  GPT  (20G) [CORRUPT]
         3     66584      1  efi  (33M)
     66587   2097152      2  freebsd-swap  (1.0G)
   2163739   8388707      3  freebsd-ufs  (4.0G)

root@:/ # gpart recover vtbd0
vtbd0 recovered
root@:/ # gpart show
=>       3  41943029  vtbd0  GPT  (20G)
         3     66584      1  efi  (33M)
     66587   2097152      2  freebsd-swap  (1.0G)
   2163739   8388707      3  freebsd-ufs  (4.0G)
  10552446  31390586         - free -  (15G)

root@:/ # gpart resize -i 3 vtbd0
vtbd0p3 resized
root@:/ # gpart show
=>       3  41943029  vtbd0  GPT  (20G)
         3     66584      1  efi  (33M)
     66587   2097152      2  freebsd-swap  (1.0G)
   2163739  39779293      3  freebsd-ufs  (19G)

root@:/ # service growfs onestart
Growing root partition to fill device
vtbd0 recovering is not needed
vtbd0p3 resized
gpart: arg0 'gpt/rootfs': Invalid argument
super-block backups (for fsck_ffs -b #) at:
 8963328, 10243776, 11524224, 12804672, 14085120, 15365568, 16646016, 17926464, 19206912, 20487360, 21767808, 23048256, 24328704, 25609152, 26889600, 28170048, 29450496, 30730944, 32011392, 33291840, 34572288,
 35852736, 37133184, 38413632, 39694080
root@:/ # poweroff

ログイン

説明がみつけられなかったのですが、 root ユーザーにパスワードなしでログインできました。

freebsd-update

第17章 FreeBSD のアップデートとアップグレード によると、とりあえず freebsd-update fetchfreebsd-update install を実行すれば良さそうです。

その後

adduser で一般ユーザーを作成したり、 ruby-build の wiki を参考にして pkg install でパッケージをインストールしたりして、色々使ってみました。

まとめ

最初は全く起動方法がわからなかった FreeBSD 13 の aarch64 版を qemu-system-aarch64 で試すことができました。 とりあえず ruby のビルドを試すのに使っただけですが、今後も環境依存の何かを試したくなったときに使えそうです。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published