<p>poudriere no funciona en una cárcel</p>

Creado en 18 sept. 2014  ·  8Comentarios  ·  Fuente: freebsd/poudriere

No es posible iniciar poudriere bulk dentro de una cárcel:

# 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

He seguido la entrada de la wiki tanto como he podido, pero no uso ZFS. Por lo tanto, mi configuración de FreeBSD 10 para la cárcel se ve así:

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";

}

El mensaje de error indica que no es posible crear una cárcel dentro de una cárcel. Por lo tanto, lo probé manualmente, puedo crear una cárcel dentro de una cárcel, no poudriere.

Si tiene IPv6, es posible que le dé acceso a la cárcel para realizar más pruebas.

Code_Defect Imported bug

Comentario más útil

El problema descrito en este número no está relacionado con el Poudriere, sino con el diseño de las cárceles de FreeBSD.

Problema / error

[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

Descripción

Desde man jail :

Los procesos encarcelados no pueden conferir mayores permisos de los que
se dan, por ejemplo, si se crea una cárcel con allow.nomount,
no puede crear una cárcel con allow.mount configurado. Del mismo modo, tal
las restricciones como ip4.addr y securelevel no se pueden omitir en child
cárceles.

Por lo tanto, se deben definir las direcciones IP 127.0.0.1 y ::1 para
loopback interfaz lo0 en el súper sistema de cárcel (cárcel de Poudriere). Lo mismo ocurre con cualquier otra dirección IP. Solo puede usar las IP para cárceles jerárquicas que están configuradas para la súper cárcel.

Prueba (en 10.1-STABLE)

Cuando se ejecuta, este obtiene el error indicado anteriormente:

# 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

Ejecutar el código a continuación no tiene problemas (puede ver que
'ip4.addr=127.0.0.1' 'ip6.addr=::1' params se eliminan):

# 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

La prueba se puede reproducir eliminando ${network} variable de la línea
252 de /usr/local/share/poudriere/common.sh .

Solución (solo por ezjail , pero se puede aplicar el mismo método a /etc/jail.conf )

Agregue 127.0.0.1,::1 a la lista de IP de la cárcel en
/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"

Todos 8 comentarios

Probablemente esté fallando debido a que no tiene una entrada 'ip4'. ¿Puede ejecutar 'poudriere -x bulk ... 2> log' y cargar el archivo de registro o alojarlo en algún lugar que pueda ver?

Puedes ver el registro aquí:
http://pkg.toco-domains.de/poudriere-in-jail-error.log

Probé su sugerencia con "ip4 = heredar; ip6 = heredar;". Tiene razón: después de configurar estas opciones, funciona :)

Con "funciona" quiero decir:
El mensaje de error desapareció. No pude probar la construcción de puertos porque no tengo una dirección IPv4 para usar. poudriere no puede recuperar los puertos, ¿parece forzar la descarga a través de IPv4?

Echo un vistazo al registro. El error ocurre en esta línea:

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 cambia la línea a:

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 cárcel se crea con éxito. También puedo trabajar con él. Espero que esto ayude.

Gracias por todo tu trabajo :)

Después de configurar la dirección IPv6 codificada, comienza la construcción de un puerto.

Pero se detiene justo después de compilar el paquete pkg. Mensaje de error:

=== Inicio ===

====> Comprimir páginas de manual (compress-man)

======================= ===> Paquete de construcción para pkg-1.3.5.1
pkg-static: No se puede abrir "/var/run/ld-elf.so.hints": No existe tal archivo o directorio
*** Código de error 1

Detener.
make [1]: detenido en / usr / ports / ports-mgmt / pkg
*** Código de error 1

Detener.
hacer: detenido en / usr / ports / ports-mgmt / pkg
==== >> Limpieza de wrkdir
===> Limpieza para pkg-1.3.5.1
la compilación de / usr / ports / ports-mgmt / pkg finalizó el lunes 11 de agosto a las 08:35:21 UTC de 2014
tiempo de construcción: 00:00:30
!!! error de construcción encontrado !!!
[ root @ poudriere /] # ls -lah /var/run/ld-elf.so.hints

=== Fin ===

El archivo existe:

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

-r - r - r-- 1 rueda raíz 199B 6 de agosto 13:58 /var/run/ld-elf.so.hints

¿Entonces creo que no se ha copiado correctamente?

Después de un poco de depuración, encontré el problema con los elf-hints. Al crear la cárcel de referencia, la ruta a la cárcel se utiliza para copiar.

En mi caso, esto es / usr / local / jail / poudriere / var / run -> y esta ruta no existe desde dentro de la cárcel.
Como solución para mí, codifiqué la copia de / var / run. Esto parece funcionar :)

El problema descrito en este número no está relacionado con el Poudriere, sino con el diseño de las cárceles de FreeBSD.

Problema / error

[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

Descripción

Desde man jail :

Los procesos encarcelados no pueden conferir mayores permisos de los que
se dan, por ejemplo, si se crea una cárcel con allow.nomount,
no puede crear una cárcel con allow.mount configurado. Del mismo modo, tal
las restricciones como ip4.addr y securelevel no se pueden omitir en child
cárceles.

Por lo tanto, se deben definir las direcciones IP 127.0.0.1 y ::1 para
loopback interfaz lo0 en el súper sistema de cárcel (cárcel de Poudriere). Lo mismo ocurre con cualquier otra dirección IP. Solo puede usar las IP para cárceles jerárquicas que están configuradas para la súper cárcel.

Prueba (en 10.1-STABLE)

Cuando se ejecuta, este obtiene el error indicado anteriormente:

# 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

Ejecutar el código a continuación no tiene problemas (puede ver que
'ip4.addr=127.0.0.1' 'ip6.addr=::1' params se eliminan):

# 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

La prueba se puede reproducir eliminando ${network} variable de la línea
252 de /usr/local/share/poudriere/common.sh .

Solución (solo por ezjail , pero se puede aplicar el mismo método a /etc/jail.conf )

Agregue 127.0.0.1,::1 a la lista de IP de la cárcel en
/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"

¡Súper viejo bicho aplastado!

c756e1822013a763c8a5e4ccee273794bd182e11 también ayuda.

¿Fue útil esta página
0 / 5 - 0 calificaciones