Feat: Fügt Paketdefinitionen für Fedora/RPM und Arch/Makepkg hinzu und aktualisiert Dokumentation

This commit is contained in:
2026-08-23 00:39:09 +02:00
parent 739877c24b
commit 3e2c7af0cb
5 changed files with 304 additions and 7 deletions
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RsVcsConfiguration">
<option name="rustFmt" value="true" />
</component>
</project>
+24 -5
View File
@@ -4,9 +4,9 @@ version = "0.1.0"
edition = "2024"
authors = ['DragonSlayer_14']
readme = "README.md"
license-file = "LICENSE"
repository = "https://gitea.creative-dragonslayer.de/Linuxapps/SmartMount"
description = ""
license = "GPL-3.0-or-later"
repository = "https://gitea.creative-dragonslayer.de/Linuxapps/DockerUpdate"
description = "Automatisches Aktualisieren von Docker-Compose-Anwendungen in /var/apps mit :latest-Images"
[dependencies]
time = { version="0.3.41", features = ["formatting", "macros", "local-offset"] }
@@ -19,8 +19,27 @@ libc = "1.0.0-alpha.1"
debug = "none"
[package.metadata.deb]
name = "docker-update"
maintainer = "DragonSlayer_14"
copyright = "2026 Linuxapps"
section = "utils"
priority = "optional"
depends = "$auto, sudo, docker.io | docker-ce"
extended-description = """\
DockerUpdate durchsucht Verzeichnisse (standardmäßig in /var/apps) nach
Docker-Compose-Dateien mit ':latest'-Images, prüft auf neuere Images,
lädt diese herunter und startet die betroffenen Container automatisch neu.\
"""
assets = [
["target/release/docker-update", "usr/bin/docker-update", "755"],
["README.md", "usr/share/doc/docker-update/README.md", "644"],
["LICENSE", "usr/share/doc/docker-update/copyright", "644"],
]
provides = ["docker-update"]
depends = ["$auto"]
[package.metadata.generate-rpm]
assets = [
{ source = "target/release/docker-update", dest = "/usr/bin/docker-update", mode = "755" },
{ source = "README.md", dest = "/usr/share/doc/docker-update/README.md", mode = "644", doc = true },
{ source = "LICENSE", dest = "/usr/share/licenses/docker-update/LICENSE", mode = "644", license = true },
]
requires = { "sudo" = "*", "docker" = "*" }
+192 -2
View File
@@ -1,3 +1,193 @@
# DockerUpdater
# DockerUpdate (`docker-update`)
Hilft dabei installierte Anwendungen über docker-compose.yaml in /var/apps aktuell zu halten.
`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 (x86_64, aarch64)
- **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+)
---
## Manuelle Installation (Build from Source)
```bash
# 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:
```bash
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`)
```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`](https://github.com/kornelski/cargo-deb) erstellt werden:
```bash
# 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_0.1.0-1_amd64.deb
```
Die Paketkonfiguration und Abhängigkeiten (`sudo`, `docker.io | docker-ce`) sind in `Cargo.toml` unter
`[package.metadata.deb]` definiert.
---
### 2. Arch Linux (`PKGBUILD`)
Für Arch Linux liegt ein `PKGBUILD` im Verzeichnis `packaging/arch/` bereit:
```bash
cd packaging/arch
# Paket bauen und installieren
makepkg -si
```
Alternativ kann das Binary auch manuell mit `pacman -U <paketdatei>.pkg.tar.zst` installiert werden.
---
### 3. Fedora / RHEL / CentOS (`.rpm`)
Für RPM-basierte Distributionen gibt es zwei Möglichkeiten:
#### Option A: Mit `cargo-generate-rpm`
```bash
# cargo-generate-rpm installieren
cargo install cargo-generate-rpm
# Release bauen und RPM erzeugen
cargo build --release
cargo generate-rpm
# Installation des erstellten RPM-Pakets
sudo dnf install target/generate-rpm/docker-update-0.1.0-1.*.rpm
```
#### Option B: Mit `rpmbuild` und Spec-Datei
Die RPM-Spec-Datei befindet sich in `packaging/fedora/docker-update.spec`:
```bash
# Erforderliche Build-Werkzeuge installieren
sudo dnf install rpm-build
# Paket über rpmbuild erstellen
rpmbuild -ba packaging/fedora/docker-update.spec
```
---
## 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`:
```bash
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:
```bash
sudo crontab -e
```
Füge folgende Zeile ein:
```cron
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](LICENSE).
+40
View File
@@ -0,0 +1,40 @@
# Maintainer: DragonSlayer_14
pkgname=docker-update
pkgver=0.1.0
pkgrel=1
pkgdesc="Automatisches Aktualisieren von Docker-Compose-Anwendungen in /var/apps mit :latest-Images"
arch=('x86_64' 'aarch64')
url="https://gitea.creative-dragonslayer.de/Linuxapps/DockerUpdate"
license=('GPL-3.0-or-later')
depends=('gcc-libs' 'glibc' 'sudo' 'docker')
optdepends=('docker-compose: Unterstützung für Docker Compose v1')
makedepends=('cargo')
source=("$pkgname-$pkgver.tar.gz::$url/archive/v$pkgver.tar.gz")
sha256sums=('SKIP')
prepare() {
cd "$srcdir/$pkgname-$pkgver" 2>/dev/null || cd "$srcdir/$pkgname" 2>/dev/null || cd "$srcdir"
export RUSTUP_TOOLCHAIN=stable
cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')" 2>/dev/null || cargo fetch || true
}
build() {
cd "$srcdir/$pkgname-$pkgver" 2>/dev/null || cd "$srcdir/$pkgname" 2>/dev/null || cd "$srcdir"
export RUSTUP_TOOLCHAIN=stable
export CARGO_TARGET_DIR=target
cargo build --frozen --release --all-targets 2>/dev/null || cargo build --release
}
check() {
cd "$srcdir/$pkgname-$pkgver" 2>/dev/null || cd "$srcdir/$pkgname" 2>/dev/null || cd "$srcdir"
export RUSTUP_TOOLCHAIN=stable
cargo test --frozen 2>/dev/null || cargo test
}
package() {
cd "$srcdir/$pkgname-$pkgver" 2>/dev/null || cd "$srcdir/$pkgname" 2>/dev/null || cd "$srcdir"
install -Dm755 "target/release/$pkgname" "$pkgdir/usr/bin/$pkgname"
install -Dm644 "LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -Dm644 "README.md" "$pkgdir/usr/share/doc/$pkgname/README.md"
}
+42
View File
@@ -0,0 +1,42 @@
Name: docker-update
Version: 0.1.0
Release: 1%{?dist}
Summary: Automatisches Aktualisieren von Docker-Compose-Anwendungen in /var/apps mit :latest-Images
License: GPL-3.0-or-later
URL: https://gitea.creative-dragonslayer.de/Linuxapps/DockerUpdate
Source0: %{name}-%{version}.tar.gz
BuildRequires: cargo
BuildRequires: rust
Requires: sudo
Requires: (docker or moby-engine or docker-ce)
Suggests: (docker-compose or docker-compose-plugin)
%description
DockerUpdate durchsucht Verzeichnisse (standardmäßig in /var/apps) nach
Docker-Compose-Dateien mit ':latest'-Images, prüft auf neuere Images,
lädt diese herunter und startet die betroffenen Container automatisch neu.
%prep
%autosetup
%build
cargo build --release
%check
cargo test
%install
install -D -p -m 0755 target/release/%{name} %{buildroot}%{_bindir}/%{name}
install -D -p -m 0644 README.md %{buildroot}%{_docdir}/%{name}/README.md
install -D -p -m 0644 LICENSE %{buildroot}%{_licensedir}/%{name}/LICENSE
%files
%license LICENSE
%doc README.md
%{_bindir}/%{name}
%changelog
* Sun Aug 23 2026 DragonSlayer_14 <dragonslayer@creative-dragonslayer.de> - 0.1.0-1
- Erstveröffentlichung von docker-update