Hier eine detailliertere Beschreibung des Prozesses. Entschuldigung, der Text wurde so lang.
Meine Erfahrung stammt von Debian, für das ursprünglich das gesamte in Ubuntu verwendete Verpackungs- und Upgrade-System erfunden wurde. Die täglichen Ubuntu-Sicherheitsupgrades entsprechen der Ausführung, bei apt-get upgrade
der normalerweise keine Software entfernt wird. Die großen Release-Upgrades entsprechen einem, apt-get dist-upgrade
während dessen Softwarepakete vollständig ausgetauscht werden können.
Tatsächlich werden die Komponenten auf sehr niedriger Ebene normalerweise während eines Release-Upgrades nicht ausgetauscht. Unmittelbar nach dem Upgrade sollten Sie zwei Kernel- und initrd-Images in Ihrem / boot-Verzeichnis finden. Dies liegt daran, dass Kernel-Komponenten im Gegensatz zu Programmen nicht so gut austauschbar sind. Wenn während des Upgrades neue Gerätetreiber geladen werden müssen, müssen diese mit dem laufenden Kernel kompatibel sein. Nachdem das System mit dem neuen Kernel gestartet wurde, kann der alte entfernt werden. Als ich das letzte Mal überprüft habe, dass dies manuell erledigt werden muss, weiß ich nicht, wie der aktuelle Updater damit umgeht. Das ist übrigens. Der Hauptgrund, warum das Kernel-Image seine Versionsnummer im Dateinamen trägt - so können Sie verschiedene Kernel-Versionen gleichzeitig installieren. Gleiches gilt für den Modulpfad (/ lib / modules / ...)
Softwarepakete werden einzeln aktualisiert, beginnend mit den niedrigsten Paketen in der Abhängigkeits-Hirarchie. Dies sind normalerweise Programmbibliotheken wie libc und andere. Die Reihenfolge, in der Pakete aktualisiert werden, ist jedoch nicht fest codiert, sondern wird dynamisch berechnet, wenn Paketabhängigkeiten aufgelöst werden. In den meisten Fällen können alte Programme mit neuen Bibliotheken funktionieren. Daher ist es nicht so problematisch, wenn diese Bibliotheken zuerst ersetzt werden.
Sie müssen hier verstehen, dass das System zwischen manuell installierten Paketen (dh den Paketen, deren Installation Sie direkt angefordert haben, dh Chrom) und automatisch installierten Paketen unterscheidet, die nur installiert wurden, um die Abhängigkeiten manuell installierter Pakete (und Abhängigkeiten dieser Abhängigkeiten zu erfüllen) ).
Für jedes manuell installierte Programm sucht der Updater nur nach einer neueren Version. Oft sind diese Programme nur Metapakete wie "Ubuntu-Desktop", die keine Daten und nur Abhängigkeiten enthalten. Neue Versionen abhängiger Bibliotheken werden abgerufen, da sie von direkt aktualisierten (manuell angeforderten) Programmen angefordert werden. Der Updater wird immer versuchen, die neueste verwendbare Version eines abhängigen Pakets zu installieren (während einer Aktualisierung nicht nur Upgrades).
Programme, die mit den neuen Bibliotheksversionen nicht funktionieren, können nicht in der Zeit nach dem Upgrade der Bibliothek und vor dem Upgrade des Programms selbst gestartet werden. Sollten diese Programme bereits vor dem Bibliotheks-Upgrade ausgeführt werden, werden sie jedoch weiterhin ausgeführt, da die alte Bibliotheksversion so lange im Speicher bleibt, wie sie verwendet wird. Gleiches gilt für Programme, die vor dem Upgrade gestartet wurden. Diese bieten keine neuen Funktionen, bis sie beendet und neu gestartet werden.
Nach dem Update werden einige Bibliotheken (oder Abhängigkeiten im Allgemeinen) verwaist. Dies sind Bibliotheken, die von alten Programmversionen benötigt wurden, von den neuen Versionen jedoch nicht mehr benötigt werden. Da diese Pakete als automatisch installiert markiert sind und sich kein manuell installiertes Programm mehr auf sie bezieht, können diese Pakete leicht gefunden und entfernt werden. Sie können dies sogar als letzten Schritt des Aktualisierungsprozesses betrachten (der Aktualisierer sagt "Entfernen veralteter Pakete" oder ähnliches).
Es werden einige Pakete installiert, die zuvor nicht installiert wurden. Dies sind lediglich neue Abhängigkeiten, die als automatisch installiert markiert sind und entfernt werden können, falls die Anforderung für sie in Zukunft nicht mehr besteht.
Dieser Mechanismus ermöglicht sogar den Austausch ganzer Anwenderprogramme. Wie zum Beispiel von Gnome2 zu Unity wechseln. Da beide nur automatische Abhängigkeiten von Ubuntu-Desktop sind, ist dies eines der wenigen Pakete, für die tatsächlich neue Versionen angefordert werden.
Programme hängen normalerweise nicht von einer bestimmten Version des Betriebssystemkerns ab, daher funktionieren sie normalerweise einwandfrei mit dem laufenden Kernel.
Abgesehen von all dem vermute ich, dass der Ubuntu-Updater einige spezifische Korrekturen und Problemumgehungen in die Mischung einbringt, um Situationen zu umgehen, in denen diese Theorie bricht.
Wie Sie während des Updates sehen können, gibt es sehr gute Bedingungen, unter denen das System nur zu einem begrenzten Teil verwendet werden kann. Sollte während des Updates etwas schief gehen, wird höchstwahrscheinlich ein System defekt sein. Oft sogar eine, die nicht einfach repariert werden kann, da auch das Upgrade-Programm betroffen sein kann. Denken Sie daran, dass Programme mit unterbrochenen Abhängigkeiten weiterhin funktionieren können, aber nicht neu gestartet werden können. Solange die Abhängigkeiten unterbrochen sind, gilt dies auch für den Updater.
Mit dem Befehlszeilenprogramm können Sie apt-mark
herausfinden, welche Pakete als manuell installiert markiert sind und welche automatisch installiert wurden. Sie können diese Markierungen auch mit demselben Programm wechseln. Dies wirkt sich direkt auf den Aktualisierungsprozess aus.
In einem komplexeren Software-Setup werden Sie manchmal vom Updater aufgefordert, eine Abhängigkeit manuell aufzulösen. Das heißt, wenn ein manuell installiertes Programm aktualisiert wird und eine neue Version einer Bibliothek anfordert, während ein anderes manuell installiertes Programm von der alten Version derselben Bibliothek abhängt und nicht mit der neuen arbeiten kann. Sie müssen dann Ihre Wahl treffen, entweder um eines dieser Programme aufzugeben oder um nicht beide zu aktualisieren. Da Abhängigkeiten oft komplex sind, kann dies sehr schnell sehr chaotisch werden (Sie haben vielleicht schon vom Begriff "Abhängigkeitshölle" gehört).
Nun zu den spezifischen Fragen:
- Was passiert mit den veralteten Binärdateien, wenn die Infrastruktur auf niedriger Ebene geändert wird (auf niedriger Ebene wie im Kernel, in Treibern, Bibliotheken usw., mit der ein Benutzer nicht direkt interagiert)?
- OK ... ich habe diesen bereits behandelt
- Was passiert mit einer App, die komplett veraltet ist? Zum Beispiel Unity 2D (oder eine andere Software, die aufgegeben wurde / keine Betreuer, deren Paket nicht im neuen Repo enthalten ist).
- Wenn die App einmal manuell installiert wurde, bleibt sie im System, was häufig die von mir beschriebene Abhängigkeitshölle verursacht.
- Ubuntu-Desktop ist ein Metapaket, das Standard-Ubuntu-Anwendungen als Abhängigkeiten abruft. Wenn ich Firefox entfernt und Chrome installiert habe, wird Firefox dann im Rahmen von Upgrades weiterhin abgerufen?
- Solange es der Standardbrowser der neuen Version ist, ja. Chrom wird ebenfalls aktualisiert. Ich bin nicht sicher, ob Sie Firefox entfernen können, ohne Ubuntu-Desktop zu entfernen. Beachten Sie, dass das Paketsystem neben strengen Abhängigkeiten auch das Konzept von Empfehlungen kennt, bei denen eine Software normalerweise wie eine Abhängigkeit installiert wird, aber später deinstalliert werden kann, ohne dass etwas anderes als die eigenen Abhängigkeiten betroffen sind.
- Was passiert außerdem, wenn eine einzelne App früher von package-x abhängig war und dies in einer neuen Version nicht mehr tut? Wird package-x zusammen mit den anderen Paketen aktualisiert, obwohl es verwaist ist?
Fragen Sie mich einfach, wenn Sie noch weitere Fragen haben.