Dies ist eine alte Version des Dokuments!
REX3D mit OpenFOAM einrichten
Verwendung auf einem lokalen PC mit WSL
Verwendung eines Remote-Servers
Der Podman-Remote-Client ermöglicht es, von einem separaten Windows-Client mit einem Podman-Backend auf einem Linux-Server zu kommunizieren. Das Podman-Backend stellt dabei die für REX3D beziehungsweise PSI benötigte OpenFOAM-Umgebung bereit.
Aus Sicht von REX3D oder PSI verhält sich die entfernte Podman-Installation weitgehend wie eine lokale Installation.
Voraussetzungen
Die Verbindung basiert auf einem Client-Server-Modell.
Benötigt werden:
- ein Linux-Server oder eine Linux-VM,
- ein laufender SSH-Dienst auf dem Server,
- Podman auf dem Server,
- ein Windows-PC mit einer REX beziehungsweise PSI Version,
- OpenSSH und ein Podman-Client auf dem Windows-PC.
Die Anleitung geht von Ubuntu 24.04 oder einer vergleichbaren Ubuntu-Version mit systemd aus. Podman ist in den offiziellen Ubuntu-Paketquellen verfügbar.
In den folgenden Befehlen müssen diese Platzhalter ersetzt werden:
- <SERVER>: Hostname oder IP-Adresse des Servers
- <ADMIN>: administrativer Benutzer auf dem Server
- <e3d_usr>: unprivilegierter Benutzer für Podman und OpenFOAM
- <ssh_podman_e3d_usr>: Dateiname des SSH-Schlüssels
1. Podman auf dem Server installieren
1.1 Auf dem Server anmelden
Auf dem Windows-PC in PowerShell:
ssh.exe <ADMIN>@<SERVER>
1.2 Benötigte Pakete installieren
Auf dem Server:
sudo apt-get update sudo apt-get install -y podman uidmap slirp4netns fuse-overlayfs passt
Installation prüfen:
podman --version
2. Podman-Benutzer einrichten
2.1 Benutzer ohne Passwortanmeldung anlegen
Als Administrator auf dem Server:
sudo adduser \ --disabled-password \ --gecos "" \ <e3d_usr>
Der Benutzer erhält kein lokales Passwort. Die Anmeldung erfolgt später ausschließlich über einen SSH-Schlüssel.
2.2 Home-Dateisystem prüfen
findmnt -T /home/<e3d_usr>
Ein lokales Dateisystem wie ext4, xfs oder btrfs eignet sich für den Container-Storage.
Bei einem Homeverzeichnis auf NFS sollte für den Podman-Storage ein lokaler Pfad eingerichtet werden. NFS ist als Speicherort für den Rootless-Container-Storage in der Regel nicht geeignet.
2.3 User-systemd dauerhaft aktivieren
Damit die benutzerspezifischen systemd-Dienste auch ohne aktive SSH-Sitzung ausgeführt werden, muss für den Benutzer Linger aktiviert werden:
sudo loginctl enable-linger <e3d_usr>
Status prüfen:
loginctl show-user <e3d_usr> -p Linger
Erwartete Ausgabe:
Linger=yes
3. SSH-Schlüssel auf dem Windows-PC einrichten
Auf dem Windows-PC muss der OpenSSH-Client installiert sein.
3.1 OpenSSH prüfen
In PowerShell:
Get-Command ssh.exe Get-Command ssh-keygen.exe Get-Command scp.exe ssh.exe -V
Windows OpenSSH enthält unter anderem die Programme ssh, scp und ssh-keygen.
3.2 SSH-Schlüssel erzeugen
Pfad des neuen Schlüssels festlegen:
$KeyPath = "$env:USERPROFILE\.ssh\<ssh_podman_e3d_usr>"
Das Verzeichnis .ssh erstellen, falls es noch nicht vorhanden ist:
New-Item ` -ItemType Directory ` -Force ` -Path "$env:USERPROFILE\.ssh" | Out-Null
Prüfen, ob unter dem gewählten Namen bereits ein Schlüssel vorhanden ist:
Test-Path $KeyPath Test-Path "$KeyPath.pub"
Beide Befehle sollten False zurückgeben.
Falls bereits Dateien vorhanden sind, darf der folgende Befehl erst ausgeführt werden, nachdem geprüft wurde, ob diese Schlüssel noch benötigt werden.
SSH-Schlüssel erzeugen:
ssh-keygen.exe ` -t ed25519 ` -a 100 ` -f $KeyPath ` -C "<e3d_usr>@<SERVER>"
Dabei entstehen zwei Dateien:
<ssh_podman_e3d_usr> Privater Schlüssel <ssh_podman_e3d_usr>.pub Öffentlicher Schlüssel
Der private Schlüssel darf den Windows-PC, auf dem REX3D beziehungsweise PSI installiert ist, nicht verlassen.
3.3 Öffentlichen Schlüssel auf den Server kopieren
In PowerShell:
scp.exe `
"$KeyPath.pub" `
"<ADMIN>@<SERVER>:/tmp/<e3d_usr>.pub"
Anschließend als Administrator am Server anmelden:
ssh.exe <ADMIN>@<SERVER>
3.4 Schlüssel für den Podman-Benutzer installieren
Auf dem Server zunächst das SSH-Verzeichnis erstellen:
sudo install \ -d \ -m 700 \ -o <e3d_usr> \ -g <e3d_usr> \ /home/<e3d_usr>/.ssh
Den öffentlichen Schlüssel als authorized_keys installieren:
sudo install \ -m 600 \ -o <e3d_usr> \ -g <e3d_usr> \ /tmp/<e3d_usr>.pub \ /home/<e3d_usr>/.ssh/authorized_keys
Die temporäre Datei löschen:
sudo rm -f /tmp/<e3d_usr>.pub
Berechtigungen prüfen:
sudo ls -ld /home/<e3d_usr>/.ssh sudo ls -l /home/<e3d_usr>/.ssh/authorized_keys
3.5 SSH-Anmeldung als Podman-Benutzer testen
Auf dem Windows-PC:
ssh.exe `
-i "$env:USERPROFILE\.ssh\<ssh_podman_e3d_usr>" `
<e3d_usr>@<SERVER>
Nach der Anmeldung auf dem Server prüfen:
whoami id pwd
Erwartet werden unter anderem:
<e3d_usr> /home/<e3d_usr>
Die Ausgabe von id muss die Benutzer- und Gruppeninformationen des Benutzers <e3d_usr> anzeigen.
Optional kann die SSH-Verbindung direkt vom Windows-PC aus geprüft werden:
ssh.exe `
-i "$env:USERPROFILE\.ssh\<ssh_podman_e3d_usr>" `
<e3d_usr>@<SERVER> `
"whoami; podman --version"
4. Podman-Socket auf dem Server aktivieren
4.1 Podman als Benutzer testen
Als <e3d_usr> auf dem Server:
podman info
Der Befehl muss ohne sudo ausgeführt werden.
4.2 Podman-Socket aktivieren
Als <e3d_usr> auf dem Server:
systemctl --user enable --now podman.socket
Status prüfen:
systemctl --user status podman.socket --no-pager
4.3 Socket-Pfad prüfen
echo "$XDG_RUNTIME_DIR/podman/podman.sock" ls -l "$XDG_RUNTIME_DIR/podman/podman.sock"
Der Rootless-Podman-Socket liegt standardmäßig unter:
/run/user/<UID>/podman/podman.sock
Die numerische UID des Benutzers kann mit folgendem Befehl ermittelt werden:
id -u
Podman verwendet für den API-Socket die systemd-Socket-Aktivierung. Zusammen mit loginctl enable-linger bleibt der Socket auch ohne aktive SSH-Anmeldung verfügbar.
5. Podman-Remote-Verbindung auf dem Windows-PC einrichten
Auf dem Windows-PC muss ein Podman-Client installiert sein.
5.1 Verbindung hinzufügen
In PowerShell:
podman.exe system connection add `
rex3d-openfoam `
--identity "$env:USERPROFILE\.ssh\<ssh_podman_e3d_usr>" `
"ssh://<e3d_usr>@<SERVER>/run/user/<UID>/podman/podman.sock"
Dabei ist <UID> durch die numerische UID des Benutzers <e3d_usr> zu ersetzen.
Beispiel:
ssh://e3d@openfoam-server.example.org/run/user/1001/podman/podman.sock
5.2 Verbindung anzeigen
podman.exe system connection list
Die neue Verbindung sollte in der Liste erscheinen.
5.3 Verbindung testen
podman.exe `
--connection rex3d-openfoam `
info
Optional kann zusätzlich ein Testcontainer ausgeführt werden:
podman.exe `
--connection rex3d-openfoam `
run `
--rm `
docker.io/library/alpine:latest `
uname -a
Der Container wird auf dem Linux-Server und nicht auf dem Windows-PC ausgeführt.
6. Podman-Verbindung in REX3D konfigurieren
In den REX3D-Optionen muss der Name der zuvor angelegten Podman-Verbindung eingetragen werden.
Bei Verwendung der Befehle aus dieser Anleitung lautet der Verbindungsname:
rex3d-openfoam
Die verfügbaren Verbindungen können jederzeit mit folgendem Befehl angezeigt werden:
podman.exe system connection list
Sicherheitshinweise
Der Podman-API-Socket erlaubt die vollständige Verwaltung aller Container, Images, Volumes und Pods des Benutzers <e3d_usr>.
Der Socket darf daher nicht über einen ungeschützten TCP-Port veröffentlicht werden. Der Zugriff über SSH auf den benutzereigenen Unix-Socket ist die bevorzugte Variante.
Der Benutzer <e3d_usr> sollte:
- keine
sudo-Rechte besitzen, - nicht Mitglied privilegierter Gruppen sein,
- nur auf die benötigten Dateien und Verzeichnisse zugreifen können,
- ausschließlich für REX3D, PSI und die zugehörigen OpenFOAM-Container verwendet werden,
- einen eigenen SSH-Schlüssel verwenden,
- keine privaten Schlüssel anderer Benutzer erhalten.
Der private SSH-Schlüssel auf dem Windows-PC sollte:
- nur für diesen Verwendungszweck eingesetzt werden,
- nicht per E-Mail oder über gemeinsame Netzlaufwerke verteilt werden,
- durch geeignete Dateiberechtigungen geschützt werden,
- bei Verlust oder bei einem Gerätewechsel aus
authorized_keysentfernt werden.