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” を追加するのでいいと思うのですが,起動すらしてくれません.さらに深く悩み中です.

参考にしたサイト

Manjaro: hibernationに関するエラー

サブWS (Workstation)のメインOSである,Manjaro x86_64の起動時(たぶんgrubがkernelをロードした時)に,ハイバーネーション用のUUIDなんたらのディバイスが見つからないというエラーメッセージが出ます.

たしかに,ログインの後blkidで表示しても,その指し示されたUUIDのディバイスはありません.

別にそれで不具合が生じているわけでなく,ブートに要する時間が遅くなっている感じもありません.

このManjaroは,現在は実マシンで動いていますが,もともと実マシンにインストールしたのではなく,仮想マシンを構築して,少々評価した後に,実マシンにクローニングしたもので,そのあたりがこのエラーの根源かと思います.

仮想マシンとして構築するときは, ほとんどの設定はお仕着せのままで,多分知らずにハイバネーション用のパーティションが仮想ディスクに切られたのだと思います.しかし,実マシンに移行する際,実際のディスク(SSD)のパーティションの切り直しは避けたので,ハイバネーション用のパーティションをManjaro用に作らなかったのです.

ざっと検索して,

superuser: How do I fix Manjaro error hibernation device not found on boot?

この記事を参考に,/etc/default/grubから,エラーの対象になるUUID以下を削除して,mkinitcpioと,grub-mkconfigを実行しましたが,今度は,そもそもハイバーネーションのディバイスがないというエラーに変わっただけで,エラーは出ています.

あ,こちらが正解ですね.mkinitcpioの設定をいじらないといけないようです.

以上まとめますと,

  1. /etc/mkinitcpio.conf のHOOKから,resumeを削除する
  2. ls /etc/mkinitcpio.d から,最新のLinuxバージョンを調べる(ここでは linux59.presetだったとする)
  3. root権限で, mkinitcpio -p linux59 を実行
  4. 要るのか要らないのかわからないけど, grub-mkconfig -o /etc/grub/grub.cfg もやっとく😥

つい最近,Gentooに代わってメインOSに昇格しました😓

コマンドラインじゃないとだめかも(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はけっこうめんどくさそうです😓).