Migration von strfry
Events eines bestehenden strfry-Relays mit einem Befehl nach nostrfy umziehen — Vorbereitung, Dry-Run, Migration, Verifizierung und Rollback.
Überblick
nostrfy migrate-strfry liest das eigene Exportformat von strfry (JSONL, ein NIP-01-Event pro Zeile), funktioniert daher über strfry-Datenbankversionen hinweg und hängt nicht vom
internen LMDB-Schema von strfry ab. Es schreibt niemals in die strfry-Datenbank.
| Migriert | Nicht migriert |
|---|---|
| Jedes gespeicherte Event (Replaceable/Addressable-Semantik angewendet) | strfry-Einstellungen ohne nostrfy-Entsprechung (der Merge-Bericht listet jede mit Grund) |
| NIP-40-Ablauf — bereits abgelaufene Events werden übersprungen | Blossom-Medien und Owner-Mappings (strfry hat keinen Blossom-Server) |
| NIP-09-Löschungen, inkl. Re-Publish-Sperren für bereits von strfry gelöschte Events | Zugriffslisten (NIP-86-Bans, Relay-Pubkey-Listen, Blossom-Allowlist) |
NIP-29 9005/9008-Moderationsnebeneffekte | NIP-43-Einladungscodes (neue mit createclaim ausstellen) |
| First-Seen-Zeitstempel (wenn das New-Pubkey-Gate konfiguriert ist) | NIP-62-Vanish-Requests, außer mit --apply-vanish |
| NIP-29-Gruppen, NIP-43-Rollen und ihre Relay-signierten Metadaten, beim ersten Start neu aufgebaut | Eigene Identität/Schlüssel des Relays (liegen in nostrfy.toml) |
Die äquivalenten strfry-Einstellungen, zum Merge in nostrfy.toml angeboten (optional) |
Erwartete Skips in der Zusammenfassung: ephemere Events (Kinds 20000-29999, die nostrfy nie speichert) und bereits abgelaufene Events.
Schnellstart
# 1. nostrfy-Relay stoppen (die Migration benötigt das Datenbankverzeichnis)
nostrfy --config /etc/nostrfy/nostrfy.toml stop
# 2. Dry-Run — parst und verifiziert jedes Event, schreibt nichts
nostrfy --config /etc/nostrfy/nostrfy.toml migrate-strfry \
--strfry-db /var/lib/strfry-db --dry-run
# 3. Import
nostrfy --config /etc/nostrfy/nostrfy.toml migrate-strfry \
--strfry-db /var/lib/strfry-db
# 4. Start — NIP-29-Gruppen und NIP-43-Rollen werden aus den importierten Events neu aufgebaut
nostrfy --config /etc/nostrfy/nostrfy.toml startVoraussetzungen
- Das
strfry-Binary (für--strfry-db) oder eine selbst exportierte JSONL-Datei. - nostrfy v0.1.15 oder neuer (das Unterkommando
migrate-strfry). - Die nostrfy-Konfiguration für das Ziel-Relay mit gesetztem
database.path,public_urlundprivate_key. - Freier Plattenplatz: etwa Größe des strfry-Exports plus Indizes. Der NIP-50-Wortindex kommt
hinzu; bei sehr knappem Platz deaktivieren (
database.search_index = false), migrieren und später wieder aktivieren (der Index wird beim Start neu aufgebaut). - Keine laufende nostrfy-Instanz auf dem Ziel-
database.path.
Konfiguration vorbereiten
[relay]
name = "My Relay"
public_url = "wss://relay.example.com" # benötigt für NIP-42/62/98 und NIP-29-Metadaten
private_key = "..." # benötigt für relay-signierte NIP-29/43-Metadaten
[server]
host = "0.0.0.0"
port = 8080
[database]
path = "/var/lib/nostrfy"
map_size = 1073741824Erzeugen Sie den Relay-Schlüssel mit nostrfy genkey, falls keiner vorhanden ist, dann validieren:
nostrfy --config /etc/nostrfy/nostrfy.toml checkstrfry-Einstellungen zusammenführen (optional)
Vor dem Öffnen der Datenbank sucht migrate-strfry nach der strfry-Konfiguration
(--strfry-config, dann $STRFRY_CONFIG, /etc/strfry.conf, ./strfry.conf), zeigt Einstellungen mit nostrfy-Entsprechung, die von Ihrer nostrfy.toml abweichen, und fragt, ob sie zusammengeführt werden sollen. Nur die gelisteten Schlüssel
werden neu geschrieben — Kommentare und alle anderen Zeilen bleiben erhalten; ein Wert, der die Konfiguration ungültig
machen würde, wird mit Grund übersprungen, der Rest wird trotzdem zusammengeführt.
--merge-configwendet ohne Nachfrage an (für Skripte);--no-merge-configüberspringt den Schritt.- Ohne Terminal werden Vorschläge gedruckt und der Merge übersprungen, außer
--merge-configist angegeben. --dry-runzeigt Vorschläge, schreibt aber nie.
Dry-Run
Erst schauen, dann springen — ein Dry-Run parst und verifiziert den gesamten Export, ohne die Datenbank zu berühren:
nostrfy migrate-strfry --strfry-db /var/lib/strfry-db --dry-runEine bad signature-Zahl ungleich null bedeutet, dass der Export Events enthält, die strfry ohne
Verifizierung akzeptiert hat; sie werden übersprungen. Wenn Sie ihnen vertrauen, mit --no-verify trotzdem importieren.
Migrieren
Einen von drei Eingabemodi wählen — alle liefern dasselbe Ergebnis:
# Option A — nostrfy führt `strfry export` selbst aus (strfry im PATH)
nostrfy migrate-strfry --strfry-db /var/lib/strfry-db
# Option B — Sie haben in eine Datei exportiert
strfry export > /tmp/strfry-export.jsonl
nostrfy migrate-strfry --input /tmp/strfry-export.jsonl
# Option C — Pipe (stdin ist die Standardeingabe)
strfry export | nostrfy migrate-strfry| Flag | Warum |
|---|---|
--strfry-bin <PATH> | strfry ist nicht im PATH |
--since <UNIX> | Fortsetzen/Aufholen: Events mit diesem created_at oder neuer (inklusive) |
--apply-vanish | NIP-62-Vanish-Requests aus dem Export beachten (standardmäßig aus) |
--no-verify | Signaturprüfung für vertrauenswürdige Dumps überspringen (schneller) |
--batch <N> | Events pro DB-Transaktion (Standard 512) |
--dry-run | Nur parsen und verifizieren |
Die Migration ist sicher erneut ausführbar: Duplikate werden übersprungen und die Lösch-Nebeneffekte
neu angewendet, sodass ein unterbrochener Lauf einfach wiederholt werden kann (oder mit --since fortgesetzt).
Starten und verifizieren
Der erste Start baut den NIP-29-Gruppenstore und den NIP-43-Rollenstore aus den importierten Events neu auf und
republiziert die Relay-signierten Metadaten (39000/39001/39002/39005 pro Gruppe, die 13534-Mitgliedsliste). Bei großer Datenbank kann das dauern; Log beachten.
R=wss://relay.example.com # für nak (WebSocket)
H=https://relay.example.com # für curl (HTTP)
nak relay "$R" # Relay antwortet und kündigt seine NIPs an
curl -s "$H/api/v1/query?limit=1" # Events werden ausgeliefert
nak req -i <deleted-event-id> "$R" # ein gelöschtes Event bleibt gelöscht
nak req -k 39000 "$R" # NIP-29-Gruppenmetadaten (falls migriert)
nak req --auth --force-pre-auth --sec <nsec> -k 13534 "$R" # NIP-43-Mitgliedschaft (AUTH)Für exakten Zahlenvergleich sollte strfry scan '{}' | wc -l minus die in der Migrationszusammenfassung
gemeldeten ephemeren/abgelaufenen Events dem entsprechen, was Clients abrufen können.
Unterbrochene Migration fortsetzen
- In Datei exportiert / gepiped: denselben Befehl erneut ausführen. Duplikate werden übersprungen und die Löschsperren neu angewendet.
--strfry-dbverwendet: die Zusammenfassung druckt einen Resume-Hinweis; mit diesem--sinceerneut ausführen (inklusive, die Grenzsekunde wird reimportiert und dedupliziert).- Bei Fehler
database writer unavailablefreien Platz unddatabase.map_sizeprüfen, dann erneut ausführen.
Rollback
Die Migration schreibt nur in die nostrfy-Datenbank. Für Rollback Relay stoppen und die Pre-Migrations-Datenbank wiederherstellen oder entfernen:
nostrfy --config /etc/nostrfy/nostrfy.toml stop
rm -rf /var/lib/nostrfy # or restore the pre-migration backupFehlerbehebung
| Meldung | Ursache / Fix |
|---|---|
cannot lock the database directory ...; stop the relay before migrating | Ein nostrfy-Daemon (oder eine andere Migration) hält das Verzeichnis: zuerst nostrfy stop |
strfry database directory ... does not exist | --strfry-db muss das Verzeichnis mit data.mdb benennen |
cannot run 'strfry': ... | strfry installieren, --strfry-bin setzen oder --input nutzen |
database writer unavailable; the migration did not complete | Writer-Thread gestoppt oder Queue überlastet: Platte/Map-Größe prüfen, erneut ausführen (sicher) |
group purge for <id> did not complete | Der Purge wurde unterbrochen: Migration erneut ausführen |
Hohe bad signature-Zahl | Die strfry-DB enthält unverifizierte Events: prüfen; nur bei vertrauenswürdiger Quelle mit --no-verify importieren |
| NIP-29-Metadaten fehlen nach dem Start | Kein relay.private_key: nostrfy genkey ausführen und neu starten |
| Der Einstellungs-Merge wird nicht angeboten | strfry-Konfiguration nicht gefunden: --strfry-config /etc/strfry.conf übergeben |
Checkliste
- nostrfy-Relay gestoppt
- strfry-Datenbank und nostrfy-Konfiguration gesichert
nostrfy checkbesteht- strfry-Einstellungen zusammengeführt (oder Bericht geprüft)
- Dry-Run geprüft (keine unerwarteten Bad Signatures)
- Migration fehlerfrei abgeschlossen
- Relay startet; Gruppen-/Rollen-Rebuild geloggt
- Event-Zahlen stimmen (minus ephemer/abgelaufen)
- Gelöschte Events bleiben weg (Re-Publish abgelehnt)
- Private-Gruppen-Sichtbarkeit anonym und als Mitglied geprüft
- Reverse-Proxy / DNS / Client-Relay-Listen aktualisiert