Arch系ディストリビューションでlibcryptoやlibsslに関するカーネルパニックの対処法
結論
Arch isoを使用して対象のコンピュータのルートシェルを起動し次のコマンドを実行する。
pacman -Syu
または、対象のコンピュータのルートディレクトリをArch isoの/mnt
へマウントし、以下のように必要なソフトウェアをインストールする。
pacstrap /mnt openssl
以下は詳細です。
状況
sudo pacman -S openssh
sudo pacman -S openssl
上記のようにArch系ディストリビューションでbaseに含まれるようなライブラリを使用するソフトウェアを単体でアップグレードするとpacman
やsudo
、reboot
などのコマンドが実行できなくなる可能性があります。このときコンピュータを強制的に再起動するとカーネルパニックが発生し、システムからロックアウトされてしまいます。以下の対処法はこの時点から復旧していきます。
対処法
はじめに次のものを用意します。
- 正常に起動するPC
- 修復対象のコンピュータ(デバイスが暗号化されていない)
- USBメモリ
- インターネット環境
Arch isoの用意
正常に起動するPCはArch isoをddモードで書き込むことができればどのようなものでも構いません。Windowsの場合はRufusなどを別途インストールしてください。
Arch isoはミラーサーバからダウンロードすることができます。HTTPミラーサーバからダウンロードした場合はPGP署名も同時にダウンロードして検証してください。また、PGP署名自体も開発者のフィンガープリントと一致するか検証する必要があります。以下はコマンドの例です。
gpg --verify archlinux-2022.11.01-x86_64.iso.sig archlinux-2022.11.01-x86_64.iso
次のような出力が得られます。
gpg: Signature made Tue Nov 1 22:57:39 2022 JST
gpg: using RSA key 4AA4767BBC9C4B1D18AE28B77F2D434B9741E8AC
gpg: issuer "pierre@archlinux.de"
gpg: Good signature from "Pierre Schmitz <pierre@archlinux.de>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 4AA4 767B BC9C 4B1D 18AE 28B7 7F2D 434B 9741 E8AC
4AA4...
の部分が開発者のフィンガープリントになります。上記のリンクから一致するものがあるか確認してください。
正しいisoイメージファイルをダウンロードすることができたらddコマンドで書き込みます。
dd bs=4M if=./archlinux-2022.11.01-x86_64.iso of=/dev/sdb conv=fsync oflag=direct status=progress
/dev/sdb
の部分はパーティション(/dev/sdb1 など)ではなくデバイスを選択することに注意してください。また、lsblk
での出力でマウントされている場合はumount
してください。
修復
Arch isoを用意できたら対象のコンピュータでブートしてください。UEFIやBIOSの設定からブート順序を変更することでUSBからブートすることができます。
次に、ルートディレクトリをマウントしていきます。Arch isoのターミナルから次のコマンドを実行してください。
mount /dev/sda2 /mnt
上記は例です。/dev/sda2
はLinuxファイルシステムで対象のコンピュータのルートディレクトリがあるところです。fdisk -l
コマンドで確認することができます。
次に、ルートシェルへ入ります。
arch-chroot /mnt
ルートシェルへ入ることができたら、公式リポジトリからインストールされたパッケージをアップグレードしていきます。
pacman -Syu
場合によってはpacman
を使用する際にopensslが見つからないなどのエラーが発生することがあります。その場合は、ルートシェルではなくArch isoから次のコマンドを実行してください。
pacstrap /mnt openssl
予防策
パッケージの単体更新は避け、常に最新の状態にしておく(pacman -Syu
)ことが重要です。
Discussion