chore(release): 0.2.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d46b1ba5c5
commit
fef90fc059
+19
-3
@@ -8,11 +8,26 @@ Die Version steht an genau einer Stelle: `src/netmover/__init__.py`.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [0.2.0] – 2026-10-11
|
||||
|
||||
### Hinzugefügt
|
||||
- **Schlüsselverwaltung** (Seite „Schlüssel“): SSH-Schlüssel erzeugen (Ed25519) oder
|
||||
importieren (Ed25519, ECDSA, RSA ≥ 2048 Bit; OpenSSH/PEM, auch mit Passphrase),
|
||||
Fingerabdruck und `authorized_keys`-Zeile mit SFTP-Beschränkung zum Kopieren,
|
||||
Umbenennen, Löschen nur wenn unbenutzt. Private Schlüssel werden nie angezeigt.
|
||||
- SFTP-Anbindungen können einen gespeicherten Schlüssel auswählen; der Benutzername
|
||||
gehört zur Anbindung (Migration 0002: `credentials.managed`, `mounts.username`).
|
||||
- **`netmover-update`**: Update aus dem Git-Repo mit Sicherung von Datenbank,
|
||||
Schlüsseln und Einstellungen, Changelog-Auszug, Neustart und Healthcheck;
|
||||
Versionswahl, Warnung beim Zurückstufen.
|
||||
- Installation als Git-Klon unter `/opt/netmover/src`; `install.sh` installiert
|
||||
`git` und das Update-Skript.
|
||||
|
||||
### Geändert
|
||||
- SFTP-Anbindungen gelten nach erfolgreichem Test als „erreichbar“ (vorher bis
|
||||
zum ersten Regellauf „nicht geprüft“).
|
||||
- Klartext-Hinweis bei `mount error(95)` (keine gemeinsame SMB-Version) mit
|
||||
Synology-Einstellung; aufgefallen bei der Anbindung des echten NAS.
|
||||
- SFTP-Anbindungen gelten nach erfolgreichem Test als „erreichbar“ (vorher bis
|
||||
zum ersten Regellauf „nicht geprüft“).
|
||||
|
||||
## [0.1.1] – 2026-10-10
|
||||
|
||||
@@ -134,6 +149,7 @@ Erste Version.
|
||||
- Löschen von Zugangsdaten, die noch von einem Mount benutzt werden, trennt den
|
||||
Mount nicht mehr stillschweigend ab, sondern wird von der Datenbank abgelehnt.
|
||||
|
||||
[Unreleased]: https://git.wilde-server.de/florian.wilde/netmover/compare/v0.1.1...HEAD
|
||||
[Unreleased]: https://git.wilde-server.de/florian.wilde/netmover/compare/v0.2.0...HEAD
|
||||
[0.2.0]: https://git.wilde-server.de/florian.wilde/netmover/compare/v0.1.1...v0.2.0
|
||||
[0.1.1]: https://git.wilde-server.de/florian.wilde/netmover/compare/v0.1.0...v0.1.1
|
||||
[0.1.0]: https://git.wilde-server.de/florian.wilde/netmover/releases/tag/v0.1.0
|
||||
|
||||
@@ -47,15 +47,36 @@ heißt deshalb immer **kopieren, prüfen, dann erst die Quelle löschen**:
|
||||
|
||||
```bash
|
||||
apt install -y git
|
||||
git clone https://git.wilde-server.de/florian.wilde/netmover.git
|
||||
cd netmover
|
||||
sudo ./deploy/install.sh
|
||||
git clone https://git.wilde-server.de/florian.wilde/netmover.git /opt/netmover/src
|
||||
cd /opt/netmover/src && git checkout "$(git tag -l 'v*' --sort=-v:refname | head -n 1)"
|
||||
./deploy/install.sh
|
||||
```
|
||||
|
||||
Das Skript installiert `python3-venv`, `cifs-utils` und `nfs-common` und richtet
|
||||
NetMover in `/opt/netmover/venv` ein. Danach installiert es
|
||||
[`deploy/netmover.service`](deploy/netmover.service) und startet den Dienst.
|
||||
Ein Update ist derselbe Aufruf nach einem `git pull`.
|
||||
Das Skript installiert `python3-venv`, `cifs-utils`, `nfs-common` und `git`. Es
|
||||
richtet NetMover in `/opt/netmover/venv` ein, installiert
|
||||
[`deploy/netmover.service`](deploy/netmover.service) und das Update-Skript
|
||||
`netmover-update` und startet den Dienst.
|
||||
|
||||
### Update
|
||||
|
||||
```bash
|
||||
netmover-update # auf die neueste Version
|
||||
netmover-update --list # verfügbare Versionen
|
||||
netmover-update v0.2.0 # bestimmte Version
|
||||
```
|
||||
|
||||
`netmover-update` geht so vor:
|
||||
1. Neue Versions-Tags aus Gitea holen und die Änderungen laut Changelog anzeigen.
|
||||
2. **Datenbank, `secret.key` und Einstellungen nach `/var/backups/netmover/` sichern**
|
||||
(die letzten 10 bleiben).
|
||||
3. Die Version auschecken, installieren und den Dienst neu starten. Neue
|
||||
Datenbank-Migrationen laufen dabei automatisch.
|
||||
4. `/healthz` prüfen.
|
||||
|
||||
Die Mounts bleiben die ganze Zeit eingehängt. Geht etwas schief, nennt das Skript
|
||||
die Befehle, um die Sicherung zurückzuspielen und zur vorherigen Version zu wechseln.
|
||||
**Zurückstufen** auf eine ältere Version geht nur mit der Datenbank-Sicherung von
|
||||
vor dem Update, wenn das Update eine Migration enthielt; das Skript fragt deshalb nach.
|
||||
|
||||
Was wo liegt:
|
||||
|
||||
@@ -149,11 +170,18 @@ Lege in NetMover die *Anbindung → Neue Anbindung* an:
|
||||
| Typ | SFTP (nur Ziel) |
|
||||
| Server / SSH-Port | IP des LXC / `22` |
|
||||
| Freigabe / Pfad | `/opt/paperless_data/consume` |
|
||||
| Anmeldeart | SSH-Schlüssel (NetMover erzeugt ihn) |
|
||||
| Anmeldeart | SSH-Schlüssel |
|
||||
| Schlüssel | einen gespeicherten Schlüssel wählen (siehe unten) oder „neuer Schlüssel nur für diese Anbindung“ |
|
||||
| Benutzername | `paperless` (der Benutzer, unter dem Paperless läuft) |
|
||||
|
||||
Nach dem Speichern zeigt NetMover den **öffentlichen Schlüssel**. Trage ihn im LXC
|
||||
ein, und zwar so, dass der Schlüssel **nur SFTP** darf:
|
||||
**Schlüsselverwaltung:** Unter *Schlüssel* erzeugst du Ed25519-Schlüssel oder
|
||||
importierst vorhandene (Ed25519, ECDSA, RSA ≥ 2048 Bit; OpenSSH- oder PEM-Format,
|
||||
auch mit Passphrase). Ein Schlüssel kann von mehreren Anbindungen genutzt werden; den
|
||||
Benutzernamen legt jede Anbindung selbst fest. Private Schlüssel liegen verschlüsselt
|
||||
in der Datenbank und werden nie angezeigt. Die Seite zeigt den Fingerabdruck und eine
|
||||
fertige `authorized_keys`-Zeile zum Kopieren.
|
||||
|
||||
Trage den öffentlichen Schlüssel im LXC so ein, dass er **nur SFTP** darf:
|
||||
|
||||
```bash
|
||||
# im Paperless-LXC als root
|
||||
@@ -389,7 +417,7 @@ Aufbau:
|
||||
| `mounting/` | `MountBackend` (Linux/Fake), Mount-Verwaltung, Test, Wiederherstellung, SFTP |
|
||||
| `mover/` | Scan, Stabilität, atomares Schreiben, Kollisionen, Buchführung, Regellauf |
|
||||
| `runs.py`, `scheduler.py`, `health.py`, `notify.py` | Protokoll, Zeitsteuerung, Gesundheit, Webhook |
|
||||
| `admin.py`, `transfer.py`, `web/` | Formulare, Export/Import, Oberfläche |
|
||||
| `admin.py`, `keys.py`, `transfer.py`, `web/` | Formulare, Schlüsselverwaltung, Export/Import, Oberfläche |
|
||||
|
||||
Die gesamte Mover-Logik ist mit dem `FakeMountBackend` ohne root testbar. SFTP
|
||||
wird gegen einen echten SFTP-Server im Testprozess getestet.
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
services:
|
||||
netmover:
|
||||
build: .
|
||||
image: netmover:0.1.1
|
||||
image: netmover:0.2.0
|
||||
container_name: netmover
|
||||
restart: unless-stopped
|
||||
cap_add:
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
"""NetMover – NFS/SMB-Mounts verwalten und Dateien zeitgesteuert verschieben."""
|
||||
|
||||
__version__ = "0.1.1"
|
||||
__version__ = "0.2.0"
|
||||
|
||||
Reference in New Issue
Block a user