如何修复 CentOS、RHEL 或 Fedora 上的 yum 错误
在基于 Red Hat 的系统(例如 RHEL、CentOS 或 Fedora)上,yum
用作软件包管理工具,用于安装、更新和删除 RPM 软件包。当您尝试使用 yum 命令安装软件包时,可能会因各种原因遇到错误。在这篇文章中,我将描述 yum
命令的几种常见错误症状,并解释如何修复 yum
错误。
1.修复404
错误
症状:当您尝试使用 yum
安装软件包时,yum
抛出错误:“请求的 URL 返回错误:404
Loaded plugins: fastestmirror
base | 3.7 kB 00:00
base/primary_db | 4.4 MB 00:09
extras | 3.5 kB 00:00
http://mirror.steadfast.net/centos/6.4/extras/x86_64/repodata/e0e507c76dc5e5aa66c1f32632b9dc0a9759d97031ab5a028562a7cb7be6e294-primary.sqlite.bz2:
[Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404
Not Found"
Trying other mirror.
http://mirrors.seas.harvard.edu/centos/6.4/extras/x86_64/repodata/e0e507c76dc5e5aa66c1f32632b9dc0a9759d97031ab5a028562a7cb7be6e294-primary.sqlite.bz2:
[Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404
Not Found"
Trying other mirror.
当 yum
下载的元数据已过时时,您可能会收到这些 404
错误。
要修复 yum
生成的 404
错误,请按如下方式清理 yum
元数据。
$ sudo yum clean metadata
或者您可以清除整个 yum 缓存:
$ sudo yum clean all
2.修复连接失败错误
症状:运行 yum
命令时出现“网络无法访问”或“无法连接到主机”错误。
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
Could not retrieve mirrorlist
http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os error was
14: PYCURL ERROR 7 - "Failed to connect to
2a02:2498:1:3d:5054:ff:fed3:e91a: Network is unreachable"
Error: Cannot find a valid baseurl for repo: base
http://mirror.nexcess.net/CentOS/6.4/os/x86_64/repodata/repomd.xml:
[Errno 14] PYCURL ERROR 7 - "couldn't connect to host"
Trying other mirror.
http://mirrordenver.fdcservers.net/centos/6.4/os/x86_64/repodata/repomd.xml:
[Errno 14] PYCURL ERROR 7 - "couldn't connect to host"
Trying other mirror.
http://mirrors.cmich.edu/centos/6.4/os/x86_64/repodata/repomd.xml:
[Errno 14] PYCURL ERROR 7 - "couldn't connect to host"
Trying other mirror.
该错误意味着您由于某种原因无法正确连接到存储库服务器。如果您仍然可以 ping 服务器而没有任何问题,请检查您的系统是否位于代理后面。如果您在代理后面运行 yum
,但未在 yum
配置中指定代理,您将收到类似上述的连接失败错误。
要在 yum
配置中配置代理:
$ sudo vi /etc/yum.conf
[main]
proxy=http://proxy.com:8000
3.修复元数据校验和错误
症状:在运行 yum
命令时收到“元数据文件与校验和不匹配”的信息。
epel/pkgtags | 466 kB 00:14
http://mirror.steadfast.net/epel/6/x86_64/repodata/pkgtags.sqlite.gz: [Errno -1] Metadata file does not match checksum
Trying other mirror.
当 yum
下载的元数据已过时时,您可能会收到元数据校验和错误。
要修复 yum 校验和错误,请清理 yum 元数据:
$ sudo yum clean metadata
4. 修复 Yum 锁定错误
症状:当您尝试使用 yum
安装软件包时,您会收到一条错误消息,指出“另一个应用程序当前正在持有 yum 锁”。
Loaded plugins: langpacks, presto, refresh-packagekit
Existing lock /var/run/yum.pid: another copy is running as pid 1880.
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: PackageKit
Memory : 178 M RSS (586 MB VSZ)
Started: Tue Jul 9 09:43:17 2013 - 00:12 ago
State : Sleeping, pid: 1880
此错误的罪魁祸首通常是 PackageKit
,它负责基于 Red Hat 的系统上的自动更新。 PackageKit
进程在启动时自动启动,并持有 yum
锁。
要修复该错误,请关闭系统上的 PackageKit
,这样它就不会执行自动更新检查。以下是禁用 PackageKit 的说明。
重新启动桌面后,您将不再收到 yum
锁定错误。
5.修复存储库数据库读取错误
症状:当您使用 yum 安装软件包时,您会收到错误消息“压缩文件在检测到逻辑流结束之前结束”
Loaded plugins: langpacks, refresh-packagekit
Error: Error reading from file /var/cache/yum/x86_64/20/rpmfusion-free-updates/1461ed771601e7963990534c16584ab963d9c9f4eea94348ba357b93ab3c621f-primary.sqlite.bz2: compressed file ended before the logical end-of-stream was detected
当 yum
命令在下载存储库数据库时被中断时,可能会发生此错误。因此保存的数据库不完整,并被认为已损坏。
要解决此问题,请运行以下命令清理 yum 数据库:
$ sudo yum clean metadata
6.修复存储库元数据读取错误
症状:当您使用 yum
安装或搜索任何软件包时,您会收到以下错误:
removing mirrorlist with no valid mirrors: /var/cache/yum/i386/6/updates/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: updates
此错误可能是由于 yum
元数据问题导致的。要解决此问题,请清理 yum 数据,包括元数据和本地缓存。
$ sudo yum clean all
7.修复包数据库错误
症状:运行 yum
命令时出现“无法打开 /var/lib/rpm 中的软件包数据库”错误。
error: rpmdb: BDB0113 Thread/process 6983/140505029793600 failed: BDB1507 Thread died in Berkeley DB library
error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 - (-30973)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:
当本地 RPM 数据库由于某种原因损坏或丢失时,可能会发生此问题。以下是如何重新创建 RPM 数据库来修复此错误。
$ sudo rm -f /var/lib/rpm/__db*
$ sudo db_verify /var/lib/rpm/Packages
$ sudo rpm --rebuilddb
$ sudo yum clean all