CentOS5 上针对 CentOS6 软件包的 Nginx yum 更新校验和错误

CentOS5 上针对 CentOS6 软件包的 Nginx yum 更新校验和错误

由于 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客户端软件只知道普通的校验和。

我的解决方案:

  1. 安装python-hashlib (Python 文档2/3
  2. 删除这 2 个文件/usr/lib/python*/site-packages/yum/{repos,misc}.pyc
  3. 通过替换以下内容来修补文件/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
    
  4. 通过替换以下内容来修补文件/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存储库服务器分发的校验和,因此您应该能够再次运行命令而不会出现此问题。

hashlibyum客户端尚未识别校验和时,将尝试使用新代码。它应该足够灵活,可以处理将来添加的哈希值hashlib和存储库索引器本身,而无需进一步修改客户yum端。

相关内容