Вопрос или проблема
Я пытался установить пакет, и он установился, и, похоже, работает нормально. Однако при установке я получил несколько предупреждений о том, что некоторые пакеты отсутствуют.
dpkg: предупреждение: файл списка файлов для пакета '...' отсутствует, предполагаем, что пакет в данный момент не имеет установленных файлов.
Поскольку это всего лишь предупреждение и, похоже, всё равно работает, я предположил, что это не имеет значения, но хотел бы, чтобы кто-то это подтвердил.
Отсутствующие пакеты – это те, которые я намеренно удалил, потому что они были несущественными и занимали много места.
ИЗМЕНЕНИЕ: Пакет – tzdata. Использую dpkg -i
для установки файла .deb
. И вышеуказанное – это, по сути, всё предупреждение. Просто вместо … перечисляются пакеты: python2.7-minimal
, libsqlite3-0
, libaprutill-dbd-sqlite3
, python-minimal
.
ИЗМЕНЕНИЕ: “Что именно вы сделали?” Я выполнил команду
dpkg -i tzdata_2017b-2_all.deb
чтобы установить пакет tzdata.
“Что вы хотели добиться?” Я хотел, чтобы пакет установился.
“Что произошло вместо этого? Вы столкнулись с какими-либо предупреждениями или сообщениями об ошибках?” Пакет установился и работал нормально. Однако появилось вышеуказанное предупреждение для вышеуказанных пакетов.
Я не могу скопировать и вставить, так как это происходит на отдельном сервере. Но я перепишу это здесь:
dpkg: предупреждение: файл списка файлов для пакета python2.7-minimal отсутствует, предполагаем, что пакет в данный момент не имеет установленных файлов.
dpkg: предупреждение: файл списка файлов для пакета libsqlite3-0 отсутствует, предполагаем, что пакет в данный момент не имеет установленных файлов.
dpkg: предупреждение: файл списка файлов для пакета libaprutill-dbd-sqlite3, предполагаем, что пакет в данный момент не имеет установленных файлов.
dpkg: предупреждение: файл списка файлов для пакета python-minimal, предполагаем, что пакет в данный момент не имеет установленных файлов.
Я не ищу решение. Мне просто любопытно, имеет ли значение предупреждение от dpkg в такой ситуации. Снова программа работает, и ничего другого в моей системе не нуждалось в этих пакетах.
Посмотрите на этот вопрос на Serverfault.
Вы можете попробовать что-то подобное:
for package in $(apt-get upgrade 2>&1 |\ grep "warning: files list file for package '" |\ grep -Po "[^'\n ]+'" | grep -Po "[^']+"); do apt-get install --reinstall "$package"; done
Готовый к копированию/вставке в одной строке:
for package in $(apt-get upgrade 2>&1 | grep "warning: files list file for package '" | grep -Po "[^'\n ]+'" | grep -Po "[^']+"); do apt-get install --reinstall "$package"; done
Имейте в виду, что выполнение этой команды занимает некоторое время, так как она проходит через каждый пакет.
Я хотел предложить что-то подобное принятому ответу, прежде чем нашел это. И у меня недостаточно репутации, чтобы добавить это в качестве комментария.
К сожалению, я не могу ответить на вопрос, почему это происходит. У меня была эта проблема после dist-upgrade, и я исправил ее, переустановив пакеты.
У нас был сбой RAID5, который, похоже, сопровождался некоторой порчей базы данных dpkg
, так что я столкнулся с этой проблемой недавно, однако вышеуказанное решение не сработало, так как apt-get install --reinstall xxx
выдало больше ошибок с поврежденными файлами списков. Тем не менее, мне удалось решить это в моем случае, вот процесс, который я использовал.
В конце концов, процесс, который сработал для меня, заключался в удалении всех файлов, соответствующих этому пакету, из базы данных, и затем переустановке после обновления самого dpkg
.
В качестве примера вот одна из таких ошибок (замените antlr
на название вашего отсутствующего пакета с этого момента):
dpkg: предупреждение: файл списка файлов для пакета antlr отсутствует, предполагаем, что пакет в данный момент не имеет установленных файлов.
Для меня решение было:
sudo mv /var/lib/dpkg/info/antlr* ~/var # Резервное копирование на случай других проблем
# Альтернативно: sudo rm /var/lib/dpkg/info/antlr*
Затем,
sudo dpkg --configure -a
Ключевым моментом, похоже, было выполнение команды конфигурации каждый раз, когда удалялся список пакетов (в отличие от некоторых других предложений, которые я видел, о том, чтобы удалить все файлы списка и затем выполнить apt-get update/upgrade
).
Затем, наконец, sudo apt-get install --reinstall antlr
завершился успешно.
У меня была такая же проблема на одном из моих экземпляров, и решение для меня заключалось в переустановке проблемных пакетов с помощью apt:
sudo apt reinstall <package_name_1> <package_name_2>
После успешной переустановки повторный запуск той же команды привёл к исчезновению ошибки
Если вы попробовали ответ @fronk, но apt-get upgrade
не возвращает никаких предупреждений от dpkg, но apt-get install <некоторый пустой пакет> --reinstall
возвращает ошибки от dpkg, замените apt-get upgrade
на apt-get install <некоторый пустой пакет> --reinstall
следующим образом:
for package in $(apt-get install <некоторый пустой пакет> --reinstall 2>&1 | grep "warning: files list file for package '" | grep -Po "[^'\n ]+'" | grep -Po "[^']+"); do apt-get install --reinstall "$package"; done
Это сработало для меня:
$ dpkg -S dummy query 2>/tmp/warnings
$ cat /tmp/warnings | awk -F "'" '{print $2}' > /tmp/packages
# затем выполните следующее:
$ for package in $(cat /tmp/packages); do echo apt-get install --reinstall $package; apt-get install --reinstall $package; done;
Для дополнительной информации я установил digikam на pop_os 22.04, используя графический интерфейс “Приложения”, и он функционировал корректно и запускался из ярлыка.
Если выполнить цикл “apt update/upgrade” после этого, приложение не запускалось ни из ярлыка, ни из графического меню “Приложения”. В том графическом интерфейсе оно отображалось как установленное, но ничего не происходило, когда я пытался запустить его.
Удаление и затем повторная установка решали проблему, пока не произойдет действие ‘update/upgrade’, которое снова нарушало его работу.
Я заметил, что во время ‘upgrade’ было предупреждение “файл списка файлов для пакета digikam отсутствует”, которое я решил исследовать, и таким образом обнаружил этот вопрос.
Мой ответ на вопрос “Мне просто любопытно, имеет ли значение предупреждение от dpkg в такой ситуации” – да, это предупреждение может привести к тому, что приложение будет неправильно переконфигурировано после каждого обновления.
Ответ или решение
Получая предупреждение от dpkg
о том, что файл списка файлов для пакета отсутствует, многие пользователи могут недоумевать о серьезности этой проблемы и ее возможных последствиях. Давайте рассмотрим эту ситуацию подробнее, чтобы прояснить, действительно ли это предупреждение важно и на что следует обратить внимание.
1. Контекст проблемы
Ваша ситуация связана с установкой пакета tzdata
с помощью команды dpkg -i
, после чего были выданы предупреждения о том, что некоторые пакеты, такие как python2.7-minimal
, libsqlite3-0
, и другие, имеют отсутствующие файлы списка. Эти пакеты были удалены по вашей инициативе, так как они не были критически важными для функционирования вашей системы.
2. Понимание сообщения dpkg
Сообщение:
dpkg: warning files list file for package '...' missing, assuming package has no files currently installed.
указывает на то, что dpkg
не может найти файл, который обычно содержит информацию о файлах, установленных данным пакетом. Это может произойти в следующих случаях:
- Пакет был удален вручную, что привело к его неполной чистке.
- Установленная версия пакета была повреждена или файлы базы данных
dpkg
стали недоступными. - Эта проблема может возникнуть в результате сбоя, например, после отключения питания или возможных повреждений файловой системы.
3. Значимость предупреждения
Хотя dpkg
и успешно завершает установку tzdata
, предупреждение о пропавших файлах списка файлов может иметь долгосрочные последствия:
- Некорректная переустановка: В будущем, если вы попытаетесь переустановить или обновить пакеты, базовая информация о файлах может быть недостаточной. Это может привести к ошибкам или некорректному поведению программного обеспечения.
- Управление зависимостями: Если пакеты, которые вызывают предупреждения, необходимы для других установленных программ, отсутствие правильной информации может привести к сбоям в функционировании этих программ.
4. Действия для устранения предупреждения
Если вы хотите устранить это предупреждение, не прибегая к его исправлению, существует несколько вариантов:
-
Переустановка проблемных пакетов. Это можно сделать с помощью команды:
sudo apt-get install --reinstall python2.7-minimal libsqlite3-0 libaprutill-dbd-sqlite3 python-minimal
Это восстановит недостающие файлы и обновит записи в базах данных.
-
Очистка базы данных
dpkg
. Если переустановка не помогла или возникли ошибки, может потребоваться ручное редактирование файлов, связанных с проблемными пакетами:sudo dpkg --remove --force-remove-reinstreq <имя_пакета>
Замените
<имя_пакета>
на соответствующий пакет, чтобы удалить испорченную запись.
5. Заключение
Таким образом, предупреждение dpkg
о недостающих файлах списка является сигналом, который следует учитывать. Хотя на данный момент ваша установка tzdata
функционирует корректно, для поддержания целостности системы и предотвращения потенциальных проблем с зависимостями в будущем рекомендуется провести инвентаризацию и восстановление всех проблемных пакетов. Путь к стабильной системе лежит через внимательное управление пакетами и их зависимостями.