Debianでapt-getアップグレード中に404 Not Foundを修正する方法
アップグレード時の「404 Not Found」エラーは、システムがもはや存在しないか移動されたリポジトリソースからパッケージをダウンロードしようとする際に発生します。これは通常、サポート終了(EOL)となった古い Debian リリースで発生し、そのパッケージがアーカイブサーバーに移動された場合です。
Debianは厳格なリリースサイクルを維持しているため、古いバージョンは最終的にアクティブなミラーから専用のアーカイブストレージに移動します。これが発生すると、既存のリポジトリ構成が古くなり、パッケージマネージャの操作が失敗します。
アップグレード中の404エラーの理解
apt-get update または apt-get upgrade を実行すると、システムは /etc/apt/sources.list からソースリストを読み取り、そこに指定された URL からパッケージ情報を取得しようとします。もしその URL が移動または削除されたリポジトリを指している場合、404 エラーが発生します。
この解決策は、ソースリストを正しいリポジトリの場所を指すように更新することを含みます。異なるDebianのバージョンは異なるリポジトリURLを必要とするため、まず現在のバージョンを特定し、その後設定を適切に変更します。
Debianのバージョンを確認する
変更を行う前に、どのDebianバージョンを使用しているかを確認する必要があります。
lsb_release -a
上記のコマンドは、リリース番号やコードネームを含むディストリビューション情報を表示します。
- ブックワーム → デビアン 12
- ブルズアイ → デビアン 11
- バスター → デビアン 10
次の手順で必要になるので、あなたのコードネームをメモしておいてください。
ソースファイル設定のバックアップ
システムファイルを変更することになるので、バックアップを作成しておくと、必要に応じて元の設定を復元できます。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
これにより、同じディレクトリ内にソースリストのコピーが作成されます。何か問題が発生した場合は、上記のコマンドでソースと宛先を逆にすることで復元できます。
リポジトリのソースを更新中
次に、正しいリポジトリを指すようにソースリストを編集する必要があります。サポートが終了した古いDebianリリースの場合は、アーカイブサーバーに切り替える必要があります。
テキストエディタでファイルを開きます:
sudo nano /etc/apt/sources.list
サポート終了のDebianバージョン向け
もしあなたのDebianのバージョンがサポートされていない場合(例:Jessie、Stretch、またはそれ以前)、ファイルの内容を次のように置き換えてください:
deb http://archive.debian.org/debian/ CODENAME main contrib non-free
deb http://archive.debian.org/debian-security/ CODENAME/updates main contrib non-free
CODENAME をあなたの Debian コードネームに置き換えてください(例えば、Debian 9 の場合は stretch)。
現在サポートされているバージョンについて
もしあなたのDebianのバージョンがまだサポートされているのに404エラー(ミラーの問題)が発生する場合は、代わりにメインのDebianリポジトリを使用してください:
deb http://deb.debian.org/debian/ CODENAME main contrib non-free
deb http://deb.debian.org/debian/ CODENAME-updates main contrib non-free
deb http://security.debian.org/debian-security CODENAME-security main contrib non-free
CODENAME を自分のバージョンに置き換えてください:
- Debian 12 → ブックワーム
- Debian 11 → ブルズアイ
- Debian 10 → バスター
これらの変更を行った後、Ctrl+O を押してファイルを保存し、次に Enter を押し、Ctrl+X で終了します。
アーカイブリポジトリの検証の取り扱い
サポート終了のDebianバージョンのアーカイブリポジトリはセキュリティアップデートを受け取らないため、リリースファイルはもはや有効な鍵で署名されていません。署名の有効期限切れによってaptコマンドが失敗するのを防ぐには、これらのリポジトリに対する検証チェックを無効にする必要があります。
次の設定ファイルを開くか作成します:
sudo nano /etc/apt/apt.conf.d/99allow-unauthenticated
この一行を追加してください:
Acquire::Check-Valid-Until "false";
この設定は、apt にリリースファイルの有効期限を無視するよう指示します。これは、もはや更新を受け取らないアーカイブされたリポジトリに必要です。
パッケージ情報の更新
リポジトリのソースが正しく設定されたので、パッケージリストを更新してください。これにより、新しく設定したリポジトリから最新のパッケージ情報が取得されます。すべてが正しく設定されていれば、404エラーなしで完了するはずです。
sudo apt-get update
パッケージリストが更新されたら、インストール済みのパッケージをアップグレードできます。これにより、現在のシステムに利用可能な更新がダウンロードされ、インストールされます。アーカイブされたバージョンでは、更新が提供されなくなっているため、アップグレードされるパッケージがほとんどないか、まったくない場合があります。
sudo apt-get upgrade
ディストリビューションのアップグレードを考慮する
404エラーを修正することで現在のシステムは動作しますが、サポート終了のDebianバージョンを使用していると、セキュリティ更新を受け取れなくなり、本番環境やインターネットに接続された環境では重大なリスクとなります。
現在サポートされているDebianのリリースにアップグレードすることを検討すべきです。
sudo apt-get dist-upgrade
しかし、主要なDebianバージョン間のアップグレードは慎重な計画が必要であり、既存の設定やインストール済みのソフトウェアを壊す可能性があるため、軽率に行うべきではありません。メジャーアップグレードを試みる前に、対象バージョンの公式Debianリリースノートを参照してください。
要約
apt-get upgrade 中の 404 エラーは、ソース設定内のリポジトリ URL が古いために発生します。Debian のバージョンを特定し、ソースリストを適切なリポジトリに更新し、検証設定を調整することで、パッケージ管理の機能を回復できます。
サポートされていないバージョンを使用することはセキュリティへの影響があるため、最新のDebianリリースへのアップグレード計画を立てることが、長期的な推奨解決策となります。