Feat: Fügt Paketdefinitionen für Fedora/RPM und Arch/Makepkg hinzu und aktualisiert Dokumentation
This commit is contained in:
Generated
+6
@@ -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
@@ -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" = "*" }
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user