Como o status desejado no Gerenciador de Pacotes Debian é determinado?

1

Por exemplo, se eu executar o seguinte comando dpkg -l ‘*compiz*’ , a saída será a seguinte:

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
+++-==============-============-============-=================================
pi  compiz         1:0.9.12.2+1 all          OpenGL window and compositing man
ii  compiz-core    1:0.9.12.2+1 amd64        OpenGL window and compositing man
un  compiz-core-ab <none>       <none>       (no description available)
[more output deleted]

A saída é um pouco enigmática. Existem várias explicações detalhadas sobre o StackExchange, das quais, exemplo , é um deles. Da mesma forma, man dpkg e man dpkg-query fornecem explicações semelhantes.

O primeiro caractere no primeiro campo, "p", em nossa saída de exemplo acima, indica o status desejado do pacote. Qual é o status no qual o sistema de empacotamento acha que o pacote deve estar.

Qual é o significado subjacente do status desejado? Ou seja Por que o sistema de gerenciamento de embalagens tem uma ideia de qual status um pacote deve estar? Eu pude ver que um sistema inteligente recomendaria (ou desejaria) um pacote a ser removido se ele fosse usado apenas como uma dependência para um pacote pai já removido. No entanto, este não é o caso do nosso exemplo.

Em nosso exemplo, o pacote "compiz" está instalado, mas dpkg acredita que ele deve ser removido ou, pelo menos, que é desejável que o pacote seja removido. Por que isso acontece? Além disso, como esse campo particular funciona em geral? Ou seja como o sistema decide sobre um "status desejado" para um pacote e quais são os motivos subjacentes para essa funcionalidade?

    
por Andrew Hardiman 18.08.2017 / 16:19

1 resposta

1

O p NÃO é o que o sistema de embalagem "acha" que o status desejado deveria ser.

É o que você, ou outra pessoa, DISSERÁ que deveria ser - por exemplo, com um programa como aptitude ou synaptic , ou até mesmo um utilitário simples como apt-mark .

Ele está marcado para ser eliminado na próxima vez que um apt-get dselect-upgrade , apt-get dist-upgrade , aptitude full-upgrade ou similar for executado.

O

apt é ótimo na resolução de dependências, mas não é "inteligente" e não toma decisões assim para você. Ele tenta fazer o que você disse, com o melhor de sua capacidade. Normalmente isso apenas funciona. Às vezes, ele pode ser suspenso porque os conflitos não podem ser resolvidos automaticamente e, às vezes, quando você o executa, ele oferece a remoção de centenas de pacotes que você não quer, então você precisa dizer "não". Em casos como esse, você terá que resolver o problema sozinho (com a ajuda de ferramentas como aptitude ).

Se você quiser alterar o status desejado do pacote compiz , pode executar algo como:

apt-mark install compiz

Nota : como sempre acontece com os pacotes, isso irá interagir com as Dependências e Conflitos de outros pacotes. Se, por exemplo, ele ganhou esse p status porque você usou aptitude para marcar outro pacote a ser instalado que está em conflito com o compiz, isso cria um conflito de dependência que terá que ser resolvido quando você executar apt-get dist-upgrade .

    
por 18.08.2017 / 16:40