Jailed ZFS mit MariaDB - Henne-Ei-Problem?

foxit

Well-Known Member
Hallo zusammen

Für ein kleines Projekt wollte ich einen MariaDB Server installieren. Weil ich eigentlich immer alle Dienste in Jails unterteile, wollte ich dies auch hier so mache, also die Datenbank in einer Jail laufen lassen. Da ich zusätzlich ZFS Snapshots verwenden möchte, muss ich dies ja in der Jail erlauben und genau hier kommt mein Problem. Zuerst aber meine /etc/jail.conf:
Code:
  1 # --- DEFAULT
  2 exec.start = "/bin/sh /etc/rc";  # (1) JAIL
  3 exec.stop = "/bin/sh /etc/rc.shutdown";
  4 exec.clean;
  5
  6 mount.devfs;
  7 devfs_ruleset = 4;
  8 allow.raw_sockets = 1;
  9 interface = lo1;
 10
 11 path = "/data/jail/$name";
 12
 13 db1 {
 14  host.hostname = "db1";
 15  ip4.addr = "10.10.10.11";
 16  allow.mount;
 17  allow.mount.zfs;
 18  enforce_statfs = 1;
 19
 20  exec.poststart = "zfs jail $name rpool/data/mysql";  # (2) SYSTEM
 21  exec.poststart += "jexec -l $name ""zfs mount -a""";  # (3) SYSTEM
 22  exec.prestop = "zfs unjail $name rpool/data/mysql";
 23  exec.poststop = "umount /data/jail/db1/data/mysql";
 24
 25 }
So wie ich das sehe, wird zuerst "exec.start" (1) und dann die beiden "exec.poststart" (2)(3) gestartet. Problem ist nun aber, dass der SQL Server ja schon bei Punkt (1) gestartet werden soll (/etc/rc.conf) aber das ZFS Dataset (2)(3) noch gar nicht in der Jail zur Verfügung steht.

Leider habe ich nichts passendes in der "man jail" [1] dazu gefunden...

Bis jetzt habe ich nur diesen unschönen Würgaround gemacht. In der "rc.conf" setze ich ein:
Code:
# rc.conf: mysql_enable="NO"
... und rufe beim starten der Jail noch folgendes auf:
Code:
exec.poststart += "jexec -l $name ""service mysql-server onestart""";
Diese Lösung ist nicht wirklich schön daher hoffe ich ihr habt eine Idee.

Danke

[1] https://www.freebsd.org/cgi/man.cgi...opos=0&manpath=FreeBSD+11.1-RELEASE+and+Ports
 
Problem ist nun aber, dass der SQL Server ja schon bei Punkt (1) gestartet werden soll (/etc/rc.conf) aber das ZFS Dataset (2)(3) noch gar nicht in der Jail zur Verfügung steht.

Versuch doch mal, die Kommandos zum Einbinden des ZFS mittels exec.start vor dem Aufruf des rc-Systems auszuführen:
Code:
db1 {
...
exec.start = "zfs jail $name rpool/data/mysql";
exec.start += "jexec -l $name \"zfs mount -a\"";
exec.start += "/bin/sh /etc/rc";
}

Rob
 
Das geht leider nicht, da "exec.start" in der Jail ausgeführt wird:

Dumm von mir, nicht richtig gelesen.

Versuche doch, das ZFS aus dem Host heraus ins Jail zu mounten (prestart), dann das Jail starten und danach das ZFS zum Jail zu delegieren (poststart). Es sollte doch egal sein, wann man die Eigenschaft setzt, oder?

Rob
 
Versuche doch, das ZFS aus dem Host heraus ins Jail zu mounten (prestart), dann das Jail starten und danach das ZFS zum Jail zu delegieren (poststart).
Ja das geht scheinbar auch nicht. Erst wenn "exec.start" durchgelaufen ist, kann ich mounten etc. Du meinst so oder?
Code:
exec.prestart = "zfs jail $name rpool/data/mysql";
exec.prestart += "jexec -l $name ""zfs mount -a""";
Ich bekomme diese Fehlermeldung:
Code:
Starting jails: cannot start jail  "db1":
invalid jail id or name
usage:
  jail <jailid|jailname> <filesystem>

For the property list, run: zfs set|get

For the delegated permission list, run: zfs allow|unallow
jail: db1: zfs jail db1 rpool/data/mysql: failed
.
 
Du meinst so oder?
Nein, prestart fällt ja zum Delegieren (zfs jail ...) aus, da dort das Jail noch nicht existiert.

Ich meine sowas:
Code:
exec.prestart="zfs mount rpool/data/mysql /data/jail/$name/data/mysql" # wenn dieser Mountpoint stimmt
exec.poststart="zfs jail $name rpool/data/mysql"

Rob
 
Ich hatte jetzt nochmals Zeit dies anzuschauen. Dein Command funktioniert nicht. "zfs mount" ist so nicht möglich. Irgendwie alles was ich mit "mount" versuche, klappt nicht oder besser gesagt erst, wenn "/bin/sh /etc/rc" durchgelaufen ist.
 
Irgendwie alles was ich mit "mount" versuche, klappt nicht oder besser gesagt erst, wenn "/bin/sh /etc/rc" durchgelaufen ist.
Hmm, versuche es doch mal ohne prestart/poststart: Das Dateisystem bereits vorher von Hand zum Zielort mounten (vom Host aus) dann das Jail starten. Danach vom Host aus das ZFS ans Jail delegieren.

Wenn es so klappt, muss es auch mittels prestart/poststart-Hooks gehen.

Rob
 
Zurück
Oben