Existe diferença entre o apt-get upgrade e o Gerenciados de Atualizações ?

Iniciado por FVM, 03 de Agosto de 2009, 11:30

tópico anterior - próximo tópico

FVM

Existe diferença entre o apt-get upgrade e o Gerenciados de Atualizações em modo gráfico?

Faço esta pergunta porque recentemente rodei o apt-get upgrade aqui e após finalizado o processo, rodei o gerenciador de atualizações. Mesmo tendo baixado todos os pacotes indicados pelo apt-get upgrade, ainda assim o Gerenciador de Atualizações encontrou mais atualizações...

clcampos

Não tem, ou não deveriam ter diferenças.

Será que entrou alguma nova atualização enquanto fazia o upgrade?

Será que se rodasse o apt-get upgrade novamente não seriam encontrados aqueles pacotes que o gerenciador de atualização encontrou?
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

Xterminator

Sim, existem diferenças entre apt-get upgrade, e apt-get dist-upgrade a diferença é esta.
e está no manual ;-)
http://www.debian.org/doc/manuals/apt-howto/ch1.pt-br.html
apt-get upgrade:
Citar3.4 Atualizando os pacotes

A atualização de pacotes é um grande trunfo do sistema APT. Ela é feita com um simples comando: apt-get upgrade. Você pode atualizar tanto pacotes dentro de uma mesma distribuição quanto atualizar para uma nova distribuição, mas, para essa última, o comando apt-get dist-upgrade é melhor, consulte a seção Atualizando para uma nova distribuição, Seção 3.5 para maiores detalhes.

É útil usar sempre a opção -u para esse comando. Essa opção faz com que o APT mostre os pacotes que serão atualizados. Sem ela você vai fazer uma atualização no escuro. O APT irá baixar as últimas versões de cada pacote e as instalará numa ordem coerente. É sempre importante rodar o apt-get update antes. Veja a seção Atualizando a lista de pacotes disponíveis, Seção 3.1. Veja esse exemplo:

    # apt-get -u upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages have been kept back
      cpp gcc lilo
    The following packages will be upgraded
      adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent
      ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev
      libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0
      libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc
    29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
    Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used.
    Do you want to continue? [Y/n]

Esse processo é muito simples. Repare que logo no início, o apt-get diz que alguns pacotes foram kept back. Isso significa que eles têm novas versões que não serão instaladas por algum motivo. Alguns deles são: dependências quebradas (um pacote do qual ele depende não tem uma versão disponível para ser baixada), novas dependências (o pacote passou a depender de novos pacotes desde a última versão).

O primeiro motivo não tem solução limpa, para o segundo basta rodar um apt-get install específico para o pacote, que baixará suas dependências. Outra solução, ainda mais limpa, é usar o dist-upgrade. Veja seção Atualizando para uma nova distribuição, Seção 3.5.

apt-get dist-upgrade

Citar3.5 Atualizando para uma nova distribuição

Essa característica do APT serve para atualizar uma distribuição inteira de uma única tacada, através da internet ou de um novo CD adquirido, ou uma ISO baixada.

Ela é usada também quando mudanças são feitas na interrelação de pacotes já instalados que devem ser atualizados mas são mantidos inalterados (kept back).

Por exemplo, supondo que você está usando a versão estável do Debian revisão 0 e compre o CD com a revisão 3, você pode usar o APT para atualizar seu sistema a partir desse novo CD. Para isso use o apt-cdrom (veja seção Colocando um CDROM na sources.list, Seção 2.4) para adicionar o CD ao seu arquivo /etc/apt/sources.list e rode o apt-get dist-upgrade.

É importante notar que o APT sempre busca as versões mais novas dos pacotes. Portanto, se seu arquivo /etc/apt/sources.list estiver listando um repositório que tenha uma versão mais nova de determinado pacote que contém o CD, ele tenderá a buscá-lo de lá.

No exemplo mostrado na seção Atualizando os pacotes, Seção 3.4, vimos que alguns pacotes ficaram "kept back", vamos solucionar isso agora, com o método dist-upgrade:

    # apt-get -u dist-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Done
    The following NEW packages will be installed:
      cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1
      libpcre2 logrotate mailx
    The following packages have been kept back
      lilo
    The following packages will be upgraded
      adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc
      indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0
      libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev
      liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit
      procps psmisc
    31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
    Need to get 0B/7098kB of archives. After unpacking 3118kB will be used.
    Do you want to continue? [Y/n]

Note agora que os pacotes serão atualizados, mas novos pacotes serão instalados (as novas dependências dos pacotes). E que o lilo continua kept back. Ele provavelmente tem algum problema mais sério, que não uma nova dependência. Podemos conferir isso rodando:

    # apt-get -u install lilo
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
      cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
      logrotate mailx
    The following packages will be REMOVED:
      debconf-tiny
    The following NEW packages will be installed:
      cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
      logrotate mailx
    The following packages will be upgraded
      lilo
    1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded.
    Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used.
    Do you want to continue? [Y/n]

Como notamos na saída acima, o lilo tinha um novo conflito com o pacote debconf-tiny, ou seja, não podia ser instalado (isso também implica na atualização) sem que o debconf-tiny fosse removido.

Uma maneira de saber especificamente o que leva um pacote a ser mantido ou removido é:

    # apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Starting
    Starting 2
    Investigating python1.5
    Package python1.5 has broken dep on python1.5-base
      Considering python1.5-base 0 as a solution to python1.5 0
      Holding Back python1.5 rather than change python1.5-base
    Investigating python1.5-dev
    Package python1.5-dev has broken dep on python1.5
      Considering python1.5 0 as a solution to python1.5-dev 0
      Holding Back python1.5-dev rather than change python1.5
     Try to Re-Instate python1.5-dev
    Done
    Done
    The following packages have been kept back
      gs python1.5-dev
    0 packages upgraded, 0 newly installed, 0 to remove and 2  not upgraded.

Assim fica fácil perceber que o pacote python1.5-dev não pode ser instalado por culpa de uma dependência não satisfeita: python1.5

Provavelmente o gerenciador de atualizações utiliza o dist-upgrade(mais conhecida como atualização inteligente) por exemplo você pode definir nas opções do synaptic se ele deve fazer a atualização inteligente ou não, sempre que rodar apt-get upgrade, logo após rode o dist-upgrade, e verifique com apt-get -f install, assim você vai manter seu sistema funcionando "teoricamente" perfeito, pois o dist-upgrade verifica os pacotes que devem ser atualizados "também" fora o upgrade comum.
Ressalto que não lembro a última vez que instalei minha distro rs, rs, eu vivo de upgrade sabendo fazer não existe problema algum.

clcampos

Sei não Xterminator...

Já tive problemas com atualizações uma vez, onde um dos pacotes não foi instalado (não me lembro porque), mas que ficava listado.

Vai até estou enganado, já tem tanto tempo que não tenho certeza, mas acho que só corrigi com um apt-get dist-upgrade, e não pelo gerenciador.

Não posso falar muito porque uso o ambiente gráfico mais para navegar, fazendo quase todo o resto pelo console.
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

Xterminator

Citação de: clcampos online 03 de Agosto de 2009, 11:57
Sei não Xterminator...

Já tive problemas com atualizações uma vez, onde um dos pacotes não foi instalado (não me lembro porque), mas que ficava listado.

Vai até estou enganado, já tem tanto tempo que não tenho certeza, mas acho que só corrigi com um apt-get dist-upgrade, e não pelo gerenciador.

Não posso falar muito porque uso o ambiente gráfico mais para navegar, fazendo quase todo o resto pelo console.

Pode ter sido configuração, os gerenciadores de pacotes atuais são muito avançados e possibilitam vários tipos de configuração interna, eu particularmente não uso o gerenciador de atualizações, e outros instaladores que vem na distro
que a função que o mesmo ofereçe, pode ser feita via synaptic/apt-get como language-selector,gnome-app-install,gnome-codec-install,update-daemon e etc...

FVM

Valeu pelos esclarecimentos pessoal!

Aproveitando o tópico, mais uma dúvida a respeito de atualizações:

Há como fazer apenas atualizações relativas à segurança, tanto para Desktop quanto para o Ubuntu Server?

Xterminator

Para atualizações de segurança, você pode instalar o pacote unattended-upgrades que baixa e instala automaticamente atualizações de segurança.