chore(release): 0.1.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
4f9c5bdc1d
commit
87fda7bc94
+31
-1
@@ -8,6 +8,35 @@ Die Version steht an genau einer Stelle: `src/netmover/__init__.py`.
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.1.1] – 2026-10-10
|
||||||
|
|
||||||
|
Korrekturen aus dem ersten Praxistest auf einer Debian-13-VM mit echten
|
||||||
|
SMB-, NFS- und SFTP-Servern.
|
||||||
|
|
||||||
|
### Behoben
|
||||||
|
- **systemd-Unit:** `ProtectSystem`, `PrivateTmp` und `ProtectControlGroups`
|
||||||
|
gaben dem Dienst einen eigenen Mount-Namespace. Die Mounts waren für das System
|
||||||
|
und andere Programme unsichtbar und verschwanden bei jedem Neustart des Dienstes
|
||||||
|
(`MountFlags=shared` half nicht). Jetzt nur noch Härtungen ohne Namespace.
|
||||||
|
- **Stabilitätsprüfung:** CIFS lieferte per `stat()` sekundenlang eine veraltete
|
||||||
|
Größe einer noch wachsenden Datei. Gemessen wird jetzt per `open()` + `fstat()`,
|
||||||
|
das erzwingt frische Attribute. Gesperrte Dateien gelten als „in Benutzung“.
|
||||||
|
(Die zweite Sicherung, die Byte-Zählung beim Kopieren, hatte den Fall bereits
|
||||||
|
abgefangen; es kam keine unvollständige Datei an.)
|
||||||
|
- **Ausfall länger als die Wiederherstellung (z. B. NAS-Neustart, Stromausfall):**
|
||||||
|
Von NetMover selbst ausgehängte Anbindungen mit „automatisch einhängen“ werden
|
||||||
|
jetzt jede Minute erneut eingehängt, auch wenn das Einhängen schon beim
|
||||||
|
Dienststart scheiterte. Entwarnung per Webhook. Von außen ausgehängte Anbindungen
|
||||||
|
bleiben weiterhin unangetastet.
|
||||||
|
- Bei einer Zeitüberschreitung von `mount` wird die ganze Prozessgruppe beendet, damit
|
||||||
|
`mount.nfs` nicht später doch noch einhängt.
|
||||||
|
- Hinweistexte zu `mount`-Fehlern werden nicht mehr mitgeschwärzt.
|
||||||
|
- `install.sh` ohne `debconf`-Warnungen, wenn kein Terminal angeschlossen ist.
|
||||||
|
|
||||||
|
### Dokumentation
|
||||||
|
- Fehlersuche: verzögert sichtbare Dateien auf CIFS → `nohandlecache`.
|
||||||
|
- README erklärt, warum die Unit keine Namespace-Härtung nutzt.
|
||||||
|
|
||||||
## [0.1.0] – 2026-10-10
|
## [0.1.0] – 2026-10-10
|
||||||
|
|
||||||
Erste Version.
|
Erste Version.
|
||||||
@@ -99,5 +128,6 @@ Erste Version.
|
|||||||
- Löschen von Zugangsdaten, die noch von einem Mount benutzt werden, trennt den
|
- Löschen von Zugangsdaten, die noch von einem Mount benutzt werden, trennt den
|
||||||
Mount nicht mehr stillschweigend ab, sondern wird von der Datenbank abgelehnt.
|
Mount nicht mehr stillschweigend ab, sondern wird von der Datenbank abgelehnt.
|
||||||
|
|
||||||
[Unreleased]: https://git.wilde-server.de/florian.wilde/netmover/compare/v0.1.0...HEAD
|
[Unreleased]: https://git.wilde-server.de/florian.wilde/netmover/compare/v0.1.1...HEAD
|
||||||
|
[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
|
[0.1.0]: https://git.wilde-server.de/florian.wilde/netmover/releases/tag/v0.1.0
|
||||||
|
|||||||
@@ -13,10 +13,55 @@ Zeiten in Ortszeit (Europe/Berlin).
|
|||||||
| 2026-10-10 | 19:10 | 19:17 | 0:07 | 4 | Scheduler, Protokoll, Benachrichtigung |
|
| 2026-10-10 | 19:10 | 19:17 | 0:07 | 4 | Scheduler, Protokoll, Benachrichtigung |
|
||||||
| 2026-10-10 | 19:18 | 19:34 | 0:16 | 5 | Weboberfläche und Anmeldung |
|
| 2026-10-10 | 19:18 | 19:34 | 0:16 | 5 | Weboberfläche und Anmeldung |
|
||||||
| 2026-10-10 | 19:40 | 19:50 | 0:10 | 6 | Deployment, README, Release 0.1.0 |
|
| 2026-10-10 | 19:40 | 19:50 | 0:10 | 6 | Deployment, README, Release 0.1.0 |
|
||||||
| **Summe** | | | **1:06** | | |
|
| 2026-10-10 | 21:36 | 22:05 | 0:29 | – | Praxistest auf VM, Release 0.1.1 |
|
||||||
|
| **Summe** | | | **1:35** | | |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 2026-10-10 · 21:36–22:05 · Praxistest auf der Debian-13-VM, Release 0.1.1
|
||||||
|
|
||||||
|
**Umgebung**
|
||||||
|
- KVM-VM `srv-rz-netmover` (10.0.10.223), Debian 13, Python 3.13, 2 GB RAM.
|
||||||
|
- Installation per `deploy/install.sh` aus einem `git archive` (VM ohne Gitea-Zugang).
|
||||||
|
- Vorübergehende Testserver auf der VM: Samba (nur `lo`), NFS-Exporte für
|
||||||
|
`127.0.0.1` (mit/ohne Root-Squash), SFTP-Benutzer `paperless` mit Schlüssel
|
||||||
|
`restrict,command="/usr/lib/openssh/sftp-server"`.
|
||||||
|
- Auf Wunsch `NETMOVER_HOST=0.0.0.0`, damit die Oberfläche im LAN erreichbar ist.
|
||||||
|
|
||||||
|
**Bestanden**
|
||||||
|
- Ersteinrichtung mit Code aus dem Log, Cookie-Flags.
|
||||||
|
- CIFS (Passwort mit Komma/Ausrufezeichen, Credentials-Datei danach weg), NFS 4,
|
||||||
|
NFS 3, Root-Squash-Erkennung mit Synology-Hinweis, SFTP mit TOFU (Fingerabdruck
|
||||||
|
= `ssh-keygen -lf`), echtes OpenSSH liefert `statvfs`.
|
||||||
|
- Probelauf, Kollision `scan001-1.pdf`, `.txt`/`.part` ignoriert, keine `.part`-Reste,
|
||||||
|
Eigentümer `paperless` im SFTP-Ziel.
|
||||||
|
- Langsam wachsende Datei (20 × 50 KB/s): erst nach Ende verschoben, Prüfsumme gleich.
|
||||||
|
- Kopiermodus rekursiv mit Eigentümer/Modus; zweiter Lauf „2 bereits übertragen“.
|
||||||
|
- Samba gestoppt: Lebenszeichen 15 s → gestört → 3 Versuche → Fehler, `/healthz` 503,
|
||||||
|
nichts angefasst. NFS-Server gestoppt (hängender `hard`-Mount): Oberfläche und
|
||||||
|
andere Regel liefen weiter, Rückkehr automatisch.
|
||||||
|
- Mounts überstehen Stopp/Start des Dienstes (gleiche Mount-IDs).
|
||||||
|
- Neustart der VM: NFS sofort, SMB per Neuversuch nach ~1 min, Regel läuft weiter.
|
||||||
|
|
||||||
|
**Gefunden und behoben (v0.1.1)**
|
||||||
|
1. **systemd-Unit mit eigenem Mount-Namespace** (ProtectSystem/PrivateTmp/…):
|
||||||
|
Mounts nur im Dienst sichtbar, `shared,slave`. Härtung ohne Namespace.
|
||||||
|
2. **CIFS-Attribut-Cache**: `stat()` meldete 3 s lang eine veraltete Größe einer
|
||||||
|
wachsenden Datei; die Byte-Zählung beim Kopieren fing das ab. Jetzt
|
||||||
|
`open()` + `fstat()` für beide Messungen.
|
||||||
|
3. **Nach drei gescheiterten Versuchen endgültig aufgegeben** – zu kurz für einen
|
||||||
|
NAS-Neustart, und beim Booten vor dem NAS kam die Freigabe nie zurück.
|
||||||
|
Jetzt minütlicher Neuversuch (nur für von NetMover selbst ausgehängte
|
||||||
|
Anbindungen mit `auto_mount`) plus Scheduler-Job.
|
||||||
|
4. `mount`-Zeitlimit beendete nur `mount`, nicht `mount.nfs` → später doch
|
||||||
|
eingehängt. Jetzt ganze Prozessgruppe.
|
||||||
|
5. Hinweistext wurde mitgeschwärzt; `debconf`-Warnungen in `install.sh`.
|
||||||
|
|
||||||
|
**Nicht nachstellbar**
|
||||||
|
- Einmalig 46 s Verzögerung direkt nach dem Booten (CIFS-Verzeichnis-Cache bei
|
||||||
|
lokal statt per SMB angelegter Datei). Messungen danach 9–11 s, mit und ohne
|
||||||
|
`nohandlecache`. Als Hinweis in die Fehlersuche aufgenommen.
|
||||||
|
|
||||||
## 2026-10-10 · 19:40–19:50 · Schritt 6: Deployment, README, Release 0.1.0
|
## 2026-10-10 · 19:40–19:50 · Schritt 6: Deployment, README, Release 0.1.0
|
||||||
|
|
||||||
**Erledigt**
|
**Erledigt**
|
||||||
|
|||||||
@@ -340,6 +340,7 @@ findmnt -R /mnt/netmover # was ist wirklich eingehängt?
|
|||||||
| „Hostschlüssel … hat sich geändert“ (SFTP) | Wurde der Zielserver neu aufgesetzt? Dann bei der Anbindung „Hostschlüssel zurücksetzen“ und neu testen. Sonst **nicht** verbinden. |
|
| „Hostschlüssel … hat sich geändert“ (SFTP) | Wurde der Zielserver neu aufgesetzt? Dann bei der Anbindung „Hostschlüssel zurücksetzen“ und neu testen. Sonst **nicht** verbinden. |
|
||||||
| SFTP: „Anmeldung abgelehnt“ | Öffentlicher Schlüssel fehlt in `authorized_keys`, oder Rechte von `~/.ssh` stimmen nicht (700/600, Eigentümer). |
|
| SFTP: „Anmeldung abgelehnt“ | Öffentlicher Schlüssel fehlt in `authorized_keys`, oder Rechte von `~/.ssh` stimmen nicht (700/600, Eigentümer). |
|
||||||
| Paperless bemerkt neue Dateien nicht | Ältere Paperless-Versionen: `PAPERLESS_CONSUMER_POLLING=10` setzen. |
|
| Paperless bemerkt neue Dateien nicht | Ältere Paperless-Versionen: `PAPERLESS_CONSUMER_POLLING=10` setzen. |
|
||||||
|
| Neue Dateien erscheinen erst nach bis zu 30 s | Der CIFS-Client speichert Verzeichnislisten zwischen. Gelangen Dateien nicht per SMB aufs NAS (z. B. per FTP vom Scanner), erfährt er nichts davon. Abhilfe: Zusatzoption `nohandlecache`. |
|
||||||
| Regel gelb „länger als 3 × Intervall“ | Seit dem Dreifachen des Intervalls kein erfolgreicher Lauf; Protokoll der Regel ansehen. |
|
| Regel gelb „länger als 3 × Intervall“ | Seit dem Dreifachen des Intervalls kein erfolgreicher Lauf; Protokoll der Regel ansehen. |
|
||||||
| Einrichtungscode verloren | `systemctl restart netmover` erzeugt einen neuen. |
|
| Einrichtungscode verloren | `systemctl restart netmover` erzeugt einen neuen. |
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
services:
|
services:
|
||||||
netmover:
|
netmover:
|
||||||
build: .
|
build: .
|
||||||
image: netmover:0.1.0
|
image: netmover:0.1.1
|
||||||
container_name: netmover
|
container_name: netmover
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
cap_add:
|
cap_add:
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
"""NetMover – NFS/SMB-Mounts verwalten und Dateien zeitgesteuert verschieben."""
|
"""NetMover – NFS/SMB-Mounts verwalten und Dateien zeitgesteuert verschieben."""
|
||||||
|
|
||||||
__version__ = "0.1.0"
|
__version__ = "0.1.1"
|
||||||
|
|||||||
Reference in New Issue
Block a user