Aktualisierungen/phased update

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Aktualisierungen

  2. ⚓︎ Ein Terminal öffnen

  3. ⚓︎ mit Root-Rechten arbeiten

Inhaltsverzeichnis
  1. Phased-Update erkennen
  2. Ablauf eines Phased-Updates
  3. Phased-Update konfigurieren
    1. Beispiel: Early Adopter
    2. Beispiel: Nachzügler
    3. Beispiel: Altes Verfahren beibehalten
  4. Links

Bei Ubuntu werden manche veröffentlichte Updates nicht gleichzeitig an alle installierten Betriebssysteme verteilt, sondern gestaffelt (phased update) an die anfragenden Kunden übertragen. Dies betrifft immer funktionale Upgrades auf eine neuere Version von Ubuntu und auch innerhalb einer LTS-Version den Übergang auf den Stand eines aktuellen Point-Releases.

Dieses Verfahren dient der Qualitätssicherung. Moderne Software und insbesondere Softwaresysteme wie Betriebssysteme und Distributionen haben zu viele Kombinationsmöglichkeiten, die nicht alle getestet werden können. Es ist daher bei Ubuntu wie auch bei anderen Herstellern bei umfangreichen Update-Aktionen üblich, zur Begrenzung der schädlichen Auswirkungen von unerkannten Mängeln das Update zunächst nur auf einem kleinen Teil aller installierten Systeme auszuführen und später nur dann fortzusetzen, wenn keine Fehlermeldungen einlaufen. Dies setzt voraus, dass die installierten Systeme auch automatisch erkannte Fehler an den Hersteller zurück melden. Bei Ubuntu wird man bei der Installation gebeten, dieser automatischen Rückmeldung zuzustimmen. Man kann es auch jederzeit über

Einstellungen → Datenschutz → Fehlerdiagnose → Fehlerberichte an Canonical senden

ändern. (Diese Einstellung betrifft nur das Senden von Fehlerberichten und nicht die grundsätzliche Teilnahme an der Prozedur.)

Phased-Update-Aktionen werden bei Ubuntu nicht in den folgenden Fällen angewendet:

Eine laufende Phased-Update-Aktion verursacht bei den Benutzern Irritationen, wenn diese feststellen, dass eines ihrer Systeme noch nicht aktualisiert wurde, obwohl dies auf anderen, ähnlich konfigurierten Systemen längst geschehen ist.

Manchmal kann eine Phased-Update-Aktion für einzelne Benutzer kontraproduktiv sein, beispielsweise wenn man die betroffene Software testen möchte oder bereits weiß, dass man eine Eigenschaft der neusten Version benötigt.

In der Mehrzahl aller Fälle ist aber jegliche Besorgnis und Aufregung unnötig und lediglich geduldiges Abwarten angesagt. Beim Standardverfahren von Ubuntu sollte man spätestens 54 Stunden nach Start der Update-Aktion die aktualisierte Software auch auf dem eigenen System haben. Wenn es länger dauert, ist es ein Indiz, dass durch dieses Verfahren Mängel erkannt wurden, deren schädliche Auswirkungen einen selbst aber nicht erreicht haben.

Ursprünglich (seit Ubuntu 13.04 bis 20.04 LTS) waren Phased-Updates eine Spezialität des von Ubuntu verwendeten eigenen grafischen Update-Managers und betrafen somit nur Desktop-Installationen. Bei Ubuntu-Servern, die über die Kommandozeile z.B. per

sudo apt update
sudo apt upgrade 

mit Aktualisierungen versorgt wurden, wurden stets alle verfügbaren Updates direkt berücksichtigt. Auch bei Desktops konnte man mit diesen Befehlen die Wartezeit beenden.

Mit Ubuntu 22.04 LTS kann die verwendete Version von apt (bzw. apt-get usw.) selbst Phased-Updates verwalten. Somit spielt es nun keine Rolle mehr, ob per grafischem Update-Manager oder mit Befehlen auf der Kommandozeile die Aktualisierungen eingespielt werden und beide Arten der Installation (Desktop oder Server) werden gleich behandelt.

Phased-Update erkennen

Eine laufende Phased-Update-Aktion kann sowohl in der GUI Aktualisierungsverwaltung als auch beim Arbeiten auf der Kommandozeile erkannt werden.

Aktualisierung-Phased-Update.png Nebenstehendes Bild zeigt ein Beispiel: Es werden aktualisierungsfähige Pakete angezeigt, die jedoch bereits von der Aktualisierungsverwaltung abgewählt wurden.

Beim Arbeiten auf der Kommandozeile erkennt man eine laufende Phased-Update-Aktion, wenn der Befehl

sudo apt upgrade 

„zurückgehaltene Pakete“ meldet, wie im folgenden Beispiel:

Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
Paketaktualisierung (Upgrade) wird berechnet… Fertig
Die folgenden Pakete sind zurückgehalten worden:
  python3-software-properties software-properties-common software-properties-gtk
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 3 nicht aktualisiert.

Man kann sich dann für die zurückgehaltenen Pakete (hier beispielhaft: software-properties-common) mit dem Befehl

apt-cache policy software-properties-common 

die Update-Methode anschauen:

software-properties-common:
  Installiert:           0.99.22.2
  Installationskandidat: 0.99.22.3
  Versionstabelle:
     0.99.22.3 500 (gestaffelt 0%)
        500 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
        500 http://archive.ubuntu.com/ubuntu jammy-updates/main i386 Packages
 *** 0.99.22.2 100
        100 /var/lib/dpkg/status
     0.99.22 500
        500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
        500 http://archive.ubuntu.com/ubuntu jammy/main i386 Packages

(Die Beispiele sind abhängig vom konkreten Rechner und auch von der Zeit und lassen sich daher nicht reproduzieren. Sie wurden erzeugt auf einem 22.04-System in der Update-Phase 22.04 → 22.04.1 Anfang August 2022.)

Im Beispiel steht für das Paket software-properties-common bereits die Version 0.99.22.3 bereit, dessen Auslieferung per Phased-Update aber gestoppt wurde; dies erkennt man an „gestaffelt 0%“. Bei einem laufenden Phased-Update steht hier eine positive Zahl, solange man selbst noch nicht an der Aktualisierung teilnehmen durfte.

Auch der Befehl

apt list --upgradable 

zeigt zurückgehaltene Pakete an.

Phasing-Ubuntu-SRU.png Man kann sich auch im Internet über aktuell laufende Phased-Update-Aktionen informieren; auf dieser Internetseite werden wohl aber nur die Phased-Updates von SRU (Stable Release Updates) angezeigt. Es gibt gelegentlich andere Gründe, warum bei der Aktualisierung bestimmter Pakete ebenfalls dieses Verfahren eingesetzt wird, und diese Pakete erscheinen nicht immer auf dieser Seite.
Im Beispiel sieht man Probleme bei den Paketen bolt für focal und virtualbox für jammy: Bei beiden wurde das gestaffelte Ausrollen der Aktualisierung unterbrochen durch Setzen des Phasenfortschritts auf 0.

Ablauf eines Phased-Updates

  1. Auf dem Paketserver wird für das Phased-Update der Schwellwert P (0 < P < 100) gesetzt, der Standardwert bei Ubuntu ist 10.

  2. Auf dem Client, der aktualisiert werden soll, wird eine Kennzahl L (als „Losnummer“) berechnet (0 ≤ L ≤ 100). Hierfür wird aus dem Paketnamen, dessen Version und der Zahl aus /etc/machine-id ein Anfangswert für einen Pseudo-Zufallszahl-Generator berechnet und dessen Ergebnis verwendet.

  3. Nur wenn L ≤ P, dann wird auf dem Client die anstehende Aktualisierung ausgeführt.

  4. Die Paketbetreuer überwachen und bewerten einlaufende Fehlermeldungen. Wenn innerhalb einer festgelegten Zeitdauer keine fatalen Mängel bekannt werden, dann wird die Zahl P erhöht (bei Ubuntu standardmäßig um 10 alle 6 Stunden); im anderen Fall wird die Zahl P auf 0 gesetzt, wodurch ein weiteres Ausrollen der mangelhaften Aktualisierung verhindert wird.

  5. Nach Beseitigung der erkannten Mängel wird das Phased-Update mit Schritt 1 erneut gestartet.

  6. Das Verfahren wird ab Schritt 2 fortgesetzt, bis P den Wert 100 erreicht.

Phased-Update konfigurieren

Achtung!

Phased-Updates sind eine vom Hersteller Canonical vorgesehene Maßnahme zu Verbesserung der Sicherheit von Ubuntu-Installationen. Jeder Eingriff in die Konfiguration kann die Sicherheit und/oder die Funktionsfähigkeit des eigenen Systems beeinträchtigen oder im Extremfall auch zu einem unbenutzbaren System führen.

Einsteigern wird ausdrücklich empfohlen, Ubuntu wie vorgesehen zu benutzen und die anschließend beschriebenen Konfigurationen erfahrenen Kennern zu überlassen.

Die Konfiguration der Phased-Updates kann nicht in der GUI erfolgen, vielmehr muss man dies mit Rootrechten in einer Konfigurationsdatei des Update-Managers oder der Paketverwaltung mit einem Texteditor erledigen, indem man aus den in folgender Tabelle genannten Konfigurationszeilen die für die eigenen Bedürfnisse geeigneten (inkl. der Anführungszeichen und des abschließenden Semicolons!) auswählt.

Optionen zur Konfiguration von Phased-Update
Konfigurationszeile Bedeutung
Update-Manager::Always-Include-Phased-Updates; Bei Aktualisierungen über die GUI die Updates so früh wie möglich übernehmen. Ab Ubuntu 22.04 wirkungslos.
APT::Get::Always-Include-Phased-Updates "true"; Bei Aktualisierungen über die Kommandozeile die Updates so früh wie möglich übernehmen. Ab Ubuntu 21.04 möglich.
Update-Manager::Never-Include-Phased-Updates; Bei Aktualisierungen über die GUI die Updates so spät wie möglich übernehmen. Ab Ubuntu 22.04 wirkungslos.
APT::Get::Never-Include-Phased-Updates "true"; Bei Aktualisierungen über die Kommandozeile die Updates so spät wie möglich übernehmen. Ab Ubuntu 21.04 möglich.
APT::Machine-ID "UUID"; Für UUID ist eine genau 32-stellige Hexadezimalzahl einzusetzen (zul. Zeichen 0-9 und a-f). Die Datei /etc/machine-id enthält eine solche Kennung, die auch verwendet wird, wenn man für APT nichts anderes angibt. Alle Rechner mit dieser UUID übernehmen die Updates zum gleichen Zeitpunkt.

Die Optionen Always-Include-Phased-Updates und Never-Include-Phased-Updates sind ihrer Natur nach Wahrheitswerte und bestimmen zusammen die bei Phased-Updates angewendete Strategie:

Mögliche Strategien für Phased-Update
Always-Include-Phased-Updates Never-Include-Phased-Updates Bedeutung
false false Vorgabe. An Phased-Update-Aktionen wie vom Hersteller vorgesehen teilnehmen.
true false Early Adopter
false true Nachzügler
true true Unzulässige Konfiguration. Erzeugt mit Sicherheit Chaos im System, wobei nur das Chaos den Zeitpunkt bestimmt, zu dem es einzieht. Nicht verwenden!

Die Vorgabe für beide Wahrheitswerte ist false; man „setzt“ daher diesen Wert, indem man es beim Vorgabewert belässt und in den Konfigurationsdateien hierfür keine Angabe macht. Man darf nur einen der beiden Werte auf true setzten. Die Arbeitsweise bei der Kombination true/true ist undefiniert, und dies ist eine höfliche Umschreibung für: „Das Chaos wird das System übernehmen.“

Man soll die Strategie für die GUI (= Update-Manager) und die Kommandozeile (= APT) unterschiedlich wählen können, dies funktioniert aber jedenfalls bei Ubuntu 22.04 nicht. Die Einstellungen für die Kommandozeile haben immer Vorrang.

Mit der Option Machine-ID kann man bei aktiver Standard-Strategie false/false begrenzt den Moment steuern, zu dem für das eigenen System die Aktualisierung wirksam wird. Bei den anderen Strategien ist dies Optionen nicht sinnvoll. Man kann diese Option verwenden, um alle seine betreuten Maschinen zum gleichen Zeitpunkt innerhalb des Phased-Update aktualisieren zu lassen; den tatsächlichen Zeitpunkt kann man aber nicht festlegen.

Die ausgewählten Konfigurationszeilen werden in einer Konfigurationsdatei von APT eingetragen. Hierfür kann Root sich z.B. eine Datei /etc/apt/apt.conf.d/99-Phased-Updates anlegen; der Dateiname darf auch anders lauten. In diesen Dateien beginnen Kommentarzeilen mit zwei Schrägstrichen.

Beispiel: Early Adopter

Dies ist die zweckmäßige Konfiguration für ungeduldige, wagemutige und erfahrene Benutzer, die immer den „letzten heißen Scheiß“ als erste haben müssen und dafür auch das Risiko akzeptieren, dass es dem eigenen System schaden kann:

// Phased updates: Early adopter
// https://wiki.ubuntuusers.de/Aktualisierungen/phased_update/
Update-Manager::Always-Include-Phased-Updates;
APT::Get::Always-Include-Phased-Updates "true";

Mit diesen Einstellungen gehört man bei Phased-Update-Aktionen stets zu den Begünstigten in der ersten Runde. Das macht in der Regel nur dann Sinn, wenn man die auf dem eigenen System auftretenden Fehler auch zurück meldet.

Beispiel: Nachzügler

Dies ist die zweckmäßige Konfiguration für übervorsichtige Benutzer, die lieber nur ausgereiftes übernehmen:

// Phased updates: Late adopter
// https://wiki.ubuntuusers.de/Aktualisierungen/phased_update/
Update-Manager::Never-Include-Phased-Updates;
APT::Get::Never-Include-Phased-Updates "true";

Man erhält die Aktualisierungen erst nach dem erfolgreichen Abschluss der Phased-Update-Aktion.

Beispiel: Altes Verfahren beibehalten

Bei Ubuntu-Desktop-Installationen bis 20.04 wurden bei Aktualisierungen über die GUI die Phased-Updates beachtet, nicht jedoch bei der direkten Verwendung der APT-Befehle auf der Kommandozeile. Die folgende Konfigurationsdatei sollte für Ubuntu ab 22.04 das bisherige Verhalten wieder herstellen, leider funktioniert das aber nicht:

// Phased updates: Split GUI / CLI (funktioniert nicht!)
// https://wiki.ubuntuusers.de/Aktualisierungen/phased_update/
APT::Get::Always-Include-Phased-Updates "true";

Siehe auch: Howto/phased updates deaktivieren