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-tools
que ubuntu-sdk
los ubuntu-sdk-ide
paquetes 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-sdk
todaví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
, aptitude
o 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 upgrade
comando
... 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 upgrade
no 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-upgrade
es
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-upgrade
es 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-back
para otros casos, como fijar. Si fija un paquete, no se actualizará.
held-back
Tambié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-sdk
usar 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-upgrade
for ( 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: