Kaliのaptコマンドが機能しなくなった話と解決

# はじめに
こんにちは、限界ちゃん🐹です。今日はKali Linuxでaptコマンドが突然死した時に復旧した方法をメモとして残しておこうと思い、記事を書きました。

# ある日突然aptコマンドが使えなくなる
突然こんなエラーが出て、パッケージが一切更新できなくなりました。
```shell
$ sudo apt update

Get:1 http://kali.download/kali kali-rolling InRelease [41.5 kB]
Err:1 http://kali.download/kali kali-rolling InRelease
  Sub-process /usr/bin/sqv returned an error code (1), error message is: Missing key 827C8569F2518CC677FECA1AED65462EC8D5E4C5, which is needed to verify signature.
Fetched 41.5 kB in 1s (32.9 kB/s)
Warning: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. OpenPGP signature verification failed: http://kali.download/kali kali-rolling InRelease: Sub-process /usr/bin/sqv returned an error code (1), error message is: Missing key 827C8569F2518CC677FECA1AED65462EC8D5E4C5, which is needed to verify signature.
Warning: Failed to fetch http://http.kali.org/kali/dists/kali-rolling/InRelease  Sub-process /usr/bin/sqv returned an error code (1), error message is: Missing key 827C8569F2518CC677FECA1AED65462EC8D5E4C5, which is needed to verify signature.
Warning: Some index files failed to download. They have been ignored, or old ones used instead.
```
最初は「あれ？」くらいで流してたんですが、どうもパッケージが全然インストールできません。

```shell
$ sudo apt install -y libkeystone-dev
Error: Unable to locate package libkeystone-dev
```

### GPG関連の追加エラー
「じゃあキーが問題なのか？」と思いGPGでkey追加を試みると、これまた謎エラー。
```
$ sudo gpg --no-default-keyring --keyring /usr/share/keyrings/kali-archive-keyring.gpg --keyserver keyserver.ubuntu.com --recv-keys 827C8569F2518CC677FECA1AED65462EC8D5E4C5 
gpg: failed to create temporary file '/root/.gnupg/.#lk0x0000aaaaef3a3620.kali.346092': No such file or directory
gpg: connecting dirmngr at '/root/.gnupg/S.dirmngr' failed: No such file or directory
gpg: keyserver receive failed: No dirmngr
```
おや？/root/.gnupgが無い…？手動でmkdirしないといけないとですね…
### apt installしようにも…
dirmngr自体のインストールもままならず。
```
$ sudo apt install dirmngr
dirmngr is already the newest version (2.2.40-1.1).
dirmngr set to manually installed.
```

まさに「aptが死んだ」状態ですね。
しかも、これが初めてじゃなく周期的に発生しているのがKaliあるある…。

# 解決方法（実際の復旧手順）
今回は次のようにして復旧しました🐹
### 1. sources.listの確認（公式のみに戻す）
まず、変なリポジトリが入ってないかチェック。
```shell
cat /etc/apt/sources.list
```
以下のように公式だけになっていればひとまずOK
```shell
deb http://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware
```

### 2. .gnupgディレクトリの復元
GPG関連のエラーが「No such file or directory」だったので、まずはディレクトリを手動で作る。
```shell
$ sudo mkdir -p /root/.gnupg
$ sudo chmod 700 /root/.gnupg
```
### 3. GPG鍵を再取得
エラーメッセージに出ている見つかっていないkey（例：827C8569F25）をkeyserverから取得。
(エラーで出てきた公開鍵IDをそのまま入れるだけで大丈夫)
```shell
$ sudo gpg --no-default-keyring --keyring /usr/share/keyrings/kali-archive-keyring.gpg \
  --keyserver keyserver.ubuntu.com --recv-keys 827C8569F25
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key ED65462EC8D5E4C5: public key "Kali Linux Archive Automatic Signing Key (2025) <devel@kali.org>" imported
gpg: Total number processed: 1
gpg:               imported: 1
```
ここで
`gpg: key ED65462EC8D5E4C5: public key "Kali Linux Archive Automatic Signing Key (2025) <devel@kali.org>" imported`
みたいな表示がでたら無事、鍵が追加されているのでOK。

もし、`gpg: keyserver received failed: Connection timed out`となってしまった場合は、keyserverを別のもに変えて試してみてください。
 - keyserver.ubuntu.com
 - keys.opengpg.org
 - hkps://keys.opengpg.org
 - pgp.mit.edu
 - keyserver.pgp.com

### 4. 古いaptキャッシュをクリア
古いキャッシュが残ってると、最新状態に戻すことができないので、キャッシュをクリアします。
```sh
sudo rm -rf /var/lib/apt/lists/*
```

### （必要に応じて） dirmngrのエラーも出たのでインストール
```shell
sudo apt install dirmngr
```
エラーが出なければ、これでGPGのkeyserver問い合わせが動くはずです。


### 5. apt updateで再度復活を確認
復旧確認ですね。
```shell
$ sudo apt update
Get:1 http://http.kali.org/kali kali-rolling InRelease [41.5 kB]
...
Fetched 8,219 kB in 2s (4,771 kB/s)
Reading package lists... Done
Building dependency tree... Done
All packages are up to date.
```
おお！上手く機能して生き返ったようです。

# なんでこうなるの？

今回は **GPGの鍵が機能していなかった** ことが主な原因でしたが、  
実はKaliやDebian系ディストリでは、リポジトリ側の公開鍵ローテーションやサードパーティリポジトリ競合、/root/.gnupgやkeyringの権限不備・消失、apt indexファイルの破損など…いろんな理由でapt関連のトラブルが**周期的に発生しがち**です。

🐹も「またか！」としか思えないぐらい、何度も同じ状況に陥りました。

### 考えられる原因まとめ
 - サーバ側のGPG公開鍵がローテーションされたのに、ローカルに反映されていない
 - `/root/.gnupg`やkeyringのパーミッションエラー or ディレクトリごと消失
 - サードパーティリポジトリやPPAが混ざって競合
 - aptコマンドの多重実行・途中キャンセルで`/var/lib/apt/lists/`破損
 - 古いキャッシュやindexが残ったまま
 - なぜか分からないが「何もしてないのに壊れた」（これが一番多い😇）

# おわりに
どうしても治らない場合、
`sudo apt update --allow-unauthenticated`で強引にアップデートできることもありますが、セキュリティ的には推奨できないかもです。

Kaliでaptコマンドが死んだとき、心折れそうになるけど、今回は地味なGPGの鍵復旧で治るパターンでよかったです笑