箱庭遊び10: Slackware64の実マシンブートする

紆余曲折がありましたが,Slackware64の仮想マシンを実マシンに移行した上,自前のEFI+GRUBと,ManjaroのEFI-GRUBからブートするようになりました.

今回引っかかった最大の罠は,ext4のFEATURE_C12です.

詳しく調べたわけではないですが,e2fsprogs 1.47.0では,FEATURE_C12がdefaultでONになり,mke2fs 1.47.0でformatしたパーティションを,それ以前の世代のGRUBを含むfirmwareがマウントできないようです.

Workaroundとして,SlackwareのインストールDVDイメージを焼いたUSBメモリーから起動して第2OS用パーティションをmke2fs 1.46.xによってフォーマットして,そこに第1OSであるManjaroでSlackware64の仮想マシンの仮想ディスクイメージの内容をrsyncによってコピーしました.

2つ目は,EFIの罠で,これは今まで何度も引っかかっています.Slackware64のインストール用DVDイメージを焼いたUSBメモリーから起動してハードディスクをルートにする際に,必ず “UEFI: Flash Image” から起動しないと,efibootmgrが動きませんし,efibootmgrを用いるgrub-installもエラーになります.

USBメモリーのEFIから起動するとなかなかよくできていて,メニューに従ってハードディスクのパーティションを適切に選べば,そのままハードディスクのパーティションをルートにして,Xまで立ち上がります.

ちなみに,第2WS (workstation)の第1OSと第2OSの違いは,仮想マシンのホストにするかしないかです.Debianでも比較的楽にKVM/QEMU環境は築けますが,敢えてやり直す気もしないので,当分はManjaroを第1OSにしたままにします.第2OSは仮想マシンのホストにするという条件がないので,仮想マシンと自由に入れ替えできます.

mke2fsは,最新の1.47.0と思います(後で確認します).
正確には違うと思います😓

箱庭遊び9: Slackware64 仮想マシンから実マシンへ移行

仮想マシンのSlackware64にfcitx5-mozcのインストールが成功しました.ローマ字入力しかできないなどと馬鹿な独り言を書いてしまいましたが,Mozcの設定のダイアログはコマンドラインから起動できることを思い出し,かな入力もできるようになりましたし,他のマシンで培った😓 ユーザー辞書のインポートもできました.

あとは,あきらめたSlackware 32bitの間借りしていた実マシンのパーティションに移植するだけです.コピーにはいつものように,qemu-nbdなどを使います.

Slackware 32bitのときと同じくManjaroのGRUBから起動できれば十分なので,お手軽簡単にManjaroから

update-grub

をかけてみましたが,うまくブートしてくれません.kernelモジュールがないと文句を言っているようなので,もとの仮想マシンの仮想ディスクのイメージを確認すると,KernelはSlackwareの最新パッチの5.15.117なのに,initrd.gz内のモジュールは初期の5.15.19のままです./boot/initrd-tree内に5.15.117のモジュールのツリーをコピーして,

mkinitrd

をしてみましたが,ブートしてくれません.なお,これだけの修正をするのに

仮想マシンの作業を終えて仮想マシンを止める
modprobe nbd      ← 初回のみ
qemu-nbd --connect /dev/nbd0 /仮想/マシンの/ディスクイメージ.qcow2
fdisk -l /dev/nbd0   ← ルートパーティションを確認する(初回のみ)
mount /dev/nbd0pなんとか /mnt/hd1 -oro
mount /dev/sdなんとか /mnt/hd2
rsync -artlvd /mnt/hd1/ /mnt/hd2/
場合によっては/mnt/hd2の修正作業
umount /mnt/hd1
umount /mnt/hd2
qemu-nbd --disconnect /dev/nbd0
update-grub
reboot

の作業が必要です.これでだめならまた仮想マシンのディスクの修正作業からやります.

Manjaroのgrub頼みはいったんあきらめて,chrootの手続きにより,Slackware64自身によるブートの仕組みをこしらえてみます.

第2 WS(workstation).
第2 OSの定位置.
Manjaroで,root権限です.
qemu-nbd --disconnect /dev/nbd0をしないと,Manjaroのgrubに/dev/nbd0なんとかがブート可能なパーティションとして追加されてしまいます.まあ,全部終わったら削除すればいい話かもしれませんが.

箱庭遊び6: Slackware仮想マシンの実マシン化 (3)

半分成功した状態で頓挫しました.

いろいろやりながら調べてわかったのは,ext4のFEATURE_C12という機能にまつわるインコンパチビリティーが話を複雑にしているようです.

できるようになったのは,Manjaro (AMD64)のgrubから,Slackware 32bit版を起動させることです.起動したSlackware 32bit版自身でEFIの操作やgrubのインストールはいろんなオプション試しましたができませんでした.

Manjaroのgrubからでも起動できれば成功としていいと思うのですが,Slackware 15.0がリリースされた時のkernel 5.15.19ならばブートするのですが,最新パッチの5.15.117ではブートしてくれません.ですので1/4成功でしょう.

Slackware 15.0 32bit版の仮想マシンの実マシン化はあきらめて,Debianを復元してみます.

一応なんとか動くので,しばらくSlackware 15.0 (32bit)を実マシンで動かしてみることにします.

追記

何をどうしたかわかりませんが,Slackware 15.0 (32bit)の最新kernel 5.15.117でブートするようになりました.Manjaroのgrub頼みですが,しばらくこのまま使ってみます.この追記もSlackware 15.0 の元,Firefoxから書き込んでいます.日本語入力はfcitx4 + Mozcです

いや,1/3か,1/4かも😓
fcitx5より少し不便ですが.

箱庭遊び5: Slackware仮想マシンの実マシン化 (2)

仮想ディスクイメージの中身を実マシンのパーティションにコピーするのは難なくできました.仮想ディスクイメージのマウントさえできれば,後は単にコピーするだけですから.

そして,ブートの設定ですが,まずは何も考えず,Manjaro AMD64の実マシンからchrootしてみますが,KernelがホストはAMD64, chroot先はx86 32bitなので,たぶんgrubの設定でエラーが出るに違いないです.

果たして,

grub-install /dev/sda
grub-install: error: /usr/lib/grub/x86_64-efi/modinfo.sh doesn't exist. Please specify --target or --directory.

となりました.

そこで,

grub-install /dev/sda --target i386-efi

としましたが,

Installing for i386-efi platform.
grub-install: error: unknown filesystem.

となりました.ホストのKernelやfirmwareとターゲットのもののバージョンが違うのでこうなることはある意味想定内です.

時間の無駄といえばそうですが,確認することに意義はあると思います😓

x86 32bitでブートさせるしかないです.そのためには,Slackware 32bitのインストールDVDイメージをダウンロードしてUSBメモリーに焼いて,そこからブートするしかありません.まあ,それが正攻法なんですが.

何百回とやってます😓

箱庭遊び3: Manjaro実機の仮想化も成功

Debian実機の仮想化の次は,第2workstation (WS)の第1OSであるManjaroの仮想化に取り組みました.

Debianでまっ更な仮想ディスクイメージへのコピーがうまく行かなかったので,今回はその成功を目指しました.

Manjaro WSは,Raspberry Piのバックアップなどを含むのでデータの占有量は160GBを少し超えるので,200GBのまっ更な仮想ディスクイメージを作成し,100MBをBIOS bootに,残りをLinux用にGPTでパーティショニングしました.

qemu-nbdを使って,ブロックディバイス化して,フォーマットしてLinuxのパーティションをマウントして,既に動いているManjaroの仮想マシン(これもかなり前に実マシンから仮想化したもの)の第2ドライブとしてつないで,chrootしてgrubをインストールしました.このあと既に動いているManjaroの第2ドライブからその新しい仮想ディスクイメージを外し,VMmanagerで新しい仮想ディスクイメージをメインディスクにした仮想マシンをでっち上げます.

しかしブートしませんでした.GRUBの画面は出てデフォルトのまま先に進みますが,UUIDで指定したドライブが見つからないと文句を言います.

おそらく仮想ディスクをVirtIOで接続したのが良くなかったのですが,このときは気づかず,Manjaroの仮想マシンでchrootはあきらめ,DebianのインストールDVDイメージから起動して,新しく作った仮想ディスクのLinuxパーティションをルートにして,grub-installとupdate-grubを実行して,仮想イメージからブートしたら,今度は起動に成功しました.

先に書きましたが,DebianのDVDイメージで作業したから成功したのではなく,仮想マシンにVirtIOでなくSATAとして接続したのが良かったのだと思います.