Dies ist eine alte Version des Dokuments!
REX3D mit OpenFOAM einrichten
REX3D in der Kombination mit unserem OpenFOAM Solver arbeitet gekapselt in einer Linuxumgebung, so dass neben der erstmaligen Einrichtung für den Zugriff nichts weiter eingestellt werden muss. Die vorgefertigten Container werden von REX automatisch bereitgestellt und eingerichtet. Sie haben zwei Möglichkeiten zur Verwendung des OpenFOAM Solver:
- Als lokalen Linux Container in einer WSL Umgebung
- Remotezugriff auf einem Linux System
Die Einrichtung der jeweiligen Szenarien erfolgt im folgenden.
Verwendung auf einem lokalen PC mit WSL
Installation von WSL auf dem Client PC
Anpassen der Einstellungen in den REX3D Optionen
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.