DragonSlayer_14 2af52604eb
Testing Build, Publish & Preview Release / Build, Publish Packages (Testing) & Create Preview Release (push) Skipped
Main Release & Publish / Erkenne relevante Code-Änderungen (push) Successful in 11s
Security Scans / Trivy & OSV-Scanner (push) Successful in 47s
Main Release & Publish / Build, Publish Packages (Stable) & Create Release (push) Successful in 4m43s
TruffleHog Secret Scan / TruffleHog (push) Successful in 15s
Merge pull request 'Merge testing in main: Release 1.2.3' (#32) from testing into main
Reviewed-on: #32
2026-09-13 16:01:38 +00:00
2026-08-22 21:47:56 +00:00

DockerUpdate (docker-update)

Main Release & Publish Testing Build, Publish & Preview Release

docker-update ist ein schlankes CLI-Werkzeug für Linux-Server, das Docker-Compose-basierte Applikationen automatisch auf neuere Versionen prüft, aktualisiert und neu startet.

Funktionsweise

  1. Durchsuchen von Applikationsverzeichnissen: Standardmäßig scannt docker-update alle Unterverzeichnisse in /var/apps/ (konfigurierbar) nach gültigen Compose-Dateien (docker-compose.yaml, docker-compose.yml, compose.yaml, compose.yml).
  2. Erkennung von :latest-Images: Services in den Compose-Dateien werden analysiert. Es werden gezielt Services berücksichtigt, deren Image das :latest-Tag nutzt oder implizit auf latest verweist (kein Tag angegeben).
  3. Prüfung auf neuere Images & Download: Das Programm führt für jedes betroffene Image einen docker pull durch und vergleicht die Image-IDs vor und nach dem Pull.
  4. Automatischer Neustart: Wurde ein neues Image heruntergeladen, wird die Applikation im jeweiligen Verzeichnis über docker compose up -d (mit Fallback auf docker-compose up -d) aktualisiert und neu gestartet.
  5. Bereinigung: Nach erfolgreichen Aktualisierungen werden ungenutzte Zwischen-Images automatisch mittels docker image prune -f bereinigt.
  6. Berechtigungen & Logging: Wird das Programm ohne Root-Rechte gestartet, startet es sich automatisch über sudo mit erhöhten Rechten neu. Ausgaben werden auf der Konsole formatiert und zusätzlich tagesbasiert im System-Temp-Verzeichnis protokolliert (z. B. /tmp/docker-update-.../log-YYYY-MM-DD.log).

Voraussetzungen

  • Betriebssystem: Linux (amd64 / x86_64, arm64 / aarch64, i386 / i686)
  • Laufzeit-Abhängigkeiten:
    • docker (inkl. Docker Compose Plugin docker compose oder Standalone docker-compose)
    • sudo
  • Build-Abhängigkeiten (nur zum Kompilieren/Paketieren):
    • Rust & Cargo (Rust 2024 Edition / 1.85+)

Installation aus der Gitea-Paket-Registry

Über die CI/CD-Pipelines werden bei jedem Push auf den main-Branch (Release / Stable) und testing-Branch (Preview / Testing) automatisch Pakete für Debian/Ubuntu, Fedora/RHEL und Arch Linux in der Gitea-Paket-Registry bereitgestellt.

1. Debian / Ubuntu (apt)

Stable (Produktiv)

Füge das Repository zu deinen APT-Quellen hinzu:

# Keyring installieren
sudo curl https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/debian/repository.key -o /etc/apt/keyrings/gitea-Linuxapps.asc
# Repository-Eintrag anlegen
echo "deb [signed-by=/etc/apt/keyrings/gitea-Linuxapps.asc] https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/debian stable main" | sudo tee -a /etc/apt/sources.list.d/gitea.list

# Paketliste aktualisieren und installieren
sudo apt update
sudo apt install docker-update

Testing (Vorschau / Testing)

# Keyring installieren
sudo curl https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/debian/repository.key -o /etc/apt/keyrings/gitea-Linuxapps.asc
# Testing-Repository-Eintrag anlegen
echo "deb [signed-by=/etc/apt/keyrings/gitea-Linuxapps.asc] https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/debian testing main" | sudo tee -a /etc/apt/sources.list.d/gitea.list

# Paketliste aktualisieren und installieren
sudo apt update
sudo apt install docker-update

2. RedHat / Fedora / SUSE

Stable (Produktiv)

Repository einrichten:

# auf RedHat-basierten Distributionen
dnf config-manager --add-repo https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/stable.repo

# Fedora 41+ (DNF5)
dnf config-manager addrepo --from-repofile=https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/stable.repo

# auf SUSE-basierten Distributionen
zypper addrepo https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/stable.repo

Paket installieren:

# auf RedHat-basierten Distributionen
dnf install docker-update

# auf SUSE-basierten Distributionen
zypper install docker-update

Testing (Vorschau / Testing)

Repository einrichten:

# auf RedHat-basierten Distributionen
dnf config-manager --add-repo https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/testing.repo

# Fedora 41+ (DNF5)
dnf config-manager addrepo --from-repofile=https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/testing.repo

# auf SUSE-basierten Distributionen
zypper addrepo https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/rpm/testing.repo

Paket installieren:

# auf RedHat-basierten Distributionen
dnf install docker-update

# auf SUSE-basierten Distributionen
zypper install docker-update

3. Arch Linux (pacman)

Installiere den GPG-Key für das Repository

Key herunterladen:

wget https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/arch/repository.key

ID des Keys anzeigen lassen:

gpg --show-keys repository.key

Key zu pacman hinzufügen und signieren:

pacman-key --add repository.key
pacman-key --lsign-key {key id}

{key id} = ID aus dem vorherigen Schritt

Stable (Produktiv)

Füge das Repository in /etc/pacman.conf ein:

[stable]
SigLevel = Optional TrustAll
Server = https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/arch/stable/$arch

Installiere das Paket anschließend:

sudo pacman -Sy docker-update

Testing (Vorschau / Testing)

Füge das Testing-Repository in /etc/pacman.conf ein:

[testing]
SigLevel = Optional TrustAll
Server = https://gitea.creative-dragonslayer.de/api/packages/Linuxapps/arch/testing/$arch

Installiere das Paket:

sudo pacman -Sy docker-update

Download vorgefertigter Pakete (Releases)

Alternativ können vorkompilierte Pakete (.deb, .rpm, .pkg.tar.zst) auch direkt aus den Releases heruntergeladen und manuell installiert werden:

  • Stable-Releases: Gitea Releases
  • Preview-Releases (Testing): Markiert als Vorabveröffentlichung (Pre-release) mit dem Tag v<VERSION>-preview.

Manuelle Installation (Build from Source)

# Repository klonen
git clone https://gitea.creative-dragonslayer.de/Linuxapps/DockerUpdate.git
cd DockerUpdate

# Release-Binary kompilieren
cargo build --release

# Binary ins Systemverzeichnis installieren
sudo install -m 755 target/release/docker-update /usr/bin/docker-update

Anschließend kann das Programm direkt über docker-update ausgeführt werden:

docker-update

Konfiguration

Die Konfigurationsdatei wird standardmäßig unter folgendem Pfad abgelegt:

  • Root-Ausführung: /etc/docker-update/config.toml
  • Benutzer-Ausführung: ~/.config/docker-update/config.toml

Wird keine Datei gefunden, verwendet docker-update die Standardwerte.

Beispiel-Konfiguration (config.toml)

[general]
# Verzeichnis, in dem sich die Applikationsordner mit Compose-Dateien befinden
apps_dir = "/var/apps"

# Log-Level: "error", "warn", "info", "debug"
log_level = "info"

Paketerstellung

Für gängige Linux-Distributionen stehen vorbereitete Paketierungsdefinitionen zur Verfügung.

1. Debian / Ubuntu (.deb)

Das Debian-Paket kann mithilfe von cargo-deb erstellt werden:

# cargo-deb installieren (falls noch nicht vorhanden)
cargo install cargo-deb

# Release-Build und Debian-Paket erstellen
cargo deb

# Installation des erstellten Pakets
sudo dpkg -i target/debian/docker-update_*.deb

Die Paketkonfiguration und Abhängigkeiten (sudo, docker.io | docker-ce) sind in Cargo.toml unter [package.metadata.deb] definiert.


2. Arch Linux (.pkg.tar.zst)

Die Paketmetadaten und Abhängigkeiten für Arch Linux sind direkt in Cargo.toml unter [package.metadata.arch] hinterlegt. Das Paket kann nach dem Kompilieren des Release-Builds über das Skript scripts/package-arch.py (analog zu CI/CD) erzeugt werden (optional mit --target <TRIPLE> für Cross-Builds):

# Release kompilieren
cargo build --release

# Arch Linux-Paket (.pkg.tar.zst) erstellen (Standard: Host/x86_64)
python3 scripts/package-arch.py

# Optional für spezifische Zielarchitektur:
# python3 scripts/package-arch.py --target aarch64-unknown-linux-gnu
# python3 scripts/package-arch.py --target i686-unknown-linux-gnu

# Installation des erstellten Pakets
sudo pacman -U target/arch/docker-update-*.pkg.tar.zst

3. Fedora / RHEL / CentOS (.rpm)

Das RPM-Paket wird mithilfe von cargo-generate-rpm direkt aus den Metadaten in Cargo.toml ([package.metadata.generate-rpm]) erstellt:

# cargo-generate-rpm installieren (falls noch nicht vorhanden)
cargo install cargo-generate-rpm

# Release bauen und RPM erzeugen
cargo build --release
cargo generate-rpm

# Optional für spezifische Zielarchitektur (z.B. Cross-Builds):
# mkdir -p target/generate-rpm
# cargo generate-rpm --target aarch64-unknown-linux-gnu -o target/generate-rpm
# cargo generate-rpm --target i686-unknown-linux-gnu -o target/generate-rpm

# Installation des erstellten RPM-Pakets
sudo dnf install target/generate-rpm/docker-update-*.rpm

Automatisierung (Cron)

Um docker-update regelmäßig (z. B. täglich nachts um 03:30 Uhr) automatisch auszuführen, kann ein Cronjob eingerichtet werden. Da docker-update Root-Rechte benötigt, sollte der Cronjob mit Root-Rechten ausgeführt werden.

Option A: Über /etc/cron.d/docker-update (Empfohlen für Server)

Erstelle eine Datei /etc/cron.d/docker-update:

sudo tee /etc/cron.d/docker-update << 'EOF'
# Täglich um 03:30 Uhr docker-update als root ausführen
30 3 * * * root /usr/bin/docker-update >/dev/null 2>&1
EOF

sudo chmod 644 /etc/cron.d/docker-update

Option B: Über die Root-Crontab (crontab -e)

Öffne die Crontab des Root-Benutzers:

sudo crontab -e

Füge folgende Zeile ein:

30 3 * * * /usr/bin/docker-update >/dev/null 2>&1

Lizenz

Dieses Projekt ist unter der GNU General Public License v3.0 or later (GPL-3.0-or-later) lizenziert. Weitere Informationen finden sich in der Datei LICENSE.

S
Description
Hilft dabei installierte Anwendungen über docker-compose.yaml in /var/apps aktuell zu halten.
Readme GPL-3.0
465 KiB
2026-09-13 16:06:35 +00:00
Languages
Python 59.2%
Rust 40.8%