<p>poudriere ne travaille pas dans une prison</p>

Créé le 18 sept. 2014  ·  8Commentaires  ·  Source: freebsd/poudriere

Il n'est pas possible de démarrer la poudrière en vrac au sein d'une prison :

# poudriere bulk -f /usr/local/etc/poudriere.d/ports-lists/Kunden-Ports -j Kunden

[00:00:00] ====>> Creating the reference jail... done
[00:01:04] ====>> Mounting system devices for Kunden-default
[00:01:04] ====>> Mounting ports/packages/distfiles
[00:01:04] ====>> Using packages from previously failed build
[00:01:04] ====>> Mounting packages from: /poudriere/data/packages/Kunden-default
[00:01:04] ====>> Mounting /var/db/ports from: /usr/local/etc/poudriere.d/Kunden-options
[00:01:04] ====>> Appending to make.conf: /usr/local/etc/poudriere.d/Kunden-make.conf
/etc/resolv.conf -> /poudriere/data/.m/Kunden-default/ref/etc/resolv.conf
[00:01:04] ====>> Starting jail Kunden-default
jail: jail_set: Operation not permitted
[00:01:04] ====>> Cleaning up
[00:01:04] ====>> Umounting file systems

J'ai suivi l'entrée du wiki autant que possible, mais je n'utilise pas ZFS. Par conséquent, ma configuration FreeBSD 10 pour la prison ressemble à :

poudriere {
  path="/usr/local/jail/poudriere";
  host.hostname="poudriere";
  ip6.addr="2a01:4f8:150:50a5::12/64";
        persist;
        children.max=99;
        allow.mount;
        allow.mount.devfs;
        allow.mount.procfs;
        allow.mount.zfs;
        allow.mount.nullfs;
        allow.mount.tmpfs;
        allow.raw_sockets;
        allow.socket_af;
        allow.sysvipc;
        allow.chflags;
        mount.devfs;
        enforce_statfs=1; 
  interface=re0;
  exec.start = "/bin/sh /etc/rc";
  exec.stop = "/bin/sh /etc/rc.shutdown";

}

Le message d'erreur indique qu'il n'est pas possible de créer une prison dans une prison. Par conséquent, je l'ai essayé manuellement - je suis capable de créer une prison dans une prison - non.

Si vous avez IPv6, il est possible de vous donner accès à la prison pour des tests supplémentaires.

Code_Defect Imported bug

Commentaire le plus utile

Le problème décrit dans ce numéro n'est pas lié à la Poudrière, mais à la conception des jails FreeBSD.

Problème/erreur

[00:00:00] ====>> Creating the reference jail... done
[00:00:04] ====>> Mounting system devices for 10-1R_amd64-default
[00:00:04] ====>> Mounting ports/packages/distfiles
[00:00:04] ====>> Using packages from previously failed build
[00:00:04] ====>> Mounting packages from: /poudriere/data/packages/10-1R_amd64-default
[00:00:04] ====>> Appending to make.conf: /usr/local/etc/poudriere.d/10-1R_amd64-make.conf
/etc/resolv.conf -> /poudriere/data/.m/10-1R_amd64-default/ref/etc/resolv.conf
[00:00:04] ====>> Starting jail 10-1R_amd64-default
jail: jail_set: Operation not permitted
[00:00:04] ====>> Cleaning up
[00:00:04] ====>> Umounting file systems

La description

À partir de man jail :

Les processus emprisonnés ne sont pas autorisés à conférer des autorisations supérieures à celles qu'ils ont
eux-mêmes sont donnés, par exemple, si une prison est créée avec allow.nomount, elle
n'est pas en mesure de créer une prison avec allow.mount défini. De même, un tel
les restrictions comme ip4.addr et securelevel ne peuvent pas être contournées dans l'enfant
prisons.

Il faut donc définir les adresses IP 127.0.0.1 et ::1 pour
loopback interface lo0 dans le système de super prison (prison Poudrière). Il en va de même pour toute autre adresse IP, vous ne pouvez utiliser les adresses IP que pour les prisons hiérarchiques définies pour la super prison.

Test (sur 10.1-STABLE)

Lors de l'exécution, celui-ci obtient l'erreur indiquée ci-dessus :

# jail -c persist 'name=10-1R_amd64-default' \ 
'path=/poudriere/data/.m/10-1R_amd64-default/ref' \ 
'host.hostname=10-1R_amd64-default' \ 
'ip4.addr=127.0.0.1'  'ip6.addr=::1' \ 
allow.socket_af allow.raw_sockets allow.chflags allow.sysvipc

Exécuter le code ci-dessous se passe sans problème (vous pouvez voir que
'ip4.addr=127.0.0.1' 'ip6.addr=::1' paramètres

# jail -c persist 'name=10-1R_amd64-default' \ 
'path=/poudriere/data/.m/10-1R_amd64-default/ref' \ 
'host.hostname=10-1R_amd64-default' \ 
allow.socket_af allow.raw_sockets allow.chflags allow.sysvipc

Le test peut être reproduit en supprimant la variable ${network} de la ligne
252 de /usr/local/share/poudriere/common.sh .

Solution (pour ezjail seulement, mais la même méthode peut être appliquée à /etc/jail.conf )

Ajoutez 127.0.0.1,::1 à la liste d'adresses IP de la prison dans
/usr/local/etc/ezjail/myjail_example_org :

export jail_myjail_example_org_ip="em0|192.168.3.6,lo0|127.0.0.1,lo0|::1"

Tous les 8 commentaires

Il échoue probablement parce qu'il n'a pas d'entrée 'ip4'. Pouvez-vous exécuter 'poudriere -x bulk ... 2>log' et soit télécharger le fichier journal, soit l'héberger quelque part que je puisse consulter ?

Vous pouvez voir le journal ici :
http://pkg.toco-domains.de/poudriere-in-jail-error.log

J'ai essayé votre suggestion avec "ip4=inherit;ip6=inherit;". Vous avez raison - après avoir défini ces options, cela fonctionne :)

Avec "ça marche" je veux dire :
Le message d'erreur a disparu. Je n'ai pas pu tester la construction des ports, car je n'ai pas d'adresse IPv4 à utiliser. poudriere ne parvient pas à récupérer les ports - il semble forcer le téléchargement via IPv4?

Je regarde le journal. L'erreur se produit dans cette ligne :

jail -c persist name=Kunden-default path=/poudriere/data/.m/Kunden-default/ref host.hostname=Kunden-default ip4.addr=127.0.0.1 ip6.addr=::1 allow.socket_af allow.raw_sockets allow.chflags allow.sysvipc

Si a changer la ligne en :

jail -c persist name=Kunden-default path=/mnt/ host.hostname=Kunden-default ip6.addr=2a01:4f8:150:50a5::12 allow.socket_af allow.raw_sockets allow.chflags allow.sysvipc

La prison est créée avec succès. Je peux aussi travailler avec. J'espère que ça aide.

Merci pour tout votre travail :)

Après avoir défini l'adresse IPv6 codée en dur, la construction d'un port commence.

Mais il s'arrête juste après la compilation du paquet pkg. Message d'erreur:

=== Démarrer ===

====> Compression des pages de manuel (compress-man)

======================= ===> Package de construction pour pkg-1.3.5.1
pkg-static : Impossible d'ouvrir "/var/run/ld-elf.so.hints" : aucun fichier ou répertoire de ce type
*** Code d'erreur 1

Arrêter.
make[1] : arrêté dans /usr/ports/ports-mgmt/pkg
*** Code d'erreur 1

Arrêter.
make : arrêté dans /usr/ports/ports-mgmt/pkg
====>> Nettoyage de wrkdir
===> Nettoyage pour pkg-1.3.5.1
la construction de /usr/ports/ports-mgmt/pkg s'est terminée le lundi 11 août 08:35:21 UTC 2014
temps de construction : 00:00:30
!!! échec de build rencontré !!!
[ root@poudriere /]# ls -lah /var/run/ld-elf.so.hints

=== Fin ===

Le fichier existe :

ls -lah /var/run/ld-elf.so.hints

-r--r--r-- 1 roue racine 199B 6 août 13:58 /var/run/ld-elf.so.hints

Donc je pense qu'il n'est pas copié correctement ?

Après quelques débogages, j'ai trouvé le problème avec les elf-hints. Lors de la création de la prison de référence, le chemin d'accès à la prison est utilisé pour la copie.

Dans mon cas, il s'agit de /usr/local/jail/poudriere/var/run -> et ce chemin n'existait pas depuis la prison.
Pour contourner ce problème, j'ai codé en dur la copie de /var/run. Cela semble fonctionner :)

Le problème décrit dans ce numéro n'est pas lié à la Poudrière, mais à la conception des jails FreeBSD.

Problème/erreur

[00:00:00] ====>> Creating the reference jail... done
[00:00:04] ====>> Mounting system devices for 10-1R_amd64-default
[00:00:04] ====>> Mounting ports/packages/distfiles
[00:00:04] ====>> Using packages from previously failed build
[00:00:04] ====>> Mounting packages from: /poudriere/data/packages/10-1R_amd64-default
[00:00:04] ====>> Appending to make.conf: /usr/local/etc/poudriere.d/10-1R_amd64-make.conf
/etc/resolv.conf -> /poudriere/data/.m/10-1R_amd64-default/ref/etc/resolv.conf
[00:00:04] ====>> Starting jail 10-1R_amd64-default
jail: jail_set: Operation not permitted
[00:00:04] ====>> Cleaning up
[00:00:04] ====>> Umounting file systems

La description

À partir de man jail :

Les processus emprisonnés ne sont pas autorisés à conférer des autorisations supérieures à celles qu'ils ont
eux-mêmes sont donnés, par exemple, si une prison est créée avec allow.nomount, elle
n'est pas en mesure de créer une prison avec allow.mount défini. De même, un tel
les restrictions comme ip4.addr et securelevel ne peuvent pas être contournées dans l'enfant
prisons.

Il faut donc définir les adresses IP 127.0.0.1 et ::1 pour
loopback interface lo0 dans le système de super prison (prison Poudrière). Il en va de même pour toute autre adresse IP, vous ne pouvez utiliser les adresses IP que pour les prisons hiérarchiques définies pour la super prison.

Test (sur 10.1-STABLE)

Lors de l'exécution, celui-ci obtient l'erreur indiquée ci-dessus :

# jail -c persist 'name=10-1R_amd64-default' \ 
'path=/poudriere/data/.m/10-1R_amd64-default/ref' \ 
'host.hostname=10-1R_amd64-default' \ 
'ip4.addr=127.0.0.1'  'ip6.addr=::1' \ 
allow.socket_af allow.raw_sockets allow.chflags allow.sysvipc

Exécuter le code ci-dessous se passe sans problème (vous pouvez voir que
'ip4.addr=127.0.0.1' 'ip6.addr=::1' paramètres

# jail -c persist 'name=10-1R_amd64-default' \ 
'path=/poudriere/data/.m/10-1R_amd64-default/ref' \ 
'host.hostname=10-1R_amd64-default' \ 
allow.socket_af allow.raw_sockets allow.chflags allow.sysvipc

Le test peut être reproduit en supprimant la variable ${network} de la ligne
252 de /usr/local/share/poudriere/common.sh .

Solution (pour ezjail seulement, mais la même méthode peut être appliquée à /etc/jail.conf )

Ajoutez 127.0.0.1,::1 à la liste d'adresses IP de la prison dans
/usr/local/etc/ezjail/myjail_example_org :

export jail_myjail_example_org_ip="em0|192.168.3.6,lo0|127.0.0.1,lo0|::1"

Super vieux bug écrasé!

c756e1822013a763c8a5e4ccee273794bd182e11 aide également.

Cette page vous a été utile?
0 / 5 - 0 notes