Wie kann Ubuntu nahtlos auf eine neuere Distribution aktualisiert werden, während das Betriebssystem noch ausgeführt wird? Ich aktualisiere von 10.10 auf 11.04 und habe bereits mehrere Male ein Upgrade durchgeführt. Es ist so einfach, Update-Manager -d auszuführen, herunterzuladen und zu installieren und anschließend neu zu starten.
Wie genau funktioniert das? Wie kann der Upgrade-Manager das Betriebssystem aktualisieren, während es noch verwendet wird?
upgrade
release-management
bbosak
quelle
quelle
Antworten:
Aus meiner Erfahrung würde ich annehmen, dass Pakete und Module, während sie ausgeführt werden, im Speicher gehalten werden und nicht viel auf ihre Kopie auf der Festplatte zurückgreifen. Sie können dies sehen, wenn Sie ein Programm in Ubuntu ausführen und dann die zugehörigen Pakete entfernen, während es ausgeführt wird. Es läuft weiter, aber wenn Sie es schließen, können Sie es nicht neu starten.
Ich würde annehmen, dass das gleiche mit einem Distributions-Upgrade passiert. Alle Pakete, die sich auf die ursprüngliche Version von Ubuntu beziehen, werden weiterhin ausgeführt, obwohl sie entfernt und durch die neuen ersetzt wurden. Wenn sie also bei einem Systemneustart endgültig gestoppt werden, übernehmen die neuen Pakete.
quelle
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:
Fragen Sie mich einfach, wenn Sie noch weitere Fragen haben.
quelle
man apt-get
. Ich finde es oft nützlich, die Release-Angabe der Befehlssyntax wieapt-get -t intrepid install foo/jaunty bar/oneiric
etc ... zu verwenden, nur Beispiele. Tatsächlich ist dies bei Debian sinnvoller, wo Sie manchmal Releases mischen. Unter Ubuntu ist dies weniger üblich. Interessante Themen könnten auch das Anheften und Zurückhalten von Paketen sein.Auf Dateisystemebene können Sie im Gegensatz zu Windows auf einem Unix-System geöffnete Dateien löschen. Durch das Löschen wird nur der Name der Datei entfernt, nicht deren Inhalt, sodass alle Programme, bei denen die Datei noch geöffnet ist, weiterhin darauf zugreifen können, bis sie die Datei schließen. Erst dann werden die Daten freigegeben.
Der Aktualisierungsprozess entfernt also einfach die alten Dateien, ersetzt sie durch die neuen und startet sie für bestimmte Systemdienste neu, damit die neue Version ausgeführt wird.
Es gibt eine oder zwei Komponenten, die nicht neu gestartet werden können, ohne den gesamten Computer neu zu starten. Nach dem Upgrade werden Sie aufgefordert, einen Neustart durchzuführen, damit Sie die neue Version verwenden können.
quelle
Wie kann sich Linux selbst aktualisieren, während es noch verwendet wird?
Hauptsächlich, weil Linux (und damit die meisten Distributionen) einfach so entworfen wurde. Die Möglichkeit, ein Paket auf einem laufenden System zu aktualisieren, ist ein Ziel für die meisten Linux-basierten Distributionen.
Unter Linux hindert nichts den Paketmanager daran, in eine Datei auf der Festplatte zu schreiben, selbst wenn diese Datei derzeit von einer Anwendung geöffnet wird oder die Datei eine ausführbare oder gemeinsam genutzte Codebibliothek ist, die derzeit ausgeführt wird . Auf einer sehr niedrigen Ebene gibt es Sperren, die den Zugriff auf eine Datei während eines einzelnen Schreib- / Lesevorgangs schützen. Diese werden jedoch niemals länger als eine Millisekunde gehalten, und jede andere Anwendung versucht, in dieselbe Datei zu schreiben Ich werde einfach diese Millisekunden warten.
Sie können eine ausführbare Datei ersetzen, während sie ausgeführt wird, und sie führt tatsächlich nichts zum laufenden Prozess, da der Prozess die Datei auf der Festplatte nicht mehr benötigt - der gesamte Code wurde bereits in den Speicher geladen.
Aus diesem Grund wird das Upgrade unter Linux, obwohl Sie eine Anwendung während der Ausführung aktualisieren können, erst wirksam, wenn die von Ihnen aktualisierte Anwendung neu gestartet wird. Im Falle eines Upgrades eines Hintergrundprozesses wie eines Systemdienstes müsste dieser Dienst neu gestartet werden. Wenn Sie den Kernel aktualisiert haben, bedeutet dies einen Neustart.
Werden die Dateien eines Programms nicht ersetzt, während es ausgeführt wird, werden einige Programme unterbrochen?
Einige der Pakete in einer Linux-Distribution enthalten Installationsanweisungen, die den Paketmanager anweisen, bestimmte Systemdienste zu stoppen, während das Paket aktualisiert wird, und diese Dienste nach Abschluss des Updates neu zu starten. Dies verhindert Situationen, in denen beispielsweise die Konfigurationsdateien für einen bestimmten Dienst aktualisiert werden und die laufende Version des Dienstes möglicherweise nicht mit der neueren Version der Konfigurationsdateien fertig wird.
Für normale Benutzeranwendungen sind im Allgemeinen keine Konfigurationsdateien erforderlich, mit Ausnahme von Dateien, die selbst generiert und an Orten wie den Basisverzeichnissen der Benutzer abgelegt werden. Diese werden also beim Aktualisieren vom Paketmanager nicht berührt.
quelle
apt
die bestimmten Pakete und Abhängigkeiten während des Upgrade-Prozesses behandelt.Dies ähnelt einer anderen Funktion. Ich hoffe, dies hilft, den grundlegenden Prozess zu verstehen.
Ich beziehe mich auf die Fähigkeit, "root zu wechseln", wenn das Betriebssystem startet.
Beim Booten des Betriebssystems ist das Root-Dateisystem (sprich: "/") zunächst nur im RAM verfügbar. Während dieser Startvorgang wechselt / vom RAM zum / Dateisystem auf der Festplatte.
quelle