QEMUのコマンドラインに挑戦

下記サイトなどを参考に,こんな感じで,macOSや,Manjaro AMD64で,Raspberry Pi OSのイメージを起動して,updateまでできたのですが,そのあとでブートするとネットが繋がらなくなって,悩んでいるところです.

qemu-system-aarch64  -kernel boot/kernel8.img  \
    -dtb boot/bcm2710-rpi-3-b.dtb  \
    -M raspi3 -m 1024  -serial stdio  \
    -append "rw earlycon=pl011,0x3f201000 console=ttyAMA0 loglevel=8 root=/dev/mmcblk0p2 fsck.repair=yes net.ifnames=0 rootwait memtest=1" \
    -drive file=2021-01-11-raspios-buster-armhf-full.img,format=raw,if=sd  \
    -device usb-kbd  -device usb-mouse \
    -device usb-net,netdev=net0  \
    -netdev user,id=net0,hostfwd=tcp::5555-:22 \
    -no-reboot 

下準備としては,MacでもLinuxマシンでも適当なところに,フォルダーを作り,そこに,Raspberry Piのサイトからインストール用のイメージをダウンロードして,unzipします.微妙にSDイメージのサイズが2のn乗にならないので,qemu-imgでリサイズしました.そして,そのSDイメージのvfat部分をLinuxマシンにマウントして,SDイメージを展開したフォルダー内に “boot” というサブフォルダーを作ってコピーしました.

そこで,上記のqemu-system-aarch64 … を実行しました.

そうそう,libvirtやVirt-Managerとは違って,全部一般ユーザーの権限で作業できます.

Manjaro ARM64では,上記に “-accel kvm” を追加するのでいいと思うのですが,起動すらしてくれません.さらに深く悩み中です.

参考にしたサイト

コマンドラインじゃないとだめかも(QEMU)

Virt-Managerは,非常に解りやすいですが,複雑なQEMUのオプションの扱いを完全に網羅し切れているわけではないようです.

QEMU自体も,ハードウェアやOSによりいろいろ制約があるところ,それをサポートするlibvirtやVirt-Managerもそれぞれ制約があって,最終的に,Virt-Managerがカバーできる範囲が狭くなるのでしょう.

筆者自身,QEMUの複雑怪奇なオプションをいちいち調べて設定していられないよ,というのが,Virt-Mangerに頼るようになったきっかけなので,今さら,コマンドラインを打ち込みたくないのです.

しかし,Virt-Mangerだよりできた仮想マシンいじりの膠着状態を打開するには,QEMUに無数の😓オプションを指定して直接実行するしか選択肢はなさそうです.

コマンドラインでいくならば,Virt-Mangerはもとより,libvirtも不要なようなので制約条件はずいぶん緩和されると思います.Mac miniにMacPortsを再びインストールして,qemuのインストールからやり直すことにします.

libvirtやVirt-Managerの存在理由そのもの.

サブWSもManjaroに

結局,LinuxのリアルマシンであるWorkstation (WS),あるいは,AMD64 (x86_64) WSとして2番めの使用頻度のマシンのdual boot設定のうちの第一のOSをManjaro x86_64にしました.

理由は,各種ソフト(OS,システム関係,アプリ)が最新に近いこと,ハードの能力をかなり引き出していると感じていること,QEMU/KVMをかなり守備範囲広くインストールできること,システムのインストールや,その後のupdateや追加が楽であることなどです.

簡単で,最新で,速い,といったところでしょうか

しかし,残念ながら,x86_64下でのRaspberry Piのエミュレーションはまだうまくいっていません.

ここまでは.Arch Linuxのおかげ.
Manjaroの一番の売り.
Distroの提供するパッケージとして.
個人の感想です.

QEMU/KVMその後2

Raspberry Pi 4 Model BのQEMUは,AMD64 (x86_64)のDebianを動かすことができます.ただし,遅すぎで全く実用になりませんが.

Raspberry Pi 4 Model Bで動いているManjaro aarch64版で動いているQEMU/Virt-Managerで起動中のAMD64版のDebian(拡大イメージ).

本当は,その逆(AMD64のマシンで,Raspberry Piのエミュレーション)をしたいのですが,今AMD64のマシンにインストールしてある実マシンは,SlackwareとGentooで,いずれもQEMU/KVMとlibvirt, Virt-Managerはインストールしてありますが,いろいろ制約があって,手詰まりになり,さらに燃え尽きてしまった次第です.

一番簡単なのは,Manjaro x86_64版を実マシンにインストールすることかなと考えています(Arch Linuxはけっこうめんどくさそうです😓).

QEMU/KVMその後

Distroによったり,MacPortsやHomeBrewそれぞれで,QEMUやlibvirtのconfigureの仕方が違って,できることにかなりの差があります.

出来上がりとして,一番守備範囲が広いのは,Manjaro (aarch64)です.しかし,安定版じゃないみたいで,仮想マシンを作ってちゃんと動くのは,i386とx86_64だけで,Raspberry Pi 3をエミュレートする設定はできるんですが,動いてくれません.

Manjaro AMD64版(または,Arch Linux AMD64版)なら,いろいろできて安定と思われますが,第2 workstationにインストールするためには,既にインストールしてあるDebianかGentooを消すか引っ越すかして空きを作らないといけません.

一番安定して動いてくれるGentooでは,今のところx86_64の仮想マシンしか作れません.これは,なんかフラグかなんかで他のエミュレーターを増やせると思うので,調べてみます.

macOSの取り組みでは,MacPortではvirtqemudとvirtnetworkdができないので,仮想マシンが動きません(当社調べ).そこで,HomeBrewに乗り換え,virtqemud他,libvirtのmodularデーモンがひととおりできましたが,Virt-managerでマシンを作ることができませんでした.

で,このへんで燃え尽きてしまいました😥 現在手持ちのハードウェアで一番ハイスペックなMac miniでQEMUを動かしたかったのですが諦めます.

AMD64のGentooで,Raspberry Piのエミュレーションができないかくらいに縮小して取り組んでみます.

要UEFI firmware

なんだかわかりませんが,Manjaro (Arch Linux) で,Raspbery Pi OSのSDカードのイメージから起動するためには,UEFIのfirmwareが必要で,そのためには,OVMFとかが必要なようです.しかし,aarch64版はないようです😥

したがって,Raspberry Pi 4 model BのManjaroで動かす仮想マシンは,x86 PCのBIOS形式のブートしか使えない,ということのようです.

AMD64 Gentooでも,この情報をもとに,edk2-ovmfをインストールしてみましたが,RPi3の仮想マシンを設定しようとしても,UEFIは見つからないというエラーが出ます.

ただし,ものすごく遅い😥
設定不可能😓