Isso pode ser um possível bug, mas é algo que vem me incomodando há alguns dias.
A diferença entre apt-get upgrade
e apt-get dist-upgrade
tem sido bem conhecida e bem estabelecida até agora, ou seja, a atualização instala/atualiza enquanto dist-upgrade
é capaz de instalar/remover/atualizar se a remoção do pacote for necessária para uma instalação ou atualização de outro pacote. A diferença nos pacotes pode ser facilmente descoberta com algo como
(o seguinte é um método rápido e sujo e precisará que a senha sudo seja inserida já no terminal para copiar e colar. Além disso, como tenho vários pacotes e drivers, corrigi-me que preciso manter a funcionalidade, incluí o OR em o awk
para extrair apenas aqueles a serem instalados e aqueles a serem atualizados, e não aqueles listados como mantidos, mas o seguinte deve funcionar mesmo se essas linhas não estiverem presentes em suas apt upgrade
saídas):
$echo -e 'n' | sudo apt-get dist-upgrade | awk '
/be installed|be upgraded/{f=1;next}; /not upgraded|kept back/{f=0}f' | awk '
BEGIN {RS=" ";} {print $0}
' | grep . > apt_get_dist_list
$echo -e 'n' | sudo apt-get upgrade | awk '
/be installed|be upgraded/{f=1;next}; /not upgraded|kept back/{f=0}f' | awk '
BEGIN {RS=" ";} {print $0}
' | grep . > apt_get_upgrade_list
e quando comparo as duas saídas com:
$diff apt_get_dist_list apt_get_upgrade_list | grep -E '<|>'
no meu caso recebo o seguinte:
< gir1.2-nm-1.0
< libcpupower2
< linux-kbuild-5.2
< blueman
< linux-cpupower
< linux-headers-amd64
< linux-image-amd64
< pdf-parser
O que torna a diferença bastante clara, especialmente dada a presença de linux-header-*
e linux-image-*
emapt-get dist-upgrade
Agora, se eu repetir o mesmo processo para apt upgrade
eapt full-upgrade
$echo -e 'n' | sudo apt upgrade | awk '
/be installed|be upgraded/{f=1;next}; /not upgraded|kept back/{f=0}f' | awk '
BEGIN {RS=" ";} {print $0}
' | grep . > apt_upgrade_list
$echo -e 'n' | sudo apt full-upgrade | awk '
/be installed|be upgraded/{f=1;next}; /not upgraded|kept back/{f=0}f' | awk '
BEGIN {RS=" ";} {print $0}
' | grep . > apt_fullupgrade_list
e compare:
$diff apt_get_dist_list apt_fullupgrade_list | grep -E '<|>'
Não recebo nada, como esperado, porque apt full-upgrade
e apt-get dist-upgrade
devem se comportar exatamente da mesma maneira, mas quando comparo:
$diff apt_get_upgrade_list apt_upgrade_list | grep -E '<|>'
Eu recebo a mesma saída que ao comparar apt-get upgrade with apt-get dist-upgrade
.
> gir1.2-nm-1.0
> libcpupower2
> linux-kbuild-5.2
> blueman
> linux-cpupower
> linux-headers-amd64
> linux-image-amd64
> pdf-parser
e a única conclusão a que posso chegar é que apt upgrade
é exatamente o mesmo que o apt full-upgrade
que também o torna o mesmo que apt-get dist-upgrade
, o que significa que não apenas é apt upgrade
redundante, mas o que também é mais preocupante é que atualmente apt
não permite o mesmo comportamento como apt-get upgrade
.
Eles não são redundantes; há uma sutileza adicional:
apt-get upgrade
atualizará apenas os pacotes atualmente instalados;apt upgrade
atualizará os pacotes atualmente instalados e instalará novos pacotes obtidos por dependências atualizadas ;dist-upgrade
efull-upgrade
variantes atualizarão os pacotes atualmente instalados, instalarão novos pacotes introduzidos como dependências e removerão pacotes quebrados por pacotes atualizados.Coloque de outra forma:
apt-get upgrade
apt upgrade
apt-get dist-upgrade
,apt full-upgrade
etcNa prática,
apt upgrade
é mais seguro queapt-get upgrade
(por padrão) porque permite que kernels atualizados sejam instalados automaticamente quando a ABI muda. Veja apt-get upgrade retém uma atualização do kernel. Quais são as instruções oficiais para aplicar atualizações no Debian 9? Por exemplo.apt-get upgrade
pode ser dito para se comportar comoapt upgrade
com a--with-new-pkgs
opção. Isso também é configurável usando arquivos de configuração do APT; você pode verapt
as configurações específicas comapt-config dump | grep '^Binary::apt
(a configuração envolvida aqui éAPT::Get::Upgrade-Allow-New
).