Listar alterações de dependência para apt-get upgrade (motivos para pacotes serem retidos)

Listar alterações de dependência para apt-get upgrade (motivos para pacotes serem retidos)

Ainda 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 deduzo phablet-toolsque ubuntu-sdkos ubuntu-sdk-idepacotes tiveram alterações de dependência nesta atualização e, portanto, eu teria que ligar 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-sdkainda é retido - mas agora também recebo uma tonelada de pacotes para serem removidos, como "não são mais necessários", bem como uma tonelada de pacotes para instalar. E isso meio que me irrita, porque não sei dizerqualpacote (dependência), em particular, causa a instalação de novos - ou a remoção devido a "não ser mais necessário" de pacotes antigos.

Então, minha pergunta é: existe algum tipo de modo detalhado, ou uma opção de apt-get, aptitudeou programas semelhantes, que listaria quais são as alterações 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 li 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, eu gostaria de uma explicação detalhada do motivo pelo qual um pacote específico seria instalado ou removido recentemente.

Alguma coisa assim por aí?

Responder1

Na página de manual de apt-get, um upgradecomando 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 de pacotes atualmente instalados que não podem ser atualizados sem alterar o status de instalação de outro pacote serão deixadas em sua versão atual.

Isso significa que apt-get upgradenão instalará ou removerá um pacote durante a atualização. Mesmo quando um pacote tem uma versão superior disponível. Nesse caso, esse pacote específico (e quaisquer pacotes associados exigidos por isso) será retido. Isto é para a segurança do sistema.

Mas, na página de manual de apt-get, dist-upgradeé

dist-upgrade além de executar a função de atualização, também lida de forma inteligente com a mudança de dependências com novas versões de pacotes; O apt-get possui 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 a versão mais recente doimportantepacotes, mesmo que isso exija a remoção de alguns pacotes e/ou instalação de pacotes mais recentes. É por isso que dist-upgrade pode desencadear a instalação/remoção de outros pacotes como a sua situação na pergunta.

Observe também que um pacote também pode servir held-backpara alguns outros casos, como fixação. Se você fixar um pacote, ele não será atualizado.

held-backtambém pode ocorrer quando a versão mais recente 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 o seu caso específico, você pode verificar a mudança de dependência de ubuntu-sdkusing 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(for upgrade) ou aptitude full-upgradefor ( dist-upgrade) e enquanto estiver mostrando listas de pacotes para instalar e/ou remover, pressionedpara ver as informações de dependência. Ou enquanto estiver usando full-upgrade, você pode pressionarópara ver a solução proposta para resolução de dependências. Isso mostrará por que um pacote será instalado ou removido.

Verifique estes links para mais -

informação relacionada