由于 Yum 从 CentOS 6 存储库中寻找 Nginx 包(我使用的是 Centos 5.6),因此在执行 Yum 更新时出现校验和错误。
以下是错误: http://nginx.org/packages/centos/6/x86_64/repodata/a017491800bf2f9c0d3d043d30ca1e065ff89212b35159c0fa201fd9c02f77f3-primary.sqlite.bz2:[Errno -3] 执行校验和时出错,尝试其他镜像。
有没有办法从 Yum 手动卸载 Nginx?
答案1
在 CentOS 5 上安装来自 CentOS 6 仓库的软件包是不明智的,应避免。如果您想要这样做,请完全升级到 CentOS 6。或者,手动获取源 rpm 并在 CentOS 5 上重建它。
至于为什么会失败:CentOS 6 的较新的 createrepo 使用的校验和算法与 CentOS 5 中的 yum 使用的算法不同(sha256 vs sha1 iirc),因此您的 yum 无法验证存储库内容。
答案2
尝试以下命令
yum clean all
然后
yum update
或
yum upgrade
答案3
我遇到了同样的错误消息。就我而言,问题在于存储库服务器使用sha256校验和算法,而yum
客户端软件只知道普通的沙校验和。
我的解决方案:
- 安装
python-hashlib
(Python 文档2/3)。 - 删除这 2 个文件
/usr/lib/python*/site-packages/yum/{repos,misc}.pyc
通过替换以下内容来修补文件
/usr/lib/python*/site-packages/yum/repos.py
:elif sumtype == 'sha': import sha sum = sha.new() else: raise Errors.RepoError, 'Error Checksumming file, wrong \ checksum type %s' % sumtype
... 和:
elif sumtype == 'sha': import sha sum = sha.new() else: import hashlib if "algorithms" in hashlib.__dict__ and sumtype in hashlib.algorithms: sum = hashlib.new(sumtype) elif sumtype in hashlib.__dict__: sum = hashlib.__dict__[sumtype]() else: raise Errors.RepoError, 'Error Checksumming file, wrong \ checksum type %s' % sumtype
通过替换以下内容来修补文件
/usr/lib/python*/site-packages/yum/misc.py
:else: raise MiscError, 'Error Checksumming file, bad checksum type %s' % sumtype
... 和:
else: import hashlib if "algorithms" in hashlib.__dict__ and sumtype in hashlib.algorithms: sum = hashlib.new(sumtype) elif sumtype in hashlib.__dict__: sum = hashlib.__dict__[sumtype]() else: raise MiscError, 'Error Checksumming file, bad checksum type %s' % sumtype
yum
现在应该理解并处理sha256存储库服务器分发的校验和,因此您应该能够再次运行命令而不会出现此问题。
hashlib
当yum
客户端尚未识别校验和时,将尝试使用新代码。它应该足够灵活,可以处理将来添加的哈希值hashlib
和存储库索引器本身,而无需进一步修改客户yum
端。