Ventura を先に入れてしまったマシンの Asahi Linux インストールを回りくどい方法で修復する
楽チンな方法はここに書いてあるので普通の人はこっちを読め!!!!
ちょっと Asahi Linux が使いたい用事があったのでブートしようとしたけど U-Boot でstuckする どうせなら一気に最新にしたかった
Asahi Linux の ESP の探しかた:
diskutil list する
TYPE が EFI で Name が EFI - ASAHI な行の IDENTIFIER を覚える (disk0s4 とか)
sudo diskutil mount diskXsY する (diskXsY はさっきの IDENTIFIER)
Volume HOGEHOGEHOGE on diskXsY mounted と言われたら /Volumes にあるはず
unmount するときは sudo diskutil unmount diskXsY
U-Boot で stuck するのは直ったけど Linux Kernel が ブートできない
EFI Stub: Exiting boot services... で stuck して放っておくと watchdog かなにかで殺される
ESP に Linux Kernel 置いて GRUB Shell から起動することでリカバリできないか?
/boot の ext4 はマウントできないので…
というわけでやってみる
展開して usr/lib/modules/5.*-asahi-*/vmlinuz を適当に ESP のルートに置いとく
Asahi Linux で再起動、GRUB Shellに落ちてESPを探す
たぶん diskXsY が (hdX,gptY)に対応している
わかったら exit すると U-Boot に抜けるので boot で GRUB に入り直す
/boot/vmlinuz-... を (hd0,gpt4)/vmlinuz に書き換える
これで行けると思ったらinitramfsにカーネルモジュール入ってなくて encrypt hook でコケた!テヘペロ
何もカーネルモジュールが読まれないとキーボードすら使えないのでどうしようもない
作戦: initramfs を救い出して /usr/lib/modules/ を置き換える
なんでこんなことをしたいのか?
encrypt hook を使っているので1から initramfs を作るのが面倒だから
どうやって initramfs を救うのか?
Linuxの rescue shell に落ちてESPをrwでマウントして initramfs を救う
しかし今の initramfs だとキーボード入力ができないし、たぶん内蔵ディスクも見えていない
GRUB って ext4 とか fat32 とかマウントできるけどコピーはできないの?
インターネットによるとできないらしい (initramfs shell に落ちろって書いてあったけどそのshellが死んでんだよ)
サブ作戦: asahi-base-*.zip から initramfs をパクって ESP に置き、そこから ext4 上の initramfs を ESP にコピーする
必要: 2GB くらいの空き容量 (macOS 上に)
root.img だけ必要なのでそこだけ抜く
$ unzip /path/to/asahi-base-*.zip root.img
さらに root.img の boot/initramfs-linux-asahi-fallback.img だけ抜いてくる
$ 7z e root.img boot/initramfs-linux-asahi-fallback.img
カーネルのバージョン合わせないといけないので boot/vmlinuz-asahi も必要だった
$ 7z e root.img boot/vmlinuz-linux-asahi
上記の方法で ESP に initramfs-linux-asahi-fallback.img を置く
これでシェルが起動できるのでESPをマウントしてESPに旧initramfsを逃がす
macOSにリブートして ESP に逃がした旧initramfsを持ってくる
例えば ~/playground/asahi-initramfs-rescue みたいなフォルダにいるとする
旧initramfsを initramfs-linux-asahi-fallback-original.img として持ってくる
mkdir old && cd old で旧initramfs展開用フォルダを掘る
gunzip -c ../initramfs-linux-asahi-fallback-original.img | cpio -i で展開する
次に cd .. で戻って mkdir new && cd new で新initramfs展開用フォルダを掘る
gunzip -c /path/to/initramfs-linux-asahi-fallback.img | cpio -i で新initramfs展開
$ cd ..
$ mv new/usr/lib/modules/* old/usr/lib/modules/
ls old/usr/lib/modules で新kernel用のモジュールが入ったことを確認
$ cd old
$ find . | cpio -H newc -o | gzip -9 > /Volumes/EFI\ -\ ASAHI/initramfs-new.img
これで vmlinuz-linux-asahi と initramfs-new.img で起動してみる
起動はできたがLUKSのパスワード忘れた!!!完
………本当に忘れているのか?
なんかカーネルモジュールの不足とかでコケてるだけなんじゃないかという気がしてきた
ので dd で適当に 256mbytes くらい持ってきて Linux VM 内でcryptsetup luksOpen できないか試してみる
なんか本当に忘れてるっぽいというオチになった
https://gyazo.com/89a700d5b929c398e575ff3c20ff5958
結局再セットアップした