Ein einzelnes Jail startet nicht beim Systemstart

thorwin

Well-Known Member
Moin,

ich habe hier einen Root-Server mit 10.2-RELEASE-p7, der einige Funktionen in Jails anbietet:
  1. MySQL-Datenbanken (nur intern ereichbar)
  2. Mail (postfix & dovecot)
  3. Webserver (Dokuwiki etc.)
Alle jails stehen korrekt in der jail.conf:

Code:
# ----- global settings
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;

mount.devfs;
devfs_ruleset = 4;
interface = lo1;

# --- read-only mount ports tree
mount += "/usr/ports /usr/jails/$name/usr/ports nullfs ro 0 0";

path = "/usr/jails/$name";

db {
  host.hostname = "database.my.domain";
  ip4.addr  = "lo1|X.X.X.a";
}

mailserver {
  host.hostname = "mailserver.my.domain";
  ip4.addr  = "lo1|10.X.X.b";
  ip4.addr += "re0|X.X.X.b";
  ip6.addr  = "re0|X:X:X:X:X::b";
}

webserver {
  host.hostname = "webserver.my.domain";
  ip4.addr  = "lo1|10.X.X.c";
  ip4.addr += "re0|X.X.X.c";
  ip6.addr  = "re0|X:X:X:X:X::c";
}
...

Die Adressen auf re0 sind jeweils öffentliche IPs (für IPv4 habe ich ein /29 zur Verfügung, für IPv6 ein /64). So weit so gut. Reboote ich das System, starten die Jails "db" und "webserver" ohne Probleme, "mailserver" startet nicht. Erst ein manuelles "service jail start mailserver" bringt es zum Laufen. In den Logfiles finde ich keine sachdienelichen Hinweise, hat jemand eine Idee? FWIW, jede jail liegt in einem eigenen ZFS dataset, die sind auch alle beim Systemstart sauber gemountet.

Nachtrag: in der rc.conf steht jail_enable="YES".
 
Braucht der Mailserver denn die Datenbank? Weil dann könnte ich mir vorstellen, dass der Mailserver versucht zu starten während die Datenbank noch nicht hochgefahren ist.

Es gibt auch noch den Eintrag jail_list in der rc.conf

jail_list="jabber database userweb"

Weiß aber jetzt gerade nicht, ob das auch die Reihenfolge bestimmt.
 
Ja, dovecot braucht die Datenbank. Allerdings verstehe ich nicht, wieso dann die ganze Jail nicht startet.

Ich habe jetzt mal exec.start umgebaut:
Code:
exec.start  = "sleep 2";
exec.start += "/bin/sh /etc/rc";

Damit scheint es zu gehen, zumindest hat es jetzt 2x funktioniert (und vorher reproduzierbar nicht). Gibt's da noch irgendwo races beim Starten von Jails?
 
Wenn du dem rc-System keine Reihenfolge für den Start der Jails vorgibst, wird automatisch eine ermittelt und die muss sind unbedingt deinen Wünschen entsprechen. Setze mal eine jail_list, falls du es noch nicht hast:
Code:
jail_list="db mailserver wwebserver"
Alternativ kann man in der jail.conf auch Abhängigkeiten verdrahten. Im Mailserver:
Code:
depend = db;
 
Ja, dovecot braucht die Datenbank. Allerdings verstehe ich nicht, wieso dann die ganze Jail nicht startet.

Die Jails gehen automatisch aus, wenn darin kein Dienst mehr läuft. Vermutlich versucht Dovecot sich zu verbinden und steigt bei nicht vorhandener Verbindung direkt wieder aus (ich hasse das, wenn Dienste so etwas tun! Kettenreaktion aller erster Güte.). Warum dann bei dir auch postfix dann nicht startet, das kannst nur du nachschauen. Es wird ja sicherlich irgendwas in den entsprechenden Logs der Dienste stehen.
 
Jetzt scheint es zu klappen (habe die jail_list entsprechend gesetzt), die Reihenfolge der jails ist immer gleich. Erklärt immer noch nicht genau, warum die mailserver-jail nicht startete, in den Logs findet sich tatsächlich gar nichts. Hier die letzten Zeilen auf /var/log/messages des Mailservers:
Code:
Nov 23 07:39:18 mailserver syslogd: exiting on signal 15
Nov 23 08:47:21 mailserver syslogd: kernel boot file is /boot/kernel/kernel
Nov 23 09:22:21 mailserver syslogd: exiting on signal 15
Nov 23 09:24:06 mailserver syslogd: kernel boot file is /boot/kernel/kernel
Nov 23 09:55:01 mailserver syslogd: exiting on signal 15
Nov 23 09:56:51 mailserver syslogd: kernel boot file is /boot/kernel/kernel

7:39:18 war der erste Reboot, so wie ich das lese hat er nicht mal versucht, die jail zu starten. Danach passt es ja immer ganz gut, 100 Sekunden für den kompletten Reboot passt.
 
Packt Dovecot seine Logs vllt. woanders hin?
Im Maillog des mailservers sehe ich auch zwischen dem ersten Reboot und dem späteren manuellen Starten des Jails nichts. Da ist einfach ein Loch von >8 Minuten. Nach dem manuellen Starten sehe ich ganz normal den Start von amavisd-new, dovecot, postfix etc.

Ich kann es nicht nachvollziehen, was da passiert ist, es sieht aber ja so aus, als würde es jetzt sauber laufen. Ich werde das beobachten und evtl. nochmal den einen oder anderen Reboot einstreuen...
 
Zurück
Oben