Не удалось загрузить список пакетов из-за ошибки «Несоответствие хэш-суммы»


389

Когда я проверяю наличие обновлений, я получаю сообщение об ошибке «Не удалось загрузить информацию о репозитории».

Это то, что подходит под детали:

W: Failed to fetch gzip:/var/lib/apt/lists/partial/us.archive.ubuntu.com_ubuntu_dists_natty_main_source_Sources  Hash Sum mismatch, 
E: Some index files failed to download. They have been ignored, or old ones used instead.

Ответы:


461

Просто удалите все содержимое /var/lib/apt/listsкаталога:

sudo rm -rf /var/lib/apt/lists/*

затем запустите:

sudo apt-get update

69
Если вы удалите все файлы, вам придется загрузить их снова. Вы можете просто удалить неверный файл, чтобы ускорить этот процесс.
Бехранг

9
Я помню, что это происходило и с Debian. Решением было переключить репозитории (например, с us.ubuntu.com на XX.ubuntu.com, где XX - код вашей страны) или ожидание. Лучше всего подождать немного и повторить попытку позже. Удаление списков может исправить поврежденные списки, но это редко бывает.
f.ardelian

4
Старый вопрос, но в некоторых дистрибутивах (например, emdebian), после этого вам нужно будет " mkdir /var/lib/apt/lists/partial" (очевидно, от имени root), иначе вы не сможете " apt-get update" или иным образом использовать apt.
Арченот

7
@AlyssaGono, если это папка, вам нужно запустить rm с рекурсивным флагом следующим образом: sudo rm -R /var/lib/apt/lists/*однако, даже это не сработало для меня.
Mchid

2
Нам нужен префикс -rf , чтобы он выглядел какsudo rm -rf /var/lib/apt/lists/*
Аскар

127

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

Основная проблема заключается в том, что формат хранилища apt зависит от условий гонки при обновлении зеркала. Эта проблема особенно касается быстро меняющихся репозиториев, таких как разрабатываемый выпуск.

Вы можете отслеживать прогресс в исправлении для этого в этой ошибке (пожалуйста, отметьте себя как «влияет на меня тоже» в этой ошибке) и этот план . Но имейте в виду, что это сложная проблема, и для ее решения может потребоваться более одного выпуска.


4
Этот план больше не доступен; вот архивная копия .
Элия ​​Каган,

16
эта ошибка также существует в Ubuntu 16.04
Скотт Стенсланд

1
Ошибка была помечена как «Исправлена ​​ошибка».

Я просто изменяю свое зеркало по умолчанию на лучший сервер и его работа для меня.
Хабибун

99

Самый простой способ это исправить:

sudo apt-get clean
sudo apt-get update

12
После попытки принять принятый ответ у меня все еще были те же ошибки, пытаясь это сразу после этого исправить проблему
Алекс

17
То, что я sudo rm -rf /var/lib/apt/lists/*потом сделал, sudo apto-get cleanрешило проблему и для меня. Ни один не работал в изоляции.
Cam

3
не помогает на Ubuntu 16.04 ... и комментарий выше не помогает никому
Скотт Стенсланд

3
sudo apt-get cleanне помог с 16.04, но sudo rm -rf /var/lib/apt/lists/*исправил
sdaffa23fdsf

2
Для меня принятый ответ не сработал, но этот сработал (Ubuntu 16.04).
JCasso

52

Единственное решение, которое сработало для меня - это unix.stackexchange .

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

Попробуйте это:

sudo rm -rf /var/lib/apt/lists/partial
sudo apt-get update -o Acquire::CompressionTypes::Order::=gz

(спасибо @brook_hong из комментариев за часть rm)


9
Это единственное решение, которое сработало для меня. Благодарю.
Церин

3
У меня это тоже сработало. Обратите внимание, что вам не нужно всегда запускать эту команду. Просто запустите его один раз, и тогда вы можете запустить «apt-get update» без ошибок.
Дальф

2
Я пытался использовать универсальное решение с различных форумов, но это работает из коробки. Спасибо.
августа

2
Работал для меня в Ubuntu 16.04 / linux mint
David Okwii

3
Это единственное решение, сработавшее для меня, я использую Ubuntu 16.04
Sunny Shukla

44

У меня все еще была проблема после удаления каталогов и выполнения sudo apt-get update.
Только следующий шаг решил мою проблему:

sudo sed -i -re 's/\w+\.archive\.ubuntu\.com/archive.ubuntu.com/g' /etc/apt/sources.list

Я не знаю, если это правильный способ исправить это ...
Я нашел решение здесь .


13
Следует отметить, что de-part указывает на сервер для Германии и этот скрипт заменяет локальный сервер главным сервером. Переход к источникам программного обеспечения, GUI-путь и переключение настроек будут более безопасными и обратимыми для многих пользователей. Следующее должно работать почти для каждой страны:sudo sed -i 's/[a-z][a-z].archive.ubuntu.com/archive.ubuntu.com/g' /etc/apt/sources.list
LiveWireBT

23

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


2
Почему сервер не обновляется или не перегружен, что приводит к успешной загрузке файла с правильным именем (в том смысле, что соединение не прерывается до тех пор, пока не будут отправлены и получены все байты), но не повреждено? (Я не утверждаю, что этого не происходит, я просто надеюсь, что вы сможете объяснить, почему это происходит.)
Элия ​​Каган

3
@EliahKagan Проблема обычно не в том, что сам файл поврежден, а в том, что существует (я упрощаю, но не слишком много) файл данных и индексный файл, содержащий хэш (отпечаток) файла данных. Когда хранилища обновляются (происходит каждый час) на сервере один файл за другим обновляется. Теперь может случиться, что ваш клиент (apt-get или аналогичный) обращается к серверу, когда файл данных был обновлен, но индексный файл еще не был обновлен (или наоборот). Тогда хеш не соответствует файлу данных, и клиент (ложно) предполагает, что файл данных поврежден.
Патрик Хекер

1
Смена зеркала работала для меня, когда ни один из приведенных выше ответов не помог.
манго

10

Если вы находитесь за прокси-сервером, создайте файл с именем 99fixbadproxyв /etc/apt/apt.conf.d/:

sudo gedit /etc/apt/apt.conf.d/99fixbadproxy

Вставьте это 99fixbadproxyи сохраните:

Acquire::http::Pipeline-Depth 0;
Acquire::http::No-Cache true;
Acquire::BrokenProxy    true;

Теперь запустите команду обновления:

sudo apt-get update

1
Ух ты, я пробовал каждый ответ, странно, как много разных проблем приводят к одному и тому же симптому.
сдал

1
Я очень обязан этому ответу
bremen_matt

5

Следующие команды могут решить вашу проблему.

sudo rm -R /var/lib/apt/lists/partial/*

а потом

sudo apt-get update && sudo apt-get upgrade

это решит вашу проблему. Я также столкнулся с той же проблемой, но вышеуказанные команды решили эту проблему для меня. Так что дайте им попробовать.

Ссылка на решение


4
Я просто попытался, и это не сработало; Первые apt-get updateсозданные файлы в том же месте снова в этом каталоге.
Фолькер Сигел

3

У меня была точно такая же проблема, и все решения, предоставленные с использованием терминала, не помогли.

Для меня это было, зайдя в:

Настройки → Программное обеспечение и обновления → Программное обеспечение Ubuntu: Загрузить с: Change Localдо Main Server.

Начинается перезагрузка репозитория и обновление. Когда я вхожу:

sudo apt-get update

После этого проблем не было вообще. Я использую Ubuntu 14.04.4 LTS.


1

Я не знаю, правильное ли это решение или нет, но я сделал следующее, и сообщение об ошибке исчезло:

После ввода sudo apt-get updateв терминале, он дает мне имена некоторых пакетов, которые вызывают ошибку, тогда я сделал следующее:

Диспетчер обновлений (обновление программного обеспечения) → Настройка → Настройка источников программного обеспечения → Другое программное обеспечение [вкладка] → Снимите флажки с пакетов

После нажатия кнопки «закрыть» диспетчер обновлений снова начал автоматически проверять наличие обновлений, и я увидел это сообщение: «программное обеспечение на этом компьютере обновлено. Последняя проверка 2 секунды назад».

Kubuntu 12.04


Это сработало для меня, и никакое другое решение, размещенное здесь, не сработало. За исключением того, что у меня нет пользовательского интерфейса Ubuntu (работает только из командной строки под WSL), поэтому вместо этого для каждого пакета, в <pkg>котором произошла ошибка, я запустил `sudo apt-get install <pkg> '. Я на Ubuntu 16.04.
Иц

1

У меня была точно такая же проблема, и все решения, предоставленные с использованием терминала, не помогли.

Для меня это было, зайдя в:

Настройки → Программное обеспечение и обновления → Другое программное обеспечение: снимите все флажки и нажмите Закрыть.

Начинается перезагрузка репозитория и обновление. Когда я вхожу:

sudo apt-get update

После этого проблем не было вообще. Я использую Ubuntu 13.10.


Это работает, но эффективно лишает машину возможности устанавливать пакеты, не являющиеся частью базовой сборки (до тех пор, пока эти флажки не будут повторно активированы позднее) ... но иногда необходимо просто для того, чтобы добиться безошибочного обновления apt-get, которое позволяет установка целевых пакетов
Скотт Стенсланд

1

У меня была похожая проблема, и я решил ее, открыв приложение «Software & Updates» и на вкладке «Ubuntu Software» изменив значение «Download from» (в этом раскрывающемся списке попробуйте выбрать, например, Main Сервер если не было так).


Да, единственное, что сработало для меня. Сервер Швейцарии кажется сломанным.
Эрик МОРАНД

1

Как следует из @ robie-basak, я использовал apt-cacher-ngзеркальное кэширование. Поэтому я удаляю прокси и проблема решена.

Я удаляю прокси в файле /etc/apt/apt.conf.d/01proxy:

#Acquire::http::Proxy "http://xxx.xx.xx.xx:4321";

Тогда надо:

sudo rm -rf /var/lib/apt/lists/*
sudo aptitude update
sudo aptitude upgrade

1

Я только недавно установил Ubuntu 17.10 и получал ту же ошибку Hash Sum Mismatch для некоторого репозитория. Я перешел на Software and Checked Source, как показано ниже, и больше не было проблем с загрузкой репозитория из терминала.

Мой раздел программного обеспечения и обновлений


0

Это может произойти, если вы используете маршрутизатор с родительским контролем и не поместили свой Raspberry Pi в список «неуправляемых». Я мог видеть, что URL перенаправлял на круговой домен, управляемый маршрутизатором.

Поэтому я просто добавил свой пи в неуправляемый список, и он работал нормально.


0

Я решил все пакеты не были установлены с помощью этой команды:

sudo apt-get install PACKAGENAME

Для каждого из пакетов. Теперь они установлены, и ошибка «Несоответствие хэш-суммы» исчезла.


0

Ничто не сработало для меня. После попыток и предложенных решений, наконец, я скачал сломанные пакеты вручную, скопировал их в / var / cache / apt / archives и удалил сломанные пакеты из / var / cache / apt / archives /partal.


0

Я столкнулся с той же проблемой в моем Ubuntu 18.04, ниже приведен мой практический опыт:

  1. Удалить прокси в /etc/apt/apt.conf
  2. Перейдите на официальный apt sources.list /etc/apt/sources.list
  3. Бегать sudo rm -rf /var/lib/apt/lists/*
  4. Чистые пакеты sudo apt autoremove -y && sudo apt autoclean -y
  5. Обновление и обновление. sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt autoclean -y

Готово!


0

Это произошло для меня в Ubuntu 16.04, и ни одно из лучших решений не сработало. Решением стало обновление пакетов:

sudo apt-get update    # this will fail
sudo apt-get upgrade
sudo apt-get update    # this will succeed

Не уверен, что очистка старых списков ( sudo rm -rf /var/lib/apt/lists/*и / или sudo apt-get clean) помогла или нет! Используйте их при необходимости.


0

20190112 # Ошибки #apt # Исправление # Обновления Не удалось получить ... Несоответствие хэш-суммы

  1. Запустите apt-get и выясните, какие ключевые слова искать в /etc/apt:
    • $ sudo apt-get -y update
    • ...
    • Ошибка: 77 http://au.archive.ubuntu.com/ubuntu xenial-updates / multiverse DEP-11 64x64 Иконки
    • Несоответствие хэш-суммы
    • ...
    • В данном случае ключевое слово «DEP-11»
  2. Поиск по /etc/aptдереву по ключевым словам:
    • $ sudo find / etc / apt -type f -exec egrep -in "DEP-11" "{}" / dev / null ";"
    • /apt.conf.d/50appstream:1:## Этот файл предоставлен appstreamcli (1) для загрузки DEP-11
    • /apt.conf.d/50appstream:6: deb :: DEP-11 {
    • /apt.conf.d/50appstream:9: Описание "Метаданные DEP-11" $ (RELEASE) / $ (COMPONENT) $ (NATIVE_ARCHITECTURE) DEP-11 ";
    • /apt.conf.d/50appstream:15: # Значки обычного размера для компонентов графического интерфейса, описанные в DEP-11
    • /apt.conf.d/50appstream:17: deb :: DEP-11-icons {
    • /apt.conf.d/50appstream:20: Описание "$ (RELEASE) / $ (COMPONENT) DEP-11 64x64 Icons";
    • /apt.conf.d/50appstream:27: # метаданные DEP-11 YAML.
    • /apt.conf.d/50appstream:28: deb :: DEP-11-icons-hidpi {
    • /apt.conf.d/50appstream:31: Описание "$ (RELEASE) / $ (COMPONENT) DEP-11 128x128 значки";
  3. Найдя список нарушителей, переместите его куда-нибудь на случай, если это не сработает:

    sudo mv -f /apt.conf.d/50appstream /tmp  
    
  4. Очистка /var/lib/apt:

    sudo apt-get -y clean  
    sudo rm -rf /var/lib/apt/lists/*  
    sudo find /var/lib/apt -type d -name "partial" -exec rm -rf "{}" ";"  
    
  5. Попробуйте обновить сейчас, оно должно работать сейчас:

    sudo apt-get -y update  
    
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.