chore(release): 0.1.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c8ee950514
commit
a14eb93cbb
@@ -8,6 +8,10 @@ Die Version steht an genau einer Stelle: `src/netmover/__init__.py`.
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.1.0] – 2026-10-10
|
||||||
|
|
||||||
|
Erste Version.
|
||||||
|
|
||||||
### Hinzugefügt
|
### Hinzugefügt
|
||||||
- Projektgerüst (Python ≥ 3.12, FastAPI-Stack, src-Layout, ruff, mypy strict, pytest).
|
- Projektgerüst (Python ≥ 3.12, FastAPI-Stack, src-Layout, ruff, mypy strict, pytest).
|
||||||
- Datenmodell mit SQLAlchemy 2.x: `credentials`, `mounts`, `rules`, `runs`,
|
- Datenmodell mit SQLAlchemy 2.x: `credentials`, `mounts`, `rules`, `runs`,
|
||||||
@@ -67,6 +71,13 @@ Die Version steht an genau einer Stelle: `src/netmover/__init__.py`.
|
|||||||
auch für Anbindungen, deren Wiederherstellung scheitert.
|
auch für Anbindungen, deren Wiederherstellung scheitert.
|
||||||
- Dienststart: Migration → Schlüssel → Anbindungen wiederherstellen → Scheduler;
|
- Dienststart: Migration → Schlüssel → Anbindungen wiederherstellen → Scheduler;
|
||||||
beim Beenden werden Mounts nicht ausgehängt.
|
beim Beenden werden Mounts nicht ausgehängt.
|
||||||
|
- Endname lokal per `renameat2(RENAME_NOREPLACE)`: echtes `rename` (Watcher sehen
|
||||||
|
`IN_MOVED_TO`), trotzdem nie überschreibend; Rückfall auf `link` + `unlink`.
|
||||||
|
- Deployment: systemd-Unit (`ProtectSystem=full`, `MountFlags=shared`),
|
||||||
|
Installationsskript für Debian 13, `Dockerfile` und `compose.yml` mit
|
||||||
|
`rshared`-Propagation.
|
||||||
|
- README mit Installation, Synology→Paperless-Beispiel (SMB-Quelle, SFTP-Ziel),
|
||||||
|
Docker, Reverse Proxy, Konfiguration, Fehlersuche und Sicherheitshinweisen.
|
||||||
- Weboberfläche (FastAPI, Jinja2, HTMX ohne Build-Schritt, handyfähig, Hell/Dunkel):
|
- Weboberfläche (FastAPI, Jinja2, HTMX ohne Build-Schritt, handyfähig, Hell/Dunkel):
|
||||||
Status, Anbindungen, Regeln, Protokoll, Einstellungen.
|
Status, Anbindungen, Regeln, Protokoll, Einstellungen.
|
||||||
- Ersteinrichtung mit Pflicht-Passwort (≥ 10 Zeichen) und einmaligem
|
- Ersteinrichtung mit Pflicht-Passwort (≥ 10 Zeichen) und einmaligem
|
||||||
@@ -87,3 +98,6 @@ Die Version steht an genau einer Stelle: `src/netmover/__init__.py`.
|
|||||||
Session stand (Session erkennt nur Neuzuweisungen als Änderung).
|
Session stand (Session erkennt nur Neuzuweisungen als Änderung).
|
||||||
- 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
|
||||||
|
[0.1.0]: https://git.wilde-server.de/florian.wilde/netmover/releases/tag/v0.1.0
|
||||||
|
|||||||
@@ -12,10 +12,42 @@ Zeiten in Ortszeit (Europe/Berlin).
|
|||||||
| 2026-10-10 | 18:53 | 19:07 | 0:14 | 3 | Mover-Logik |
|
| 2026-10-10 | 18:53 | 19:07 | 0:14 | 3 | Mover-Logik |
|
||||||
| 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 |
|
||||||
| **Summe** | | | **0:56** | | |
|
| 2026-10-10 | 19:40 | 19:50 | 0:10 | 6 | Deployment, README, Release 0.1.0 |
|
||||||
|
| **Summe** | | | **1:06** | | |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 2026-10-10 · 19:40–19:50 · Schritt 6: Deployment, README, Release 0.1.0
|
||||||
|
|
||||||
|
**Erledigt**
|
||||||
|
- `deploy/netmover.service`, `deploy/netmover.env`, `deploy/install.sh`,
|
||||||
|
`Dockerfile` (python:3.12-slim-trixie, mehrstufig), `compose.yml`, `.dockerignore`.
|
||||||
|
- README vollständig; `LICENSE` (MIT, wie seit Schritt 1 in `pyproject.toml`).
|
||||||
|
- Version 0.1.0, Changelog-Abschnitt, Tag `v0.1.0`.
|
||||||
|
|
||||||
|
**Geprüft**
|
||||||
|
- Wheel enthält Templates, statische Dateien und Migrationen.
|
||||||
|
- Docker-Image gebaut; Container startet, `/healthz` = 200, `mount.cifs` 7.4 und
|
||||||
|
`mount.nfs` vorhanden. **Propagation getestet:** tmpfs im Container unter
|
||||||
|
`/mnt/netmover` eingehängt → mit `rshared` auf dem Host sichtbar, ohne nicht.
|
||||||
|
- `systemd-analyze verify` der Unit ohne Beanstandung. Ein echter Start der Unit
|
||||||
|
als root (insb. `MountFlags=shared` mit `ProtectSystem`) war hier nicht möglich →
|
||||||
|
beim ersten Einsatz mit `findmnt -R /mnt/netmover` prüfen.
|
||||||
|
|
||||||
|
**Entscheidungen**
|
||||||
|
- Paperless-ngx-Consumer geprüft: nutzt `watchfiles` (`Change.added`) plus
|
||||||
|
5-Minuten-Rescan – erkennt also auch per `link()` erzeugte Dateien. Für Watcher,
|
||||||
|
die nur `IN_MOVED_TO`/`IN_CLOSE_WRITE` kennen, trotzdem auf
|
||||||
|
`renameat2(RENAME_NOREPLACE)` umgestellt (entspricht der Vorgabe `os.replace`,
|
||||||
|
ohne die Garantie „nie überschreiben“ aufzugeben).
|
||||||
|
- Härtung der Unit bewusst zurückhaltend (keine `CapabilityBoundingSet`, kein
|
||||||
|
`ProtectKernelModules`): ungetestete Einschränkungen könnten Mounten brechen
|
||||||
|
(z. B. NFS mit privilegiertem Quellport, Modul-Autoload für cifs).
|
||||||
|
- SFTP-Schlüssel im README per `restrict,command="…/sftp-server"` auf SFTP beschränkt.
|
||||||
|
|
||||||
|
**Offen für später**
|
||||||
|
- Erster Praxistest auf der Ziel-VM mit echtem Synology-NAS und Paperless-LXC.
|
||||||
|
|
||||||
## 2026-10-10 · 19:18–19:34 · Schritt 5: Weboberfläche und Anmeldung
|
## 2026-10-10 · 19:18–19:34 · Schritt 5: Weboberfläche und Anmeldung
|
||||||
|
|
||||||
**Erledigt**
|
**Erledigt**
|
||||||
|
|||||||
@@ -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.dev0"
|
__version__ = "0.1.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user