Mシリーズ MacOS 上に RaspberryPi OS を動かす
きっかけ、と前書き
MacOSでLinuxDistributionを動かす記事が探したらいっぱい出て来るのだが、raspi-osを動かす記事は少なすぎる。
筆者はUTMというqemuを扱うGUIソフトでよく違うLinuxDistributionをMacOSで動かして遊んでいたので、最初は同じルートでraspi-osをUTMで動かそうとしたが、失敗した。結果的に言うと、raspi-osを動かそうとすると、結構カスタマイズしたqemuコマンドが必要。UTM上では、そもそもraspi-osが公式的にサポートされていないし、これらの細かな設定もUTMからではできないらしく、無念。
そこでネットを漁てみた結果、ようやく先人たちの足跡を見つけたので、その橋を叩いてようやく動かすことに成功した。
ここでまず先人たちの記事を貼っておく。その私欲なき行動に感謝。
実践
まずパソコン上にqemu
がインストールされているのを確認してください。ない方はbrew install qemu
で入るはず。具体的なインストール手順は割愛です。
前置き
まずraspi-osは.iso
でなく、.img
形式の、SDカード中に起動できる状態のOSが入っている状態のものが配布されるので、.iso
起動方式ではブートできない。
そしてさらに、.img
のなかは起動できる状態のOSが入っているため、そのまま linux-kernal としてUTMに食わせるのも無理。
そのためまず.img
からlinux-kernelを抜く必要がある。そしてraspiはarmなので固有のハードウェアの情報が記録されているdtbファイル(device tree blob)も必要。
linux-kernal と dtb を抜く
記事のタイトルはMacOSでraspi-osを動かすなので、ここではMacOSでのやり方を載せます。ほかはこの記事をAIに渡して聞くと簡単に教えてくれると思います。
直接抜くのは無理なので、attachして、mountして、そしてcpする形で取ります。
なのでまずダウンロードした.img.xz
ファイルを解凍して.img
にしたら、以下のcmdを叩きます
hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount <your_file>.img
これて.img
がOSにattachできたので、以下のようなoutputが見えるかと
/dev/disk4 FDisk_partition_scheme
/dev/disk4s1 Windows_FAT_32
/dev/disk4s2 Linux
1番目partition載っているところで、2番目がboot diskで、3番目がrootfs distです。
これが見えたら、以下を叩いてboot distをmountします
mkdir /tmp/raspi_boot
sudo mount -t msdos /dev/disk4s1 /tmp/raspi_boot
mountできたら自機のdiskのようにアクセスできるので、見てみましょう
ls /tmp/raspi_boot
中に色んなファイルが入ってて、以下などが見えるはずです
kernel8.img
kernel_2712.img
bcm2710-rpi-3-b.dtb
bcm2711-rpi-4-b.dtb
...
現在qemuがサポートしているraspiハードウェアのバージョンは4bまでなので、bcm2710-rpi-3-b.dtb
とkernel8.img
を取り出します。(筆者が最初4bでbootを試してみたが、init画面には入れたが、結構なdeviceが見つからないエラーで、コマンド入力できる画面までいけなかった、3bにdowngradeしたら治ったので、おそらくqemuの4bに関するimplが何がおかしいかもしれない)
余談:
qemu-system-aarch64 -machine help | grep -i rasp
でqemu-system-aarch64がサポートしているraspiバージョンが見れます
cp
コマンドでbcm2710-rpi-3-b.dtb
とkernel8.img
を取り出す
cp /tmp/raspi_boot/kernel8.img .
cp /tmp/raspi_boot/bcm2710-rpi-3-b.dtb .
これで linux-kernel ファイルと dtb ファイルを得ることができました。
後始末は忘れずにやろう
sudo umount /tmp/raspi_boot
hdiutil detach /dev/disk4s1
これで終わりだが、ちゃんとumountとdetachされたかもチェックしよう
mount | grep raspi
diskutil list | grep disk4
なにもoutputがなければおkです。
raspi-os、macOSに立つ
qemuでは2の冪乗の.img
ファイルサイズでしか動かないので、まず.img
ファイルをresizeします。
qemu-img resize ./2025-05-13-raspios-bookworm-arm64-lite.img 16G
筆者は2025-05-13-raspios-bookworm-arm64-lite.img
をオフィシャルサイトからダウンロードしたので、読者の皆さんは各自書き換えてください。
ここまできたら簡単です。以下のコマンドを叩けばqemuからraspi-osを起動できるはずです(筆者のコマンドは少々先人の記事のコマンドは違いますが、その解説は省きます。AIに聞いた方が詳細で早いよこの時代は)
qemu-system-aarch64 \
-m 1024 \
-M raspi3b \
-kernel kernel8.img \
-dtb bcm2710-rpi-3-b.dtb \
-drive format=raw,file=2025-05-13-raspios-bookworm-arm64-lite.img \
-append "console=tty1 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 dwc_otg.fiq_fsm_enable=0 bcm2708_fb.fbwidth=1280 bcm2708_fb.fbheight=720" \
-serial stdio \
-no-reboot \
-device usb-kbd \
-device usb-tablet \
-device usb-net,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22
ここではhostfwd
という形で本機のport 2222
をqemu上のraspi-osのport 22
を繋いている(後ほどssh-serverを開いたら本機からssh -p 2222 <username>@localhost
でraspi-osに繋がります)。
他の形でネットワークを組みたい方は自分で調べるかAIに聞きましょう。すでに記事が長いから省きます。
あと注意が必要なのは、他のLinuxDistributionを動かすときのようにメモリサイズを変えることはできません。raspiボードのハードは確定しているからです。
ここから各バージョンのボードがどれぐらいのメモリーがサポートされているかが分かります。
raspi-os初期設定
userとpasswordを設定して、shellにログインできたら、忘れるうちに必要なだけの初期設定をしましょう。
これから実行するコマンドはすべてraspi-osの中で実行する
1. 今raspi-osはまだresizeした容量を認識できてないので、その設定
sudo raspi-config
入ったら6 Advanced Options
=> A1 Expand Filesystem
を選択すると、自動的に再認識してくれる。この操作は再起動が必要なので、従って再起動しましょう。(OSバージョンなどによってオプションの順番が違うかもしれないが、名前が合っていれば良い)
再びraspi-osに入れたら、下のコマンドで容量が先resizeした容量に変わったのが確認できると思います
df -h
2. さらに、今はssh-serverが開いてないので、その設定。同じくraspi-configを使います
sudo raspi-config
入ったら3 Interface Options
=> I2 SSH
を選択。提示に従ってyesを選択すれば自動的にssh-serverを立ち上げてくれます
3. 今のswapメモリーが少ないので、負荷がかかると遅くなります。なのでswapメモリーを増加させる
raspi-os最初はnanoとviしか入ってないので、nanoでconfigを編集します
sudo nano /etc/dphys-swapfile
CONF_SWAPSIZE=xxx
の行を編集して、適切なサイズに変更しましょう。筆者は1024にしました。
保存したらサービスを再起動します。
sudo service dphys-swapfile restart
これでfree
コマンドで変更後のサイズが見えるはずです。
以上使うための設定ができましたが、apt update && apt upgrade
を実行した場合、linux-kernalとdtbファイルが更新される可能性があるので、不具合に合ったら前述の手順で再びlinux-kernalとdtbファイルを抜いて、起動コマンドに置き換えれば解消できます。(例えばapt upgradeしたらネットワーク接続ができなくなったとか)
他色々な設定
筆者だけかもしれませんが、起動したraspi-osはネットスピードは非常に悪状態で、色々試したが改善案が見つからず。改善できたらここに追記します。
あとがき、もしくはツッコミ
AIに慣れすぎていた最近の園児ニア(俺)は、最初AIに聞いてみて、「ああ、それUTMでできますよ」って言われて、結構ハマってしまた。この記事の「実践-前置き」の中に書いてたような前置きの知識も教えてくれてない。最終的に二、三年前の人の記事を見つかってそれみて出来たので、やはりAIはまだまだ人を取り替えることはできないね。自分で知識を検証して、その知識がどれぐらい正確かを実証できるようになったら、AIは一層強くなれるかもしれない。
Discussion