¿Qué es "dist-upgrade" y por qué actualiza más que "upgrade"?

344

Me preguntaba por qué upgrade a veces no quiere actualizar ciertas partes del sistema, mientras que dist-upgrade lo hace. Aquí hay un ejemplo después de ejecutar apt-get upgrade :

apt-get upgrade :

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

versus apt-get dist-upgrade :

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-headers-3.0.0-13 linux-headers-3.0.0-13-generic
  linux-image-3.0.0-13-generic
The following packages will be upgraded:
  linux-generic linux-headers-generic linux-image-generic
3 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 48.5 MB of archives.
After this operation, 215 MB of additional disk space will be used.
Do you want to continue [Y/n]?

En otras palabras, ¿por qué no puede ser realizado por upgrade ?

    
pregunta Richard Rodriguez 22.11.2011 - 07:03

4 respuestas

285

De apt-get manual :

upgrade
   upgrade is used to install the newest versions of all packages
   currently installed on the system from the sources enumerated in
   /etc/apt/sources.list. Packages currently installed with new
   versions available are retrieved and upgraded; under no
   circumstances are currently installed packages removed, or packages
   not already installed retrieved and installed. New versions of
   currently installed packages that cannot be upgraded without
   changing the install status of another package will be left at
   their current version. An update must be performed first so that
   apt-get knows that new versions of packages are available.

dist-upgrade
   dist-upgrade in addition to performing the function of upgrade,
   also intelligently handles changing dependencies with new versions
   of packages; apt-get has a "smart" conflict resolution system, and
   it will attempt to upgrade the most important packages at the
   expense of less important ones if necessary. So, dist-upgrade
   command may remove some packages. The /etc/apt/sources.list file
   contains a list of locations from which to retrieve desired package
   files. See also apt_preferences(5) for a mechanism for overriding
   the general settings for individual packages.

Y con la nueva herramienta apt disponible a partir de 14.04:

full-upgrade
   full-upgrade performs the function of upgrade but may also remove
   installed packages if that is required in order to resolve a
   package conflict.

En su caso particular, veo, por ejemplo, que linux-headers es un paquete virtual proporcionado por linux-headers-3.0.0-12 y linux-headers-3.0.0-13 y que suena como el tipo de instalación y eliminación del paquete manejado por dist-upgrade , pero no por upgrade .

    
respondido por el jcollado 22.11.2011 - 07:57
118

apt-get upgrade está restringido al caso en que los paquetes deben ser reemplazados por versiones más nuevas, pero no es necesario agregar ni eliminar ningún paquete. Una nueva versión de Firefox, por ejemplo, debe ser instalable con apt-get upgrade .

Sin embargo, apt-get upgrade se negará a trabajar cuando haya adiciones o remociones requeridas por las versiones actualizadas. Por ejemplo, cuando tiene kernel linux-image-3.2.0-10-generic instalado y linux-image-3.2.0-11-generic aparece, el paquete linux-image-generic se actualiza para depender de la versión más nueva. Para instalar el nuevo kernel, necesita ejecutar apt-get dist-upgrade .

Observe cómo un apt-get upgrade dirá que los paquetes del kernel han sido held back . Esa es la señal para usar apt-get dist-upgrade .

    
respondido por el pablomme 27.01.2012 - 17:34
32

Básicamente, la actualización solo actualizará los paquetes existentes de una versión a otra. No instalará ni eliminará paquetes, incluso si es necesario para actualizar otros. En el caso de las actualizaciones del kernel, la actualización del paquete linux-generic requiere la instalación del nuevo paquete linux-3.0.0-13-generic, y como la actualización se niega a instalar o eliminar paquetes, se niega a actualizar linux-generic.

A veces, varias incompatibilidades entre paquetes requerirán que se eliminen algunos paquetes para actualizar otros, y que también requerirán dist-upgrade. Las actualizaciones del kernel siempre requerirán dist-upgrade debido a cómo se manejan. En lugar de tener un paquete kernel que se actualice, se crea un paquete kernel completamente nuevo cada vez, y el metapaquete del kernel se actualiza para depender del nuevo paquete kernel en lugar del antiguo. Esto fue hecho para que guardes las viejas versiones del núcleo para que, en caso de que haya un problema con el arranque del nuevo kernel, puedas elegir el anterior desde el menú de arranque y recuperarlo.

    
respondido por el psusi 22.11.2011 - 15:45
11

El comando apt-get upgrade normalmente solo instalará actualizaciones (o arreglos) en los paquetes instalados actualmente. Normalmente, una nueva versión de Mozilla Firefox , por ejemplo, se instalaría con este comando.

Sin embargo, apt-get upgrade NO generalmente instalará nuevas versiones, donde se requieren cambios importantes (incluida la eliminación de paquetes o la actualización de GRUB). Por ejemplo, cuando un nuevo kernel de Linux (linux-image-3.x.x-xx-generic, etc.) está disponible, el paquete no se instalará.

Para instalar el kernel nuevo, deberá ejecutar apt-get dist-upgrade . Se te notificará cuando ejecutes apt-get upgrade , ya que dirá que algunos paquetes se han retenido. Esa es tu señal para usar: apt-get dist-upgrade .

    
respondido por el david6 28.01.2012 - 01:55

Lea otras preguntas en las etiquetas