Почему установленные пакеты имели статус «Удалить»?

Выполняя другие задачи по обслуживанию, я заметил, что 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 имя-пакета также подходит, но он сделает больше, чем минимальное изменение системы, чтобы решить проблему.

3
задан 17 July 2021 в 18:08

1 ответ

отказ от ответственности: я не профессионал, когда дело доходит до дистрибутивов, так что это всего лишь мои предположения, сложив 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 само по себе не вызывает этого, но при обновлении всей системы гораздо более вероятно, что группа (изначально установленных) пакетов устареет.

в заключение ПРИЧИНА : я предполагаю, что эти пакеты были установлены при начальной настройке, поэтому помечены как установленные вручную, а затем устарели в результате обновления некоторых пакетов или всего дистрибутива. и поскольку они отмечены как установленные вручную, они не затрагиваются функцией автоматического удаления .

1
ответ дан 28 July 2021 в 11:17

Другие вопросы по тегам:

Похожие вопросы: