Как исправить ошибку APT «Unable to Parse Package File» в Debian и Ubuntu

Запустите sudo rm -rf /var/lib/apt/lists/* и sudo apt update для устранения ошибки «Unable to Parse Package File» в системах на базе Debian. В большинстве случаев этого достаточно. Читайте дальше, чтобы узнать, почему это происходит и как этого избежать.
Введение
Если вы запустите apt update и увидите такую ошибку:
E: Unable to parse package file /var/lib/apt/lists/...
Не волнуйтесь. Это не серьезная проблема. Обычно эта ошибка означает, что APT загрузил поврежденные или неполные метаданные пакета, а не то, что установленные пакеты или система повреждены.
В этой статье мы расскажем, почему возникает эта ошибка, как ее исправить и предотвратить повторное появление.
Как работает менеджер пакетов в Debian и Ubuntu
В Debian и Ubuntu для управления репозиториями программного обеспечения и установки пакетов используется менеджер пакетов APT.
При запуске:
sudo apt update
APT пока не загружает программное обеспечение. Вместо этого он получает метаданные репозитория — каталог, в котором перечислены:
- имена пакетов
- доступные версии
- зависимости
- контрольные суммы и криптографические подписи
APT хранит эти файлы локально в каталоге /var/lib/apt/lists/.
Считайте этот каталог библиотечным каталогом доступного программного обеспечения. После создания каталога такие команды, как apt install и apt upgrade, обращаются к нему для поиска пакетов и разрешения зависимостей.
Почему появляется сообщение об ошибке «Не удалось проанализировать файл пакета»
Эта ошибка возникает, когда APT не может прочитать один из файлов метаданных в /var/lib/apt/lists/. Обычно файл поврежден, обрезан или содержит неполную информацию. Вот наиболее распространенные причины.
1. Прерванные обновления
Если система выключится или обесточится во время выполнения apt update, APT может оставить незавершенный файл с метаданными. При следующей попытке прочитать этот файл синтаксический анализ завершится ошибкой.
Наиболее частыми причинами являются принудительная перезагрузка и отключение питания.
2. Ошибки при подключении к сети или загрузке
APT загружает сжатые файлы с метаданными, такие как:
Packages.gz Packages.xz
Если сеть обрывается во время загрузки, файл может быть усечен. APT не может распаковать или проанализировать неполный архив.
3. Проблемы с синхронизацией зеркал репозиториев
Репозитории Debian и Ubuntu зеркалируются по всему миру. Зеркала обновляются не одновременно — во время синхронизации зеркало может на короткое время предоставлять несогласованные метаданные.
Например:
| Файл | Состояние |
|---|---|
| Release | new |
| Packages.gz | old |
APT загружает оба файла, но их контрольные суммы больше не совпадают, из-за чего метаданные становятся несогласованными и нечитаемыми. Такие проблемы с синхронизацией обычно решаются в течение нескольких минут.
4. Ошибки в файловой системе или на диске
Реже файлы в /var/lib/apt/lists/. могут быть повреждены из-за проблем с хранилищем. Это может быть вызвано ошибками на диске, повреждением файловой системы или неисправностью оборудования.
5. Неправильная конфигурация репозитория
APT считывает определения репозитория из:
/etc/apt/sources.list /etc/apt/sources.list.d/
Если эти файлы содержат несовместимые репозитории — например, записи, в которых смешаны выпуски Debian, репозитории Ubuntu PPAs в системе Debian или неработающие сторонние источники, — APT может загрузить метаданные, которые не сможет обработать.
Устранение ошибки «Unable to Parse Package File» в Debian и Ubuntu
В большинстве случаев самое быстрое решение — очистить кэшированные метаданные и восстановить их с помощью следующих команд:
sudo rm -rf /var/lib/apt/lists/* sudo apt update
При этом удаляются все кэшированные файлы с метаданными. При следующем обновлении APT загрузит свежие метаданные из репозитория.
Поскольку /var/lib/apt/lists/ содержит только кэшированные данные индекса, их удаление не повлияет на установленные пакеты.
Более целенаправленный подход
Если вы хотите удалить только проблемный файл, а не весь кэш, выполните следующие действия.
Шаг 1. Запустите apt update , чтобы определить файл, вызвавший ошибку:
sudo apt update
APT выведет полный путь, например:
E: Unable to parse package file /var/lib/apt/lists/deb.debian.org_debian_dists_trixie_main_binary-amd64_Packages
Шаг 2. Удалите только этот файл:
sudo rm /var/lib/apt/lists/<filename>
Шаг 3. Восстановите метаданные:
sudo apt update
APT автоматически повторно загружает отсутствующий файл.
Как определить поврежденные файлы со списками
Вы можете просмотреть каталог с метаданными, чтобы найти проблемные файлы:
ls -lh /var/lib/apt/lists/
Ищите:
- Zero-byte files — почти наверняка они неполные
- Необычно маленькие файлы по сравнению с другими файлами того же типа
- Оставшиеся частичные загрузки в:
/var/lib/apt/lists/partial/
Файлы в подкаталоге partial/ указывают на то, что обновление было прервано до завершения.
Почему удаление /var/lib/apt/lists безопасно
Многие пользователи опасаются, что удаление этого каталога может привести к сбоям в работе системы. Это невозможно, поскольку APT четко разделяет метаданные и установленные пакеты.
Вот как работает конвейер:
Debian / Ubuntu Repository Mirror
│
│ apt update
▼
Metadata downloaded
(InRelease, Packages.gz)
│
▼
/var/lib/apt/lists/ ← cache only; safe to delete
│
▼
apt install / apt upgrade
│
▼
.deb packages downloaded
/var/cache/apt/archives/
│
▼
Installed by dpkg
Ключевое различие:
| Путь | Содержит | Безопасно удалять? |
|---|---|---|
/var/lib/apt/lists/ | Кэш метаданных | ДА |
/var/cache/apt/archives/ | Загруженные файлы .deb | ДА |
/var/lib/dpkg/ | Установленный пакет DB | НЕТ |
Удаление каталога приводит лишь к тому, что APT повторно загружает его при следующей apt update. Установленные в системе программы не затрагиваются.
Как предотвратить эту ошибку
Хотя эта ошибка почти всегда безобидна и легко устраняется, несколько простых правил помогут сократить частоту ее возникновения.
Не прерывайте работу APT
Не закрывайте терминал, не перезагружайте систему и не отключайте питание во время работы:
sudo apt update sudo apt upgrade sudo apt install
Из-за прерванных операций в /var/lib/apt/lists/partial/.
Используйте официальные зеркала Debian или Ubuntu
в Debian используйте официальный редирект в своем sources.list:
deb https://deb.debian.org/debian trixie main
Если вы используете более старую версию, замените trixie на фактическое кодовое название вашего релиза (например, bookworm для Debian 12, bullseye для Debian 11). Перенаправитель автоматически перенаправит вас на работоспособное и актуальное зеркало. Использование кодового названия вместо псевдонима stable позволяет избежать неожиданных изменений в наборе пакетов при выходе новой стабильной версии.
В Ubuntu записи по умолчанию archive.ubuntu.com или mirror.ubuntu.com работают аналогичным образом.
Ожидание и повторная попытка при синхронизации зеркала
Если ошибка возникает сразу после обновления репозитория, возможно, зеркало все еще синхронизируется. Подождите несколько минут и запустите apt update снова. Обычно проблема решается сама собой.
Проверьте состояние диска на наличие повторяющихся ошибок
Если ошибка возникает регулярно без очевидной причины, проверьте файловую систему на наличие проблем с хранилищем:
sudo dmesg | grep -i error sudo fsck /dev/sdX # замените на название вашего диска
Частые сбои могут указывать на неисправность диска.
Часто задаваемые вопросы
Безопасно ли бегать rm -rf в /var/lib/apt/lists/?
Да, при условии, что вы добавите в конце * для удаления содержимого каталога, но сам каталог оставите. Команда sudo rm -rf /var/lib/apt/lists/* безопасна и широко рекомендуется в документации Debian и Ubuntu.
Означает ли эта ошибка, что мои пакеты повреждены или неисправны?
Нет. Ошибка затрагивает только кэш метаданных в /var/lib/apt/lists/. Установленные пакеты, управляемые dpkg, хранятся отдельно и не подвержены этой ошибке.
работает ли это исправление в Ubuntu, Linux Mint и других системах на базе Debian?
Да. Все дистрибутивы на основе APT используют одну и ту же /var/lib/apt/lists/ структуру кэша. Исправление sudo rm -rf /var/lib/apt/lists/* && sudo apt update применимо к Debian, Ubuntu, Linux Mint, Pop!_OS и другим.
потеряю ли я что-нибудь, удалив /var/lib/apt/lists/?
Нет. Этот каталог является кэшем. APT полностью перестраивает его при следующем apt update. Здесь не хранятся установленные программы, файлы конфигурации или пользовательские данные.
Что делать, если apt update по-прежнему не работает после очистки кэша?
Ответ: Проверьте свой /etc/apt/sources.list на наличие недействительных или устаревших записей в репозитории. Запустите sudo apt update 2>&1 | grep -i error для более подробного просмотра оставшихся проблем. Если вы видите 404 Not Found ошибок, возможно, вам нужно обновить URL-адрес репозитория или название набора в вашем sources.list
Можно ли использовать apt-get вместо apt?
Да. sudo rm -rf /var/lib/apt/lists/* после sudo apt-get update работает точно так же. apt — рекомендуемый интерфейс для интерактивного использования в современных системах, но apt-get по-прежнему полностью поддерживается и предпочтительнее для использования в скриптах.
Краткие сведения
Ошибка E: Unable to parse package file /var/lib/apt/lists/... означает, что локальный кэш метаданных APT содержит поврежденный или неполный файл. Это не указывает на поврежденные пакеты или системные ошибки.
Чтобы это исправить:
sudo rm -rf /var/lib/apt/lists/* sudo apt update
APT загрузит полный набор чистых метаданных, и ошибка исчезнет.
Это временное решение применимо к Debian 13.4 (Trixie, текущая стабильная версия), Debian 12 (Bookworm, старая стабильная версия), Debian 11 (Bullseye), Ubuntu 20.04 LTS, Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Linux Mint и всем дистрибутивам на основе APT.
Редактор: AndreyEx