Open2

qemuにAlma Linuxを入れたい会(未遂)

okuokuokuoku

今まで "安定した" LinuxディストリビューションとしてUbuntuを使ってきたけど、世間的な標準はRed HatだしRHEL互換ディストリビューションにするかということでAlma Linuxに乗り換えたい。

https://almalinux.org/ja/

(あと永年おせわになったVirtualBoxからもそろそろ乗り換えたい。)

prev

https://zenn.dev/okuoku/scraps/9e9ef00db06691

結局qemu自体はコンテナ化できなかったが、ここでビルドしたqemuを活用する。

okuokuokuoku

そもそもインストーラーが起動しない

... マジで。。?

Alpine Linuxは当然の権利のようにちゃんと起動する:

/c/qemu/qemu-system-x86_64.exe -accel whpx,kernel-irqchip=off \
  -vnc 127.0.0.1:5500,reverse -machine q35 -smp cpus=6 \
  -k ja -cdrom f:/diskimages/alpine-virt-3.20.0-x86_64.iso -netdev user,id=emul

(WHPXを切ってもブートローダーから先に進まない。)

スクリーンショット取れないけどキーボードのLEDが光って怖いんだよなぁ。。つまりカーネルパニックが発生している。

まず、 qemu のメモリ指定を忘れていた。 -m 8192 くらいかな。次、 qemu側に -serial mon:stdio して カーネルの起動パラメタ(起動メニューで tab して入力) は quiet を削除、 console=ttyS0 earlyprintk=ttyS0 でシリアルコンソールにカーネルの起動ログを出す:

[    5.041677] x86/mm: Checked W+X mappings: passed, no W+X pages found.
[    5.065475] x86/mm: Checking user space page tables
[    5.108764] x86/mm: Checked W+X mappings: passed, no W+X pages found.
Fatal glibc error: CPU does not support x86-64-v2[    5.120412] Run /init as init process

[    5.128442] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00
[    5.128445] CPU: 0 PID: 1 Comm: init Not tainted 5.14.0-427.16.1.el9_4.x86_64 #1
[    5.141247] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.3-0-ga6ed6b701f0a-p
rebuilt.qemu.org 04/01/2014
[    5.150282] Call Trace:
[    5.152753]  <TASK>
[    5.154334]  dump_stack_lvl+0x34/0x48
[    5.157579]  panic+0x107/0x2f7
[    5.159965]  do_exit.cold+0x15/0x15
[    5.163351]  ? exit_to_user_mode_prepare+0xec/0x100
[    5.166744]  do_group_exit+0x2d/0x90
[    5.170289]  __x64_sys_exit_group+0x14/0x20
[    5.175187]  do_syscall_64+0x5c/0x90
[    5.178606]  ? do_user_addr_fault+0x1d6/0x6a0
[    5.182223]  ? exc_page_fault+0x62/0x150
[    5.186314]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
[    5.190652] RIP: 0033:0x7fbdf31216e5
[    5.193858] Code: ba 01 00 00 00 b8 ca 00 00 00 0f 05 c3 0f 1f 84 00 00 00 00 00 f3 0f 1e fa ba e
7 00 00 00 eb 06 0f 1f 44 00 00 f4 89 d0 0f 05 <48> 3d 00 f0 ff ff 76 f3 f7 d8 89 05 eb fa 00 00 eb
e9 66 0f 1f 84
[    5.212561] RSP: 002b:00007fff7eb4c448 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
[    5.218380] RAX: ffffffffffffffda RBX: 00007fbdf311c310 RCX: 00007fbdf31216e5
[    5.224492] RDX: 00000000000000e7 RSI: 00007fff7eb4c010 RDI: 000000000000007f
[    5.230194] RBP: 00007fff7eb4c5d0 R08: 00007fff7eb4bfb9 R09: 0000000000000000
[    5.239268] R10: 00000000ffffffff R11: 0000000000000246 R12: 00007fbdf30fa000
[    5.247817] R13: 0000002300000007 R14: 0000000000000007 R15: 00007fff7eb4c5e0
[    5.256122]  </TASK>
[    5.258043] Kernel Offset: 0x13e00000 from 0xffffffff81000000 (relocation range: 0xffffffff800000
00-0xffffffffbfffffff)
[    5.265420] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00 ]---

Fatal glibc error: CPU does not support x86-64-v2 か。とりあえず -cpu Westmere を追加してみると aesni_gcm_init_avx_gen2+0x37/0xab でkernel panicした。これはWHPXを無効にすると解消したので、CPUの世代を偽装するのが上手くいってない可能性が高いな。

ホストのCPUに近い選択、例えば -cpu Broadwell-noTSX をすると、ユーザーランド直前でハングしてしまう。たぶんWHPXなqemuはそこまで熱心にデバッグされていないんだろうな。。