Fehlerbehebung
Häufige Probleme und ihre Lösungen. Im Zweifelsfall starten Sie mit rdc doctor, um eine umfassende Diagnoseprüfung durchzuführen.
SSH-Verbindung schlägt fehl
- Überprüfen Sie, ob Sie sich manuell verbinden können:
ssh -i ~/.ssh/id_ed25519 deploy@203.0.113.50 - Führen Sie
rdc config machine scan-keys -m server-1aus, um die Host-Schlüssel zu aktualisieren - Stellen Sie sicher, dass der SSH-Port übereinstimmt:
--port 22 - Testen Sie mit einem einfachen Befehl:
rdc term connect -m server-1 -c "hostname"
Host-Schlüssel stimmt nicht überein
Wenn ein Server neu installiert wurde oder seine SSH-Schlüssel geändert wurden, sehen Sie “host key verification failed”:
rdc config machine scan-keys -m server-1
Dieser Befehl ruft frische Host-Schlüssel ab und aktualisiert Ihre Konfiguration.
Maschineneinrichtung schlägt fehl
- Stellen Sie sicher, dass der SSH-Benutzer sudo-Zugriff ohne Passwort hat, oder konfigurieren Sie
NOPASSWDfür die erforderlichen Befehle - Überprüfen Sie den verfügbaren Speicherplatz auf dem Server
- Führen Sie den Befehl mit
--debugfür ausführliche Ausgabe aus:rdc config machine setup --name server-1 --debug
Distributionsspezifische Einrichtungsprobleme
Die fünf offiziell unterstützten Server-Betriebssysteme (Ubuntu 24.04, Debian 13, Fedora 43, openSUSE Leap 16.0, Oracle Linux 10) werden mit unterschiedlichen Sicherheitsrichtlinien und Paketmanagern ausgeliefert. Die meisten Einrichtungen funktionieren reibungslos; die folgenden Fälle behandeln die Ausnahmen.
SELinux-Verweigerungen (Fedora 43, Oracle Linux 10)
Beide laufen mit SELinux im Enforcing-Modus. rdc setup installiert keine benutzerdefinierte SELinux-Richtlinie; der pro-Repository-Docker-Daemon läuft im Standard-Kontext container_t. Wenn das Setup mit AVC-Verweigerungen fehlschlägt, prüfen Sie das Audit-Log und identifizieren Sie die Domain:
sudo ausearch -m AVC -ts recent | head -40
# Oder:
sudo tail -f /var/log/audit/audit.log | grep AVC
Zeigt eine Verweigerung auf das renet-Binary oder einen bestimmten Dateipfad, ist die Lösung fast immer ein Relabeling (restorecon -v /path) statt SELinux zu deaktivieren. Als vorübergehende Abhilfe während der Untersuchung versetzt sudo setenforce 0 das System in den permissiven Modus. Aktivieren Sie ihn mit sudo setenforce 1 wieder, sobald Sie bestätigen, dass das Relabeling dauerhaft ist.
AppArmor-Verweigerungen (Ubuntu 24.04, openSUSE Leap 16.0)
Beide laufen standardmäßig mit AppArmor; der pro-Repository-Docker-Daemon verwendet das Standard-Container-Profil. Wenn ein Container innerhalb eines Repositories blockiert wird:
dmesg | grep -i apparmor
sudo aa-status
CRIU ist der bekannte Fall, der AppArmor auslöst. Renet setzt automatisch security_opt: apparmor=unconfined für Container mit dem Label rediacc.checkpoint=true. Für alles andere sollten Sie keine AppArmor-Profile manuell konfigurieren müssen. Siehe die CRIU-Hinweise in Regeln von Rediacc.
Fehlersignaturen des Paketmanagers
| Betriebssystem | Paketmanager | Typischer Fehler | Lösung |
|---|---|---|---|
| Ubuntu / Debian | apt-get | File has unexpected size (N != M). Mirror sync in progress? | Cloudflare-Edge-Cache hinter dem Origin. apt-get update nach ~15 s wiederholen; die Integritätsprüfung besteht beim nächsten Poll. |
| Fedora / Oracle | dnf | Problem: nothing provides rediacc-cli | Die auf dem Datenträger zwischengespeicherten RPM-Repository-Metadaten sind veraltet. Führen Sie sudo dnf clean all && sudo dnf makecache aus. |
| openSUSE | zypper | Repository 'rediacc' needs to be refreshed. | Führen Sie einmalig sudo zypper refresh rediacc aus; nachfolgende Installationen sollten dann funktionieren. |
btrfs-Modul fehlt (RHEL 10 / Rocky Linux 10 / AlmaLinux 10)
Wenn rdc config machine setup oder renet system check-btrfs mit folgendem Fehler abbricht:
Module btrfs not found
…läuft der Server mit dem Standard-Kernel von RHEL 10, der ohne das integrierte btrfs-Modul ausgeliefert wird. Dies ist kein Rediacc-Fehler; RHEL 10 hat btrfs absichtlich entfernt. Die Lösung ist, stattdessen Oracle Linux 10 zu verwenden. Oracle 10 verwendet standardmäßig den Unbreakable Enterprise Kernel (UEK), der btrfs beibehält. Siehe Anforderungen — Warum UEK? für die vollständige Erklärung.
Repository-Erstellung schlägt fehl
- Überprüfen Sie, ob die Einrichtung abgeschlossen wurde: Das Datastore-Verzeichnis muss existieren
- Überprüfen Sie den Speicherplatz auf dem Server
- Stellen Sie sicher, dass die renet-Binary installiert ist (führen Sie die Einrichtung bei Bedarf erneut aus)
Services starten nicht
- Überprüfen Sie die Rediaccfile-Syntax: Es muss gültiges Bash sein
- Stellen Sie sicher, dass Ihr Rediaccfile
renet compose --verwendet (nichtdocker compose) - Überprüfen Sie, ob Docker-Images erreichbar sind (erwägen Sie
renet compose -- pullinup()) - Überprüfen Sie die Container-Logs über den Docker-Socket des Repositories:
rdc term connect -m server-1 -r my-app -c "docker logs <container-name>"
Oder alle Container anzeigen:
rdc machine containers --name server-1
Zugriff-verweigert-Fehler
- Repository-Operationen erfordern Root-Rechte auf dem Server (renet läuft über
sudo) - Überprüfen Sie, ob Ihr SSH-Benutzer in der
sudo-Gruppe ist - Stellen Sie sicher, dass das Datastore-Verzeichnis die richtigen Berechtigungen hat
Docker-Socket-Probleme
Jedes Repository hat seinen eigenen Docker-Daemon. Wenn Sie Docker-Befehle manuell ausführen, müssen Sie den korrekten Socket angeben:
# Mit rdc term (automatisch konfiguriert):
rdc term connect -m server-1 -r my-app -c "docker ps"
# Oder manuell mit dem Socket:
docker -H unix:///var/run/rediacc/docker-2816.sock ps
Ersetzen Sie 2816 durch die Netzwerk-ID Ihres Repositories (zu finden in rediacc.json oder rdc repo status).
docker run hat kein Netzwerk, apt update schlägt fehl, curl hängt
Innerhalb einer Repository-Shell erhalten Sie, wenn Sie einen Container ohne --network host starten, einen isolierten Container, der nur über ein Loopback-Interface verfügt, kein DNS und keine ausgehende Konnektivität hat. Befehle wie apt update, pip install, curl https://... oder jeder Netzwerk-Abruf schlagen sofort mit DNS-Fehlern fehl.
Dies ist beabsichtigt. Rediaccs Netzwerkmodell ist Host-Networking für jeden Dienst, durchgesetzt von renet compose. Eine standardmäßige Docker-Bridge mit NAT würde die Loopback-Isolation auf Kernel-Ebene umgehen, die verhindert, dass ein Repo die Dienste eines anderen Repos erreicht, weshalb der pro-Repo-Docker-Daemon mit "bridge": "none" und "iptables": false konfiguriert ist. Es gibt keine routebare Bridge, an die sich ein einfacher docker run-Container anhängen könnte.
Um in einem Ad-hoc-Container Netzwerkzugriff zu erhalten, verwenden Sie Host-Networking:
# Inside a repository shell (rdc term connect -m <machine> -r <repo>)
docker run --rm --network host -it ubuntu bash
# Now apt update, curl, pip install all work.
Verwenden Sie für Produktionsdienste ein Rediaccfile mit renet compose anstelle von reinem docker run. renet compose injiziert automatisch network_mode: host, Dienst-IP-Labels und Traefik-Routing-Labels. Siehe Dienste für Details.
VS Code Permission Denied bei Sandbox-Dateien
Beim Verbinden mit rdc vscode connect -m <machine> -r <repo> sind Ihnen nach einer vorherigen VS-Code-Sitzung möglicherweise Fehler wie scp: .../.vscode-server/vscode-cli-*.tar.gz: Permission denied begegnet. Dies wurde durch gemischte Dateibesitzverhältnisse innerhalb des Sandbox-Verzeichnisses verursacht, das Dateien enthielt, die sowohl von Ihrem SSH-Benutzer als auch vom internen rediacc-Benutzer geschrieben wurden.
Moderne Versionen von renet beheben dies wie folgt:
- Der pro-Repo-Sandbox-Workspace (
/mnt/rediacc/.interim/sandbox/<repo>/) wird mit der Grupperediaccund gesetztem Set-Group-ID-Bit (Modus2775) angelegt, sodass jede darunter geschriebene Datei die korrekte Gruppe erbt. - Innerhalb der Sandbox-Laufzeit wird umask
002angewandt, sodass neue Dateien gruppen-schreibbar (0664/0775) erstellt werden. - Beim Start wird ein vorhandener
.vscode-server/-Unterbaum normalisiert, sodass veraltete Dateien aus der Zeit vor dem Fix automatisch repariert werden.
Falls weiterhin Berechtigungsfehler auftreten, starten Sie den Docker-Daemon des Repos einmal mit sudo systemctl restart rediacc-docker-<network-id> aus einer Shell auf der Maschine neu, damit der Normalisierungsdurchlauf erfolgt, und versuchen Sie dann erneut rdc vscode connect.
Daemon startet nach einem renet-Upgrade nicht
Vor jedem Start schreibt renet daemon start-foreground daemon.json und containerd.toml im Konfigurationsverzeichnis des Repositories anhand der aktuellen Vorlagen neu, sodass ein Repository, dessen Konfiguration von einer älteren renet-Version erzeugt wurde, das neue Format automatisch übernimmt. Sie müssen keinen Migrationsbefehl ausführen und die systemd-Unit nicht manuell neu generieren. Starten Sie einfach den Dienst neu:
sudo systemctl restart rediacc-docker-<network-id>
Falls die Unit weiterhin fehlschlägt, prüfen Sie das Journal auf einen konkreten Fehler:
sudo journalctl -u rediacc-docker-<network-id> --no-pager -n 50
Container auf falschem Docker-Daemon erstellt
Wenn Ihre Container auf dem Docker-Daemon des Host-Systems statt auf dem isolierten Daemon des Repositories erscheinen, ist die häufigste Ursache die Verwendung von sudo docker innerhalb eines Rediaccfiles.
sudo setzt Umgebungsvariablen zurück, sodass DOCKER_HOST verloren geht und Docker auf den System-Socket (/var/run/docker.sock) zurückfällt. Rediacc blockiert dies automatisch, aber falls Sie darauf stoßen:
- Verwenden Sie
dockerdirekt, Rediaccfile-Funktionen laufen bereits mit ausreichenden Rechten - Falls Sie sudo verwenden müssen, nutzen Sie
sudo -E docker, um Umgebungsvariablen beizubehalten - Überprüfen Sie Ihr Rediaccfile auf
sudo docker-Befehle und entfernen Sie dassudo
Terminal funktioniert nicht
Wenn rdc term kein Terminal-Fenster öffnen kann:
- Verwenden Sie den Inline-Modus mit
-c, um Befehle direkt auszuführen:rdc term connect -m server-1 -c "ls -la"CLI-Referenz: rdc term connect - Erzwingen Sie ein externes Terminal mit
--external, wenn der Inline-Modus Probleme bereitet - Unter Linux stellen Sie sicher, dass
gnome-terminal,xtermoder ein anderer Terminal-Emulator installiert ist
Diagnose ausführen
rdc doctor
Dieser Befehl überprüft Ihre Umgebung, renet-Installation, Konfiguration und Authentifizierungsstatus. Jede Prüfung meldet OK, Warning oder Error mit einer kurzen Erklärung.