diff --git a/CHANGELOG.md b/CHANGELOG.md index 4867a89..7e01dd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,8 +8,24 @@ Die Version steht an genau einer Stelle: `src/netmover/__init__.py`. ## [Unreleased] +## [0.2.1] – 2026-10-11 + +### Behoben +- **Update von 0.1.x auf 0.2.0 scheiterte**: Migration 0002 brach auf einer + Datenbank mit Anbindungen ab (`FOREIGN KEY constraint failed` beim Neuaufbau der + Tabelle `credentials`). Weil SQLite-Migrationen nicht in einer Transaktion liefen, + blieb dabei ein halber Zustand zurück. Migrationen laufen jetzt ohne + Fremdschlüsselprüfung, aber mit Integritätsprüfung vor dem Commit und vollständig + in einer Transaktion: Ein Abbruch hinterlässt die Datenbank unverändert. + Geprüft mit Tests auf verknüpften Daten und an einer Kopie einer echten Datenbank. +- `netmover-update` zeigt beim Zurückstufen keinen irreführenden Changelog-Auszug mehr. + ## [0.2.0] – 2026-10-11 +> ⚠️ **Nicht verwenden** – das Update von 0.1.x scheitert an Migration 0002. +> Stattdessen 0.2.1 installieren. Wer 0.2.0 schon versucht hat: Die Datenbank aus der +> Sicherung von `netmover-update` zurückspielen und auf 0.2.1 aktualisieren. + ### Hinzugefügt - **Schlüsselverwaltung** (Seite „Schlüssel“): SSH-Schlüssel erzeugen (Ed25519) oder importieren (Ed25519, ECDSA, RSA ≥ 2048 Bit; OpenSSH/PEM, auch mit Passphrase), @@ -149,7 +165,8 @@ 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.2.0...HEAD +[Unreleased]: https://git.wilde-server.de/florian.wilde/netmover/compare/v0.2.1...HEAD +[0.2.1]: https://git.wilde-server.de/florian.wilde/netmover/compare/v0.2.0...v0.2.1 [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 diff --git a/DEVLOG.md b/DEVLOG.md index 78398d8..46861fb 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -14,10 +14,40 @@ Zeiten in Ortszeit (Europe/Berlin). | 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 | 21:36 | 22:05 | 0:29 | – | Praxistest auf VM, Release 0.1.1 | -| **Summe** | | | **1:35** | | | +| 2026-10-10 | 22:45 | 23:00 | 0:15 | – | Echtes NAS/Paperless anbinden | +| 2026-10-10 | 23:31 | 23:58 | 0:27 | – | Schlüsselverwaltung, Update-Skript, 0.2.x | +| **Summe** | | | **2:17** | | | --- +## 2026-10-10 · 23:31–23:58 · Schlüsselverwaltung, Update-Skript, Releases 0.2.0/0.2.1 + +**Erledigt** +- Schlüsselverwaltung (`keys.py`, Seite „Schlüssel“, Auswahl in SFTP-Anbindungen), + Migration 0002 (`credentials.managed`, `mounts.username`). +- `deploy/update.sh` → `netmover-update`: Tags holen, Sicherung (SQLite-Online- + Backup + Schlüssel + env), Checkout, `install.sh`, Healthcheck, Rückweg-Anleitung. +- VM auf Git-Klon `/opt/netmover/src` umgestellt (Repo ist öffentlich lesbar). + +**Zwischenfall beim Update der VM auf 0.2.0** +- Migration 0002 scheiterte: `FOREIGN KEY constraint failed` bei `DROP TABLE + credentials` (Alembic-Batch baut die Tabelle neu; `foreign_keys=ON`, und die + Anbindungen verweisen darauf). Danach crashte jeder Neustart an der + übriggebliebenen `_alembic_tmp_credentials` (DDL lief ohne Transaktion). +- `netmover-update` hat den Fehler erkannt und die Rückweg-Befehle genannt. + Sicherung zurückgespielt, mit `netmover-update v0.1.1` zurückgestuft – in + ~1 Minute wieder lauffähig, NAS-Mount blieb durchgehend eingehängt. +- Ursache, warum die Tests es nicht fanden: Migrationen wurden nur auf **leeren** + Datenbanken getestet. Neu: `tests/test_migrations.py` mit verknüpften Daten und + mit Abbruch mitten in der Migration (Datenbank muss unverändert bleiben). +- Fix: eigene Migrationsverbindung (FK aus, `BEGIN IMMEDIATE`, `transactional_ddl`, + `foreign_key_check` vor dem Commit). Vor dem Release an einer Kopie der echten + Datenbank auf der VM geprüft. +- Tag v0.2.0 bleibt (veröffentlicht), im Changelog als „nicht verwenden“ markiert. + +**Lehre** +- Jede künftige Migration bekommt einen Test auf einer befüllten Datenbank. + ## 2026-10-10 · 21:36–22:05 · Praxistest auf der Debian-13-VM, Release 0.1.1 **Umgebung** diff --git a/compose.yml b/compose.yml index a09fbeb..e74a2e1 100644 --- a/compose.yml +++ b/compose.yml @@ -4,7 +4,7 @@ services: netmover: build: . - image: netmover:0.2.0 + image: netmover:0.2.1 container_name: netmover restart: unless-stopped cap_add: diff --git a/src/netmover/__init__.py b/src/netmover/__init__.py index 1e0ec26..7b860e0 100644 --- a/src/netmover/__init__.py +++ b/src/netmover/__init__.py @@ -1,3 +1,3 @@ """NetMover – NFS/SMB-Mounts verwalten und Dateien zeitgesteuert verschieben.""" -__version__ = "0.2.0" +__version__ = "0.2.1"