Voici une description plus détaillée du processus. Désolé, le texte est devenu si long.
Mon expérience découle de Debian, pour laquelle l'intégralité du système de mise en package et de mise à niveau utilisé dans Ubuntu a été inventé à l'origine. Les mises à jour de sécurité Ubuntu quotidiennes correspondent à une exécution apt-get upgrade
qui normalement ne supprime aucun logiciel. Les mises à niveau de grandes versions correspondent à une apt-get dist-upgrade
période pendant laquelle les progiciels peuvent être complètement échangés.
En fait, les composants de très bas niveau ne sont normalement pas échangés lors d'une mise à niveau de version. Immédiatement après la mise à niveau, vous devriez trouver deux images de noyau et initrd dans votre répertoire / boot. En effet, contrairement aux programmes, les composants du noyau ne sont pas aussi bien interchangeables. Si le besoin se fait sentir de charger de nouveaux pilotes de périphériques pendant la mise à niveau, ceux-ci doivent être compatibles avec le noyau en cours d'exécution. Après le démarrage du système avec le nouveau noyau, l'ancien peut être supprimé. La dernière fois que j'ai vérifié que cette seule chose devait être effectuée manuellement, je ne sais pas comment le programme de mise à jour actuel gère cela. C'est BTW. la raison principale pour laquelle l'image du noyau porte son numéro de version dans le nom du fichier - vous pouvez donc installer différentes versions du noyau en même temps. Idem pour le chemin du module (/ lib / modules / ...)
Les packages logiciels sont mis à niveau un par un, en commençant par les packages les plus bas de la hiérarchie des dépendances. Ce sont normalement des bibliothèques de programmes comme libc et d'autres. La séquence dans laquelle les packages sont mis à jour n'est cependant pas codée en dur mais calculée dynamiquement lorsque les dépendances des packages sont résolues. Dans la plupart des cas, les anciens programmes peuvent fonctionner avec de nouvelles bibliothèques, donc ce n'est pas si problématique si ces bibliothèques sont remplacées en premier.
Vous devez comprendre ici que le système fait la différence entre les packages installés manuellement (c'est-à-dire les packages dont vous avez directement demandé l'installation, par exemple chrome) et les packages installés automatiquement, qui n'étaient installés que pour répondre aux dépendances des packages installés manuellement (et aux dépendances de ces dépendances). ).
Pour chaque programme installé manuellement, le programme de mise à jour recherche simplement une version plus récente. Souvent, ces programmes ne sont que des méta-packages comme "ubuntu-desktop", qui ne contient aucune donnée, et seulement des dépendances. De nouvelles versions des bibliothèques dépendantes seront intégrées, car elles sont demandées par des programmes directement mis à jour (demandés manuellement). Le programme de mise à jour essaiera toujours d'installer la dernière version utilisable de tout package dépendant (lors de toute mise à niveau, pas seulement des mises à niveau de versions).
Les programmes qui ne peuvent pas fonctionner avec les nouvelles versions de bibliothèque ne peuvent pas être démarrés pendant le temps après la mise à niveau de la bibliothèque et avant que le programme lui-même ne soit également mis à niveau. Si ces programmes doivent déjà être en cours d'exécution avant la mise à niveau de la bibliothèque, ils continueront cependant à s'exécuter, car l'ancienne version de la bibliothèque reste en mémoire tant qu'elle est utilisée. Il en va de même pour les programmes qui ont été lancés avant leur mise à niveau. Ceux-ci ne fourniront pas de nouvelles fonctionnalités tant qu'ils ne seront pas arrêtés et redémarrés.
Après la mise à jour, certaines bibliothèques (ou dépendances en général) seront orphelines. Ce sont des bibliothèques qui étaient requises par les anciennes versions du programme, mais qui ne sont plus requises par les nouvelles versions. Étant donné que ces packages sont marqués comme installés automatiquement et qu'aucun programme installé manuellement ne les concerne plus, ces packages peuvent être facilement localisés et supprimés. Vous pouvez même observer cela comme la dernière étape du processus de mise à jour (le programme de mise à jour dit "supprimer les packages obsolètes" ou quelque chose de similaire).
Certains packages seront installés, qui, lorsqu'ils n'étaient pas installés auparavant, ne sont que de nouvelles dépendances, qui sont marquées comme installées automatiquement et peuvent être supprimées si leur besoin disparaît à l'avenir.
Ce mécanisme permet même l'échange de programmes utilisateurs entiers. Comme par exemple passer de Gnome2 à Unity. Étant donné que les deux ne sont que des dépendances automatiques d'ubuntu-desktop, qui est l'un des rares packages, pour lesquels de nouvelles versions sont réellement demandées en premier lieu.
Les programmes ne dépendent normalement pas d'une version spécifique du noyau du système d'exploitation, ils fonctionneront donc normalement avec le noyau en cours d'exécution.
En dehors de tout cela, je soupçonne que le programme de mise à jour Ubuntu ajoute des correctifs et des solutions de contournement spécifiques dans le mélange, pour contourner les situations où cette théorie rompt.
Comme vous pouvez le voir lors de la mise à jour, il existe de très bonnes conditions dans lesquelles le système n'est utilisable que pour une partie limitée. En cas de problème pendant la mise à jour, vous vous retrouverez probablement avec un système défectueux. Souvent même celui qui ne peut pas être facilement réparé, car le programme de mise à niveau peut également être affecté. N'oubliez pas que les programmes avec des dépendances cassées peuvent continuer à fonctionner, mais ne peuvent pas être redémarrés, tant que les dépendances sont cassées, cela vaut également pour le programme de mise à jour.
Vous pouvez utiliser le programme de ligne de commande apt-mark
pour savoir quels packages sont marqués comme installés manuellement et lesquels ont été installés automatiquement. Vous pouvez également changer ces marques en utilisant le même programme. Cela affectera directement le processus de mise à jour.
Dans une configuration logicielle plus complexe, le programme de mise à jour vous demandera parfois de résoudre une dépendance manuellement. C'est-à-dire lorsqu'un programme installé manuellement est mis à jour et demande une nouvelle version d'une bibliothèque tandis qu'un autre programme installé manuellement dépend de l'ancienne version de la même bibliothèque et ne peut pas fonctionner avec la nouvelle. Vous devrez alors faire votre choix, soit de renoncer à l'un de ces programmes, soit de ne pas les mettre à niveau. Comme les dépendances sont souvent complexes, cela peut devenir très compliqué très rapidement (vous avez peut-être entendu parler du terme «enfer des dépendances»).
Passons maintenant aux questions spécifiques:
- Lorsque l'infrastructure de bas niveau est modifiée (bas niveau comme dans le noyau, les pilotes, les bibliothèques, etc. tout ce avec quoi un utilisateur n'interagit pas directement), qu'advient-il des binaires obsolètes?
- OK ... j'ai déjà couvert celui-ci
- Qu'arrive-t-il à une application complètement obsolète? Par exemple, Unity 2D (ou tout autre logiciel abandonné / aucun mainteneur dont le package n'est pas dans un nouveau référentiel).
- Si l'application a été installée manuellement une fois, elle restera dans le système, provoquant souvent l'enfer de dépendance que j'ai décrit.
- ubuntu-desktop est un métapaquet qui extrait les applications Ubuntu par défaut en tant que dépendances. Si j'ai supprimé Firefox et installé Chrome, Firefox sera-t-il toujours intégré dans le cadre des mises à niveau?
- Tant qu'il s'agit du navigateur standard de la nouvelle version, oui. Le chrome sera également mis à niveau. Je ne sais pas si vous pouvez supprimer Firefox sans supprimer ubuntu-desktop. Notez qu'en dehors des dépendances strictes, le système de packages connaît également le concept de recommandations, où un logiciel sera normalement installé comme une dépendance, mais peut être désinstallé plus tard sans affecter autre chose que ses propres dépendances.
- De plus, que se passe-t-il si une seule application dépendait de package-x et ne le fait plus dans la nouvelle version; package-x sera-t-il mis à niveau avec le reste des packages malgré le fait qu'il soit orphelin?
Demandez-moi simplement si vous avez encore des questions.