Назад | Перейти на главную страницу

Ошибка контрольной суммы обновления nginx yum на CentOS5 для пакета CentOS6

Я получаю ошибку контрольной суммы при обновлении Yum из-за того, что Yum ищет пакет Nginx из репозитория CentOS 6 (я использую Centos 5.6).

Ниже приведена ошибка: http://nginx.org/packages/centos/6/x86_64/repodata/a017491800bf2f9c0d3d043d30ca1e065ff89212b35159c0fa201fd9c02f77f3-primary.sqlite.bz2: [Errno -3] Ошибка выполнения контрольной суммы. Попытка другого зеркала.

Есть ли способ удалить Nginx из Yum вручную?

Установка пакетов из репозитория CentOS 6 на CentOS 5 не рекомендуется, и ее следует избегать. Если вы этого хотите, просто полностью обновитесь до CentOS 6. В качестве альтернативы вручную возьмите исходный rpm и пересоберите его на CentOS 5.

Что касается того, почему это не удается: новый createrepo для CentOS 6 использует другой алгоритм для контрольных сумм, чем тот, который используется yum в CentOS 5 (sha256 vs sha1 iirc), поэтому ваш yum не имеет возможности проверить содержимое репозитория.

У меня было такое же сообщение об ошибке. В моем случае проблема заключалась в том, что сервер репозитория проиндексировал свои RPM с помощью 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 контрольные суммы, распределяемые сервером репозитория, поэтому вы сможете снова запустить свою команду без появления этой проблемы.

Новый код попытается использовать hashlib когда yum клиент еще не распознал контрольную сумму. Он должен быть достаточно гибким, чтобы обрабатывать будущее добавление хэшей в hashlib и сам индексатор репозитория без дальнейшей модификации yum клиент.

Попробуйте команду ниже

   yum clean all

а затем

   yum update

или

   yum upgrade