Ausführen eines hosted shell script innerhalb einer Jail

satriani

SysLion
Hallo,

ich habe einen Server mit unzähligen Jails und einen Schellscript, der aus einen triftigen Grund nicht in die Jails gehört.
Dennoch muss ich diesen Script vereinzelt innerhalb der Jails nutzen können.
Ich habe das ganze durch Funktion im Script wie folgt gelöst
Code:
jexec $jid sh -c "$(${0} $(echo $@ | sed 's/-j//; s/-J//; s/--jailed//'))"
Es scheint zu funktionieren, doch beim Zusehen auf diese Zeile kommt mir aus irgendeinem unerklärlichen Grund alles hoch :D
Vielleicht bin ich zZ. einfach übermüdet.

Ich würde über bessere Vorschläge sehr freuen

Ich gehe pennen, gute Nacht :)
 
Vielleicht das Script einfach via stdin an sh in der Jail übergeben
Code:
<script jexec $jid /bin/sh
oder auch
Code:
cat <<EOF | jexec $jid /bin/sh
...
EOF
 
Es scheint zu funktionieren, doch beim Zusehen auf diese Zeile kommt mir aus irgendeinem unerklärlichen Grund alles hoch :D
Ich würde über bessere Vorschläge sehr freuen

Was hast du denn überhaupt vor? Muss es eine Unterscheidung im Skript geben, ob es in einer Jail läuft oder nicht? Dann kannst du auch das sysctl security.jail.jailed auslesen.

Rob
 
Danke euch für die Antworten.
Wie gesagt, es handel sich hierbei um einen Shellscript der zB. Installation oder Update von Programmen übernimmt und verschiedene Auswertungen durchführt etc.
Er ist praktisch dafür da, um viele komplexe und lang zeitige Prozesse schnell und vollautomatisch durchzuführen. Doch wie gesagt, der hat in den Jails nichts zu suchen.
Dieser Script wir außerdem für den hosted System benötigt, also nicht nur speziell für Jails.
 
Stellt euch mal vor, Ihr baut einen script der zB. die Installation und vorgegebene Konfiguration von Postgresql für euch vollautomatisch übernimmt.
Der script liegt meinetwegen in /usr/local/bin im Host, ihr wollt den Script innerhalb einer Jail mit flags ausführen ohne es dort zu speichern. Praktisch vom Host aus in die Jail ausführen.
 
Na dann ist die Lösung von mordin doch schon mal die Eleganteste. Per Jexec direkt das Skript via STDIN im Kontext des Jails ausführen.
 
Jau. Ein Script oder generell eine ausführbare Datei vom Host kann im Jail nicht funktionieren. Weil sie eben aus dem Kontext des Jails nicht zugreifbar und damit für den Interpreter oder Image Activator unsichtbar ist. Es gibt nur zwei Wege darum zu hacken:
  • Den stdin-Trick, den @mordin schon genannt hat. Davon kann man noch Varianten bauen, zum Beispiel mit FIFOs.
  • Ein Programm, was sich selbst durch den jail_attach() Syscalls ans Jail hängt. Das geht aber nur in Sprachen, die auf das Syscall-Interface zugreifen können.
Davon mal abgesehen als vielleicht etwas überheblich klingenden, aber gut gemeinten Tipp: Erfinde die Welt nicht neu. Ansible, SaltStack und co. sind erprobte Lösungen und da haben sich schon Armeen genervter FreeBSD-Admins Gedanken gemacht, wie man sie mit Jails verheiratet bekommt. :)
 
Es gibt noch sysutils/jaildaemon, damit kannst du aus einem Jail heraus Programme auf dem Host ausführen.
 
Zurück
Oben