|
@@ -1,116 +1,148 @@
|
|
|
-# Fehlersuche
|
|
|
|
|
|
|
+# Troubleshooting
|
|
|
|
|
|
|
|
-## Überblick
|
|
|
|
|
|
|
+## Overview
|
|
|
|
|
|
|
|
-Jede Fehlermeldung, die der Client erzeugen kann, mit Ursache und Behebung.
|
|
|
|
|
-Die Meldungen stammen aus `manage-client/lib/`.
|
|
|
|
|
|
|
+Every error message the client can produce, with cause and fix. The
|
|
|
|
|
+messages come from `manage-client/lib/`.
|
|
|
|
|
|
|
|
-Erste Anlaufstelle ist immer:
|
|
|
|
|
|
|
+Note: the client's actual messages are still German text (this is a German
|
|
|
|
|
+product), quoted verbatim in bold below. Each is followed by an *italic
|
|
|
|
|
+English gloss* and then an English explanation, so the heading itself stays
|
|
|
|
|
+searchable against what actually appears in your terminal or log.
|
|
|
|
|
+
|
|
|
|
|
+First stop is always:
|
|
|
|
|
|
|
|
```bash
|
|
```bash
|
|
|
php manage-client/bin/manage-client.php status
|
|
php manage-client/bin/manage-client.php status
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-und danach das Protokoll in `MANAGE_LOG_FILE` (Standard
|
|
|
|
|
-`data/manage/manage-client.log`, eine JSON-Zeile pro Ereignis):
|
|
|
|
|
|
|
+and after that the log in `MANAGE_LOG_FILE` (default
|
|
|
|
|
+`data/manage/manage-client.log`, one JSON line per event):
|
|
|
|
|
|
|
|
```bash
|
|
```bash
|
|
|
tail -20 data/manage/manage-client.log | php -r 'while($l=fgets(STDIN)) { $e=json_decode($l,true); echo $e["timestamp"]," ",$e["level"]," ",$e["message"],"\n"; }'
|
|
tail -20 data/manage/manage-client.log | php -r 'while($l=fgets(STDIN)) { $e=json_decode($l,true); echo $e["timestamp"]," ",$e["level"]," ",$e["message"],"\n"; }'
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-## Konfiguration und Verbindung
|
|
|
|
|
|
|
+## Configuration and connection
|
|
|
|
|
|
|
|
**`Manage-Client ist nicht konfiguriert. MANAGE_SERVER_URL, MANAGE_INSTANCE und MANAGE_TOKEN müssen in manage-client/config.php gesetzt sein.`**
|
|
**`Manage-Client ist nicht konfiguriert. MANAGE_SERVER_URL, MANAGE_INSTANCE und MANAGE_TOKEN müssen in manage-client/config.php gesetzt sein.`**
|
|
|
-`config.php` fehlt oder einer der drei Werte ist leer. `config.sample.php` kopieren
|
|
|
|
|
-und die Werte aus dem Manage-Server eintragen. Prüfen, ob die Datei wirklich
|
|
|
|
|
-`manage-client/config.php` heißt.
|
|
|
|
|
-
|
|
|
|
|
-**`Manage-Server ist nicht erreichbar: <URL>`**
|
|
|
|
|
-Keine Antwort. Mögliche Ursachen: falsche `MANAGE_SERVER_URL`, DNS, Firewall,
|
|
|
|
|
-ausgehende Verbindungen auf dem Hoster gesperrt, TLS-Zertifikat nicht vertrauenswürdig.
|
|
|
|
|
-Prüfen mit `curl -v <URL>/api/v1/manifest.php` vom selben Server aus.
|
|
|
|
|
-
|
|
|
|
|
-**`Ungültige Server-URL: <URL>`**
|
|
|
|
|
-`MANAGE_SERVER_URL` ist keine gültige URL. Sie muss mit `https://` beginnen und darf
|
|
|
|
|
-weder `/api` noch einen Schrägstrich am Ende enthalten.
|
|
|
|
|
-
|
|
|
|
|
-**`Authentifizierung fehlgeschlagen. (HTTP 401)`**
|
|
|
|
|
-Instanz-Kennung oder Token stimmen nicht. Beides ist absichtlich nicht
|
|
|
|
|
-unterscheidbar. Im Manage-Server unter **Instanzen** ein neues Token erzeugen und
|
|
|
|
|
-eintragen; das alte wird dabei sofort ungültig.
|
|
|
|
|
-
|
|
|
|
|
-**`Diese Instanz ist deaktiviert. (HTTP 403)`**
|
|
|
|
|
-Die Instanz existiert, ist aber im Manage-Server deaktiviert. Dort wieder aktivieren.
|
|
|
|
|
-
|
|
|
|
|
-**`Zu viele Anfragen. Bitte später erneut versuchen. (HTTP 429)`**
|
|
|
|
|
-Zu viele fehlgeschlagene Authentifizierungen von dieser IP. Nach Ablauf des
|
|
|
|
|
-Zeitfensters (Standard 5 Minuten) mit korrektem Token erneut versuchen.
|
|
|
|
|
-
|
|
|
|
|
-**`Antwort des Servers ist kein gültiges JSON.`**
|
|
|
|
|
-Die Antwort kam nicht vom Manage-Server: meist eine Fehlerseite des Webservers,
|
|
|
|
|
-eine Umleitung oder ein Captive Portal. Antwort direkt mit `curl` ansehen.
|
|
|
|
|
|
|
+*("The Manage client is not configured. MANAGE_SERVER_URL, MANAGE_INSTANCE
|
|
|
|
|
+and MANAGE_TOKEN must be set in manage-client/config.php.")*
|
|
|
|
|
+`config.php` is missing, or one of the three values is empty. Copy
|
|
|
|
|
+`config.sample.php` and enter the values from the Manage server. Check that
|
|
|
|
|
+the file is really named `manage-client/config.php`.
|
|
|
|
|
+
|
|
|
|
|
+**`Manage-Server ist nicht erreichbar: <URL>`** *("Manage server is
|
|
|
|
|
+unreachable: <URL>")*
|
|
|
|
|
+No response. Possible causes: wrong `MANAGE_SERVER_URL`, DNS, a firewall,
|
|
|
|
|
+outbound connections blocked by the host, an untrusted TLS certificate.
|
|
|
|
|
+Check with `curl -v <URL>/api/v1/manifest.php` from the same server.
|
|
|
|
|
+
|
|
|
|
|
+**`Ungültige Server-URL: <URL>`** *("Invalid server URL: <URL>")*
|
|
|
|
|
+`MANAGE_SERVER_URL` isn't a valid URL. It must start with `https://` and
|
|
|
|
|
+must contain neither `/api` nor a trailing slash.
|
|
|
|
|
+
|
|
|
|
|
+**`Authentifizierung fehlgeschlagen. (HTTP 401)`** *("Authentication
|
|
|
|
|
+failed.")*
|
|
|
|
|
+Instance id or token don't match. Both are deliberately indistinguishable.
|
|
|
|
|
+In the Manage server, under **Instances**, generate a new token and enter
|
|
|
|
|
+it; the old one becomes invalid immediately.
|
|
|
|
|
+
|
|
|
|
|
+**`Diese Instanz ist deaktiviert. (HTTP 403)`** *("This instance is
|
|
|
|
|
+deactivated.")*
|
|
|
|
|
+The instance exists but is deactivated in the Manage server. Reactivate it
|
|
|
|
|
+there.
|
|
|
|
|
+
|
|
|
|
|
+**`Zu viele Anfragen. Bitte später erneut versuchen. (HTTP 429)`** *("Too
|
|
|
|
|
+many requests. Please try again later.")*
|
|
|
|
|
+Too many failed authentications from this IP. Retry with the correct token
|
|
|
|
|
+after the time window expires (default 5 minutes).
|
|
|
|
|
+
|
|
|
|
|
+**`Antwort des Servers ist kein gültiges JSON.`** *("The server's response
|
|
|
|
|
+is not valid JSON.")*
|
|
|
|
|
+The response didn't come from the Manage server: usually a web server error
|
|
|
|
|
+page, a redirect, or a captive portal. Inspect the response directly with
|
|
|
|
|
+`curl`.
|
|
|
|
|
|
|
|
## Update
|
|
## Update
|
|
|
|
|
|
|
|
**`Es ist kein neueres Update verfügbar. Mit der Option "force" kann dasselbe Paket erneut ausgerollt werden.`**
|
|
**`Es ist kein neueres Update verfügbar. Mit der Option "force" kann dasselbe Paket erneut ausgerollt werden.`**
|
|
|
-Kein Fehler. Auf der Kommandozeile `update --force`, in der Oberfläche das Häkchen
|
|
|
|
|
-"erneut ausrollen".
|
|
|
|
|
|
|
+*("No newer update is available. The "force" option can redeploy the same
|
|
|
|
|
+package.")*
|
|
|
|
|
+Not an error. On the command line, `update --force`; in the UI, the
|
|
|
|
|
+"redeploy" checkbox.
|
|
|
|
|
|
|
|
**`Version im Manifest ist ungültig.` / `Prüfsumme im Manifest ist ungültig.` / `Paket-URL im Manifest ist ungültig.`**
|
|
**`Version im Manifest ist ungültig.` / `Prüfsumme im Manifest ist ungültig.` / `Paket-URL im Manifest ist ungültig.`**
|
|
|
-Der Server liefert ein unbrauchbares Manifest. Auf dem Server prüfen, ob ein Release
|
|
|
|
|
-veröffentlicht und als aktuell gesetzt ist. Bei "Paket-URL ungültig" ist meist
|
|
|
|
|
-`MANAGE_PUBLIC_URL` in der Serverkonfiguration nicht oder falsch gesetzt.
|
|
|
|
|
|
|
+*("Version in the manifest is invalid." / "Checksum in the manifest is
|
|
|
|
|
+invalid." / "Package URL in the manifest is invalid.")*
|
|
|
|
|
+The server returns an unusable manifest. On the server, check whether a
|
|
|
|
|
+release is published and set as current. For "package URL invalid",
|
|
|
|
|
+`MANAGE_PUBLIC_URL` in the server configuration is usually unset or wrong.
|
|
|
|
|
|
|
|
**`Größe des heruntergeladenen Pakets stimmt nicht überein.` / `Prüfsumme des Pakets stimmt nicht überein.`**
|
|
**`Größe des heruntergeladenen Pakets stimmt nicht überein.` / `Prüfsumme des Pakets stimmt nicht überein.`**
|
|
|
-Das Paket entspricht nicht dem Manifest. Die heruntergeladene Datei wird sofort
|
|
|
|
|
-gelöscht und **nichts** ausgerollt. Ursachen: abgebrochener Download, ein Proxy der
|
|
|
|
|
-den Inhalt verändert, oder ein auf dem Server ausgetauschtes Paket. Release neu
|
|
|
|
|
-hochladen und erneut versuchen. Wiederholt sich der Fehler, ist die Übertragungskette
|
|
|
|
|
-zu prüfen, bevor ausgerollt wird.
|
|
|
|
|
-
|
|
|
|
|
-**`Das heruntergeladene Paket ist keine lesbare ZIP-Datei.`**
|
|
|
|
|
-Die Datei ist beschädigt oder es wurde etwas anderes als ein ZIP hochgeladen.
|
|
|
|
|
-
|
|
|
|
|
-**`Das Paket enthält einen unsicheren Pfad: <Pfad>`**
|
|
|
|
|
-Ein Eintrag versucht aus dem Zielverzeichnis auszubrechen (`..`, absoluter Pfad,
|
|
|
|
|
-Laufwerksbuchstabe, Nullbyte). Es wird nichts entpackt. Ein solches Paket darf nicht
|
|
|
|
|
-ausgerollt werden – Herkunft klären.
|
|
|
|
|
|
|
+*("Size of the downloaded package doesn't match." / "Checksum of the
|
|
|
|
|
+package doesn't match.")*
|
|
|
|
|
+The package doesn't match the manifest. The downloaded file is deleted
|
|
|
|
|
+immediately and **nothing** is deployed. Causes: an interrupted download, a
|
|
|
|
|
+proxy that alters the content, or a package swapped out on the server.
|
|
|
|
|
+Re-upload the release and try again. If it keeps happening, check the
|
|
|
|
|
+transfer chain before deploying.
|
|
|
|
|
+
|
|
|
|
|
+**`Das heruntergeladene Paket ist keine lesbare ZIP-Datei.`** *("The
|
|
|
|
|
+downloaded package is not a readable ZIP file.")*
|
|
|
|
|
+The file is corrupted, or something other than a ZIP was uploaded.
|
|
|
|
|
+
|
|
|
|
|
+**`Das Paket enthält einen unsicheren Pfad: <Pfad>`** *("The package
|
|
|
|
|
+contains an unsafe path: <path>")*
|
|
|
|
|
+An entry tries to break out of the target directory (`..`, an absolute
|
|
|
|
|
+path, a drive letter, a null byte). Nothing gets extracted. Such a package
|
|
|
|
|
+must not be deployed — find out where it came from.
|
|
|
|
|
|
|
|
**`Das Paket sieht nicht wie ein Release dieser Anwendung aus (erwartet: index.php)`**
|
|
**`Das Paket sieht nicht wie ein Release dieser Anwendung aus (erwartet: index.php)`**
|
|
|
-Keiner der Pfade aus `MANAGE_UPDATE_SANITY_PATHS` ist im Paket. Fast immer wurde das
|
|
|
|
|
-ZIP mit einem Oberverzeichnis gebaut. Siehe
|
|
|
|
|
|
|
+*("The package doesn't look like a release of this application (expected:
|
|
|
|
|
+index.php)")*
|
|
|
|
|
+None of the paths from `MANAGE_UPDATE_SANITY_PATHS` is in the package.
|
|
|
|
|
+Almost always the ZIP was built with a top-level directory. See
|
|
|
[06_UPDATE_PACKAGING](06_UPDATE_PACKAGING.md).
|
|
[06_UPDATE_PACKAGING](06_UPDATE_PACKAGING.md).
|
|
|
|
|
|
|
|
-**`Die PHP-Erweiterung ZipArchive ist nicht verfügbar.`**
|
|
|
|
|
-`ext-zip` fehlt. Updates brauchen sie; Backups funktionieren auch ohne, weil der
|
|
|
|
|
-Client dort einen eigenen ZIP-Writer verwendet. Beim Hoster aktivieren lassen.
|
|
|
|
|
|
|
+**`Die PHP-Erweiterung ZipArchive ist nicht verfügbar.`** *("The PHP
|
|
|
|
|
+ZipArchive extension is not available.")*
|
|
|
|
|
+`ext-zip` is missing. Updates need it; backups still work without it,
|
|
|
|
|
+because the client uses its own ZIP writer there. Have the host enable it.
|
|
|
|
|
|
|
|
**`Datei konnte nicht ausgerollt werden: <Pfad>` / `Datei konnte nicht gesichert werden: <Pfad>`**
|
|
**`Datei konnte nicht ausgerollt werden: <Pfad>` / `Datei konnte nicht gesichert werden: <Pfad>`**
|
|
|
-Fehlende Schreibrechte im Anwendungsstamm. **Wichtig:** Dieser Fehler tritt
|
|
|
|
|
-mittendrin auf, das Ausrollen ist dann unvollständig. Rechte korrigieren und
|
|
|
|
|
-`update --force` erneut ausführen – der Lauf beginnt von vorn und stellt den
|
|
|
|
|
-vollständigen Zustand her.
|
|
|
|
|
|
|
+*("File could not be deployed: <path>" / "File could not be backed up:
|
|
|
|
|
+<path>")*
|
|
|
|
|
+Missing write permission in the application root. **Important:** this
|
|
|
|
|
+error occurs mid-run, so the deployment is then incomplete. Fix permissions
|
|
|
|
|
+and run `update --force` again — the run starts over and restores the
|
|
|
|
|
+complete state.
|
|
|
|
|
|
|
|
-**`Verzeichnis konnte nicht erstellt werden: <Pfad>`**
|
|
|
|
|
-Fehlende Schreibrechte auf dem übergeordneten Verzeichnis.
|
|
|
|
|
|
|
+**`Verzeichnis konnte nicht erstellt werden: <Pfad>`** *("Directory could
|
|
|
|
|
+not be created: <path>")*
|
|
|
|
|
+Missing write permission on the parent directory.
|
|
|
|
|
|
|
|
-**`Altes Backup-Verzeichnis konnte nicht entfernt werden: <Pfad>`**
|
|
|
|
|
-Das Ausrollen war erfolgreich, nur das Aufräumen alter Sicherungen scheiterte.
|
|
|
|
|
-Verzeichnis von Hand entfernen.
|
|
|
|
|
|
|
+**`Altes Backup-Verzeichnis konnte nicht entfernt werden: <Pfad>`** *("Old
|
|
|
|
|
+backup directory could not be removed: <path>")*
|
|
|
|
|
+Deployment succeeded; only cleaning up old backups failed. Remove the
|
|
|
|
|
+directory by hand.
|
|
|
|
|
|
|
|
-**`MANAGE_APP_ROOT existiert nicht: <Pfad>`**
|
|
|
|
|
-Der konfigurierte Anwendungsstamm ist falsch. Standard ist das Elternverzeichnis von
|
|
|
|
|
-`manage-client/`.
|
|
|
|
|
|
|
+**`MANAGE_APP_ROOT existiert nicht: <Pfad>`** *("MANAGE_APP_ROOT does not
|
|
|
|
|
+exist: <path>")*
|
|
|
|
|
+The configured application root is wrong. The default is the parent
|
|
|
|
|
+directory of `manage-client/`.
|
|
|
|
|
|
|
|
-## Migrationen und Hook
|
|
|
|
|
|
|
+## Migrations and hook
|
|
|
|
|
|
|
|
**`Migration <id> liefert keine Funktion zurück und definiert kein up().`**
|
|
**`Migration <id> liefert keine Funktion zurück und definiert kein up().`**
|
|
|
-Die Migrationsdatei muss entweder eine Funktion zurückgeben (`return function (array $context) {...};`)
|
|
|
|
|
-oder eine Funktion `up(array $context)` definieren.
|
|
|
|
|
|
|
+*("Migration <id> does not return a function and does not define up().")*
|
|
|
|
|
+The migration file must either return a function
|
|
|
|
|
+(`return function (array $context) {...};`) or define a function
|
|
|
|
|
+`up(array $context)`.
|
|
|
|
|
|
|
|
-**Migration schlägt mit einem eigenen Fehler fehl**
|
|
|
|
|
-Der Lauf stoppt, die folgenden Migrationen bleiben offen, die Dateien sind aber
|
|
|
|
|
-bereits ausgerollt. Ursache beheben, dann:
|
|
|
|
|
|
|
+**A migration fails with its own error**
|
|
|
|
|
+The run stops, the following migrations stay pending, but the files are
|
|
|
|
|
+already deployed. Fix the cause, then:
|
|
|
|
|
|
|
|
```bash
|
|
```bash
|
|
|
php manage-client/bin/manage-client.php migrate --dry-run
|
|
php manage-client/bin/manage-client.php migrate --dry-run
|
|
@@ -118,108 +150,141 @@ php manage-client/bin/manage-client.php migrate
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
**`Hook-Datei wurde nicht gefunden: <Pfad>` / `Hook-Callback ist nicht aufrufbar: <Name>`**
|
|
**`Hook-Datei wurde nicht gefunden: <Pfad>` / `Hook-Callback ist nicht aufrufbar: <Name>`**
|
|
|
-`MANAGE_UPDATE_POST_HOOK` verweist auf eine fehlende Datei oder eine Funktion, die
|
|
|
|
|
-dort nicht definiert wird. Häufig, wenn die Hook-Datei nicht im Release-Paket liegt.
|
|
|
|
|
|
|
+*("Hook file was not found: <path>" / "Hook callback is not callable:
|
|
|
|
|
+<name>")*
|
|
|
|
|
+`MANAGE_UPDATE_POST_HOOK` points to a missing file, or a function that
|
|
|
|
|
+isn't defined there. Common when the hook file isn't in the release
|
|
|
|
|
+package.
|
|
|
|
|
|
|
|
-**`Post-Update-Hook meldet einen Fehler`**
|
|
|
|
|
-Der Callback hat `false` oder `["success" => false]` zurückgegeben. Die Dateien sind
|
|
|
|
|
-ausgerollt; die Details stehen im Protokoll.
|
|
|
|
|
|
|
+**`Post-Update-Hook meldet einen Fehler`** *("Post-update hook reports an
|
|
|
|
|
+error")*
|
|
|
|
|
+The callback returned `false` or `["success" => false]`. The files are
|
|
|
|
|
+deployed; the details are in the log.
|
|
|
|
|
|
|
|
## Backup
|
|
## Backup
|
|
|
|
|
|
|
|
-**`Es läuft bereits ein Backup.`**
|
|
|
|
|
-Die Sperrdatei ist belegt: ein zweiter Lauf startete, während der erste noch lief.
|
|
|
|
|
-Meist überlappen Cron-Job und manueller Aufruf. Warten und erneut versuchen. Bleibt
|
|
|
|
|
-es dauerhaft, wurde ein früherer Lauf hart abgebrochen – die Sperre löst sich mit
|
|
|
|
|
-dem Prozessende von selbst; hilft das nicht, `data/manage/backups/.backup.lock`
|
|
|
|
|
-entfernen, wenn sicher kein Backup läuft.
|
|
|
|
|
|
|
+**`Es läuft bereits ein Backup.`** *("A backup is already running.")*
|
|
|
|
|
+The lock file is held: a second run started while the first was still
|
|
|
|
|
+going. Usually a cron job and a manual run overlap. Wait and retry. If it
|
|
|
|
|
+persists, an earlier run was killed hard — the lock releases itself when
|
|
|
|
|
+that process ends; if that doesn't help, remove
|
|
|
|
|
+`data/manage/backups/.backup.lock` once you're certain no backup is
|
|
|
|
|
+running.
|
|
|
|
|
|
|
|
**`Keine Dateien für das Backup gefunden.` / `Keine lesbaren Dateien für das Backup gefunden.`**
|
|
**`Keine Dateien für das Backup gefunden.` / `Keine lesbaren Dateien für das Backup gefunden.`**
|
|
|
-`MANAGE_BACKUP_SOURCES` trifft auf keine existierende Datei. Pfade sind relativ zu
|
|
|
|
|
-`MANAGE_APP_ROOT`. Prüfen mit:
|
|
|
|
|
|
|
+*("No files found for the backup." / "No readable files found for the
|
|
|
|
|
+backup.")*
|
|
|
|
|
+`MANAGE_BACKUP_SOURCES` matches no existing file. Paths are relative to
|
|
|
|
|
+`MANAGE_APP_ROOT`. Check with:
|
|
|
|
|
|
|
|
```bash
|
|
```bash
|
|
|
php -r 'require "manage-client/lib/client.php"; print_r(manageBackupCollectSources());'
|
|
php -r 'require "manage-client/lib/client.php"; print_r(manageBackupCollectSources());'
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
**`Backup-ZIP konnte nicht erstellt werden.` / `Backup-ZIP konnte nicht finalisiert werden.`**
|
|
**`Backup-ZIP konnte nicht erstellt werden.` / `Backup-ZIP konnte nicht finalisiert werden.`**
|
|
|
-Keine Schreibrechte auf `MANAGE_BACKUP_DIR` oder die Festplatte ist voll.
|
|
|
|
|
|
|
+*("Backup ZIP could not be created." / "Backup ZIP could not be
|
|
|
|
|
+finalized.")*
|
|
|
|
|
+No write access to `MANAGE_BACKUP_DIR`, or the disk is full.
|
|
|
|
|
|
|
|
**`Datei ist zu groß für dieses Backup-Format: <Name>` / `Backup-ZIP ist zu groß für dieses Backup-Format.` / `Zu viele Dateien für dieses Backup-Format.`**
|
|
**`Datei ist zu groß für dieses Backup-Format: <Name>` / `Backup-ZIP ist zu groß für dieses Backup-Format.` / `Zu viele Dateien für dieses Backup-Format.`**
|
|
|
-Grenzen des ZIP-Formats ohne Zip64: 4 GB pro Datei, 4 GB pro Archiv, 65535 Einträge.
|
|
|
|
|
-Quellen aufteilen oder große Mediendateien getrennt sichern.
|
|
|
|
|
|
|
+*("File is too large for this backup format: <name>" / "Backup ZIP is too
|
|
|
|
|
+large for this backup format." / "Too many files for this backup
|
|
|
|
|
+format.")*
|
|
|
|
|
+Limits of the ZIP format without Zip64: 4 GB per file, 4 GB per archive,
|
|
|
|
|
+65535 entries. Split up the sources, or back up large media files
|
|
|
|
|
+separately.
|
|
|
|
|
|
|
|
**`Ungültiger Pfad im Backup: <Name>` / `Pfad im Backup ist zu lang: <Name>`**
|
|
**`Ungültiger Pfad im Backup: <Name>` / `Pfad im Backup ist zu lang: <Name>`**
|
|
|
-Ein Dateiname enthält ungültige Zeichen oder das `as`-Präfix erzeugt einen ungültigen
|
|
|
|
|
-Archivpfad. Präfixe ohne führenden Schrägstrich und ohne `..` verwenden.
|
|
|
|
|
|
|
+*("Invalid path in the backup: <name>" / "Path in the backup is too long:
|
|
|
|
|
+<name>")*
|
|
|
|
|
+A filename contains invalid characters, or the `as` prefix produces an
|
|
|
|
|
+invalid archive path. Use prefixes without a leading slash and without
|
|
|
|
|
+`..`.
|
|
|
|
|
|
|
|
**`Der Manage-Server hat das Backup abgelehnt: Ungültiger Backup-Dateiname.`**
|
|
**`Der Manage-Server hat das Backup abgelehnt: Ungültiger Backup-Dateiname.`**
|
|
|
-Der Dateiname entspricht nicht `backup-YYYYmmdd-HHMMSS[-N].zip`. Tritt nur bei
|
|
|
|
|
-selbst gebauten Uploads auf.
|
|
|
|
|
|
|
+*("The Manage server rejected the backup: invalid backup filename.")*
|
|
|
|
|
+The filename doesn't match `backup-YYYYmmdd-HHMMSS[-N].zip`. Only happens
|
|
|
|
|
+with self-built uploads.
|
|
|
|
|
|
|
|
**`Der Manage-Server hat das Backup abgelehnt: Prüfsumme des Backups stimmt nicht überein.`**
|
|
**`Der Manage-Server hat das Backup abgelehnt: Prüfsumme des Backups stimmt nicht überein.`**
|
|
|
-Das Archiv wurde unterwegs verändert oder unvollständig übertragen. Die Datei wird
|
|
|
|
|
-serverseitig gelöscht. Das lokale Archiv ist in Ordnung; erneut versuchen.
|
|
|
|
|
|
|
+*("The Manage server rejected the backup: backup checksum doesn't
|
|
|
|
|
+match.")*
|
|
|
|
|
+The archive was altered in transit, or transferred incompletely. The file
|
|
|
|
|
+is deleted server-side. The local archive is fine; try again.
|
|
|
|
|
|
|
|
**`Backup überschreitet das Upload-Limit des Servers (upload_max_filesize / post_max_size).`**
|
|
**`Backup überschreitet das Upload-Limit des Servers (upload_max_filesize / post_max_size).`**
|
|
|
-Die PHP-Grenzen auf dem **Manage-Server** sind kleiner als das Archiv. Dort
|
|
|
|
|
-`upload_max_filesize` und `post_max_size` erhöhen (beide!) oder den Backup-Umfang
|
|
|
|
|
-reduzieren. Die aktuellen Werte stehen im Manage-Server unter **Einstellungen → Diagnose**.
|
|
|
|
|
|
|
+*("Backup exceeds the server's upload limit (upload_max_filesize /
|
|
|
|
|
+post_max_size).")*
|
|
|
|
|
+The PHP limits on the **Manage server** are smaller than the archive.
|
|
|
|
|
+Increase `upload_max_filesize` and `post_max_size` there (both!), or reduce
|
|
|
|
|
+the backup's scope. The current values are shown in the Manage server
|
|
|
|
|
+under **Settings → Diagnostics**.
|
|
|
|
|
|
|
|
-Der Upload-Fehler macht das lokale Archiv nicht ungültig – es liegt vollständig in
|
|
|
|
|
-`data/manage/backups/`.
|
|
|
|
|
|
|
+The upload failure does not invalidate the local archive — it sits complete
|
|
|
|
|
+in `data/manage/backups/`.
|
|
|
|
|
|
|
|
-## Datenbank
|
|
|
|
|
|
|
+## Database
|
|
|
|
|
|
|
|
-**`Die PHP-PDO-Erweiterung ist nicht verfügbar.`**
|
|
|
|
|
-`pdo_mysql` fehlt. Ohne sie kann kein Dump erstellt werden;
|
|
|
|
|
-`MANAGE_BACKUP_DATABASE` auf `null` setzen oder die Erweiterung aktivieren lassen.
|
|
|
|
|
|
|
+**`Die PHP-PDO-Erweiterung ist nicht verfügbar.`** *("The PHP PDO extension
|
|
|
|
|
+is not available.")*
|
|
|
|
|
+`pdo_mysql` is missing. No dump can be created without it; set
|
|
|
|
|
+`MANAGE_BACKUP_DATABASE` to `null` or have the extension enabled.
|
|
|
|
|
|
|
|
-**`Datenbankverbindung fehlgeschlagen: <Meldung>`**
|
|
|
|
|
-DSN, Benutzer oder Passwort stimmen nicht, oder der Server ist nicht erreichbar. Die
|
|
|
|
|
-Originalmeldung von PDO steht dahinter.
|
|
|
|
|
|
|
+**`Datenbankverbindung fehlgeschlagen: <Meldung>`** *("Database connection
|
|
|
|
|
+failed: <message>")*
|
|
|
|
|
+DSN, user or password are wrong, or the server is unreachable. PDO's
|
|
|
|
|
+original message follows.
|
|
|
|
|
|
|
|
-**`MANAGE_BACKUP_DATABASE benötigt einen DSN.`**
|
|
|
|
|
-Das Array ist gesetzt, aber `dsn` fehlt oder ist leer.
|
|
|
|
|
|
|
+**`MANAGE_BACKUP_DATABASE benötigt einen DSN.`** *("MANAGE_BACKUP_DATABASE
|
|
|
|
|
+requires a DSN.")*
|
|
|
|
|
+The array is set, but `dsn` is missing or empty.
|
|
|
|
|
|
|
|
-**`Datenbank-Dump fehlgeschlagen: <Meldung>`**
|
|
|
|
|
-Meist fehlende Rechte: Der Benutzer braucht `SELECT` und `SHOW VIEW` auf allen
|
|
|
|
|
-Tabellen. Der unvollständige Dump wird gelöscht, das Backup bricht ab.
|
|
|
|
|
|
|
+**`Datenbank-Dump fehlgeschlagen: <Meldung>`** *("Database dump failed:
|
|
|
|
|
+<message>")*
|
|
|
|
|
+Usually missing permissions: the user needs `SELECT` and `SHOW VIEW` on all
|
|
|
|
|
+tables. The incomplete dump is deleted; the backup aborts.
|
|
|
|
|
|
|
|
-## Zusätzliche Ziele
|
|
|
|
|
|
|
+## Extra targets
|
|
|
|
|
|
|
|
-**`Die PHP-SSH2-Erweiterung ist nicht verfügbar.`**
|
|
|
|
|
-SFTP braucht `ext-ssh2`. Ohne sie schlägt nur dieses Ziel fehl; das lokale Archiv
|
|
|
|
|
-und alle anderen Ziele bleiben davon unberührt.
|
|
|
|
|
|
|
+**`Die PHP-SSH2-Erweiterung ist nicht verfügbar.`** *("The PHP SSH2
|
|
|
|
|
+extension is not available.")*
|
|
|
|
|
+SFTP needs `ext-ssh2`. Without it, only this target fails; the local
|
|
|
|
|
+archive and every other target are unaffected.
|
|
|
|
|
|
|
|
**`SFTP-Zieldatei konnte nicht geöffnet werden. Existiert das Verzeichnis?`**
|
|
**`SFTP-Zieldatei konnte nicht geöffnet werden. Existiert das Verzeichnis?`**
|
|
|
-Das entfernte Verzeichnis muss vorhanden und beschreibbar sein; es wird nicht angelegt.
|
|
|
|
|
|
|
+*("SFTP target file could not be opened. Does the directory exist?")*
|
|
|
|
|
+The remote directory must exist and be writable; it isn't created.
|
|
|
|
|
|
|
|
-**`S3-Ziel ist unvollständig konfiguriert.`**
|
|
|
|
|
-`bucket`, `region`, `access_key` und `secret_key` sind alle Pflicht.
|
|
|
|
|
|
|
+**`S3-Ziel ist unvollständig konfiguriert.`** *("S3 target is incompletely
|
|
|
|
|
+configured.")*
|
|
|
|
|
+`bucket`, `region`, `access_key` and `secret_key` are all required.
|
|
|
|
|
|
|
|
-**`S3-Upload fehlgeschlagen (HTTP 403)`**
|
|
|
|
|
-Bei `SignatureDoesNotMatch` stimmen Region oder Secret Key nicht. Bei `AccessDenied`
|
|
|
|
|
-passt meist die Adressierungsart nicht – für S3-kompatible Anbieter `endpoint` setzen.
|
|
|
|
|
|
|
+**`S3-Upload fehlgeschlagen (HTTP 403)`** *("S3 upload failed (HTTP
|
|
|
|
|
+403)")*
|
|
|
|
|
+With `SignatureDoesNotMatch`, region or secret key are wrong. With
|
|
|
|
|
+`AccessDenied`, the addressing style is usually wrong — set `endpoint` for
|
|
|
|
|
+S3-compatible providers.
|
|
|
|
|
|
|
|
-**`Unbekannter Backup-Zieltyp: <typ>`**
|
|
|
|
|
-`type` muss `s3`, `sftp` oder `custom` sein. Der frühere Typ `managed` entfällt: Der
|
|
|
|
|
-Upload zum Manage-Server ist eingebaut und wird über `MANAGE_BACKUP_UPLOAD` gesteuert.
|
|
|
|
|
|
|
+**`Unbekannter Backup-Zieltyp: <typ>`** *("Unknown backup target type:
|
|
|
|
|
+<type>")*
|
|
|
|
|
+`type` must be `s3`, `sftp` or `custom`. The earlier type `managed` is
|
|
|
|
|
+gone: the upload to the Manage server is built in and controlled via
|
|
|
|
|
+`MANAGE_BACKUP_UPLOAD`.
|
|
|
|
|
|
|
|
-## Rechte auf einen Blick
|
|
|
|
|
|
|
+## Permissions at a glance
|
|
|
|
|
|
|
|
```bash
|
|
```bash
|
|
|
-# Schreibrechte für PHP prüfen
|
|
|
|
|
|
|
+# Check PHP write access
|
|
|
php -r '
|
|
php -r '
|
|
|
foreach (["data/manage/backups", "data/manage/work", "data/manage/updates", "."] as $d) {
|
|
foreach (["data/manage/backups", "data/manage/work", "data/manage/updates", "."] as $d) {
|
|
|
- printf("%-26s %s\n", $d, is_writable($d) ? "beschreibbar" : "NICHT beschreibbar");
|
|
|
|
|
|
|
+ printf("%-26s %s\n", $d, is_writable($d) ? "writable" : "NOT writable");
|
|
|
}'
|
|
}'
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-Der letzte Eintrag `.` ist der Anwendungsstamm – ohne Schreibrecht dort sind keine
|
|
|
|
|
-Updates möglich.
|
|
|
|
|
|
|
+The last entry, `.`, is the application root — without write access there,
|
|
|
|
|
+no updates are possible.
|
|
|
|
|
|
|
|
-## Weiter
|
|
|
|
|
|
|
+## Next
|
|
|
|
|
|
|
|
-- [03_CONFIG_REFERENCE](03_CONFIG_REFERENCE.md) – alle Konstanten
|
|
|
|
|
-- [08_PROTOCOL](08_PROTOCOL.md) – Anfragen mit `curl` nachstellen
|
|
|
|
|
|
|
+- [03_CONFIG_REFERENCE](03_CONFIG_REFERENCE.md) – every constant
|
|
|
|
|
+- [08_PROTOCOL](08_PROTOCOL.md) – reproducing requests with `curl`
|