はじめに (対象読者・この記事でわかること)
この記事は、Ubuntu 20.04.2 LTS の環境で apt-get update コマンドを実行した際に発生するエラーに直面し、解決策を見つけられずに困っているサーバー管理者、開発者、そしてLinux初心者の方々を対象としています。
この記事を読むことで、apt-get update の実行時に頻繁に遭遇する具体的なエラーメッセージとその原因を特定する能力が身につきます。さらに、一般的な問題の解決策から、より複雑な状況下での復旧手順までを段階的に理解し、ご自身の環境で apt-get update を正常に実行できるようになります。システムアップデートの滞りを解消し、安全で最新の状態を保つための確実な知識とスキルを提供します。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
* Ubuntu (Linux) の基本的なコマンド操作(sudo, cd, ls など)
* テキストエディタ(nano や vim など)の基本的な使い方
* ネットワーク接続の基本的な概念
Ubuntu 20.04.2 で apt-get update が失敗する典型的な原因と解決策
apt-get update コマンドは、Ubuntuシステムが利用可能なパッケージのリストを最新の状態に更新するために不可欠なプロセスです。しかし、様々な要因によってこのコマンドが失敗し、システムアップデートや新規パッケージのインストールができなくなることがあります。ここでは、Ubuntu 20.04.2 で apt-get update が失敗する主な原因をいくつか挙げ、それぞれの解決策について詳しく解説します。
1. ネットワーク接続の問題
最も一般的で、かつ見落とされがちな原因は、サーバーがインターネットに正常に接続できていないことです。
* 原因:
* 物理的なネットワークケーブルの断線や、ネットワーク機器(ルーター、スイッチ)の故障。
* ファイアウォールによって、aptのリポジトリサーバーへのアクセスがブロックされている。
* DNS設定の問題により、リポジトリサーバーのホスト名をIPアドレスに解決できない。
* プロキシ設定が誤っている、またはプロキシサーバー自体がダウンしている。
* 確認方法:
* ping 8.8.8.8 (GoogleのDNSサーバー)を実行し、応答があるか確認します。
* ping archive.ubuntu.com (Ubuntuの公式リポジトリサーバーの一つ)を実行し、ホスト名解決と応答があるか確認します。
* curl -I https://archive.ubuntu.com を実行し、HTTPヘッダーが返ってくるか確認します。
* 解決策:
* ネットワークケーブルの接続を確認し、必要であれば再接続または交換します。
* ルーターやスイッチなどのネットワーク機器を再起動します。
* ファイアウォール設定を見直し、aptが使用するポート(通常はHTTPの80番、HTTPSの443番)へのアクセスを許可します。
* /etc/resolv.conf ファイルを確認し、正しいDNSサーバーが設定されているか確認します。必要であれば、/etc/netplan/ ディレクトリ内のネットワーク設定ファイルを修正し、sudo netplan apply を実行します。
* プロキシを使用している場合は、/etc/apt/apt.conf または /etc/apt/apt.conf.d/ ディレクトリ内のプロキシ設定ファイルを確認・修正します。
2. リポジトリ設定(/etc/apt/sources.list および /etc/apt/sources.list.d/)の問題
apt-get update は、これらのファイルに記述されているリポジトリからパッケージ情報を取得します。ここに誤った情報や古い情報があると、エラーが発生します。
- 原因:
- 誤ったリポジトリURLが記述されている。
- 存在しない、またはアクセスできないリポジトリを追加している。
- 手動で編集した際に、構文エラーが発生している。
- サードパーティ製リポジトリ(PPAなど)で問題が発生している。
- 確認方法:
cat /etc/apt/sources.listおよび/etc/apt/sources.list.d/ディレクトリ内の各ファイルをcatコマンドで確認します。- エラーメッセージに特定のURLやファイル名が含まれている場合、それらを重点的に確認します。
- 解決策:
- 公式リポジトリの確認:
/etc/apt/sources.listファイルの各行が、Ubuntu 20.04.2 (focal) に対応しているか確認します。一般的には以下のような形式です。deb http://jp.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse deb http://jp.archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse deb http://jp.archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse deb http://jp.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse- ミラーサイトが正しく指定されているか確認します(例:
jp.archive.ubuntu.com)。通信速度の速いミラーサイトに変更することも効果的です。
- サードパーティ製リポジトリ(PPA)の無効化/削除:
/etc/apt/sources.list.d/ディレクトリ内に、導入したPPAなどの設定ファイルがあります。- 一時的に問題を切り分けるために、これらのファイル名を変更(例:
.listを.list.bakに変更)して、apt-get updateを再実行します。 - もしこれで成功するようであれば、問題のあるPPAを特定し、削除するか、最新のUbuntuバージョンに対応したPPAに更新する必要があります。PPAの削除は、
sudo add-apt-repository --remove ppa:ppa_name/ppa_nameコマンドで行えます。
- 構文エラーの修正:
- 各行のフォーマットが崩れていないか(余分なスペース、抜けている要素など)を注意深く確認し、修正します。
- 公式リポジトリの確認:
3. ディスク容量不足
aptはパッケージのダウンロードや一時ファイルの作成にディスク容量を使用します。ディスク容量が不足していると、これらの処理が完了せずエラーとなります。
- 原因:
- システムパーティション (
/) や/varパーティションの空き容量が著しく少ない。 - 古いカーネルや不要なパッケージが蓄積している。
- システムパーティション (
- 確認方法:
df -hコマンドで、各パーティションのディスク使用率を確認します。使用率が95%を超えている場合、注意が必要です。
- 解決策:
- 不要なパッケージの削除:
sudo apt autoremove: 依存関係でインストールされたが、現在不要になったパッケージを削除します。sudo apt clean:/var/cache/apt/archives/ディレクトリに保存されているダウンロード済みのパッケージファイルを削除します。これによりディスク容量を大幅に節約できます。
- 古いカーネルの削除:
uname -rで現在使用中のカーネルバージョンを確認します。dpkg --list | grep linux-imageでインストールされているカーネルイメージを一覧表示します。- 現在使用中のカーネル以外の古いカーネルを安全に削除します。注意:誤って現在使用中のカーネルを削除しないように注意してください。
- 通常、
sudo apt autoremoveで古いカーネルも削除されることが多いですが、手動での確認・削除も有効です。
- 不要なログファイルの削除:
/var/log/ディレクトリ内の大きなログファイルを削除またはローテーションします。
- ディスク拡張:
- 上記の方法で解決しない場合は、クラウドプロバイダの管理画面や、仮想化ソフトウェアの設定からディスク容量を拡張することを検討します。
- 不要なパッケージの削除:
4. パッケージデータベースの破損
aptのパッケージデータベースが何らかの原因で破損している場合、apt-get update が正常に完了しないことがあります。
- 原因:
- 予期せぬシステムシャットダウン(停電など)
- ディスクI/Oエラー
- aptプロセス実行中の予期せぬ中断
- 確認方法:
- エラーメッセージに「E: Sub-process /usr/bin/dpkg returned an error code」や「dpkg was interrupted」といった記述が含まれている場合。
- 解決策:
- dpkgデータベースの強制再構築:
- まず、中断された可能性のあるdpkgプロセスを停止します。
bash sudo dpkg --configure -a - それでも解決しない場合、aptのロックファイルを削除します(ただし、現在aptプロセスが実行されていないことを確認してください)。
bash sudo rm /var/lib/apt/lists/lock sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock sudo rm /var/lib/dpkg/lock-frontend - その後、aptのインデックスファイルを再生成し、再度
apt-get updateを実行します。bash sudo apt-get update
- まず、中断された可能性のあるdpkgプロセスを停止します。
- aptキャッシュのクリアと再構築:
sudo apt-get cleansudo rm -rf /var/lib/apt/lists/*sudo apt-get update
- dpkgデータベースの強制再構築:
5. GPG キーの問題 (鍵が無効または欠落している)
リポジトリから取得したパッケージの正当性を検証するために、GPG キーが使用されます。この鍵が無効であったり、欠落している場合にエラーが発生します。
- 原因:
- リポジトリのGPG キーが更新され、古い鍵が無効になった。
- 鍵のインポートに失敗した。
- システム時刻が大幅にずれている。
- 確認方法:
- エラーメッセージに「NO_PUBKEY」や「The following signatures were invalid」といった記述が含まれている場合。
- 解決策:
- 欠落しているGPG キーのインポート:
- エラーメッセージに表示される「NO_PUBKEY」の後に続く鍵ID(例:
3B4FE82321907E9674B7384E535ED3571B121BB0)をコピーします。 - 以下のコマンドで鍵をインポートします(
YOUR_KEY_IDはコピーした鍵IDに置き換えてください)。bash sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys YOUR_KEY_ID - または、よりモダンな方法として
/etc/apt/trusted.gpg.d/ディレクトリに鍵ファイルを配置する方法があります。bash wget -qO - https://example.com/key.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/example.gpg - 鍵のインポート後、再度
sudo apt-get updateを実行します。
- エラーメッセージに表示される「NO_PUBKEY」の後に続く鍵ID(例:
- システム時刻の同期:
- NTP(Network Time Protocol)が正しく設定され、システム時刻が同期されているか確認します。
timedatectlコマンドで現在の時刻とNTPの状態を確認できます。必要であれば、sudo timedatectl set-ntp trueでNTPを有効にします。
- 欠落しているGPG キーのインポート:
6. 「apt-get update」と「apt update」の混乱
Ubuntu 16.04 LTS 以降、apt-get に代わるより高機能な apt コマンドが推奨されています。しかし、apt-get を使用し続けている環境も多く、両者の挙動の違いや、環境によっては apt コマンドの方がうまくいくケースも存在します。
- 原因:
- 古いスクリプトやドキュメントで
apt-getが使われており、aptコマンドとの互換性問題。
- 古いスクリプトやドキュメントで
- 解決策:
- 可能であれば、
apt-get updateをapt updateに置き換えて実行してみてください。多くの場面で同様の機能を提供し、より分かりやすい出力が得られます。
- 可能であれば、
Bashsudo apt update
Ubuntu 20.04.2 で apt-get update エラーの最終的な解決手順
上記で述べた原因と解決策を踏まえ、具体的なトラブルシューティングの手順を以下に示します。
-
エラーメッセージの確認: まず、
sudo apt-get update実行時に表示されるエラーメッセージを注意深く読みます。どのリポジトリで、どのようなエラーが発生しているのかが、問題解決の最大のヒントになります。 -
ネットワーク接続の確認:
ping google.comやping archive.ubuntu.comを実行し、基本的なネットワーク疎通を確認します。DNS解決に失敗している場合は、resolv.confの確認やDNSサーバーの変更を検討します。 -
リポジトリ設定の確認と修正:
/etc/apt/sources.listと/etc/apt/sources.list.d/ディレクトリ内のファイルを丁寧に確認します。- 一時的に、
/etc/apt/sources.list.d/内のPPA設定ファイル名を.list.bakに変更し、apt-get updateを再度実行してみます。これにより、PPAが原因かどうかを切り分けます。 - 誤った行や、存在しないリポジトリの指定を削除またはコメントアウト(行頭に
#を追加)します。
-
ディスク容量の確認と解放:
df -hでディスク容量を確認します。容量不足の場合、sudo apt cleanでキャッシュを削除し、sudo apt autoremoveで不要なパッケージを削除します。 -
GPG キーの問題への対処: エラーメッセージに「NO_PUBKEY」や「signatures were invalid」といった記述があれば、表示された鍵IDを使って
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys YOUR_KEY_IDを実行します。 -
パッケージデータベースの破損の疑い: 上記手順で改善しない場合、
sudo dpkg --configure -aや、aptのロックファイルを削除(注意して実行)した後にsudo apt-get updateを試します。 -
システム時刻の同期: システム時刻が大幅にずれている場合は、NTPクライアントを設定して同期させます。
-
最終手段:aptキャッシュの再構築: 上記すべてを試しても解決しない場合、aptのキャッシュ全体をクリアし、リポジトリ情報を再構築します。
bash sudo apt-get clean sudo rm -rf /var/lib/apt/lists/* sudo apt-get updateこのコマンドは、aptが保持しているリポジトリ情報のリストをすべて削除し、次回apt-get update実行時に最初から情報を取得し直させます。
まとめ
本記事では、Ubuntu 20.04.2 LTS 環境で apt-get update が失敗する際の、よくある原因とその具体的な解決策を、網羅的に解説しました。
- ネットワーク接続、リポジトリ設定、ディスク容量、GPG キー、パッケージデータベースの破損 といった主要な原因について、それぞれ詳細な確認方法と対処法を提示しました。
- エラーメッセージの読み解き方から、段階的なトラブルシューティングの手順までを具体的に説明することで、読者がご自身の環境で問題を解決できるよう支援します。
この記事を通して、apt-get update エラーに遭遇した際に、パニックにならず冷静に原因を特定し、適切な対処を行うための確実な知識とスキル を習得できたことでしょう。今後は、定期的なシステムアップデートの重要性を理解し、安全で安定したサーバー運用を継続していくための基盤が築かれました。
参考資料
- Ubuntu Documentation: APT
- Ask Ubuntu: How to fix "NO_PUBKEY" error when update/upgrade?
- DigitalOcean Community: How To Update Your Ubuntu System
