poudriere und jails

Mardor

Well-Known Member
Hallo,

ich möchte die via poudriere erstellten ports in meinem jail benutzen.

Deshalb habe ich ersten Schritt das poudriere HEAD Verzeichnis via nullfs in den Pfad für das Jail gemountet
Code:
root@testmonkey /usr/local/poudriere/ports/HEAD: mount_nullfs -o ro /usr/local/poudriere/ports/HEAD/ /usr/jails/testjail/usr/ports

Danach habe ich im jail folgende aufgerufen, erhalte aber eine Fehlermeldung

Code:
root@testjail:~ # pkg search pkg
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:11:amd64/quarterly, please wait…
pkg: Error fetching http://pkg.FreeBSD.org/FreeBSD:11:amd64/quarterly/Latest/pkg.txz: No address record
A pre-built version of pkg could not be found for your system.
Consider changing PACKAGESITE or installing it from ports: ‘ports-mgmt/pkg’.

Ich bin davon ausgegangen, dass ich im Jail keine Einstellungen treffen muss da ich das das Ports/Head Verzeichnis inden Standard Ports Pfad im Jail <jail>/usr/ports kopiert habe.

Liege ich da falsch ?
 
Damit du Packages nutzen kannst, benötigst du pkg. pkg wird nicht mitgeliefert (es wird nur pkg-static mitgeliefert), weshalb versucht wird, pkg aus dem Netz zu installieren. Deine Jail hat aber keinen Internetzugriff.

Zudem habe ich den Eindruck, dass du ports und packages verwechselst. Du mountest die Ports in die Jail, nicht aber die Packages. Mit den Ports erstellst du aber Packages. Diese möchtest du in der Jail nutzen, nicht die Ports. Lies dir mal Punkt 4.6.2 [1], dort wird erklärt, was du einstellen musst. :)

HTH

[1] https://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/ports-poudriere.html
 
Hallo Columbo0815,

du hast natürlich recht, ich habe in der Vergangenheit immer die ports in die Jails gemountet und dann in den Jails die ports mit portmaster kompiliert. Packages sind natürlich was anderes als Ports.

In meiner jetzigen Konfiguration möchte ich jedoch nicht von einem Jail in irgendeiner Weise einen Zugriff vom Jail auf den Host erlauben. Schon gar nicht über einen Webserver auf den Hostsystem. Am liebsten wäre es mit die Packages in den Jail zu mounten.

Ich habe jetzt folgendes im INet gefunden:

Code:
poudriere: {
    url: "file:///usr/local/poudriere/data/packages/freebsd_10-1x64-HEAD",
    mirror_type: "srv",
    signature_type: "pubkey",
    pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
    enabled: yes,
    priority: 100
}

Wenn ich die Pfade verändere sollte dies hoffentlich funktionieren.

Liege ich da richtig ?

Gruß Mardor
 
Moin,

wenn du nur eine Jail hast, könntest du die Packages vom Host aus mit Poudriere direkt in die Jail erstellen lassen, denn ein Nullfs-Mount ist ja (theoretisch) auch ein Zugriff auf den Host. Zusätzlich musst du dann noch der Jail sagen, wo die Packages liegen. Mit dem im Netz gefundenen "Code" konfigurierst du ja lediglich poudriere.

Alternativ - so mache ich das, da ich grundsätzlich die offiziellen Packages nutze und nur vereinzelte Ports selbst baue - könntest du "pkg add /da/wo/die/packages/liegen/foobar.txz" in der Jail ausführen und so die Packages manuell installieren.
 
Moin,
wenn du nur eine Jail hast, könntest du die Packages vom Host aus mit Poudriere direkt in die Jail erstellen lassen, denn ein Nullfs-Mount ist ja (theoretisch) auch ein Zugriff auf den Host. Zusätzlich musst du dann noch der Jail sagen, wo die Packages liegen. Mit dem im Netz gefundenen "Code" konfigurierst du ja lediglich poudriere.
Nein, ich habe ca. 10 Jails, aber deine genannte Lösung gefällt mir sehr gut.

Alternativ - so mache ich das, da ich grundsätzlich die offiziellen Packages nutze und nur vereinzelte Ports selbst baue - könntest du "pkg add /da/wo/die/packages/liegen/foobar.txz" in der Jail ausführen und so die Packages manuell installieren.

Das ist natürlich genau das was ich wollte:
Code:
 mount_nullfs -o ro /usr/local/poudriere/ports/HEAD/ /usr/jails/testjail/usr/local/packages
Und dann im Jail
Code:
pkg add /usr/local/packages/cmdwatch
Ich werde heute Abend gleich mal testen.

Vielen Dank für den Tipp.
 
Hi,

ich hätte leider noch ne dumme Frage. Ich habe sowohl den Pfad:

- /usr/local/poudriere/data/packages/11-2x64-HEAD/real_1536816553/ALL/<package>.txz
- /usr/local/data/cache/11-2x64-HEAD/<package>.txz

Ich gehe davon aus, dass ich mit mount_nullfs den zweiten Pfad benutze oder wo liegt zwischen den Pfaden der Unterschied.

Gruß Mardor
 
Moin,

ich würde nur den ersten Pfad nutzen. Dort liegen die fertigen Packages. Bei dem zweiten Pfad dürfte es sich lediglich um Dateien handeln, die gecached wurde.

HTH
 
Hi Columbo0815,

wenn ich das Paket mit pkg add hinzufügen will erhalte ich "Signature for pkg not available".

Werden eigentlich die Updates dann mit "pkg upgrade" automatisiert im Jail aktualisiert oder muss das dann jedes mal manuell über pkg add geschehen ?
 
Moin,

pkg sucht, soweit du nicht manuell installierst, in dem konfigurierten Pfad nach Packages. Das ist per default im Netz. Damit er das nicht macht, musst du die Dinge ändern, die im Handbuch (siehe oben) beschrieben werden.

Wegen der Fehlermeldung: Ich vermute, dass du dein "PKG repo" signierst. Den Schlüssel dazu kennt deine Jail nicht. Das musst du dann natürlich ändern. Da ich selbst meine eigenen Packages nicht signiere, kann ich dir nicht sagen, wie du das der Jail beibringst.
 
Hallo,

leider funktioniert es immer noch nicht und ich habe trotz mehrerer Stunden testen keine Lösung gefunden. Vielleicht hast du/Ihr noch eine Idee.

Die ist mein mountpoint:
Code:
/usr/local/poudriere/data/packages/11-2x64-HEAD/.real_1537004270/All on /usr/jails/testjail/usr/local/packages/Latest (nullfs, local)

Die Konfiguration im Jail sieht wie folgt aus:
Code:
root@testjail:/usr/local/etc # cat pkg/repos/FreeBSD.conf 
FreeBSD: {
    url: "file:///usr/local/packages/",
    mirror_type: "srv",
    signature_type: "pubkey",
    pubkey: "/usr/local/poudriere.cert",
    enabled: yes,
    priority: 100
}

Warum auch immer findet das System meine Pakete nicht
Code:
root@testjail:/usr/local/etc # pkg install vim-console
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from file:///usr/local/packages/, please wait...
pkg: Error fetching file:///usr/local/packages//Latest/pkg.txz: No such file or directory
A pre-built version of pkg could not be found for your system.
Consider changing PACKAGESITE or installing it from ports: 'ports-mgmt/pkg'.

Obwohl alle Pakete da sind:
Code:
root@testjail:/usr/local/etc # ls /usr/local/packages/Latest/
...    portmaster-3.19_15.txz
...
autoconf-wrapper-20131203.txz    gettext-runtime-0.19.8.1_1.txz    libevent-2.1.8_2.txz        pftop-0.7_8.txz            tmux-2.7.txz
automake-1.16.1.txz        gettext-tools-0.19.8.1.txz    libtool-2.4.6.txz        pkg-1.10.5_3.txz        vim-console-8.1.0342.txz
...

Auch wenn ich das Paket exakt angebe:
Code:
root@testjail:/usr/local/etc # pkg install /usr/local/packages/Latest/pkg-1.10.5_3.txz
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from file:///usr/local/packages/, please wait...
pkg: Error fetching file:///usr/local/packages//Latest/pkg.txz: No such file or directory
A pre-built version of pkg could not be found for your system.
Consider changing PACKAGESITE or installing it from ports: 'ports-mgmt/pkg'.

Aber auch wenn das Angeben des Paket inkl. Version funktionieren würde wäre ich mir nicht sicher ob denn ein Update dann mit "pkg upgrade" funktioniert.

Wie werden denn normalerweise Pakete installiert, wenn der Host die Pakete baut und auf dem System noch Jail vorhanden sind ? Tatsächlich über ein nginx ?

Gruß Mardor
 
Er sucht pkg.txz. Vorhanden ist bei dir aber pkg-1.10.5_3.txz. Installiere mal manuell mit "pkg-static add pkg-1.10.5_3.txz"
 
Ich glaube du hast ein durcheinander mit den Repo-Namen. Grundsätzlich würde ich nicht mischen und komplett mein eigenes Repo verwenden. Daher solltest du das FreeBSD Repo deaktivieren. Weiter für dein eigenes einen anderen Namen vergeben z.B:
/usr/local/etc/pkg/repos/my.conf
Code:
2018Q3: {
  url: "file:///data/poudriere/data/packages/112_x64-2018Q3-packages",
  enabled: yes
}
FreeBSD: {
  enabled: no
}
Der Inhalt des Verzeichnisses ist wie folgt:
Code:
ll /data/poudriere/data/packages/112_x64-2018Q3-packages
total 3
lrwxr-xr-x  1 root  wheel  11 Aug  8 14:29 All@ -> .latest/All
lrwxr-xr-x  1 root  wheel  19 Aug  8 14:29 digests.txz@ -> .latest/digests.txz
lrwxr-xr-x  1 root  wheel  14 Aug  8 14:29 Latest@ -> .latest/Latest
lrwxr-xr-x  1 root  wheel  16 Aug  8 14:29 meta.txz@ -> .latest/meta.txz
lrwxr-xr-x  1 root  wheel  23 Aug  8 14:29 packagesite.txz@ -> .latest/packagesite.txz
Zum Schluss mit "pkg update -f" das Repo komplett neu einlesen lassen.

Ich mounte das in die Jail wie folgt (Achtung der Pfad ist anderst!):
/etc/jail.conf
Code:
mount += "/data/poudriere/data/packages /data/jail/www/mnt/packages nullfs ro,late 0 0";
Gruss
 
Ich glaube du hast ein durcheinander mit den Repo-Namen. Grundsätzlich würde ich nicht mischen und komplett mein eigenes Repo verwenden. Daher solltest du das FreeBSD Repo deaktivieren. Weiter für dein eigenes einen anderen Namen vergeben z.B:
Moin,

im Wiki wird beschrieben, dass man das Repo FreeBSD nennen soll [1]. Nach meinem Verständnis wird dadurch der Default-Wert überschrieben, weshalb es nicht erforderlich ist, FreeBSD zu "disablen". Bei mir funktioniert das jedenfalls genau so.

Gruß

[1] https://wiki.bsdforen.de/howto:pkg
 
Mein Aufbau ist:
jail.conf enthält die Zeile: mount.fstab = "/etc/fstab.${host.hostname}";

als Beispiel: /etc/fstab.reverseproxy.local dann /poudriere/data/packages/112amd64-default/ /prison/reverseproxy.local/pkgs nullfs ro 0 0

und schlussendlich:

/prison/reverseproxy.local/usr/local/etc/pkg/repos/FreeBSD.conf
Code:
FreeBSD: { enabled: no }

Local: {
  url: "file:///pkgs/",
  mirror_type: "srv",
  enabled: yes
}

So muss man die Jails nur einmalig konfigurieren und hinterher geht alles. Welche Pakete die Jails sehen bestimmt man dann über die fstab außerhalb der Jail.

Ich würde prinzipiell davon abraten irgendwelche Standards zu überschreiben. Ich hatte z.B. auch schon mal ein Problem, dass das Paket, was poudriere gebaut hatte. hinterher nicht ging. Eine kleine Änderung in der Config und man wechselt zu den "offiziellen" Paketen.
 
Hallo,

ich denke ich habe jetzt alles angepasst, doch auch jetzt erhalte ich immer noch die gleiche Fehlermeldung. Irgendwas stimmt hier noch nicht und ich komme einfach nicht drauf.

Die Konfigurationsdatei im Jail inkl. erneutem einlesen:
Code:
root@testjail:~ # vi /usr/local/etc/pkg/repos/FreeBSD.conf

11-2x64: {
    url: "file:///usr/local/packages/",
    mirror_type: "srv",
    signature_type: "pubkey",
    pubkey: "/usr/local/poudriere.cert",
    enabled: yes,
    priority: 100
}

FreeBSD: {
  enabled: no
}

root@testjail:~ # pkg update -f
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from file:///usr/local/packages/, please wait...
pkg: Error fetching file:///usr/local/packages//Latest/pkg.txz: No such file or directory
A pre-built version of pkg could not be found for your system.
Consider changing PACKAGESITE or installing it from ports: 'ports-mgmt/pkg'.

Das Verzeichnis auf dem Host und der mount in den Jail
Code:
root@testmonkey /usr/local/poudriere/data/packages/11-2x64-HEAD: ll
total 1
lrwxr-xr-x  1 root  wheel  18 10 Sep. 10:58 .buildname@ -> .latest/.buildname
lrwxr-xr-x  1 root  wheel  20 10 Sep. 10:58 .jailversion@ -> .latest/.jailversion
lrwxr-xr-x  1 root  wheel  16 15 Sep. 11:37 .latest@ -> .real_1537004270
drwxr-xr-x  4 root  wheel   9 15 Sep. 11:37 .real_1537004270/
lrwxr-xr-x  1 root  wheel  11 10 Sep. 10:58 All@ -> .latest/All
lrwxr-xr-x  1 root  wheel  19 10 Sep. 10:58 digests.txz@ -> .latest/digests.txz
lrwxr-xr-x  1 root  wheel  14 10 Sep. 10:58 Latest@ -> .latest/Latest
lrwxr-xr-x  1 root  wheel  16 10 Sep. 10:58 meta.txz@ -> .latest/meta.txz
lrwxr-xr-x  1 root  wheel  23 10 Sep. 10:58 packagesite.txz@ -> .latest/packagesite.txz

root@testmonkey /usr/local/poudriere/data/packages/11-2x64-HEAD: mount_nullfs -o -ro /usr/local/poudriere/data/packages/ /usr/jails/testjail/usr/local/packages/

Die Ansicht im Jail und zur Sicherheit das nochmalige Einlesen:
Code:
root@testjail:~ # cd /usr/local/packages/
root@testjail:/usr/local/packages # ls
11-2x64-HEAD
root@testjail:/usr/local/packages # ls 11-2x64-HEAD/
.buildname        .latest            All            digests.txz        packagesite.txz
.jailversion        .real_1537004270    Latest            meta.txz

root@testjail:/usr/local/packages # pkg update -f
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from file:///usr/local/packages/, please wait...
pkg: Error fetching file:///usr/local/packages//Latest/pkg.txz: No such file or directory
A pre-built version of pkg could not be found for your system.
Consider changing PACKAGESITE or installing it from ports: 'ports-mgmt/pkg'.

Die Fehlermeldung über auf pkg oder pkg inkl. Versionsnummer
Code:
root@testjail:/usr/local/packages # pkg install pkg
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from file:///usr/local/packages/, please wait...
pkg: Error fetching file:///usr/local/packages//Latest/pkg.txz: No such file or directory
A pre-built version of pkg could not be found for your system.
Consider changing PACKAGESITE or installing it from ports: 'ports-mgmt/pkg'.

root@testjail:/usr/local/packages # pkg install /usr/local/packages/11-2x64-HEAD/Latest/pkg-1.10.5_3.txz
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from file:///usr/local/packages/, please wait...
pkg: Error fetching file:///usr/local/packages//Latest/pkg.txz: No such file or directory
A pre-built version of pkg could not be found for your system.
Consider changing PACKAGESITE or installing it from ports: 'ports-mgmt/pkg'.

Ich habe hier echt keine Idee mehr.

Gruß Mardor
 
Hallo Rob,

danke für den Tipp. Ich hatte den Mountpoint umgestellt aber den Pfad dann nicht angepasst.

Ich habe jetzt:
Code:
11-2x64: {
    url: "file:///usr/local/packages/11-2x64-HEAD/",
    mirror_type: "srv",
    signature_type: "pubkey",
    pubkey: "/usr/local/poudriere.cert",
    enabled: yes,
    priority: 100
}

FreeBSD: {
  enabled: no
}

Und nun kann ich zumindest pkg installieren.

-> So viel Wald mit so vielen Bäumen :)

Gruß Mardor
 
Zurück
Oben