Jails aus verschlüsseltem Image starten - Skript

xcvb

Well-Known Member
Hallo die Damen und Herren.....

Folgendes Szenario:
Ich habe auf meiner Maschine 3 Jails installiert. 2 davon hab ich (dank asg´s howto & Handbuch) ganz normal installiert und die laufen auch beim booten mit an.
Die andere Jail liegt aber in einer Datei welche ich manuell einbinde, in etwa so:

Code:
[user@fbsd ~]$ sudo mdconfig -a -t vnode -f /home/user/geheim.f
Password:
md0
[user@fbsd ~]$ sudo geli attach -d -k /root/da2.key /dev/md0
Enter passphrase:
[user@fbsd ~]$ geli status
      Name  Status  Components
ad0s1b.eli     N/A  ad0s1b
   md0.eli     N/A  md0
[user@fbsd ~]$ sudo mount /dev/md0.eli /home/user/encrypted/
[user@fbsd ~]$ sudo mount_devfs devfs /home/user/encrypted/jail/secjail/dev
[user@fbsd ~]$ sudo /etc/rc.d/jail start secjail
Configuring jails:.
Starting jails: j-mach3.test.dom.
[user@fbsd ~]$ jls
   JID  IP Address      Hostname                      Path
     3  172.20.3.252    j-mach3.test.dom             /usr/home/user/encrypted/jail/secjail
     2  172.20.3.251    j-mach2.test.dom             /jail/data
     1  172.20.3.250    j-mach1.test.dom             /jail/www

Alle 3 Jails laufen prima. Aber ich möchte gern das der Code beim starten schon ausgeführt wird und ich nur noch das Passwort bzw. Passphrase eintippen muss.
Leider kenne ich mich mit Skripten nicht gut aus. Hab mir aber mal eins kopiert und ein bisschen modifiziert:

Folgendes Skript:
Code:
#!/bin/sh
#
#
#
#
# PROVIDE: jails
# REQUIRE: root mountcritlocal
# BEFORE: jail
# KEYWORD: shutdown

. /etc/rc.subr

name="jails"
rcvar='set_rcvar'
start_cmd="jails_start"
#stop_cmd="jails_stop"

jails_start()
{
        echo 'Setting up jails environment'
        /sbin/mdconfig -a -t vnode -f /home/user/geheim.f -u 0
        geli attach -d -k /root/da2.key /dev/md0
        mount /dev/md0.eli /home/user/encrypted/
        /sbin/mount_devfs devfs /home/user/encrypted/jail/secjail/dev
}

load_rc_config $name
run_rc_command "$1"


beim booten kommt dann aber folgendes:
Code:
/etc/rc: WARNING: $set_rcvar is not set properly - see rc.conf(5).
Configuring jails: .
Starting jails: j-mach1.test.dom j-mach2.test.domf : /home/user/encrypted/jail/secjail/dev: No such file or directory
/etc/rc: WARNING: /home/user/encrypted/jail/secjail/dev has a symlink as parent - not starting jail secjail

Okay, mein Skript ist wahrscheinlich für die Tonne. Aber kann mir evtl. jemand auf die Sprünge helfen? Zumindest ansatzweise????

LG
xcvb
 
Du hast die falschen Anführungszeichen für rcvar genommen. Probier mal ` statt '.
 
@Kamikaze:

Danke für den Tipp! Das Skript sieht nun wie folgt aus:
Code:
#!/bin/sh
#

#
#
# PROVIDE: jails
# REQUIRE: root mountcritlocal
# BEFORE: jail

. /etc/rc.subr

name="jails"
rcvar=`set_rcvar`

        echo 'Setting up jails environment'
        /sbin/mdconfig -a -t vnode -f /home/user/geheim.f -u 0
        geli attach -d -k /root/da2.key /dev/md0
        mount /dev/md0.eli /home/user/encrypted/
        /sbin/mount_devfs devfs /home/user/encrypted/jail/secjail/dev

load_rc_config $name
run_rc_command "$1"

Jetzt läuft es so wie ich es haben will. Beim hochfahren werde ich nach der Passphrase gefragt und alle 3 Jails werden nun gestartet. Prima :)

Allerdings bekomme ich beim hochfahren noch folgende Meldung:
Code:
/etc/rc: WARNING: $jails_enable is not set properly - see rc.conf(5).
/etc/rc: WARNING: $jails_enable is not set properly - see rc.conf(5).

Vielleicht ein Fehler in meiner rc.conf?
Code:
[user@fbsd ~]$ cat /etc/rc.conf |grep jail
jail_enable="YES"
jail_interface="xl0"
jail_devfs_enable="YES"
jail_list="www data secjail"
jail_www_rootdir="/jail/www"
jail_www_hostname="j-mach1.test.dom"
jail_www_ip="172.20.3.250"
jail_www_devfs_enable="YES"
jail_www_exec="/bin/sh /etc/rc"
jail_data_rootdir="/jail/data"
jail_data_hostname="j-mach2.test.dom"
jail_data_ip="172.20.3.251"
jail_data_devfs_enable="YES"
jail_data_exec="/bin/sh /etc/rc"
jail_secjail_rootdir="/home/user/encrypted/jail/secjail"
jail_secjail_hostname="j-mach3.test.dom"
jail_secjail_ip="172.20.3.252"
jail_secjail_devfs_enable="YES"
jail_secjail_exec="/bin/sh /etc/rc"
 
Steht doch da. Du solltest jails_enable="YES" in die rc.conf eintragen.

Allerdings ist das so ziemlicher Quatsch, denn diese Zeilen:
Code:
        echo 'Setting up jails environment'
        /sbin/mdconfig -a -t vnode -f /home/user/geheim.f -u 0
        geli attach -d -k /root/da2.key /dev/md0
        mount /dev/md0.eli /home/user/encrypted/
        /sbin/mount_devfs devfs /home/user/encrypted/jail/secjail/dev
werden eh immer aufgerufen. Da kannst du dir auch den ganzen rc.d kram sparen. Oder du machst es richtig.
 
denn diese Zeilen:

Code:

echo 'Setting up jails environment'
/sbin/mdconfig -a -t vnode -f /home/user/geheim.f -u 0
geli attach -d -k /root/da2.key /dev/md0
mount /dev/md0.eli /home/user/encrypted/
/sbin/mount_devfs devfs /home/user/encrypted/jail/secjail/dev

werden eh immer aufgerufen.

Wann? Wo? Das würde ja bedeuten das ich gar kein Skript brauche. Aber ohne Skript startet er den ganzen Kram ja nicht. Also kann es kein Quatsch sein, oder du drückst dich genauer aus was du damit meinst.
 
Das heißt beim Booten wird der Kram in dem Skript aufgerufen, egal was du an rc.d kram da noch drin hast oder was in der rc.conf steht. Auch Abhängigkeiten werden nicht aufgelöst, die Reihenfolge ist hier eher zufällig.

Schau dir noch mal ein paar andere Skripte an. Du hast nicht wirklich den Durchblick, wie das funktioniert.
 
Den Durchblick hab ich da in der Tat noch nicht wirklich. Da hast du Recht, aber ich hatte es oben ja schon erwähnt.

Hatte nur diese Anleitung gefunden und wollte es so in der Art machen: http://www.chruetertee.ch/blog/archive/2006/08/10/freebsd-service-jails-mit-unionfs-erstellen.html

Werde mir mal ein paar Skripte unter /etc/rc.d/ ansehen. Vielleicht verstehe ich es dann ja. Ansonsten bleibt es halt so das ich das DiskImage, den geli-Provider und die Jail nach´m booten manuell starte. Ist schließlich auch kein Beinbruch. Dachte halt nur das ich ein Skript brauche - welches über rc.conf eingebunden wird - was mir den ganzen Kram macht den ich sonst nach dem booten manuell mache. Naja mal sehen, erst mal ein bisschen lesen jetzt....

Aber erst mal Danke für deine Zeit/Antworten Kamikaze
 
Nur für das Protokoll:
RC ist in
- rc(8)
- rcorder(8)
- rc.subr(8)
dokumentiert :)
 
Ich dachte, nach Deiner letzten Aussage, das die Jails automatisch starten würden (nach Eingabe der passphrase)...
Nach kurzem überfliegen des Threads sollte es auch so gehen wie von Dir gedacht.

Die Fehlermeldung sagt Dir schon das Du jails_enable und nicht jail_enable nutzen solltest.

Ansonsten würde ich dem Script noch eine stop Funktion geben, um das Image auch wieder aus dem System zu entfernen wenn Du es runterfährst, oder die jail stopst. Auch wäre ein fsck des images nicht verkehrt, wenngleich der boot dann sicher etwas länger dauert. Aber das wäre geschmackssache.
 
Pack deinen Code in einen Funktionsblock den du jails_start nennst. Dann sollte das richtig funktionieren. Wenn du's sauber machen willst, solltest du auch noch einen jails_stop Block anlegen.
 
Hallo asg.

jails_enable hab ich nun ja schon in der rc.conf eingetragen. Passphrase wird beim booten abgefragt und die entsprechende dritte Jail wird mit gestartet.

Ist ja auch so wie ich es haben wollte, nur war ich mir nach dem zweiten und dritten Post von Kamikaze nicht mehr sicher ob das nun Quatsch ist wie ich´s gemacht hab oder nicht. Aber da es nun ja läuft kann es so verkehrt nicht sein. Okay, es geht bestimmt eleganter zu lösen, aber für einen Anfänger wird´s erst mal reichen....

Werde noch mal probieren eine Stop-Funktion mit einzubinden. Und natürlich die manpages, welche Yamagi gepostet hat, zu studieren....

Vielen Dank noch mal an deiner Arbeit am jail-howto
 
Back
Top