Fehlersuche und Support

Wie du Fehler mit Request-ID, Journalen und Support-Bundle eingrenzt, typische Symptome behebst und welche Grenzen Nova 1.0 hat.

Vorgehen

Sammle zuerst die Fakten, dann suchst du das Symptom in den Tabellen unten:

  1. Meldet ein Benutzer einen Fehler, lass dir die Request-ID (req_...) geben und schlage sie mit der Support-Referenz nach.
  2. Lies das kombinierte Journal (siehe Wiederherstellung).
  3. Lies die Journale der betroffenen Units: journalctl -u <unit> -n 50 --no-pager.
  4. Erstelle auf jedem betroffenen Host ein Support-Bundle.

Symptome rund um den Workspace haben eine eigene Tabelle im Kapitel Workspace.

Werkzeuge für den Support

Drei Werkzeuge, von der engsten zur weitesten Sicht:

WerkzeugBeantwortetWo
Support-Referenz„Was ist mit genau dieser Anfrage passiert?“Panel Support-Referenzen, GET /support/references/{req}, CLI auf dem Control-Host
Ressourcenverlauf und Operation-Timelines„Was ist mit dieser Ressource / Operation passiert?“Panel, GET /history/{type}/{id}, Betrieb & Diagnose
Support-Bundle„In welchem Zustand ist dieser Host?“nova-support-bundle auf jedem Host

Fehlerreferenz (Request-ID)

Jede API-Antwort trägt eine Request-ID: req_ plus 32 Hex-Zeichen, im Header X-Request-ID und bei Fehlern zusätzlich in error.request_id. Das Panel zeigt sie in jeder Fehlermeldung unter Technische Referenz. Kam keine Serverantwort an, zeigt das Panel stattdessen eine Browser-Referenz (brw_...) – zu der gibt es keinen Server-Trace.

Frag deine Benutzer nach dieser Referenz und schlage sie auf dem Control-Host nach (als root oder nova-controlpanel):

sh
php /opt/nova-controlpanel/application/current/src/api/bin/nova-support-reference.php req_0123456789abcdef0123456789abcdef

Die Ausgabe ist ein JSON-Dokument (nova.support-reference.v1) mit:

  • der Anfrage: Route, Status, öffentlicher Fehlercode und der interne Ablehnungscode dahinter (request.internal_code, nur für Administratoren);
  • den Operationen, die die Anfrage ausgelöst hat, mit Operations-Events, Jobs, Versuchen und den Ergebnissen der Node Agents;
  • Workspace-Jobs mit ihren Versuchen und Node-Befehlen.

Enthalten sind nur IDs, Zustände, Codes und Zeiten – nie Nutzdaten oder Geheimnisse. Mit --no-operations überspringst du den Operations-Teil (nützlich, wenn Operations nicht läuft).

Exit-CodeBedeutung
0gefunden
3unbekannt oder abgelaufen ("state":"not_found", mit retention_days)
64Aufruffehler
1Nachschlagen nicht möglich (NOVA_SUPPORT_REFERENCE_UNAVAILABLE:<stage> auf stderr)

Request-Traces werden 30 Tage aufbewahrt (nova-application-support-trace-retention.timer, stündlich). Administratoren finden dieselbe Abfrage im Panel unter Support-Referenzen → Referenz nachschlagen, Reseller mit operations.read für ihre eigenen Mandanten. Jede Abfrage wird auditiert.

Für jede abgelehnte Anfrage schreibt die Anwendung zusätzlich eine Zeile ins PHP-Fehlerlog: nova-refusal request_id=req_... status=... public_code=... internal_code=.... Der Nova-Pool setzt kein eigenes error_log; wo die Zeile landet, hängt von den PHP-FPM-Vorgaben ab:

sh
grep -r req_... /var/log/apache2-nova/ /var/log/php8.3-fpm.log   # unter Debian: php8.4-fpm.log

Ressourcenverlauf und Operation-Timelines

  • GET /history/{resourceType}/{resourceId}: geschwärzter Verlauf einer Website, Datenbank, DNS-Zone oder Mail-Ressource; im Panel aus den Backup- und Ressourcenansichten verlinkt.
  • Betrieb & Diagnose (Administratoren): Operationen mit Timeline und Nachweisen, Vorfälle, Audit-Stream, Fleet und Topologie, Zertifikatsinventar.
  • Aufträge & Verlauf: Jobs mit ihren Versuchen; abbrechen, wo erlaubt.

Was du an den Support schickst

  1. Die Request-Referenz(en) und den Zeitpunkt des Fehlers.
  2. Die Ausgabe der Support-Referenz-CLI dazu.
  3. Ein Support-Bundle vom Control-Host (mit --reference für die wichtigste Anfrage) und von jedem beteiligten Node.
  4. Den Zustand des kombinierten Journals (siehe Wiederherstellung).

Support-Bundle

nova-support-bundle sammelt die Diagnosefakten eines Hosts in einem Archiv, das du gefahrlos an den Support schicken kannst. Es enthält nie Geheimnisse, Passwörter, private Schlüssel, Tokens, Sitzungsdaten, Mailinhalte, Kundendateien oder Datenbankzeilen.

Der Node-Agent-Installer legt das Werkzeug auf jedem Nova-Host (Control-Host und jeder Node) als /usr/local/sbin/nova-support-bundle an (Modus 0750, nur root). Starte es als root:

sh
nova-support-bundle                                  # letzte 24 Stunden, Archiv in /root
nova-support-bundle --since 2h --output /var/tmp     # kürzeres Fenster, anderes Verzeichnis
nova-support-bundle --reference req_0123456789abcdef0123456789abcdef   # Control-Host
OptionBedeutung
--output DIRVorhandenes Verzeichnis (kein Symlink) für das Archiv. Standard /root.
--since DURATIONZeitfenster für Journalzeilen und Operations-Events: <n>m, <n>h oder <n>d, höchstens 30d. Standard 24h.
--reference REQ_IDNur Control-Host: nimmt die geschwärzte Timeline der Anfrage aus nova-support-reference.php auf. Auf einem Node vermerkt das Bundle, dass die Abfrage den Control-Host braucht.

Bei Erfolg gibt das Werkzeug den Archivpfad und dessen SHA-256 aus. Das Archiv heißt nova-support-<host>-<UTC-Zeit>.tar.gz, gehört root und hat Modus 0600.

Exit-CodeBedeutung
0Archiv geschrieben
1Fehler beim Sammeln oder Schreiben
2Aufruffehler oder nicht root
3vom abschließenden Geheimnis-Scanner abgelehnt

Bei jedem Exit-Code ungleich 0 bleibt kein (auch kein halbes) Archiv zurück.

Inhalt

Datei im ArchivInhalt
SUMMARY.txtLesbare Zusammenfassung: Rollen, Versionen, fehlgeschlagene Units und Konfigurationstests, Fleet-Exposition, Zertifikate mit weniger als 30 Tagen Restlaufzeit, Node-Agent-Drains, fehlgeschlagene Jobs, Sammelhinweise
MANIFEST.jsonWerkzeugversion, Rollen, Plattform, Zeitpunkt, Parameter, Schwärzungsregeln, SHA-256 und Größe jeder Datei
host/platform.json, host/roles.json, host/resources.txt, host/time-sync.jsonOS-Release, Kernel, PHP-Version, Uptime, Hostname; erkannte Rollen (control, node); Platz, Inodes, Speicher, Last; Zeitsynchronisation
nova/versions.jsonInstallierte Release-Daten, Schema-Version, Zustand des kombinierten Installer-Journals, Node-Agent-Installation
systemd/units.jsonZustand der Nova-Units und Plattformdienste (Apache, PHP-FPM, BIND, Postfix, Dovecot, MariaDB, HAProxy, Rspamd, Pure-FTPd, Zeitsync …)
journal/<unit>.logDie letzten 200 Journalzeilen je Nova-Unit im Zeitfenster, geschwärzt
checks/config-tests.jsonExit-Code und höchstens 20 geschwärzte stderr-Zeilen von apache2ctl configtest, php-fpm<series> -t, named-checkconf, postfix check, doveconf -n, rspamadm configtest, haproxy -c
network/sockets.json, network/fleet.jsonLauschende Sockets (nur Protokoll und Adresse:Port); Ergebnis von nova-fleet-network.py detect und der Expositionsprüfung
certificates/certificates.jsonSubject, Aussteller, Gültigkeit und Resttage der Zertifikate in den Nova-TLS-Verzeichnissen
node/agent.jsonNode-Identität (ID, Rollen, Write-Capabilities, Endpunkte), letzte Drains, Ledger-Übersicht
operations/jobs.jsonNur Control-Host: Jobs und Operationen nach Zustand, die letzten 50 fehlgeschlagenen Jobs, Event-Zähler
reference/timeline.txtNur mit --reference: die geschwärzte Timeline der Anfrage
collection-notes.jsonBereiche, die auf diesem Host nicht verfügbar waren oder fehlschlugen

Was nie gesammelt wird

  • Geheimnisspeicher und Schlüsselmaterial: /etc/nova-controlpanel/secrets/*, *.key, private Schlüssel in Bundles, TSIG-Keyrings, DKIM- und Backup-Schlüssel, Zugangsdateien, Werte aus runtime.env außerhalb der Identitäts-Allowlist.
  • Das Installationsprofil und die Laufzeitkonfiguration selbst (gelesen werden nur schema_version und Fleet-Adresse/-Ports).
  • Sitzungen, Cookies, Zugangsdaten, Tokens, API-Keys, Passwörter.
  • Mail-Spools, Postfachinhalte, Website-Dateien, Datenbankzeilen.
  • Konfigurations-Dumps (doveconf -n, named-checkconf -p, php-fpm -tt).

Schwärzung und Abschluss-Scanner

Jede Datei durchläuft zwei unabhängige Stufen:

  1. Schwärzung: Schlüsselbasierte Regeln entfernen Werte von Passwort-, Secret-, Token-, Key-, Cookie-, Session- und Credential-Feldern (auch MYSQL_PWD), dazu PEM-Blöcke, SSH-Schlüssel, Bearer/Basic/Digest-Zugangsdaten, Benutzerangaben in URLs und hochentropisches Base64. E-Mail-Adressen werden zu <email:…> – einem nicht umkehrbaren Kürzel, das innerhalb eines Bundles stabil bleibt, damit du Zeilen zuordnen kannst. IP-Adressen, Commit-IDs, SHA-256-Werte und präfixierte IDs (req_…, node_…) bleiben erhalten.
  2. Abschluss-Scanner: Er prüft jede Datei – auch MANIFEST.json und SUMMARY.txt – erneut auf dieselben Muster. Jeder Fund lehnt das gesamte Bundle ab (Exit 3) und nennt nur Datei, Zeile und Regel, nie den Treffer selbst.

Vor dem Versenden prüfen

Lies SUMMARY.txt, bevor du das Archiv verschickst. Eine schnelle Gegenprobe:

sh
tar -xzOf /root/nova-support-*.tar.gz --wildcards '*/SUMMARY.txt'
tar -xzOf /root/nova-support-*.tar.gz | grep -E -- '-----BEGIN|PRIVATE KEY|MYSQL_PWD=[^[]' || echo CLEAN

Symptome und Lösungen

Host und Netzwerk

SymptomUrsacheLösung
Host hat nach dem Boot keine private Adresse; nova-fleet-network.py detect liefert 127.0.0.1 oder der Coordinator bindet nieUbuntu lässt eine private Netzwerkkarte, die nach dem ersten Boot angehängt wurde, unkonfiguriertNetplan-Datei für das Interface anlegen (dhcp4: true), netplan apply (Voraussetzungen)
FLEET_NETWORK_AMBIGUOUSmehr als eine RFC-1918-Adresse auf dem HostAdresse festlegen: detect --address <addr> und diese Adresse im Profil verwenden
FLEET_NETWORK_ADDRESS_PUBLIC / ..._NOT_OFFEREDdie festgelegte Adresse ist öffentlich oder nicht auf diesem Hostprivate Adresse des Hosts oder 127.0.0.1 verwenden
FLEET_NETWORK_PORT_EXPOSED <addr:port> bei verify/acceptein interner Port lauscht auf einer anderen AdresseListener finden (ss -ltnp) und entfernen; interne Ports gehören nur auf die Fleet-Adresse
Paketschicht scheitert zu Beginn der Installationunattended-upgrades oder cloud-init hält den dpkg-Lockwarten (cloud-init status --wait, pgrep -a unattended leer), dann denselben Befehl erneut ausführen
Nova package candidate unavailable: jailkit (Ubuntu)Komponente universe nicht aktiviertuniverse in den APT-Quellen aktivieren, apt-get update, Paket-Bundle neu bauen
host platform marker required / host platform marker differs from candidate/etc/nova-controlpanel/host-platform fehlt oder nennt eine andere Plattformnova-controlpanel-host-platform:<platform>:apache hineinschreiben (Voraussetzungen)

Installer-Eingaben

SymptomUrsacheLösung
trusted installer source ownership invalidder Checkout, aus dem du installierst, gehört nicht root oder ist gruppen-/weltbeschreibbarals root mit umask 022 oder strenger klonen; chmod -R go-w $SRC
root-owned immutable candidate input requiredKandidaten-Archiv gehört nicht root oder ist für andere beschreibbarchown root:root, chmod 0644 (oder strenger)
root-owned private input required: <path>Profil- oder Secret-Datei nicht 0600 rootchown root:root <path>; chmod 0600 <path>
native writes must remain disabled during fresh combined installationein frisches Profil aktiviert Writes, Zustellung oder Auslieferungmit allen Write-/Serving-Schaltern auf false installieren; danach per Rekonfiguration aktivieren
fresh combined installation requires no active Nova runtimeNova ist schon installiertupgrade oder reconfigure verwenden
existing combined transaction requires explicit resolution bei frischem installeine fehlgeschlagene Erstinstallation hat ihr Journal hinterlassendenselben Kandidaten mit demselben Profil installieren oder auf einem neuen Host beginnen. Hat das Journal keine Stufe abgeschlossen (completed leer), archiviert install-nova-combined-runtime.py archive-empty es (Wiederherstellung)
combined reconfiguration requires a new profile file / ... profile equals the active profiledas aktive Profil wurde bearbeitet oder nichts geändertaktives Profil in eine neue Datei kopieren und die Kopie ändern
combined update changes stateful database/trusted_origin/secrets configurationdas Zielprofil ändert ein zustandsbehaftetes Felddiese Felder exakt wie installiert lassen
node id invalid oder NOVA_NODE_BOOTSTRAP_ARGUMENTS_INVALIDNode-IDs sind überall node_ plus 22 bis 59 Zeichenlängere Node-ID wählen; sie ist dauerhaft, also vor der ersten Aufnahme festlegen
NOVA_NODE_BOOTSTRAP_SERVER_REF_INVALIDserver_ref ist nicht srv_ plus 8 bis 59 Zeichengültige Server-Referenz verwenden
coordinator-configure scheitert, weil die Umgebungsdatei mit anderem Inhalt existierteine frühere Umgebungsdatei weicht ab/etc/nova-controlpanel/operations/agent-coordinator.env beiseitelegen und coordinator-configure erneut ausführen

Ausführungskette (auf den Nodes passiert nichts)

SymptomUrsacheLösung
Ressourcen bleiben pending/accepted, Nodes erhalten nichtsWorker- oder Dispatcher-Timer nicht aktiv, oder native Befehle aussystemctl enable --now nova-controlpanel-operations-worker.timer nova-controlpanel-operations-dispatcher.timer; install-nova-operations-http-bridge.sh native-commands / on und accept /
Operations-verify/accept scheitert wegen des Executor-Profils/etc/nova-controlpanel/operations/runtime.env nennt ein fremdes Profil (z. B. fake)fremde Zeile OPERATIONS_EXECUTOR_PROFILE entfernen und den Installer erneut ausführen; er schreibt OPERATIONS_EXECUTOR_PROFILE=next-native selbst
Writes einer Domäne werden auf einer frischen Installation abgelehntdie Capability ist im Operations-Store nicht aktiviertfresh-installation-enable.php <capability> 1 "<rollback plan>", sobald der zuständige Node aktiv ist
Alle Node Agents melden nach einem Neustart des Control-Hosts AGENT_MTLS_CONNECT_FAILEDCoordinator nicht für den Boot aktiviert oder private Adresse fehltsystemctl enable --now nova-controlpanel-operations-agent-coordinator.service; private Netzwerkkarte prüfen
Ressource endet in error mit AGENT_RUNTIME_CAPABILITY_UNAVAILABLENOVA_AGENT_WRITE_CAPABILITIES des Nodes fehlt die Capabilityin /etc/nova-controlpanel-node-agent/runtime.env ergänzen; Ressource zurückziehen und neu anlegen
web node filesystem user quota is not enforcedweb.execute.v1 gelistet, aber kein Quota-Volume eingerichtetnova-web-node-quota.sh setup DEVICE auf einem frischen Volume, dann verify
ext4 quota format module quota_v2/quota_tree unavailable ... oder ein Kernel-Update scheitert mit einer nova-web-quota-LogzeileUbuntu-Cloud-Kernel ohne linux-modules-extra-<kernel>apt-get install --no-install-recommends linux-modules-extra-<kernel>, dann dpkg --configure -a; neu starten, falls der neueste Kernel abweicht
Host bootet degraded, quotaon@... mit File existsBoot-Quota-Units eines älteren Provisionierersnova-web-node-quota.sh boot-units (ein Update erledigt das ebenfalls)
Plattform-Operation (z. B. Server anlegen) bleibt nach einem kurzen 503 in accepteddie Anfrage wurde angenommen, die Antwort ging verlorendieselbe Anfrage mit demselben Idempotency-Key erneut senden; ein neuer Key erzeugt eine zweite Operation
503 VALIDATION_PENDING bei einem DNS-WriteValidierung der Zone läuft nochnach einigen Sekunden mit demselben Idempotency-Key wiederholen
422 VALIDATION_REQUEST_INVALID bei jedem Write eines API-ClientsIdempotency-Key fehlt oder verletzt die Regel (16 bis 128 Zeichen aus A-Z a-z 0-9 . _ : -, erstes Zeichen Buchstabe oder Ziffer)gültigen Key verwenden, z. B. eine UUID
Administrator-Aktion verlangt Step-up, oder MFA_ENROLLMENT_REQUIREDdie Aktion braucht Passwort + TOTP, das Konto hat keinen FaktorTOTP einrichten (Einstellungen → Sicherheit); API-Clients senden die Freigabe in X-Capability-Elevation
Profil abgelehnt, weil Writes MFA und Step-up brauchenein Profil aktiviert einen nativen Write ohne native_identity_mfa.enabled, enrollment_enabled und native_capability_elevation.enabledMFA-Reader, dann Enrollment und Elevation aktivieren, TOTP einrichten, danach die Writes (Installation)
Ein Administrator hat Authenticator und alle Recovery-Codes verlorenkein Faktor mehr übrigMFA-Notfall-Reset auf dem Control-Host (Sicherheit)

DNS

SymptomUrsacheLösung
Zone endet in error, Node-Log NOVA_DNS_BIND_ADD_FAILEDdynamische BIND-Zonen auf dem DNS-Node nicht aktiviertactivate-nova-bind-dynamic-zones.sh activate auf dem Node; das nächste Update oder die nächste Abgleichung spielt die Zone erneut ein
Replikation oder TSIG startet nieSecondary ohne Endpunkt, nicht im Plan, oder dns.keyring.apply.v1 / Lease-Zweck dns fehltEndpunkt registrieren (PUT /dns-node-endpoints/{node_id}, FQDN mit abschließendem Punkt), in dns.secondary-nodes zulassen, Capability und Lease-Zweck ergänzen
Zonentransfers zwischen Primary und Secondaries scheiternPort 53 im privaten Netz blockiert53/tcp und 53/udp zwischen den Transferadressen freigeben
Kunden können keinen externen Master mit privater Adresse nutzengewollt: private oder reservierte Master sind Administratoren vorbehaltenöffentliche Master-Adresse verwenden oder die Zone als Eigentümer anlegen

Mail

SymptomUrsacheLösung
Native Mail-Writes abgelehnt mit NOVA_MAIL_DOVECOT_SYSTEM_AUTH_ACTIVE; Installer-Warnung Dovecot system authentication is still enableddie PAM-/Systemauthentifizierung der Distribution ist in Dovecot noch aktiv – Systembenutzer könnten sich per IMAP/POP3 anmeldensh /opt/nova-controlpanel-node-agent/deploy/activate-nova-dovecot-auth.sh activate (status prüft es)
Recovery- oder Support-Mails werden nicht zugestelltder ausgehende Transport verlangt verifiziertes TLSMail-Konfiguration auf ein Relay mit einem Zertifikat zeigen lassen, dem der Host vertraut

Web

SymptomUrsacheLösung
Liste der PHP-Versionen für Websites ist leerder Web-PHP-Katalog wurde nach Aktivierung der PHP-Runtime nicht abgeglichennova-web-php-runtime-catalog.php reconcile ... ausführen (Installation)
Katalogabgleich abgelehnt mit DUPLICATE_VERSION_SCOPEzwei PHP-Runtimes derselben Version auf einem Serverdie doppelte PHP-Version löschen
Eine Anwendung funktioniert nach dem Upgrade nicht mehr (Bildwerkzeuge, Backup-Plugins, exec())die verwalteten deaktivierten PHP-Funktionen greifen beim nächsten ApplyAusnahme pro Website gewähren (php.enabled_functions; Administratoren, Kunden nur mit dem Plan-Feature web.php-function-exceptions)
Anwendung kann einen Pfad außerhalb der Website oder /dev/urandom nicht lesendas verwaltete Standard-open_basedirein Administrator setzt php.open_basedir für die Website (inklusive ihres tmp/)
Benutzer werden nach dem Upgrade einmalig aus einer Website ausgeloggtSitzungen wandern beim nächsten Apply in das eigene tmp/ der Websiteeinmalig, erwartet
NOVA_WEB_PATH_ALIAS_COLLISIONein lesbarer Pfad der Website (/var/www/<domain>, /var/www/clients/<customer>/<domain>, bei umgezogenen Sites /var/www/clients/clientN/webN) existiert auf dem Node bereits als etwas anderes, oder ein Elternverzeichnis gehört nicht rootvorhandenen Pfad auf dem Node wegräumen, dann die Website abgleichen (Tagesbetrieb)
Panel zeigt keinen lesbaren Pfad für eine Websiteder Node hat ihn noch nicht angelegt (Nachzug läuft noch, Kollision) oder das Lesen schlug fehlpath_backfill im Receipt des Web-Settlement-Workers und collisions in /var/lib/nova-controlpanel-agent/web-state/path-aliases.json prüfen
422 WEB_PHP_SETTING_NOT_ALLOWED (php.open_basedir / php.custom_ini)ein Kunde wollte eine Administrator-Einstellung setzen, oder eine ältere Website trägt unmarkierte Administrator-Werteein Administrator öffnet und speichert die Website einmal oder entfernt die Werte (Sicherheit)
Website-Backup oder -Restore scheitert auf dem NodeServer-Backup-Schlüssel fehlt, oder zstd fehlt auf einem älteren Web-Nodenova-web-website-backup-key.sh setup und verify; nova-host-bootstrap.py --mode install --roles web ... installiert zstd (Backups)
503 BACKUP_DOWNLOAD_UNAVAILABLE bei jedem Download-Schrittnative_backup_download.enabled ist aus, der interne Listener liefert nicht aus, oder der Node hat backup.artifact.export.v1 weder in NOVA_AGENT_WRITE_CAPABILITIES noch in NOVA_AGENT_DEFAULT_WRITE_CAPABILITIESalle drei herstellen (Backups)
409 BACKUP_EXPORT_BUSY, obwohl kein anderer Export läuftdem Spool-Dateisystem fehlen Archivgröße plus 1 GiB Reserve, oder die Spool-Kapazität ist durch fertige Exporte belegtPlatz schaffen oder auf den stündlichen Ablauf warten; spool_capacity_bytes senken oder die Platte vergrößern
409 BACKUP_EXPORT_BUSYauf dem Node laufen schon zwei Transfers, oder die Spool-Kapazität ist erschöpftnach der Retry-After-Zeit wiederholen; bei Wiederholung spool_capacity_bytes erhöhen
Export endet failed mit BACKUP_EXPORT_DIGEST_MISMATCHdas Archiv auf dem Node passt nicht zu seinem veröffentlichten DigestArchiv als beschädigt behandeln; neues Backup erstellen
Abgelaufene Backups werden nicht entferntRetention-Timer läuft nicht, oder die Ebene dieses Backup-Typs ist nicht installiertsystemctl status nova-application-backup-retention.timer; das Journal nennt behaltene Backups

Datenbanken

SymptomUrsacheLösung
Datenbank bleibt nach POST /databases in errorein gleichnamiges Schema existiert außerhalb von Nova; der Node übernimmt es nicht (NOVA_DATABASE_SCHEMA_EXISTS_NOT_OWNED), die fremden Daten bleiben sicherDELETE /databases/{id} senden: der Node meldet NOVA_DATABASE_NEVER_OWNED und löscht nichts, der Eintrag geht auf deleted, Quota und Namen werden frei. Dann anderen Namen wählen oder das fremde Schema zuerst entfernen
DELETE dieser Datenbank antwortet 202, der Eintrag fällt aber zurück auf errorder Rückzug wurde abgelehnt: Node Agent zu alt, oder der Eintrag könnte auf dem Node etwas besitzen (z. B. requires_attention)Node Agent aktualisieren und erneut löschen. Bleibt es dabei: Operation-Journal der Datenbank prüfen. Notweg auf dem DB-Node: fremdes Schema sichern (mysqldump --databases <name>), DROP DATABASE <name>, DELETE /databases/{id} erneut senden, Dump unter dem ursprünglichen Namen zurückspielen
409 RESOURCE_CONFLICT bei POST /databases oder 409 USERNAME_TAKENDatenbank- und Kontonamen sind pro Datenbankserver über alle Mandanten eindeutiganderen Namen wählen
422 VALIDATION_FIELD_INVALID bei name oder rolesSystem- und Control-Plane-Namen (mysql, sys, nova_*, root …) sind reserviertanderen Namen wählen

Topologie, Zertifikate, fail2ban

SymptomUrsacheLösung
DNS topology change requires an explicit migrationeine normale Rekonfiguration oder ein Upgrade zeigt auf eine geänderte Topologie-DateiTopologieänderung verwenden: native-topology-change.php plan, dann reconfigure --topology-change (Anleitungen)
Topologieänderung abgelehnt mit Zählern, z. B. node_... role mail: mailboxes=2, tenant_mail_placements=1die zu entfernende Rolle oder der Node ist nicht leergelistete Ressourcen und Platzierungen verschieben oder löschen, dann neu planen
Fabric-Zertifikate warnt in Fleet & Agentenein Fabric-Zertifikat läuft innerhalb von 60 Tagen abnode-renew-* oder coordinator-renew* (Zertifikate)
nova-panel-certificate.sh replace abgelehntSchlüssel passt nicht, falscher Name, zu kurze Gültigkeit, oder die Kette erreicht keine Vertrauenswurzel der NodesDateien korrigieren; das alte Zertifikat wird weiter ausgeliefert (Zertifikate)
Ein Administrator ist gesperrtfail2ban-Jail aus dem Admin-Netz ausgelöstnova-fail2ban.sh unban ADDRESS auf dem Host (oder Fleet & Agenten → fail2ban-Sperren), dann nova-fail2ban.sh install --ignore-ip=<admin net>
fail2ban-Liste oder Entsperren im Panel antwortet 503dem Node fehlt host-security.fail2ban.v1zu den Write-Capabilities des Nodes hinzufügen; bei einem früher aufgenommenen Node einmal node-register auf dem Control-Host ausführen

Upgrade, Rollback, Wiederherstellung

SymptomUrsacheLösung
combined update candidate equals the active candidateUpgrade auf den bereits installierten Kandidatenneueren Stand bauen; reine Profiländerungen laufen über reconfigure
combined update requires an accepted predecessordie letzte Transaktion ist nicht akzeptiertaccept ausführen oder zurückrollen
combined update predecessor ... has an unresolved rolled-back payloadein Upgrade wurde zurückgerollt und nicht neu vorbereitetrearm-upgrade mit dem vertrauenswürdigen Checkout des abgelehnten Kandidaten und den Eingaben aus dem Journal (Updates)
rearm-upgrade scheitert mit einem Vollständigkeitsfehler (z. B. Operations/Node candidate file missing)aus einem neueren Checkout gestartetaus dem Checkout des abgelehnten Commits ausführen (git worktree add ... <commit>)
package update dependencies unsatisfiable on this hostder Host ist bei einzelnen Paketen neuer als das Bundleapt-get install <named packages>, dann Preflight wiederholen
package database incomplete after rollbackdpkg wurde unterbrochendpkg --configure -a, dann erneut rollback; Pakete nie downgraden
accept scheitert direkt nach einem Upgrade mit einem Settlement-Readiness-Fehlerein Worker war noch nicht bereiteine Minute warten und accept erneut ausführen
Panel startet nach Neustart nicht, Recovery-Journal zeigt drift oder digest invalidinstallierte Dateien wurden verändertuntersuchen – das ist der Manipulationsschutz. Dateien aus der Stage wiederherstellen oder zurückrollen; die Prüfung nie umgehen (Wiederherstellung)
Ein gescheiterter Preflight hat die Zielprofil-Datei hinterlassennormal; Preflight bindet nichtsDatei weiterverwenden oder beiseitelegen

Lizenz, Update-Kanal, Node-Zulassung

SymptomUrsacheLösung
node-register lehnt mit AGENT_ENROLLMENT_LICENSE_NODE_LIMIT ab, oder nova-node-bootstrap.php mit NOVA_LICENSE_NODE_LIMITCommunity-Edition (1 Server) oder Lizenz für weniger Nodeszuerst eine Lizenz für die Node-Anzahl installieren (Lizenz)
license trust input refused, NOVA_LICENSE_KEYS_NOT_PINNED oder LICENSE_KEYS_NOT_PINNED (409)keine Lizenzschlüssel-Liste festgelegt, oder eine Liste, die nicht von der festgelegten signiert istnova-update license trust keys/license/<n>.json mit der vollständigen Kette daneben
LICENSE_INSTALLATION_MISMATCH, LICENSE_NOT_YET_VALID, LICENSE_SUPERSEDEDLizenz für eine andere Installations-ID, vor valid_from, oder älter als die installiertefür nova-update license show-id neu ausstellen lassen, warten oder die neuere Lizenz behalten (Lizenz)
Dashboard-Banner over_limit, Updates abgelehnt mit NOVA_UPDATE_LICENSE_OVER_LIMITmehr Nodes als lizenziert, Kulanzzeit vorbeiLizenz für die Node-Anzahl installieren; nichts Laufendes wird abgeschaltet
check zeigt NOT ENTITLED, apply lehnt mit NOVA_UPDATE_LICENSE_ENTITLEMENT_ENDED abdas Release erschien nach Ende der Update-BerechtigungLizenz verlängern; die installierte Version läuft weiter
NOVA_UPDATE_INDEX_EXPIRED, NOVA_UPDATE_SIGNATURE_INVALID, NOVA_UPDATE_KEY_UNTRUSTED, NOVA_UPDATE_SOURCE_DENIEDIndex des Release-Servers abgelaufen, manipuliert oder mit unbekanntem Schlüssel signiert, oder Update-Schlüssel widerrufenIndex neu signieren, Schlüsselkette und Update-Schlüssel prüfen (Updates)
apply lehnt nach einem Kanalwechsel mit NOVA_UPDATE_RELEASE_NOT_NEWER abes gibt nie ein Downgradewarten, bis der Kanal die installierte Version erreicht (AHEAD OF CHANNEL)
Lease- oder Export-Anfragen eines Nodes antworten 403; Audit internal.node-admission.refused mit NATIVE_NODE_ADMISSION_REVOKED, _ABANDONED, _UNKNOWN oder _INACTIVENode-Zulassung: der Node ist widerrufen, aufgegeben oder nicht registriertgewollt bei widerrufenen oder aufgegebenen Nodes (Wiederherstellung); einen unbekannten Node mit node-register aufnehmen
Coordinator lehnt einen Node nach Zertifikatserneuerung ab (AGENT_MTLS_CONNECT_FAILED)der Fingerabdruck wechselt erst bei node-renew-registerErneuerung abschließen (node-renew-register, node-renew-finish)
Globale Konfigurations- oder Direktiven-Writes abgelehnt mit NODE_RECONCILE_REQUIREDein Node hat für diese Ressource einen unbekannten oder abweichenden Verlauflaufende Operationen abwarten; sonst Node abgleichen oder aufgeben. Den Operations-Store nie direkt bearbeiten
Eine lesende Capability eines neuen Releases (z. B. web.statistics.collect) fehlt nach dem Upgrade auf einem alten Nodeder Node hat keinen gespeicherten RollensatzRollen über den Fabric-Rollenablauf ändern oder Node neu aufnehmen

Umzug

SymptomUrsacheLösung
nova-import endet mit Exit 75Node-Effekte, Datenläufe oder die Adressübernahme sind noch nicht abgeschlossendenselben Befehl erneut ausführen; den operator-Block im Receipt lesen
cutover wartet bei address_takeover mit NOT_CONFIGUREDder Primary-IP-Tausch ist noch nicht erfolgtswap des Hilfsskripts ausführen, den Quellserver ohne öffentliche IP wieder einschalten, cutover wiederholen
cutover wartet bei mail_sourcedem übernehmenden Mail-Node fehlt mail.source-address.configure.v1in NOVA_AGENT_WRITE_CAPABILITIES des Nodes ergänzen
NOVA_IMPORT_ROLLBACK_AFTER_CUTOVEReine Cutover-Aktivierung hat begonnen; rollback ist geschlossenfallback verwenden (Umzug)
409 NATIVE_IMPORT_FALLBACK_WINDOW_OPEN oder NATIVE_IMPORT_TENANT_FROZEN im PanelMandant eines offenen Umzugs: strukturelle Änderungen warten auf commit, während Import- und Umschaltphase wartet jeder Writeerwartet; commit ausführen oder die Phase abschließen

Workspace (Kurzliste)

SymptomUrsacheLösung
nova-workspace-node ist gestoppt, nachdem du den Broker neu gestartet hastdie Node-Unit hat Requires= auf den Broker: Stoppen stoppt den Node mit, Starten startet ihn nichtsystemctl start nova-workspace-node
Bau des nativen Bundles hat Web-Pakete oder Quota-Werkzeuge von einem Host entferntBundle auf einem Host mit web-Rolle gebaut; das Bauwerkzeug entfernt, was es installiert hatnur auf einem separaten Host derselben Plattform bauen, der nie die web-Rolle bekommt
node-issue scheitert mit NOVA_WORKSPACE_NODE_SERVER_REF_INVALIDNode-Eintrag mit altem, kurzem server_refeinmalig nova-node-bootstrap.php repair-server-ref ... vor der Aufnahme
Gateway root key rotation requires a separate migrationfür eine Installation mit vorhandenem Root-Key wurde ein neuer angegebenroot_key_source_file auf dem installierten Schlüssel lassen; nur Zertifikat, Schlüssel und Node-CA tauschen

Mehr dazu im Kapitel Workspace.

Bekannte Grenzen von 1.0

Geplant für 1.0.1

  • Stärkerer Spamschutz: Lernen aus dem Junk-Ordner, Postscreen, DNSBL und Schwellwerte pro Postfach.

Geplant für 1.1 oder später

  • Eigenes Import-Konto pro Datenbank beim Umzug. In 1.0 spielt der Import Datenbank-Dumps mit administrativen Rechten auf dem Zielserver ein; prüfe deshalb die Integrität des Quellservers vor dem Umzug (siehe Umzug).
  • Direktes Upgrade eines Servers der Legacy-Basis an Ort und Stelle (1.0 zieht auf neue Hosts um).
  • Ubuntu 26.04 LTS (PHP 8.5 als Standard), Dark Mode, Abrechnung, Offsite-Backups.
  • Public-Suffix-Liste für die Beanspruchung verwalteter Domains.

Nicht in 1.0 enthalten

  • Domainregistrierung: Domains bleiben beim Registrar, nur NS- und DNSSEC-Einträge zeigen auf Nova.
  • Abrechnung und Rechnungsstellung.
  • PowerDNS, PostgreSQL und XFS als Web-Speicher werden nicht als Installationsoption angeboten.
  • CGI-Ausführung für Websites.
  • XMPP, APS, OpenVZ und die Traffic-Historie des bisherigen Hosting-Panels meldet der Umzug, übernimmt sie aber nicht; Daten aus dessen Abrechnungsmodul werden nicht importiert.

Verhalten, das du kennen solltest

  • Geschützte Ordner sind mit Apache im Betrieb erprobt; der nginx-Renderer ist durch Tests abgedeckt.
  • Hinter dem SNI-Router protokolliert Apache für Anfragen, die schon vor der Request-Zeile scheitern (HTTP 400), 127.0.0.1 statt der Client-Adresse. fail2ban nutzt diese Zeilen nicht.
  • ClamAV prüft Anhänge, nicht den reinen Nachrichtentext. Bis zum ersten Signatur-Download (etwa 250 MB) wird Mail ungeprüft zugestellt. clamd braucht etwa 1–1,5 GB RAM.
  • Solange das Fallback-Fenster eines Umzugs offen ist, lassen sich umgezogene Benutzer geschützter Ordner nicht ändern.
  • Importierte geschützte Ordner zeigen als Realm-Text „Restricted“ statt des bisherigen Textes.
  • Ein gelöschtes Postfach behält seinen verschlüsselten Passwort-Eintrag (für ein Rollback nötig); ohne aktives Postfach ist er unbrauchbar.