Ich werde den FreeBSD-Automounter in kleine Stücke hacken und sie in Öl kochen

40

Ich versuche, eine Hierarchie von Home-Verzeichnissen mehreren FreeBSD-Jails zugänglich zu machen. Die Basisverzeichnisse sind so konfiguriert, dass jedes ein eindeutiges ZFS-Dataset ist. Die Gefängnisse dienen der Entwicklungsarbeit und werden daher regelmäßig erstellt und vernichtet.

Mein erster Gedanke war, einfach nullfs zum Einhängen /homein das Gefängnis zu verwenden, aber nullfs bietet keine Möglichkeit, auf untergeordnete Dateisysteme zuzugreifen.

Mein zweiter Gedanke war, die Verzeichnisse über NFS zu exportieren und dann den Automounter-Daemon (amd) in jedem Gefängnis auszuführen. Das hätte einfach funktioniert ... wenn es möglich wäre, NFS-Bereitstellungen in einem Gefängnis durchzuführen. Aber es ist nicht.

Mein dritter Gedanke war, amd auf dem Host auszuführen und nullfs in den Jails bereitzustellen ... aber es gibt keine amd-Unterstützung für nullfs .

Mein vierter Gedanke war, die Verzeichnisse wieder mit NFS zu exportieren, da amd natürlich mit NFS funktioniert, oder? Anstatt ein Verzeichnis auf dem Ziel-Mountpoint zu mounten, mountet amd die Dinge leider lieber an einem temporären Ort ( /.amd_mnt/...) und erstellt dann einen Symlink ... was natürlich in der Jail-Umgebung nutzlos ist.

Vielleicht könnten Sie nullfs verwenden , um ein Unterverzeichnis von /.amd_mntfür das Gefängnis freizugeben ? Nein! Dies bringt uns zu meinem ersten Versuch zurück, bei dem wir feststellen, dass es keine Möglichkeit gibt, mit nullfs auf untergeordnete Dateisysteme zuzugreifen .

Und dann explodierte mein Kopf.

Gibt es eine gute Lösung für das, was ich versuche? Eine schlechte Lösung wäre, nach dem Booten des Jails ein Skript auszuführen, das mehrere nullfs-Mountpunkte für jedes Ausgangsverzeichnis erstellt. Dies ist jedoch recht umständlich. Es müsste regelmäßig ausgeführt werden, um neue Verzeichnisse oder entfernte Verzeichnisse zu berücksichtigen. Im Grunde müsste ich also einen schlechten Automounter schreiben.

Es muss einen besseren Weg geben. Hilf mir, Serverfault, du bist meine einzige Hoffnung!

UPDATE 1 : Mir ist der Gedanke gekommen , dass ich möglicherweise einen Teil des Problems damit lösen kann pam_mount, obwohl dies bestenfalls unvollständig wäre. Aus der Dokumentation geht auch nicht hervor, ob pam_mountder Ziel-Mountpoint automatisch erstellt werden kann oder nicht . Wenn der Mountpoint von vornherein vorhanden sein muss, ist diese Lösung nicht besser als der schlechte Automounter, den ich bereits vorgeschlagen habe.

UPDATE 2 : Wie in den folgenden Antworten erläutert, VFCF_JAILkönnen Jails NFS-Mounts durchführen, wenn sie das NFS-Dateisystem aktivieren. Unglücklicherweise verhält sich der Automounter weiterhin so, dass er nicht hilfreich ist. Wenn er in einem Gefängnis ausgeführt wird, scheint er sehr gut darin zu sein, sich so zu verkeilen, dass ein Neustart des Systems erforderlich ist, um den Prozesseintrag zu entfernen.

larsks
quelle
1
Und wenn Sie bereit sind, diese Funktionen auf FreeBSD zu portieren, wäre das fantastisch. Im Ernst, das Verhalten des Standard-Linux-Automounters wäre auch dafür perfekt, da er Dateisysteme tatsächlich auf dem Ziel-Mountpoint mountet, anstatt Symlinks zu verwenden.
Larsks
4
Ich beschuldige einen schweren Zeitmangel. Und vielleicht auch ein bisschen Motivation ...>.>
Ignacio Vazquez-Abrams
15
+1 Nur für den tollen Titel. :)
Shauna
4
Es geht mir darum, wie spezifisch Ihre spezielle Hinrichtungsmethode ist
Mark Henderson
2
Oh, @Wilshire, du bist kein Spaß.
Larsks

Antworten:

26

Hallo Lars! Das ist eine faszinierende Frage, die Sie gestellt haben, und nach einigen Recherchen habe ich möglicherweise eine Antwort für Sie gefunden.

Entsprechend diesem und anderen Posts kann es möglich sein, das VFCF_JAIL Attribut für den NFS-Dateisystemanbieter festzulegen, der es Jails theoretisch ermöglichen würde, NFS-Bereitstellungen durchzuführen. Dies kann wiederum dazu führen, dass man im Gefängnis herumläuft ... was dieses Problem ordentlich lösen würde.

Ich werde heute Abend versuchen, den Kernel neu zu erstellen, um zu sehen, wie es läuft. Dies ist nicht unbedingt die beste Lösung (da Sie sicherstellen müssen, dass diese Änderung auch bei zukünftigen Kernel-Updates beibehalten wird), aber es wäre interessant, wenn sie funktioniert.

Und merke dir...

           ___________    ____                                           
    ______/   \__//   \__/____\                             
  _/   \_/  :           //____\\                             
 /|      :  :  ..      /        \                         
| |     ::     ::      \        /                             
| |     :|     ||     \ \______/     Don't try to rebuild the
| |     ||     ||      |\  /  |        kernel remotely because
 \|     ||     ||      |   / | \         you know you're just
  |     ||     ||      |  / /_\ \        going to hose the server.
  | ___ || ___ ||      | /  /    \    
   \_-_/  \_-_/ | ____ |/__/      \   
                _\_--_/    \      /   
               /____             /  
              /     \           /    
              \______\_________/     
larsks
quelle
6
Danke, Lars; Ich wünschte, ich hätte Ihren Rat befolgt, da ich jetzt nicht auf den Server zugreifen kann und warten muss, bis ich nach Hause komme, um das auszuprobieren.
Larsks
10
+1 für die LOLs. Betrachten Sie dies auch als ein Recht auf Durchgang - Fahren Sie mitten in der Nacht auf Ihren Server, um KERNEL.OLD (oder KERNEL.GENERIC) zu booten sollte beginnen.) unterrichtet viele Lektionen ...
voretaq7
Ich halte auch eine net-bootfähige Kopie von mfsbsd bereit , die mich vor einer Reihe von Problemen mit dem Bootloader bewahrt hat.
larsks
1
Das Setzen von VFCF_JAILgemachten NFS-Mounts funktioniert, aber der Automounter stört mich weiterhin.
Larsks
1
Eh, ich benutze automount für Home-Verzeichnisse seit mehr als einem Jahrzehnt in verschiedenen Umgebungen und bin damit zufrieden. Wohlgemerkt, das ist der Linux (und Solaris) Automounter, nicht AMD.
Larsks