Questão O que é “dist-upgrade” e por que atualiza mais do que “upgrade”?


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


344
2017-11-22 06:03


origem




Respostas:


A partir 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.

E com o mais novo apt Ferramenta 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 ambos linux-headers-3.0.0-12 e linux-headers-3.0.0-13 e isso soa como o tipo de instalação e remoção de pacotes manipulados por dist-upgrade, mas não por upgrade.


285
2017-11-22 06:57



Não vejo full-upgrade como uma opção para apt-get sob 14.04.1. - nobar
Eu não sabia sobre apt ou mas parece ser um comando completamente diferente de acordo com a página man ele ligou - BlueWizard
@nobar Você não vê porque é uma opção de apt e não de apt-get... :-) Experimentar man apt. - Hastur
Ok, eu procurei e o primeiro link que encontrei é para o Ubuntu 15.10 (que saiu no final de 2014, o que parece razoável com o teste de Jessie) manpages.ubuntu.com/manpages/wily/en/man8/apt.8.html - Z boson
@Zboson Sim, e 14.04 saiu não em 2011, mas em abril de 2014 ... ver o padrão? - tgies


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.

Contudo apt-get upgrade se recusará a trabalhar quando houver adições ou remoções exigidas pelas versões atualizadas. Por exemplo, quando você tem kernel linux-image-3.2.0-10-generic instalado e linux-image-3.2.0-11-generic aparece, o linux-image-generic pacote é 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 vai dizer que os pacotes do kernel foram held back. Essa é a deixa para usar apt-get dist-upgrade.


118
2018-01-27 16:34



Perfeito! : D Mais duas perguntas ... o que é usado pelo gerenciador de atualização gráfica no Ubuntu? Qual é o recomendado? - THpubs
O utilitário gráfico, update-manager, não usa apt-get diretamente; em vez disso, ele trabalha com um backend chamado aptdaemon. As habilidades padrão de update-manager são uma mistura do upgrade e dist-upgrade modos de apt-get: pode adicionar mas não remover pacotes - invoca a ferramenta "Atualização parcial" quando as remoções são necessárias. Ao usar a linha de comando, use apt-get upgrade. Se você vir relatórios informando que os pacotes foram "retidos", execute apt-get dist-upgrade para pegar as atualizações restantes. - pablomme


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 de 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-generic.

Às vezes, várias incompatibilidades entre pacotes exigirão a remoção de alguns pacotes 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.


32
2017-11-22 14:45



Melhor essência Ainda assim, como manter um determinado pacote? - 0xC0000022L


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

Contudo apt-get upgrade vai NÃO geralmente instalam novas versões, onde grandes alterações (incluindo 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 correr apt-get upgrade, como vai dizer que certos pacotes foram retidos. Essa é a sua sugestão para usar: apt-get dist-upgrade.


11
2018-01-28 00:55



Isso é enganoso. dist-upgrade não atualizará para uma nova versão, a menos que sources.list foi modificado de acordo (e mesmo assim, essa não é uma forma suportada para atualizar no Ubuntu). Quando um novo kernel é instalado com dist-upgrade, isso não é nova versão do Ubuntu. É apenas um novo pacote. Além disso, a reivindicação "ou a atualização do GRUB é necessária" é falsa. sudo apt-get upgrade é perfeitamente capaz de atualizar pacotes em uma situação onde o GRUB deve ser atualizado, desde que nenhum pacote seja removido e novos pacotes sejam instalados. update-grub é executado automaticamente, como sempre. - Eliah Kagan
Você deve escrever sua própria resposta, pois isso não adiciona clareza à minha. - david6
Além do que Eliah mencionou, o ponto essencial é que apt-get upgrade não irá remover ou adicionar pacotes. Se uma correção para um pacote exigir um novo pacote, a atualização será retida. A resposta de pablomme, que você revisou para ser menos preciso, é melhor e eu aconselho os leitores a irem para aquele. - Chan-Ho Suh
Correção: apt-get upgrade nunca vai instalar ou remover quaisquer pacotes. As atualizações de kernel são empacotadas como novos pacotes e, como resultado, apt-get upgrade nunca atualizará o kernel. O fato de o upgrade do kernel fazer mudanças "importantes", como a configuração do GRUB, não é o motivo da diferença entre upgrade e dist-upgrade. - Mikko Rantalainen