O que é “dist-upgrade” e por que ele atualiza mais que “upgrade”?

346

Eu queria saber por que upgrade às vezes não quer atualizar certas partes do sistema, enquanto dist-upgrade faz. Aqui está um exemplo depois de executar 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]?

Em outras palavras, por que isso não pode ser realizado por upgrade ?

    
por Richard Rodriguez 22.11.2011 / 07:03

4 respostas

288

Em 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.

E com a nova ferramenta apt disponível 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.

No seu caso particular, vejo, por exemplo, que linux-headers é um pacote virtual que é fornecido por linux-headers-3.0.0-12 e linux-headers-3.0.0-13 e que soa como o tipo de instalação e remoção de pacote manipulado por dist-upgrade , mas não por upgrade .

    
por jcollado 22.11.2011 / 07:57
119

apt-get upgrade é restrito ao caso em que os pacotes devem ser substituídos por versões mais recentes, mas nenhum pacote precisa ser incluído ou removido. Uma nova versão do Firefox, por exemplo, deve ser instalável com apt-get upgrade .

No entanto, apt-get upgrade se recusará a trabalhar quando houver adições ou remoções exigidas pelas versões atualizadas. Por exemplo, quando você tem o kernel linux-image-3.2.0-10-generic instalado e linux-image-3.2.0-11-generic aparece, o pacote linux-image-generic é atualizado para depender da versão mais recente. Para instalar o novo kernel, você precisa executar apt-get dist-upgrade .

Observe como apt-get upgrade dirá que os pacotes do kernel foram held back . Essa é a sugestão para usar apt-get dist-upgrade .

    
por pablomme 27.01.2012 / 17:34
33

Basicamente, a atualização só atualizará os pacotes existentes de uma versão para outra. Ele não instalará nem removerá pacotes, mesmo que isso seja necessário para atualizar outros. No caso das atualizações do kernel, a atualização do pacote linux-generic requer a instalação do novo pacote linux-3.0.0-13-generic e, como o upgrade se recusa a instalar ou remover pacotes, ele se recusa a atualizar o linux-genérico.

Algumas vezes, várias incompatibilidades entre pacotes exigirão que alguns pacotes sejam removidos para atualizar outros, e isso também exigirá dist-upgrade. As atualizações do kernel sempre exigirão dist-upgrade por causa de como elas são manipuladas. Em vez de ter um pacote do kernel que seja atualizado, um pacote de kernel inteiramente novo é criado a cada vez, e o meta-pacote do kernel é atualizado para depender do novo pacote do kernel em vez do antigo. Isso foi feito para que você mantenha as versões antigas do kernel de modo que, caso haja um problema com a inicialização do novo kernel, você possa escolher o antigo no menu de inicialização e recuperar.

    
por psusi 22.11.2011 / 15:45
11

O comando apt-get upgrade normalmente instalará apenas atualizações (ou correções) nos pacotes atualmente instalados. Normalmente, uma nova versão do Mozilla Firefox , por exemplo, seria instalada com este comando.

No entanto, apt-get upgrade NÃO geralmente instalará novos lançamentos, em que grandes alterações (incluindo a remoção de pacotes ou atualização do GRUB são necessárias). Por exemplo, quando um novo kernel Linux (linux-image-3.x.x-xx-generic, etc.) estiver disponível, o pacote não será instalado.

Para instalar o novo kernel, você precisará executar apt-get dist-upgrade . Você será notificado quando executar apt-get upgrade , pois ele dirá que alguns pacotes foram retidos. Essa é a sua sugestão para usar: apt-get dist-upgrade .

    
por david6 28.01.2012 / 01:55