Aqui, uma descrição mais detalhada do processo. Desculpe o texto ficou tão longo.
Minha experiência vem do Debian, para o qual todo o sistema de empacotamento e atualização usado no Ubuntu foi originalmente inventado. Os upgrades diários de segurança do Ubuntu correspondem à execução de apt-get upgrade
, que normalmente não remove nenhum software. Os grandes upgrades de lançamento correspondem a um apt-get dist-upgrade
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 initrd no diretório / boot. Isso ocorre porque, ao contrário dos componentes do kernel, os programas não são intercambiáveis tão bem. 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 atualizador atual lida com isso. Isso é BTW. a principal razão, porque a imagem do kernel tem seu número de versão no nome do arquivo - assim você pode ter diferentes versões de 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, iniciando com os pacotes mais baixos na hierarquia de dependências. Essas são normalmente bibliotecas de programas como libc e outras. A seqüência na qual os pacotes são atualizados, no entanto, não é codificada, mas é calculada dinamicamente à medida que as dependências de pacotes são resolvidas. Na maioria dos casos, os programas antigos podem funcionar com novas bibliotecas, por isso não é tão problemático se essas bibliotecas forem substituídas primeiro.
Você tem que entender aqui, que o sistema diferencia entre pacotes manualmente instalados (isto é, os pacotes que a instalação você solicitou diretamente, por exemplo, chromium) e pacotes instalados automaticamente, onde instalados apenas para atender dependências de pacotes instalados manualmente (e dependências dessas dependências).
Para cada programa instalado manualmente, o atualizador procura apenas uma versão mais recente. Frequentemente, esses programas são apenas pacotes meta, como o "ubuntu-desktop", que não contém dados e apenas dependências. Novas versões de bibliotecas dependentes serão inseridas, pois são solicitadas por programas atualizados diretamente (manualmente solicitados). O atualizador sempre tentará instalar a versão mais recente utilizável de qualquer pacote dependente (durante qualquer atualização não apenas para liberar 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 a atualização da biblioteca, e antes que o próprio programa seja atualizado também. Se esses programas já estiverem em execução antes da atualização da biblioteca, eles continuarão a ser executados, porque a versão antiga da biblioteca permanece na memória enquanto permanecer em uso. O mesmo vale para programas que foram iniciados antes de serem atualizados. Aqueles 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 eram requeridas por versões antigas do programa, mas não são mais requeridas pelas novas versões. Como esses pacotes são marcados como instalados automaticamente e como nenhum prgram instalado manualmente está relacionado a eles, esses pacotes podem ser facilmente localizados e removidos. Você pode até observar isso como o último passo do processo de atualização (o updater sais "removendo pacotes obsoletos" ou algo similar).
Alguns pacotes serão instalados, os quais, quando não instalados antes, são simplesmente novas dependências, que são marcadas como instaladas automaticamente e podem ser removidas, caso a necessidade para elas desapareça no futuro.
Esse mecanismo permite até mesmo a troca de programas de usuários inteiros. Como, por exemplo, mudar do Gnome2 para o Unity. Já que 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 requisitadas em primeiro lugar.
Os programas normalmente não dependem de uma versão específica do kernel do SO, então eles normalmente funcionam bem com o kernel em execução.
Além de tudo isso, eu suspeito que o atualizador do Ubuntu lança algumas correções e soluções específicas na mistura, para contornar situações em que essa teoria é quebrada.
Como você pode ver durante a atualização, há condições muito boas em que o sistema só pode ser usado para uma parte limitada. Se algo der errado durante a atualização, você provavelmente ficará com um sistema quebrado. Frequentemente, mesmo um que não pode ser facilmente reparado, já que o programa de atualização também pode ser afetado. Lembre-se, programas com dependências quebradas podem continuar a funcionar, mas não podem ser reiniciados, desde que as dependências sejam quebradas, isto 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 trocar essas marcas usando o mesmo programa. Isso afetará diretamente o processo de atualização.
Em uma configuração de software mais complexa, o atualizador algumas 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 trabalhar com a nova. Você então terá que fazer sua escolha, seja para renunciar a um desses programas ou para evitar a atualização de ambos. Como as dependências costumam ser complexas, isso pode ficar muito confuso muito rápido (você pode ter ouvido falar do termo "inferno da dependência").
Agora, para as perguntas específicas:
- Quando a infraestrutura de baixo nível é alterada (de baixo nível, como no kernel, drivers, bibliotecas, etc., qualquer coisa com a qual um usuário não interage diretamente), o que acontece com os binários obsoletos?
- OK ... eu já cobri esse aqui
- O que acontece com um aplicativo que foi totalmente suspenso? Por exemplo, Unity 2D (ou qualquer outro software abandonado / nenhum mantenedor cujo pacote não esteja em um novo repositório).
- Se o aplicativo tiver sido instalado manualmente, ele permanecerá no sistema, muitas vezes causando a dependência que descrevi.
- ubuntu-desktop é um metapacote que puxa os aplicativos padrão do Ubuntu como dependências. Se eu removi o Firefox e instalei o Chrome, o Firefox ainda será puxado 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, em que um software normalmente é instalado como uma dependência, mas pode 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 em uma nova versão; O pacote-x será atualizado junto com o resto dos pacotes, apesar de ser órfão?
Pergunte-me se ainda tem mais alguma questão.