Aqui está uma descrição mais detalhada do processo. Desculpe, o texto ficou tão longo.
Minha experiência deriva do Debian, para o qual todo o sistema de empacotamento e atualização usado no Ubuntu foi originalmente inventado. As atualizações diárias de segurança do Ubuntu correspondem à execução, apt-get upgrade
que normalmente não remove nenhum software. As atualizações de grande lançamento correspondem a um apt-get dist-upgrade
período durante o qual os pacotes de software podem ser trocados completamente.
Na verdade, os componentes de nível muito baixo normalmente não são trocados durante uma atualização de versão. Imediatamente após a atualização, você deve encontrar duas imagens do kernel e do initrd no diretório / boot. Isso ocorre porque, diferentemente dos programas, os componentes do kernel não são tão intercambiáveis. Se surgir a necessidade de carregar novos drivers de dispositivo durante a atualização, eles devem ser compatíveis com o kernel em execução. Após o sistema inicializar com o novo kernel, o antigo pode ser removido. A última vez que verifiquei que uma coisa tinha que ser feita manualmente, não sei como o atual atual lida com isso. Aqui é o BTW. a principal razão pela qual a imagem do kernel possui seu número de versão no nome do arquivo - para que você possa ter diferentes versões do kernel instaladas ao mesmo tempo. O mesmo para o caminho do módulo (/ lib / modules / ...)
Os pacotes de software são atualizados um por um, começando com os pacotes mais baixos na hierarquia de dependências. Normalmente, são bibliotecas de programas como libc e outras. A sequência na qual os pacotes são atualizados não é codificada, mas calculada dinamicamente à medida que as dependências do pacote são resolvidas. Na maioria dos casos, programas antigos podem funcionar com novas bibliotecas, portanto, não é tão problemático se essas bibliotecas forem substituídas primeiro.
Você precisa entender aqui que o sistema diferencia entre pacotes instalados manualmente (por exemplo, os pacotes cuja instalação você solicitou diretamente, por exemplo, chromium) e pacotes instalados automaticamente, que somente foram instalados para atender às dependências dos pacotes instalados manualmente (e dependências dessas dependências) )
Para cada programa instalado manualmente, o atualizador procura apenas uma versão mais recente. Freqüentemente esses programas são apenas meta-pacotes como "ubuntu-desktop", que não contém dados e apenas dependências. Novas versões de bibliotecas dependentes serão acessadas, pois são solicitadas por programas atualizados diretamente (solicitados manualmente). O atualizador sempre tentará instalar a versão mais nova utilizável de qualquer pacote dependente (durante qualquer atualização, não apenas as atualizações).
Os programas que não podem funcionar com as novas versões da biblioteca não podem ser iniciados durante o tempo após o upgrade da biblioteca e antes do upgrade do próprio programa. Se esses programas já devem estar em execução antes da atualização da biblioteca, eles continuarão sendo executados, porque a versão antiga da biblioteca permanece na memória enquanto permanecer em uso. O mesmo vale para os programas que foram iniciados antes de serem atualizados. Esses não fornecerão novos recursos até que sejam finalizados e reiniciados.
Após a atualização, algumas bibliotecas (ou dependências em geral) ficarão órfãs. Essas são bibliotecas que foram requeridas pelas versões antigas do programa, mas não são mais necessárias pelas novas versões. Como esses pacotes são marcados como instalados automaticamente, e como nenhum prgram instalado manualmente se relaciona com eles, esses pacotes podem ser facilmente localizados e removidos. Você pode até observar isso como a última etapa do processo de atualização (o atualizador diz "removendo pacotes obsoletos" ou algo semelhante).
Alguns pacotes serão instalados, que antes não eram instalados, essas são simplesmente novas dependências, marcadas como instaladas automaticamente e podem ser removidas, caso o requisito para eles desapareça no futuro.
Esse mecanismo ainda permite a troca de programas de usuários inteiros. Como, por exemplo, mudar do Gnome2 para o Unity. Como ambos são apenas dependências automáticas do ubuntu-desktop, que é um dos poucos pacotes, para os quais novas versões são realmente solicitadas em primeiro lugar.
Os programas normalmente não dependem de uma versão específica do kernel do sistema operacional; portanto, eles normalmente funcionam bem com o kernel em execução.
Além de tudo isso, suspeito que o atualizador Ubuntu libere algumas correções específicas e soluções alternativas para contornar situações em que essa teoria se rompe.
Como você pode ver durante a atualização, existem condições muito boas nas quais o sistema pode ser usado apenas por uma parte limitada. Se algo der errado durante a atualização você vai provavelmente ser deixado com um sistema quebrado. Muitas vezes, mesmo um que não pode ser reparado com facilidade, pois o programa de atualização também pode ser afetado. Lembre-se de que programas com dependências quebradas podem continuar funcionando, mas não podem ser reiniciados, desde que as dependências estejam quebradas, isso também vale para o atualizador.
Você pode usar o programa de linha de comando apt-mark
para descobrir quais pacotes estão marcados como instalados manualmente e quais foram instalados automaticamente. Você também pode mudar essas marcas usando o mesmo programa. Isso afetará diretamente o processo de atualização.
Em uma configuração de software mais complexa, o Atualizador às vezes solicita que você resolva uma dependência manualmente. Ou seja, quando um programa instalado manualmente é atualizado e solicita uma nova versão de uma biblioteca, enquanto outro programa instalado manualmente depende da versão antiga da mesma biblioteca e não pode funcionar com o novo. Você terá que fazer sua escolha, para abandonar um desses programas ou abster-se de atualizar os dois. Como as dependências costumam ser complexas, isso pode ficar muito confuso muito rápido (você deve ter ouvido falar do termo "inferno das dependências").
Agora, para as perguntas específicas:
- Quando a infraestrutura de baixo nível é alterada (de baixo nível, como no kernel, drivers, bibliotecas, etc., tudo o que um usuário não interage diretamente), o que acontece com os binários preteridos?
- O que acontece com um aplicativo que foi completamente reprovado? Por exemplo, o Unity 2D (ou qualquer outro software abandonado / sem mantenedores cujo pacote não esteja em novo repositório).
- Se o aplicativo já foi instalado manualmente, ele permanecerá no sistema, causando muitas vezes a dependência que descrevi.
- O ubuntu-desktop é um metapacote que puxa aplicativos padrão do Ubuntu como dependências. Se eu removi o Firefox e instalei o Chrome, o Firefox continuará sendo usado como parte das atualizações?
- Desde que seja o navegador padrão da nova versão, sim. O Chromium também será atualizado. Não tenho certeza se você pode remover o Firefox sem remover o ubuntu-desktop. Observe que, além das dependências estritas, o sistema de pacotes também conhece o conceito de recomendações, onde um software normalmente será instalado como uma dependência, mas poderá ser desinstalado posteriormente sem afetar nada além de suas próprias dependências.
- Além disso, o que acontece se um único aplicativo costumava depender do pacote x e não o faz mais na nova versão; o pacote-x será atualizado juntamente com o restante dos pacotes, apesar de órfão?
Apenas me pergunte se você ainda tiver mais perguntas.