Poudriere-Pakete mit nullfs in Jail mounten (ZFS)

Sickboy

Müßiggänger
Hallo allerseits,

da Poudriere hier im Forum immer so gelobt wird, habe ich es jetzt unter FreeBSD 11 selber mal ausprobiert. Sehr nice. :)

Jedenfalls möchte ich die gebauten Pakete mittels Webserver aus einer Jail heraus verteilen. Damit die Jail (pkg.example.com) auf das data-Verzeichnis von Poudriere zugreifen kann, wollte ich es einfach mit nullfs durchschleifen. Leider klappt das nicht so ganz:
Code:
# mount_nullfs -o -ro /usr/local/poudriere/data /usr/local/jails/pkg/usr/poudriere
mount_nullfs: /usr/local/jails/pkg/usr/poudriere: Resource deadlock avoided

Wenn ich ohne die Parameter -o -ro mounte, sieht die Jail zwar die Unterverzeichnisse von data, aber keine Pakete. Ich nehme an, dass es an ZFS liegt:
Code:
# zfs list
[...]
storage/jails                     517M  1.68T   281M  /usr/local/jails
storage/jails/pkg                 236M  1.68T   236M  /usr/local/jails/pkg
storage/poudriere                1.75G  1.68T    96K  /storage/poudriere
storage/poudriere/data           51.4M  1.68T   104K  /usr/local/poudriere/data
[...]
 
Hallo Sickboy,

ich mounte seit Jahren mit nullfs Dateisysteme in jails. Das geht sogar so weit, dass die Dateisysteme selber auf dem Host von einem anderen Server stammen und dann per nullfs "weitergereicht" werden - bisher ohne Probleme.

Das sieht dann so aus /etc/jail.conf

blabla {
host.hostname = "blabla";
interface = "lo1";
ip4.addr = "192.168.1.1";
mount.fstab = "/etc/fstab.blabla";
}


und in /etc/fstab.blabla steht dann z.B.:

/home /local/jails/blabla/home nullfs rw 0 0

vielleicht hilft es Dir..

Grüße, Norbert
 
Ich habe dafür einen Eintrag in der /etc/jail.conf. Mache das schon einige Zeit so und funktioniert ohne Probleme. Hier ein Beispiel:
Code:
base {
  host.hostname = base;
  ip4.addr = 10.0.0.11;
  mount += "/data/poudriere/data/packages /data/jail/base/mnt/packages nullfs ro,late 0 0";
}
Gruss
 
Die Einträge in der /etc/jail.conf funktionieren zwar, nur sind alle Unterverzeichnisse innerhalb der Jail leer:
Code:
# ll /mnt/packages/packages/
total 0

Dabei sollte es so aussehen:
Code:
# ll /usr/local/poudriere/data/packages/
total 9
drwxr-xr-x  3 root  wheel  10 Jan  5 00:00 11amd64-local/

Gemountet habe ich:
Code:
pkg {
    host.hostname = "pkg.example.com";
    ip4.addr = "10.0.0.1";
    mount += "/usr/local/poudriere/data /usr/local/jails/pkg/mnt/packages nullfs ro,late 0 0";
}
 
Kannst du deine jail.conf mal zeigen? Auf die schnelle hilft evtl. folgendes:
Code:
mount.devfs;
devfs_ruleset = 4;
 
Meine /etc/jail.conf:
Code:
# Jailstart
exec.start="/bin/sh /etc/rc";

# Jailstop
exec.stop="/bin/sh /etc/rc.shutdown";

# Aufraeumen
exec.clean;

# Devfs mounten
mount.devfs;

# Netzwerkkarte
interface="jail0";

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

# Per Jail Einstellungen
pkg {
    host.hostname = "pkg.example.com";
    ip4.addr = "10.0.0.1";
    mount += "/usr/local/poudriere/data /usr/local/jails/pkg/mnt/packages nullfs ro,late 0 0";
}

Edit: Der Eintrag
Code:
devfs_ruleset = 4;
hat nichts geändert.
 
Hast du den Ordner /mnt/packages in der Jail erstellt? Versuch mal nur:
Code:
mount += "/usr/local/poudriere/data /usr/local/jails/pkg/mnt nullfs ro,late 0 0";
 
Ja, den Ordner /mnt/packages habe ich erstellt. Direkt nach /mnt zu mounten änder auch nichts:
Code:
root@pkg:/ # ll /mnt
total 3
drwxr-xr-x  2 root  wheel  2 Jan  2 21:18 .m/
drwxr-xr-x  2 root  wheel  2 Jan  2 21:18 cache/
drwxr-xr-x  2 root  wheel  2 Jan  2 21:18 logs/
drwxr-xr-x  2 root  wheel  2 Jan  2 21:18 packages/
drwxr-xr-x  2 root  wheel  2 Jan  2 21:18 queue/
drwxr-xr-x  2 root  wheel  2 Jan  2 21:18 wrkdirs/
root@pkg:/ # ll /mnt/packages/
total 0
 
Der "Fehler" liegt an ZFS:
Code:
$ zfs list
NAME                              USED  AVAIL  REFER  MOUNTPOINT
storage                          2.17G  1.68T   185M  /storage
storage/jails                     238M  1.68T  2.29M  /usr/local/jails
storage/jails/pkg                 236M  1.68T   236M  /usr/local/jails/pkg
storage/poudriere                1.75G  1.68T    96K  /storage/poudriere
storage/poudriere/data           51.4M  1.68T   104K  /usr/local/poudriere/data
storage/poudriere/data/packages  46.4M  1.68T  46.4M  /usr/local/poudriere/data/packages
[...]
Das Verzeichnis /usr/local/poudiere/data/packages liegt in einem eigenen Dataset. Das muss ich natürlich ebenfalls mounten:
Code:
pkg {
    host.hostname = "pkg.example.com";
    ip4.addr = "10.0.0.1";
    mount += "/usr/local/poudriere/data /usr/local/jails/pkg/mnt/packages nullfs ro,late 0 0";
    mount += "/usr/local/poudriere/data/packages /usr/local/jails/pkg/mnt/packages/packages nullfs ro,late 0 0";
}
Danke für eure Hinweise, nun habe ich wieder etwas gelernt. :)
 
Zurück
Oben