Listar mudanças de dependência para o upgrade do apt-get (razões para os pacotes serem retidos)

4

Apenas hoje, tentando uma atualização no Ubuntu 14.04:

$ sudo apt-get update # ...
$ sudo apt-get upgrade 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  phablet-tools ubuntu-sdk ubuntu-sdk-ide
The following packages will be upgraded:
  cgroup-lite curl libcurl3 libcurl3-gnutls python3-update-manager
  update-manager update-manager-core xserver-xorg-core-lts-xenial
8 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 2,305 kB of archives.
After this operation, 13.3 kB of additional disk space will be used.
Do you want to continue? [Y/n] ^C

Ok, então a partir disso, eu entendo que phablet-tools , ubuntu-sdk e ubuntu-sdk-ide pacotes tiveram mudanças de dependência nesta atualização e, portanto, eu teria que chamar dist-upgrade ; então eu faço:

$ sudo apt-get dist-upgrade 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  at dctrl-tools devscripts distro-info-data dput intltool
  libcommon-sense-perl libdistro-info-perl libexporter-lite-perl
  libio-stringy-perl libjson-perl libjson-xs-perl libparse-debcontrol-perl
  unity-scope-tool
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
  autopilot-desktop gir1.2-gconf-2.0 gir1.2-upstart-app-launch-2
  libautopilot-gtk libautopilot-qt liblxc1 libseccomp2 libxpathselect1.4
  lxc-common lxcfs lxd lxd-client python-autopilot python-autopilot-trace
  python-autopilot-vis python-contextlib2 python-decorator python-evdev
  python-extras python-fixtures python-junitxml python-mimeparse python-psutil
  python-subunit python-testscenarios python-testtools squashfs-tools
  ubuntu-sdk-tools uidmap
The following packages have been kept back:
  ubuntu-sdk
The following packages will be upgraded:
  cgroup-lite curl libcurl3 libcurl3-gnutls python3-update-manager
  ubuntu-sdk-ide update-manager update-manager-core
  xserver-xorg-core-lts-xenial
9 upgraded, 29 newly installed, 0 to remove and 1 not upgraded.
Need to get 50.2 MB of archives.
After this operation, 66.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] ^C

Por um lado, ubuntu-sdk ainda é retido - mas agora eu também recebo uma tonelada de pacotes a serem removidos, como "não é mais necessário", assim como uma tonelada de pacotes para instalar. E isso me irrita, porque eu não posso dizer qual pacote (dependência), em particular, causa a instalação do novo - ou remoção devido "não é mais necessário" de pacotes antigos.

Então, minha pergunta é - existe algum tipo de modo verboso, ou um switch, de apt-get , aptitude ou programas similares, que listariam quais são as mudanças de dependência da versão atual para a nova? Eu sei que posso fazer:

$ apt-cache depends ubuntu-sdk
ubuntu-sdk
  Depends: autopilot-desktop
  Depends: intltool
  Depends: phablet-tools
  Depends: ubuntu-device-flash
  Depends: ubuntu-sdk-ide

... mas eu leio isso como o estado da versão atual; o que eu gostaria é algo como (pseudocódigo)

$ apt-command --show-dependency-changes ubuntu-sdk
ubuntu-sdk:
  Installed: 1.126.2~0ubuntu1~trusty2 # as in 'apt-cache policy ubuntu-sdk'  
  Candidate: 1.266~0ubuntu1~0trusty
Depends: autopilot-desktop (installed v. XXX, candidate no longer required)
Depends: intltool (installed v. XXX, candidate v. YYY)
Depends: dctrl-tools (installed no dependency, candidate v. YYY)
...

... ou seja, gostaria de explicar detalhadamente o motivo pelo qual um pacote específico seria instalado ou removido recentemente.

Algo assim por aí?

    
por sdaau 08.09.2016 / 11:08

1 resposta

0

A partir da página man do apt-get , um comando upgrade do

  
    

... Pacotes atualmente instalados com novas versões disponíveis são recuperados e atualizados; sob nenhuma circunstância os pacotes atualmente instalados são removidos ou os pacotes ainda não instalados são recuperados e instalados. Novas versões dos pacotes atualmente instalados que não podem ser atualizados sem alterar o status de instalação de outro pacote serão deixadas na versão atual.

  

Isso significa que apt-get upgrade não instalará nem removerá um pacote durante a atualização. Mesmo quando um pacote tem uma versão mais alta disponível. Nesse caso, esse pacote específico (e quaisquer pacotes associados que sejam requeridos por este) serão retidos. Isto é para a segurança do sistema.

Mas, da página de manual de apt-get , dist-upgrade is

  
    

dist-upgrade, além de executar a função de upgrade, também lida de forma inteligente com dependências variáveis com novas versões de pacotes; O apt-get tem um sistema de resolução de conflitos "inteligente" e tentará atualizar os pacotes mais importantes em detrimento dos menos importantes, se necessário. O comando dist-upgrade pode, portanto, remover alguns pacotes.

  

Então, aqui vemos, dist-upgrade é mais brutal que o upgrade . Ele tentará instalar versões mais recentes de pacotes importantes , mesmo que isso exija a remoção de alguns pacotes e / ou a instalação de pacotes mais novos. É por isso que o dist-upgrade pode desencadear a instalação / remoção de outros pacotes, como a sua situação na questão.

Observe também que um pacote pode ser held-back para outros casos também, como pinagem. Se você fixar um pacote, isso não será atualizado.

held-back também pode ocorrer quando uma versão mais nova do pacote não pode ser instalada devido à falta de um ou mais pacotes de dependência.

  

Gostaria de uma explicação detalhada do motivo pelo qual um pacote específico seria instalado ou removido recentemente.

Uma técnica útil seria anotar os nomes dos pacotes que serão instalados e verificar manualmente suas alterações de dependência entre as versões.

Para seu caso específico, você pode verificar a alteração de dependência de ubuntu-sdk usando apt-cache depends ubuntu-sdk=<version-installed> e apt-cache depends ubuntu-sdk=<version-candidate> . Você verá versões mais recentes que exigem pacotes extras.

Você também pode usar aptitude safe-upgrade (para upgrade ) ou aptitude full-upgrade para ( dist-upgrade ) e enquanto estiver exibindo listas de pacotes para instalar e / ou remover, pressione d para ver a informação de dependência. Ou enquanto estiver usando full-upgrade , você pode pressionar o para ver a solução de resolução de dependência proposta. Isso mostrará por que um pacote será instalado ou removido.

Verifique esses links para saber mais -

por Anwar 08.09.2016 / 12:22