Ich habe kürzlich Open MPI installiert und es beschwert sich
PMIx has detected a temporary directory name that results
in a path that is too long for the Unix domain socket:
Temp dir: /var/folders/**/*****************************/T/openmpi-sessions-501@host*******************************/*****
Diese Frage schlägt die Einstellung TMPDIR
auf vor /tmp
. Ist das sicher? Bringt es andere Programme durcheinander?
Es kann Sicherheitslücken geben, die aus der unvorsichtigen Verwendung von/tmp
; Je nachdem, wie schwerwiegend der Fehler ist, können böswillige lokale Benutzer möglicherweise beliebige Dateien löschen oder möglicherweise sogar beliebigen Code unter Ihrem Benutzerkonto ausführen /tmp
. char sun_path[104]
Eine Lösung, die innerhalb der Grenze für Unix-Domain-Sockets bleibt (siehe /usr/include/sys/un.h
Definition), besteht darin, ein temporäres Verzeichnis zu erstellen und dieses für MPI zu verwenden:
$ mktemp -d /tmp/mpi-XXXXXXXX
/tmp/mpi-zUN9SQo6
Dadurch bleiben 86 Zeichen für die Socket-Datei übrig (104 minus eins für das abschließende NUL
minus 17).
Je nachdem, wo und wann Sie es einstellen, TMPDIR
könnten andere Programme leicht durcheinander gebracht werden, insbesondere tmux
oder screen
die dann möglicherweise nicht in der Lage sind, ihre Steuerbuchse zu finden. Setzen Sie die benutzerdefinierten TMPDIR
Einstellungen nach Möglichkeit so nah wie möglich an die MPI-Aufrufe, z. B. mit einer Shell-Funktion oder einem Alias nach dem Vorbild von
alias mpi4py='TMPDIR=$(mktemp -d /tmp/mpi-XXXXXXXX) mpi4py'
Dies würde für jeden Aufruf ein eindeutiges temporäres Verzeichnis erstellen; die Verzeichnisse darin /tmp
werden automatisch bereinigt. Wenn ein gemeinsam genutztes oder dauerhafteres Verzeichnis benötigt wird, /var/tmp
ist es normalerweise besser geeignet
$ mkdir /var/tmp/mympi
und stellen Sie sicher, dass das Verzeichnis nicht bereits existiert, falls ein viel zu cleverer lokaler Angreifer dieses Verzeichnis bereits erstellt hat (unwahrscheinlich, aber deshalb wurde es mktemp -d
erstellt). Dann könnte der Alias in Ihrem Shell-Profil etwa so aussehen
alias mpi4py='TMPDIR=/var/tmp/mympi mpi4py'
Diese Form ist wiederum besser geeignet, wenn zwischen verschiedenen MPI-Befehlsaufrufen ein gemeinsamer Zustand erforderlich ist.
Thrig
kein Hang
/private/tmp
wird regelmäßig beschnitten. Wenn ich nur einen festen tmp-Speicherort für eine bestimmte Anwendung haben möchte, würde ich wahrscheinlich nur/tmp/APPNAME_temp
diesen erstellen und verwenden.kein Hang
NoethersOneRing
TMPDIR
wieder auf den alten Wert? Wenn ich also verwenden möchte ,mpi4py
kann ich ändernTMPDIR
, tun, was auch immer, und dann einfach dieses Terminal schließen?NoethersOneRing
alias yourmpicommand='TMPDIR=$(mktemp -d /tmp/mpi-XXXXXXXX) yourmpicommand'
wie oben sein? Oder ist das etwas anderes?Thrig
alias
in Ihrer Shell-Konfiguration eine entsprechende Einstellung vornehmen; Das Terminal müsste nicht geschlossen werden, da die benutzerdefinierte Umgebung nur für den Befehl mit dem Alias gelten würde. Das Erlernen der Grundlagen von egbash
kann von Vorteil sein, wenn dies alles mysteriös erscheint.NoethersOneRing
mpiexec
, dannTMPDIR
würde jedes Mal, wenn ich laufe, ein neuer gesetzt werdenmpiexec
. Das scheint nicht das zu sein, was ich tun möchte. (Oder ist es?)Thrig