Как исправить обновление apt-get «Несоответствие хэш-суммы»

23

У меня есть виртуальная коробка Ubuntu 12.04, которую я создаю с помощью Vagrant.

git clone https://github.com/spuder/puppet-gitlab
vagrant up

Как только запускается vagrant box apt-get update, я получаю следующую ошибку.

...
W: Failed to fetch gzip:/var/lib/apt/lists/partial/apt.puppetlabs.com_dists_precise_main_binary-amd64_Packages  Hash Sum mismatch
W: Failed to fetch gzip:/var/lib/apt/lists/partial/apt.puppetlabs.com_dists_precise_main_binary-i386_Packages  Hash Sum mismatch
W: Failed to fetch gzip:/var/lib/apt/lists/partial/apt.puppetlabs.com_dists_precise_dependencies_binary-i386_Packages  Hash Sum mismatch
W: Failed to fetch http://br.archive.ubuntu.com/ubuntu/dists/precise-updates/restricted/binary-i386/Packages  404  Not Found

Вещи, которые я пытался обойти эту ошибку.

  • Используется 3 различных Ubuntu 12.04 коробки с « http://www.vagrantbox.es »
  • Решение предлагается здесь :

    sudo rm -rf / var / lib / apt / lists / *
    sudo apt-get update
    sudo apt-get clean

  • Удалены и прочитаны пакеты кукольных лабораторий.

Я также попробовал аналогичные предложения, которые я нашел на первых нескольких страницах Google. Я даже пробовал несколько компьютеров и несколько подключений к Интернету.

Тот факт, что это повлияло на несколько Ubuntu VM на нескольких интернет-соединениях, заставляет меня думать, что что-то не так с репо Ubuntu.

Как еще я могу попытаться исправить эту проблему?

Обновить

Я попытался очистить '/ var / lib / apt / lists / part' и запустить apt-get clean, а затем заменил источники в / etc / sources / list с помощью зеркал amazon, предложенных здесь:

Я все еще получаю похожую ошибку

Fetched 18.9 MB in 10s (1,865 kB/s)                                                                                                                                                                            
W: Failed to fetch bzip2:/var/lib/apt/lists/partial/us-west-1.ec2.archive.ubuntu.com_ubuntu_dists_precise_main_binary-amd64_Packages  Hash Sum mismatch
W: Failed to fetch bzip2:/var/lib/apt/lists/partial/us-west-1.ec2.archive.ubuntu.com_ubuntu_dists_precise_universe_binary-amd64_Packages  Hash Sum mismatch
W: Failed to fetch bzip2:/var/lib/apt/lists/partial/us-west-1.ec2.archive.ubuntu.com_ubuntu_dists_precise_multiverse_binary-amd64_Packages  Hash Sum mismatch
W: Failed to fetch bzip2:/var/lib/apt/lists/partial/us-west-1.ec2.archive.ubuntu.com_ubuntu_dists_precise_main_binary-i386_Packages  Hash Sum mismatch
E: Some index files failed to download. They have been ignored, or old ones used instead.

Update2

У меня дома есть 2 интернет-соединения, они оба выдавали одну и ту же ошибку. Как только я подключил свой ноутбук к своему рабочему интернет-соединению, проблема исчезла.

Мне все еще любопытно понять, почему мое интернет-соединение будет иметь какое-либо значение.

Update3

Смотрите мой ответ ниже для объяснения. Мой интернет-фильтр повредил загрузку.

Я перефразирую вопрос, поскольку пока нет ответов.

Есть ли способ переопределить несоответствия хэш-суммы в apt-get?

spuder
источник
Вы очистили кеш, как предложено здесь ?
Kiwy
Также в вашем дистрибутиве есть apt-cacher NG? потому что это кажется ненадежным
Kiwy
Я наткнулся на этот блог и убедился, что apt-cache-ng не установлен. Проблема ушла, когда я попробовал другой гипервизор на другом интернет-соединении.
spuder
возможно, неправильная реализация одного конкретного хэша на гипервизоре, но это все еще очень странно.
Kiwy
Ваше решение также сработало для меня. Я работал через сервер TinyProxy, размещенный на AWS, и у меня были настроены некоторые рекламные фильтры. Как только я избавился от прокси в apt.conf, все работает отлично.

Ответы:

20

Во-первых, вы должны понять, почему происходят ошибки несоответствия хэш-суммы. В общем, есть 2 причины:

Во-первых, некоторые репозитории apt используют сжатые метаданные LZMA (.xz). до версии 1.0 не удается правильно распаковать архивы LZMA (иногда), что приводит к ошибке несоответствия хэш-суммы.

Есть два обходных пути для этого:

  1. Скажите вашему apt-клиенту не использовать сжатые метаданные XZ
  2. Обновите apt в вашей системе до версии более новой, чем 1.0

Ознакомьтесь с этой записью в блоге, которую я написал об этой проблеме, которая объясняет оба способа обхода более подробно.

Во-вторых, репозитории APT по своей природе являются очень редкими . Фактические метаданные APT содержат ошибки, и их дизайн не позволяет apt-клиентам загружать метаданные хранилища согласованным образом, если это apt-get updateпроисходит во время обновления хранилища.

Есть два обходных пути для этого:

  1. Обновите APT до более новой версии и убедитесь, что репозиторий, который вы создаете (или хотите использовать), поддерживает функцию « Получить по хешу» . Это решает проблему по своей сути, но в некоторых случаях это невозможно, если вы не контролируете хранилище.
  2. Вы можете удалить кэшированные метаданные в своей системе и повторить попытку. Для этого сначала запустите, apt-get cleanа затем rm -rf /var/lib/apt/lists/*. Далее беги apt-get update. Это повторно загрузит все метаданные. Если репозиторий, к которому вы пытаетесь подключиться, не обновляется во время работы apt-get update, все будет в порядке. В противном случае вам придется сделать это снова.
Джо Дамато
источник
Это единственное решение, которое сработало для меня! Спасибо за сообщение в блоге
Амир Увал
Вы прокомментировали, что лучше быть последней версией. Подскажите, пожалуйста, как его обновить?
Амир Увал
Как именно вы используете функцию Acquire-by-hash? Я видел блоги об этом, но они не говорят, в какой файл их поместить, и не показывают пример.
LINUX G33NYUS
6

Догадаться.

Мои два компьютера идентичны во всех отношениях, за исключением того, что на моем персональном компьютере я установил интернет-фильтр.

Интернет-фильтр k9 установил расширение ядра, которое явно портит трафик.

Как только я удалил фильтр, проблема ушла.

Я все еще исследую, есть ли способ apt-get updateигнорировать несоответствие хэш-суммы как обходной путь.

spuder
источник
Это действительно имеет большой смысл, потому что у меня недавно появилась эта проблема после установки k9; но я не делал связи в то время. Обходной путь был бы неплох, потому что я бы предпочел не отключать фильтр (в конце концов, он есть по причине).
MuffinTheMan
Да, но как я могу это сделать (убрать фильтр), потому что у меня такая же проблема, как и у вас, но в любом случае я все еще застрял
Загрузите последнюю версию k9 с их сайта. Внутри установочного пакета будет деинсталлятор.
spuder