• v1.0.0-rc8 b78a6fb51c

    V1 Release Candidate 8 — Datei- und Ordnerwiederherstellung
    Some checks failed
    CI / Backend (Go) (push) Failing after 32s
    CI / Frontend (React/TypeScript) (push) Successful in 46s
    CI / Sicherheitsprüfungen (push) Successful in 28s
    Pre-Release

    jf released this 2026-08-18 13:55:52 +00:00 | 2 commits to main since this release

    Wiederherstellung von Dateien und Ordnern mit Auswahl statt Textfeld — und die Erklärung, warum vorher gar keine Wiederherstellung funktionierte.

    Warum keine Wiederherstellung ging

    Nicht die Rechte des Zielverzeichnisses, sondern die Härtung des Dienstes: Er läuft mit ProtectSystem=strict und ReadWritePaths nur auf Repository und Sicherungsordner. Jedes Ziel außerhalb endete mit mkdir: permission denied — und zwar nach der Vorabprüfung, an der unangenehmsten Stelle.

    /tmp scheiterte anders: Mit PrivateTmp=yes hat der Dienst ein eigenes /tmp. Was dort landet, ist von außen unsichtbar.

    Ort Ergebnis
    /srv/syncova-restore ✓ von setup.sh angelegt und eingetragen
    weitere aus --wiederherstellungsziel ✓
    /tmp/… ✗ privater Namensraum, von außen unsichtbar
    /etc, /usr, /var/lib, /root … ✗ vom Zielschutz gesperrt
    alles andere ✗ schreibgeschützt durch ProtectSystem=strict

    Der Ort liegt unter /srv, weil /var/lib auf der Sperrliste des Zielschutzes steht — beide Regeln zugleich zu erfüllen lässt genau /srv übrig.

    Auswahl statt Textfeld

    • Ordnerbaum für das Ziel. Er meldet je Verzeichnis, ob der Dienst dort schreiben darf — gemessen durch eine Probedatei, nicht aus den Rechtebits abgeleitet. Unter ProtectSystem=strict sagen die Bits nichts über den Namensraum aus. Gesperrte Orte werden gezeigt, nicht versteckt: Sonst bliebe offen, warum ein Pfad fehlt.
    • Browser für den Backup-Inhalt. Ordner und einzelne Dateien lassen sich zurückholen. Der Baum entsteht aus den Pfaden, nicht aus Verzeichniseinträgen — ein Manifest kann eine Datei enthalten, deren Elternordner nicht als eigener Eintrag vorliegt, und wer nur directory-Einträge auflistet, verliert ganze Teilbäume.

    Zwei neue Endpunkte, der eingefrorene Vertrag ist entsprechend erweitert: GET /filesystem/browse und GET /backups/{id}/contents.

    Behoben

    „can't access property toLocaleString, chunks_checked is undefined" beim Integritätslauf. Die Ergebnisse liegen unter details, und die Felder heißen missing_chunks/corrupted_chunks, nicht umgekehrt. Betrifft alle vier Prüfendpunkte — sie tragen dieselbe Hülle.

    Derselbe Fehler wie zuvor bei /retention-policies: die Antwortform angenommen statt geprüft. Alle konsumierten Endpunkte sind jetzt gegen den laufenden Dienst abgeglichen.

    Geist Mono liegt im Paket

    Drei Schnitte, 128 KB, OFL-Lizenz dabei. Ausgeliefert vom eigenen Ursprung — das verlangt die CSP, und ein Backup-Server, dessen Oberfläche von der Erreichbarkeit eines CDN abhängt, wäre auch ohne CSP falsch. font-display: swap, damit der Text sofort steht.

    Nachgewiesen

    Gegen Debian 12 mit echtem PostgreSQL und nginx: Vollwiederherstellung (5 Dateien), nur ein Ordner (2 Dateien), nur eine Datei (1 Datei) — alle drei bitgenau. Der Server nennt /srv/syncova-restore als beschreibbar und /etc, /usr, /var als gesperrt.

    Aktualisieren

    sudo /opt/syncova/update.sh
    

    Bei einer bestehenden Installation fehlt die Wiederherstellungsfläche, weil sie erst setup.sh anlegt. Nachholen:

    sudo install -d -m 0750 -o syncova -g syncova /srv/syncova-restore
    sudo systemctl edit syncova-api      # ReadWritePaths= um /srv/syncova-restore ergänzen
    sudo systemctl restart syncova-api
    

    Bekannte Grenze

    Eine Auswahl je Lauf, kein Mehrfachhaken. Eine Liste ausgewählter Pfade kennt die API nicht; mehrere Läufe hintereinander ergäben mehrere Ausgänge, und ein „teilweise fehlgeschlagen" ließe sich dann nicht mehr erklären.


    Unverändert offen: Windows-Dienst, systemd-Einheit des Agenten und der Proxmox-Bootmeilenstein sind gebaut, aber nie auf echter Hardware gefahren.

    Downloads