👾

Arch系ディストリビューションでlibcryptoやlibsslに関するカーネルパニックの対処法

2022/11/10に公開

結論

Arch isoを使用して対象のコンピュータのルートシェルを起動し次のコマンドを実行する。

pacman -Syu

または、対象のコンピュータのルートディレクトリをArch isoの/mntへマウントし、以下のように必要なソフトウェアをインストールする。

pacstrap /mnt openssl

以下は詳細です。

状況

sudo pacman -S openssh
sudo pacman -S openssl

上記のようにArch系ディストリビューションでbaseに含まれるようなライブラリを使用するソフトウェアを単体でアップグレードするとpacmansudorebootなどのコマンドが実行できなくなる可能性があります。このときコンピュータを強制的に再起動するとカーネルパニックが発生し、システムからロックアウトされてしまいます。以下の対処法はこの時点から復旧していきます。

対処法

はじめに次のものを用意します。

  • 正常に起動する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