Выполняя другие задачи по обслуживанию, я заметил, что dpkg -l
перечисляет около 90 пакетов со статусом ri
вместо ожидаемого ] ii
.
Я поддерживаю пакеты исключительно с помощью apt
и aptitude
, и я не заставлял никаких пакетов, но я регулярно делаю apt install --no-install-рекомендует ...
, чтобы избежать получения ненужных пакетов. Я также стараюсь тщательно поддерживать флажки "автоматически установленный", и у меня есть 2914 пакетов со статусом "автоматически установлен" ( aptitude search '~ i ~ M'
) и 422 пакета со статусом "установлен вручную" ( поиск способностей '~ i! ~ M'
).
Что могло быть причиной того, что пакеты имеют статус Удалить
+ Inst
( ri
) в листинге dpkg -l
, когда я не запрашивал удаление этих пакетов? Похоже, пакеты с таким статусом были пакетами, которые я действительно хочу сохранить в системе. Может, например, sudo apt dist-upgrade
вызывает это незаметно для меня?
(я знаю, что могу переустановить эти пакеты с помощью apt install --reinstall package-name
, чтобы вернуть статус на ii
.Я также часто удаляю удаленные пакеты, и aptitude search '~ c'
не показывает пакетов.)
Дополнительные сведения из другой системы с той же проблемой:
$ sudo apt dist-upgrade && sudo apt autoremove && dpkg -l | grep ^ri | wc -l
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
virtualbox-6.0
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
171
Итак dist-upgrade
ни autoremove
не затрагивает 171 пакет со статусом ri
.
Пример пакета со статусом ri
:
$ dpkg -l ca-certificates-java
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-===============================================-============================-============================-===================================================================================================
ri ca-certificates-java 20160321ubuntu1 all Common CA certificates (JKS keystore)
и дополнительной информацией для того же пакета:
$ aptitude show ca-certificates-java
Package: ca-certificates-java
State: installed
Automatically installed: no
Multi-Arch: foreign
Version: ...
$ aptitude why ca-certificates-java
i default-jre-headless Depends openjdk-8-jre-headless
iBA openjdk-8-jre-headless Depends ca-certificates-java
$ apt-mark showhold
virtualbox-6.0
Дополнительная информация после прочтения о возможных причинах:
Как объяснено в ответе https: / /askubuntu.com/a/802612/50254 статус этих пакетов может быть исправлен, чтобы соответствовать текущим установленным пакетам, запустив (обратите внимание, что перевод строки после IFS
не является опечаткой, но для этой команды требуется установка IFS
на одинарный перевод строки):
export IFS='
'
for i in $(dpkg -l |egrep '^[a-z]i.*' |awk '{print $2" install"}') ; do echo $i|dpkg --set-selections ; done
unset IFS
Причина / причина этой проблемы все еще неизвестна. Статус ri
должен означать, что dselect
(старый менеджер пакетов debian, в настоящее время полностью замененный на apt
) использовался для пометки пакета, который нужно удалить из системе, и если вы действительно хотите применить эти состояния выбора, вы можете запустить apt-get dselect-upgrade
. См. man dpkg
и раздел «ИНФОРМАЦИЯ О ПАКЕТАХ» для получения дополнительной информации.
apt install --reinstall имя-пакета
также подходит, но он сделает больше, чем минимальное изменение системы, чтобы решить проблему.
отказ от ответственности: я не профессионал, когда дело доходит до дистрибутивов, так что это всего лишь мои предположения, сложив 1 и 1 несколько раз вместе.
на старой машине с Ubuntu у меня есть один пакет со статусом ri
, то есть libllvm5.0
(и несколько других нормальных ii
] -пакеты вроде libllvm4.0
и libllvm6.0
). пакеты <= libllvm5.0
помечены как установленные вручную, но libllvm6.0
отмечены как установленные автоматически.
поэтому я предполагаю, что это была зависимость, и эфир стал устаревшим путем обновления или удаления зависимого пакета.
просматривая ваши аргументы / условия один за другим:
- no-install-рекомендует
: autoremove
ничего не делает с этими пакетами : ri
, оставленные автоудаление
помечено как установлено вручную , хотя вы никогда не устанавливали его «отдельно». это связано с тем, что после первоначальной установки очень немногие (если они есть?) пакеты помечаются как автоматически установленные из-за того, что на самом деле невозможно определить, какие пакеты вы должны были бы установить намеренно, потому что это варьироваться от пользователя к пользователю. (так что ... своего рода «вы вручную установили свою ОС».) sudo apt dist-upgrade
вызвать это?: sudo apt dist-upgrade
само по себе не вызывает этого, но при обновлении всей системы гораздо более вероятно, что группа (изначально установленных) пакетов устареет. в заключение ПРИЧИНА : я предполагаю, что эти пакеты были установлены при начальной настройке, поэтому помечены как установленные вручную, а затем устарели в результате обновления некоторых пакетов или всего дистрибутива. и поскольку они отмечены как установленные вручную, они не затрагиваются функцией автоматического удаления
.