linux-suse-opensuse package-management rpm deltarpm optimization bandwidth

DeltaRPM: Efficient Updates on SUSE (Artikel 131)

Optimierung von Software-Updates mittels DeltaRPM. Erfahren Sie, wie SUSE Bandbreite spart, indem nur die Differenzen zwischen Paketversionen übertragen werden.

# DeltaRPM: Bandbreite sparen durch binäre Differenzen

TL;DR / Management Summary In Umgebungen mit schmaler Internetanbindung oder hunderten Servern ist Bandbreite ein kostbares Gut. DeltaRPM (DRPM) ist die Lösung von SUSE: Anstatt das gesamte neue Paket (z.B. 100MB) herunterzuladen, wird nur die Differenz zum installierten Paket (z.B. 5MB) übertragen. Auf dem Zielsystem wird daraus das neue RPM rekonstruiert. Ein Senior Admin muss den Trade-off kennen: Weniger Download-Zeit bedeutet höhere CPU-Last während der Rekonstruktion.


# 1. Einführung & Architektur

Das Patch-Prinzip auf Binärebene.

DeltaRPM nutzt das Tool applydelta-rpm, um aus einem installierten Paket und einer Delta-Datei ein neues RPM zu bauen.

# Der Update-Fluss (Mermaid)

graph LR
    A[Repo: New Package 2.0 - 100MB]
    B[Repo: Delta 1.0 to 2.0 - 5MB]
    C[Server: Installed 1.0]
    D[Admin: zypper up] -->|Check Local| C
    D -->|Decision| E{Bandwidth vs CPU?}
    E -->|Download| B
    B --> F[Reconstruction: 1.0 + Delta = 2.0]
    F --> G[RPM Install: 2.0]
    G --> H[Update DB]

# 2. DeltaRPM in Zypper steuern

Den Standard anpassen.

Standardmäßig ist DeltaRPM in SUSE aktiviert, wenn die Repositories diese anbieten.

# Status prüfen

Datei: /etc/zypp/zypp.conf

##
## Ob DeltaRPMs genutzt werden sollen
##
download.use_deltarpm = true

# Manuelle Steuerung via CLI

Wenn Sie die CPU-Last minimieren wollen (z.B. auf einem schwachen ARM-Node):

# Deaktiviere DeltaRPM für diese Transaktion
sudo zypper up --no-deltarpm

# 3. Voraussetzungen für Erfolg

Wann funktioniert DeltaRPM?

Damit DeltaRPM funktioniert, müssen drei Bedingungen erfüllt sein:

  1. Repository-Support: Der Mirror-Server muss .drpm Dateien bereitstellen.
  2. Versions-Abstand: Das Delta funktioniert meist nur von der direkten Vorversion. Wenn Sie 2 Jahre nicht geupdatet haben, wird das volle RPM geladen.
  3. Integrität: Das installierte RPM muss unverändert sein.

# 4. Day-2 Operations: Leistung messen

Hat es sich gelohnt?

Achten Sie beim nächsten zypper up auf den Output. Zypper zeigt an, wie viel Bandbreite gespart wurde:

(1/1) Installing: bash-5.1.16-150400.4.12.1.x86_64 ... [done]
Delta RPMs applied: 4.2 MiB saved (92%)

# 5. Troubleshooting & “War Stories”

Wenn das Puzzle nicht zusammenpasst.

# Story 1: “Der CPU-Spike im RZ”

Symptom: Während eines nächtlichen Massen-Updates via Ansible steigt die CPU-Last aller virtuellen Hosts gleichzeitig auf 100% an, was den Hypervisor stresst. Ursache: Alle Server rekonstruieren gleichzeitig große Pakete (z.B. Kernel oder LibreOffice) aus DeltaRPMs. Lösung: Deaktivieren Sie DeltaRPMs für Cloud-Instanzen oder VMs auf überbuchten Hosts in der zypp.conf, da der Download im schnellen internen Netz meist günstiger ist als die CPU-Last.

# Story 2: “Reconstruction Failed”

Symptom: Zypper meldet “Failed to apply delta” und lädt danach das volle RPM herunter. Ursache: Die installierte Binärdatei wurde verändert (z.B. durch ein Prelink-Tool oder eine manuelle Änderung am Binary). Die Prüfsumme passt nicht zum Delta-Algorithmus. Lösung: Keine Aktion nötig, Zypper heilt sich selbst durch den Full-Download. Prüfen Sie jedoch, warum Systemdateien verändert wurden (Sicherheits-Check!).


# 6. Fazit & Empfehlung

  • IoT & Edge: DeltaRPM ist ein Segen für Systeme an LTE/Satelliten-Anbindungen.
  • High-End Server: Hier kann man DeltaRPM oft abschalten, um die Update-Zeit (Downtime) zu verkürzen.
  • Wahl: Lassen Sie es im Standard an, es sei denn, Sie haben spezifische Performance-Probleme beim Patching.

# Anhang: Cheatsheet

Aufgabe Befehl / Parameter
DRPM global aus download.use_deltarpm = false in zypp.conf
DRPM Tool manuell applydeltarpm <old_rpm> <delta_rpm> <new_rpm>
Delta-Infos sehen zypper info --drpms <paketname>
Download-Check zypper up --download-only
Paket-Vergleich deltarpm -v <delta_file>