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-tools
que ubuntu-sdk
os ubuntu-sdk-ide
pacotes 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-sdk
ainda é 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
, aptitude
ou 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 upgrade
comando 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 upgrade
nã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-back
para alguns outros casos, como fixação. Se você fixar um pacote, ele não será atualizado.
held-back
també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-sdk
using 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-upgrade
for ( 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 -