`sudo apt update` 总是失败
# Ubuntu 20.04 apt update 失败问题解决记录
## 问题描述
- **系统版本**: Ubuntu 20.04
- **问题现象**: `sudo apt update` 总是失败
- **发生时间**: 2025-08-23
## 错误信息
```
W: GPG error: https://mirrors.aliyun.com/ubuntu focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 3B4FE6ACC0B21F32 NO_PUBKEY 871920D1991BC93C
E: The repository 'https://mirrors.aliyun.com/ubuntu focal InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
```
## 问题分析
通过诊断发现两个主要问题:
1. **GPG密钥环文件损坏**
- 文件路径: `/usr/share/keyrings/ubuntu-archive-keyring.gpg`
- 问题: 文件存在但大小为0字节(空文件)
- 影响: 无法验证软件源的签名
2. **软件源配置不完整**
- 当前配置只包含: `main restricted`
- 缺少仓库: `universe multiverse`
- 影响: 部分软件包无法安装
## 解决步骤
### 第一步:诊断问题
```bash
# 查看具体错误信息
sudo apt update
# 检查密钥环文件状态
ls -la /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 输出显示文件大小为0字节,说明文件损坏
```
### 第二步:修复GPG密钥环文件
```bash
# 删除损坏的密钥环文件
sudo rm /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 从Ubuntu官方下载正确的密钥环文件
sudo wget -O /usr/share/keyrings/ubuntu-archive-keyring.gpg https://archive.ubuntu.com/ubuntu/project/ubuntu-archive-keyring.gpg
# 验证文件下载成功
ls -la /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 应该显示文件大小为3607字节
```
### 第三步:更新软件源配置
```bash
# 在每个软件源行末尾添加 universe multiverse 仓库
sudo sed -i 's/main restricted$/main restricted universe multiverse/g' /etc/apt/sources.list
```
**修改前的配置:**
```
deb [signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] https://mirrors.aliyun.com/ubuntu/ focal main restricted
deb [signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb [signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted
deb [signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] https://mirrors.aliyun.com/ubuntu/ focal-security main restricted
```
**修改后的配置:**
```
deb [signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb [signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb [signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb [signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
```
### 第四步:验证修复结果
```bash
# 重新运行 apt update
sudo apt update
# 成功输出:
# Fetched 36.3 MB in 7s (5,486 kB/s)
# Reading package lists... Done
# 116 packages can be upgraded.
```
## 解决结果
✅ **问题完全解决**
- `sudo apt update` 运行成功
- 所有软件源都能正常访问
- 系统检测到116个软件包可以升级
- 可以正常安装来自 universe 和 multiverse 仓库的软件包
## 相关命令
```bash
# 查看可升级的软件包
apt list --upgradable
# 升级所有软件包
sudo apt upgrade
# 检查软件源配置
cat /etc/apt/sources.list
# 检查GPG密钥
apt-key list
```
## 经验总结
### 问题根因
1. **GPG密钥环文件损坏**是导致签名验证失败的直接原因
2. **软件源配置不完整**限制了可用软件包的范围
### 解决要点
1. **诊断先行**: 通过查看具体错误信息和文件状态来定位问题
2. **官方资源**: 使用Ubuntu官方源下载密钥文件确保可靠性
3. **完整配置**: 确保包含所有必要的仓库(main, restricted, universe, multiverse)
### 预防措施
1. **定期备份**: 重要系统配置文件的备份
2. **谨慎操作**: 避免手动删除或修改系统密钥文件
3. **及时更新**: 保持系统和软件源的及时更新
## 适用场景
此解决方案适用于以下情况:
- Ubuntu 20.04 系统
- 使用阿里云镜像源
- 出现GPG签名验证失败错误
- 软件源配置不完整的问题
---
**记录时间**: 2025-08-23
**解决状态**: ✅ 已完全解决
**后续跟踪**: 建议定期检查apt update状态