Enumere los cambios de dependencia para apt-get update (razones por las que se retienen los paquetes)

Enumere los cambios de dependencia para apt-get update (razones por las que se retienen los paquetes)

Justo hoy, probando una actualización en 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, de esto deduzco phablet-toolsque ubuntu-sdklos ubuntu-sdk-idepaquetes tuvieron cambios de dependencia en esta actualización y, por lo tanto, tendría que llamar dist-upgrade; Así que hago:

$ 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 un lado, ubuntu-sdktodavía está retenido, pero ahora también tengo un montón de paquetes para eliminar, como "ya no son necesarios", así como un montón de paquetes para instalar. Y esto me irrita un poco, porque no puedo decircualpaquete (dependencia), en particular, provoca la instalación de paquetes nuevos o la eliminación debido a que "ya no son necesarios" paquetes antiguos.

Entonces mi pregunta es: ¿existe algún tipo de modo detallado, o un interruptor de apt-get, aptitudeo programas similares, que enumere cuáles son los cambios de dependencia de la versión actual a la nueva? Sé que puedo hacer:

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

... pero leo esto como el estado de la versión actual; lo que me gustaría es 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)
...

... es decir, me gustaría una explicación detallada del motivo por el cual un paquete en particular se instalaría o eliminaría recientemente.

¿Algo como esto por ahí?

Respuesta1

Desde la página de manual de apt-get, un upgradecomando

... Los paquetes actualmente instalados con nuevas versiones disponibles se recuperan y actualizan; bajo ninguna circunstancia se eliminan los paquetes actualmente instalados, ni se recuperan e instalan los paquetes que aún no están instalados. Las nuevas versiones de los paquetes instalados actualmente que no se pueden actualizar sin cambiar el estado de instalación de otro paquete se dejarán en su versión actual.

Eso significa que apt-get upgradeno instalará ni eliminará un paquete mientras realiza la actualización. Incluso cuando un paquete tiene una versión superior disponible. En ese caso, ese paquete en particular (y cualquier paquete asociado que esto requiera) será retenido. Esto es por la seguridad del sistema.

Pero, desde la página de manual de apt-get, dist-upgradees

dist-upgrade además de realizar la función de actualización, también maneja inteligentemente el cambio de dependencias con nuevas versiones de paquetes; apt-get tiene un sistema de resolución de conflictos "inteligente" e intentará actualizar los paquetes más importantes a expensas de los menos importantes si es necesario. Por lo tanto, el comando dist-upgrade puede eliminar algunos paquetes.

Entonces, aquí vemos, dist-upgradees más brutal que el upgrade. Intentará instalar una versión más reciente deimportantepaquetes incluso si eso requiere la eliminación de algunos paquetes y/o la instalación de paquetes más nuevos. Es por eso que dist-upgrade puede desencadenar la instalación/eliminación de otros paquetes como su situación en la pregunta.

También tenga en cuenta que un paquete también puede servir held-backpara otros casos, como fijar. Si fija un paquete, no se actualizará.

held-backTambién puede ocurrir cuando no se puede instalar una versión más nueva del paquete debido a la falta de uno o más de sus paquetes de dependencia.

Me gustaría una explicación detallada del motivo por el cual un paquete en particular se instalaría o eliminaría recientemente.

Una técnica útil sería anotar los nombres de los paquetes que se van a instalar y verificar manualmente sus cambios de dependencia entre versiones.

Para su caso particular, puede verificar el cambio de dependencia de ubuntu-sdkusar apt-cache depends ubuntu-sdk=<version-installed>y apt-cache depends ubuntu-sdk=<version-candidate>. Verás versiones más nuevas que requieren paquetes adicionales.

También puedes usar aptitude safe-upgrade(for upgrade) o aptitude full-upgradefor ( dist-upgrade) y mientras muestra listas de paquetes para instalar y/o eliminar, presionadpara ver la información de dependencia. O mientras estás usando full-upgrade, puedes presionarohpara ver la solución de resolución de dependencia propuesta. Esto le mostrará por qué se va a instalar o eliminar un paquete.

Consulte estos enlaces para obtener más información:

información relacionada