Por que existe a separação entre atualização e atualização?

12

Entendo que apto comando updateatualiza a lista de pacotes disponíveis, mas não atualiza o software que já foi instalado a partir desses pacotes.

Também entendo que upgradeatualize qualquer software que eu já instalei de um pacote com o qual atualizei updateconforme descrito acima.

Qual foi o motivo dos desenvolvedores do Ubuntu / Debian para fazer essa divisão updatee, em upgradevez disso, trabalhar com um comando para realizar as duas tarefas?

Esta é mais uma pergunta sobre a filosofia arquitetônica dos desenvolvedores do Ubuntu.

user9303970
fonte
Se eu vou instalar muitos aplicativos (e os agrupo, então um comando para um grupo, o próximo comando para o próximo etc), por que eu gostaria de baixar os repositórios para cada grupo - separando o repo.update e o etapas de instalação subseqüentes eu posso economizar largura de banda. Se eu quisesse que um comando fizesse as duas coisas, eu poderia criar um script ou de aliasqualquer maneira. A maneira unix é que um comando faz apenas uma coisa, de qualquer maneira, então separar se encaixa melhor com a maneira unix se argumentos 'teológicos / filosóficos' também são coisa para você.
23418 guiverc
da mesma forma, se eu apt dist-upgradeclicar em "n" para cancelar, mude de idéia, economizarei largura de banda porque ela não será 'atualizada' para refazer o apt dist-upgradecomando ... Mesmo que 'dist-upgrade' tenha feito a atualização automaticamente, não há razões para 'update' que não incluem 'install', 'upgrade' ou 'atualizar-dist', então o comando 'update' existiria qualquer forma ..
guiverc
Eu argumentou que a separação não deveria existir a partir da perspectiva do usuário, e que a ação apt updatedeve apenas ser executado automaticamente quando necessário.
Robie Basak

Respostas:

7

Uma atualização não é a única vez que você pode precisar apt-get update, e eu não quero atualizá-la sempre que simplesmente atualizar as listas de pacotes.

Um apt-get upgradetrabalho bem pode depender apt-get updatesendo executado não há muito tempo, mas, em seguida, que é verdadeiro de apt-get removee apt-get installbem! Tudo isso deveria implicar apt-get update? Claro que não! Como uma questão simples de eficiência de recursos e limpeza do projeto, se uma operação é comum a várias outras operações, ela deve ser fatorada.

Por outro lado, considerando que apt-get removee apt-get installtambém pode depender da apt-get updateexecução recente para concluir com êxito, faz sentido apt-get upgradepara cada execução apt-get update? Não, novamente, uma vez que o que pretendo fazer pode muito bem entrar em conflito com o que apt-get upgradefará.

muru
fonte
6

Sempre que você altera as fontes de software, você deve executar o comando sudo apt updatepara atualizar a lista de softwares disponíveis. Em seguida, você pode procurar pacotes disponíveis na nova fonte de software que você acabou de adicionar e / ou instalá-los.

O comando sudo apt upgradeé o equivalente ao terminal da atualização da lista de pacotes instalados usando o aplicativo Atualizador de Software. Isso é diferente do fluxo de trabalho normal de adicionar uma nova fonte de software, atualizar a lista de softwares disponíveis para incluir pacotes da nova fonte de software e instalar novos pacotes da nova fonte de software que você acabou de adicionar, por isso é mais conveniente e menos confuso sudo apt updatee sudo apt upgradesão comandos separados.

Também é menos confuso separar sudo apt updatee sudo apt upgradeporque, quando você executa com sudo apt updateêxito, confirma que possui conectividade com a Internet. Se houver um problema ao executar sudo apt upgradeposteriormente, é mais provável que seja um problema de gerenciamento de pacotes do que um problema de conectividade com a Internet, e os resultados sudo apt upgradefornecerão dicas para diagnosticar e resolver o problema.

karel
fonte
5

A história da diferença entre updatee upgradeé realmente muito legal.

Há muito tempo - cerca de 2000 ou mais, anos antes da existência do Ubuntu -, a largura de banda e o espaço em disco eram muito mais limitados ... embora expansivos em comparação com meados da década de 90. A banda larga estava apenas começando e a conexão discada ainda era uma maneira vital de ficar online. Os grandes discos ainda tinham apenas algumas centenas de MB. O Apt era brilhante e novo, radical e revolucionário, construído sobre o dpkg.

O banco de dados apt, quando você pensa sobre isso, é uma maravilha: é um banco de dados preciso e atualizado de todos os softwares de todos os repositórios conhecidos. Ele é detalhado o suficiente para calcular dependências e identificar atualizações disponíveis, mas pequeno o suficiente para transmitir através dos modems dial-up da época e para armazenar nas pequenas unidades da época. A atualização do banco de dados por telefone pode levar alguns minutos para uma boa conexão. Enquanto isso já faz muito tempo, procurar atualizações de pacotes manualmente (antes do apt) pode consumir horas .

Naquela época, as distros eram construídas de maneira diferente - sem integração contínua, sem testes de fumaça (bem, sem muitos testes!), Os farms de construção estavam apenas começando. As atualizações tiveram que ser revertidas com mais frequência do que agora. Muitos usuários optaram por não atualizar determinados pacotes por vários motivos, ou selecionar apenas determinadas atualizações hoje (para testar manualmente) e outras atualizações amanhã.

Nos 15 anos subsequentes, as ferramentas não mudaram muito, e é por isso que ainda temos ações updatee upgradeações separadas . O fluxo de trabalho do usuário evoluiu à medida que a confiabilidade da distribuição melhorou, e grande parte do gerenciamento de origem / atualização / atualização que costumava ser manual foi oculto lentamente por trás das camadas de automação ( software-updater, unattended-upgrades).

A modernização das ferramentas de pacote de software é uma das razões pelas quais Snaps, AppImage e Flatpack apareceram recentemente, mas esse é o próximo capítulo.

user535733
fonte
2

Eles separam as coisas por vários motivos.

Um exemplo é uma pergunta que postei e respondi automaticamente: Como os PPAs podem ser removidos usando a GUI? . Nesta tela, queremos remover os PPAs e não atualizar o software:

Remover PPA.png

Após remover um PPA, o software da GUI é executado automaticamente sudo apt update. Se você tiver que remover um PPA da linha de comando, precisará executar sudo apt update após remover um PPA da lista de fontes.

Sem uma apt updatefunção separada , não há como remover um PPA !.


Outro exemplo é que você precisa executar a sudo apt updatepartir da linha de comando para atualizar fontes. Em seguida, você pode descobrir o que poderia ser atualizado sem realmente atualizar:

$ apt list --upgradable
Listing... Done
conky-std/xenial 1.10.1-3 amd64 [upgradable from: 1.9.0-4]
google-chrome-stable/stable 65.0.3325.181-1 amd64 [upgradable from: 63.0.3239.132-1]
libxnvctrl0/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
nvidia-settings/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
peek/xenial 1.3.1-0~ppa23~ubuntu16.04.1 amd64 [upgradable from: 1.2.1-0~ppa20~ubuntu16.04.1]

Observando a saída, você pode decidir ter um determinado pacote "fixado" ou "retido" e não atualizar na próxima vez que o `sudo apt upgrade" for executado.Se houvesse um único processo de "atualização / atualização", você perderia essa capacidade .

Sem um separado, apt updatevocê não pode ver o que seria atualizado!

WinEunuuchs2Unix
fonte
O segundo parágrafo é falso. yume dnfexecute automaticamente o equivalente a uma atualização ao executar operações relevantes. Por exemplo, o equivalente a apt list --upgradableé yum check-update, que atualiza a lista de pacotes se ela não foi atualizada recentemente. Certamente é possível que isso funcione, como pode ser visto em outros gerenciadores de pacotes.
Muni
@muru É baseado nesta resposta com 238 votos que diz que você deve executar sudo apt updateapós remover um repositório.
WinEunuuchs2Unix
a segunda seção separada, então.
Muni
Agora que você mencionou, isso também é falso. Como pode ser visto no exemplo de yum/ dnfnovamente, a operação de atualização é automática, portanto, uma fonte desativada é removida automaticamente da próxima operação. Mais uma vez, algo que é inteiramente possível.
Muni
@muru Além disso, no meu sistema, pelo menos, yumnem dnfestão instalados. Instalar um deles para substituir um apt updateaumentaria a sobrecarga do sistema e o tempo de aprendizado.
WinEunuuchs2Unix 06/04/19
0

Pode-se perguntar por que baixar o programa do repositório formal do Ubuntu apte instalá-lo? Que diferença faria se você o baixasse primeiro e depois o instalasse, em vez de baixar e instalar em uma operação?

Bem, depois de ler os comentários e pensar mais sobre isso, entendo que isso se deve à filosofia do Unix , uma filosofia modular que basicamente diz "Cada programa faz uma coisa": primeiro faça o download e instale --- cada ação com seu próprio programa dedicado .

user9303970
fonte
0

Em nenhuma distribuição, há um comando update-upgrade, se estiver lá, não passa de aliases predefinidos, tanto quanto eu presumo. Esses aliases também podem ser facilmente configurados no Ubuntu, editando o ~ / .bashrc.

A atualização é usada para ressincronizar os repositórios e corrigir quaisquer problemas lá. Então, quando você atualiza, atualiza os pacotes instalados. Mas quando você dist-upgrade, você atualiza por completo. No Arch linux, eles enfatizam a atualização completa com o Syu. Você pode fazer o mesmo no Ubuntu. Na atualização completa, você resolve qualquer problema de sistema de dependência que possa surgir na atualização parcial.

Espero que ajude. Por favor, desculpe o texto bruto como escrito no telefone.

Arijit Chatterjee
fonte
2
yume dnffaça automaticamente o equivalente a um updatena maioria das operações se os dados em cache tiverem idade suficiente. Veja, por exemplo, a discussão sobre a mudança que o comportamento em DNF: lwn.net/Articles/750334
Muru