<p>poudriere não trabalha na prisão</p>

Criado em 18 set. 2014  ·  8Comentários  ·  Fonte: freebsd/poudriere

Não é possível iniciar poudriere bulk dentro de uma prisão:

# 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

Eu segui a entrada do wiki tanto quanto possível, mas não uso ZFS. Portanto, minha configuração do FreeBSD 10 para a prisão se parece com:

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

}

A mensagem de erro indica que não é possível criar uma prisão dentro de outra. Portanto, tentei manualmente - sou capaz de criar uma prisão dentro de uma prisão, não poudriere.

Se você tiver IPv6, é possível dar-lhe acesso à prisão para mais testes.

Code_Defect Imported bug

Comentários muito úteis

O problema descrito nesta edição não está relacionado ao Poudriere, mas ao design das jaulas do FreeBSD.

Problema / erro

[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

Descrição

De man jail :

Processos presos não podem conceder permissões maiores do que eles
são fornecidos, por exemplo, se uma prisão for criada com allow.nomount,
não é capaz de criar uma prisão com allow.mount definido. Da mesma forma, tal
restrições como ip4.addr e securelevel não podem ser ignoradas na criança
prisões.

Portanto, deve-se definir os endereços IP 127.0.0.1 e ::1 para
loopback interface lo0 no sistema de super prisão (prisão de Poudriere). O mesmo acontece com qualquer outro endereço IP, você só pode usar os IPs para jaulas hierárquicas definidas para a super jaula.

Teste (em 10.1-ESTÁVEL)

Ao executar, este obtém o erro declarado acima:

# 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

A execução do código abaixo não apresenta problemas (você pode ver que
'ip4.addr=127.0.0.1' 'ip6.addr=::1' params são removidos):

# 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

O teste pode ser reproduzido removendo a variável ${network} da linha
252 de /usr/local/share/poudriere/common.sh .

Solução (por ezjail apenas, mas o mesmo método pode ser aplicado a /etc/jail.conf )

Anexar 127.0.0.1,::1 à lista de IP da prisão em
/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 comentários

Provavelmente está falhando por não ter uma entrada 'ip4'. Você pode executar 'poudriere -x bulk ... 2> log' e fazer o upload do arquivo de log ou hospedá-lo em algum lugar onde eu possa ver?

Você pode ver o log aqui:
http://pkg.toco-domains.de/poudriere-in-jail-error.log

Tentei sua sugestão com "ip4 = herdar; ip6 = herdar;". Você está certo - depois de definir essas opções, funciona :)

Com "funciona", quero dizer:
A mensagem de erro desapareceu. Não consegui testar a construção de portas, pois não tenho endereço IPv4 para usar. poudriere não consegue buscar as portas - parece forçar o download via IPv4?

Eu dou uma olhada no log. O erro ocorre nesta linha:

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

Se mudar a linha para:

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

A prisão foi criada com sucesso. Também posso trabalhar com isso. Eu espero que isso ajude.

Obrigado por todo o seu trabalho :)

Depois de definir o endereço IPv6 codificado, a construção de uma porta é iniciada.

Mas ele para logo após a compilação do pacote-pacote. Mensagem de erro:

=== Iniciar ===

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

========================= ===> Construindo pacote para pkg-1.3.5.1
pkg-static: Não é possível abrir "/var/run/ld-elf.so.hints": esse arquivo ou diretório não existe
*** Código de erro 1

Pare.
make [1]: interrompido em / usr / ports / ports-mgmt / pkg
*** Código de erro 1

Pare.
make: interrompido em / usr / ports / ports-mgmt / pkg
==== >> Limpando wrkdir
===> Limpeza para pkg-1.3.5.1
compilação de / usr / ports / ports-mgmt / pkg terminou em segunda-feira, 11 de agosto, às 08:35:21 UTC de 2014
tempo de construção: 00:00:30
!!! falha de construção encontrada !!!
[ root @ poudriere /] # ls -lah /var/run/ld-elf.so.hints

=== Fim ===

O arquivo existe:

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

-r - r - r-- 1 roda raiz 199B 6 de agosto 13:58 /var/run/ld-elf.so.hints

Então eu acredito que não foi copiado corretamente?

Depois de alguma depuração, encontrei o problema com as dicas do elfo. Ao criar a jaula de referência, o caminho para a jaula é usado para cópia.

No meu caso, é / usr / local / jail / poudriere / var / run -> e esse caminho não existe dentro da prisão.
Como solução alternativa para mim, codifiquei permanentemente a cópia de / var / run. Isso parece funcionar :)

O problema descrito nesta edição não está relacionado ao Poudriere, mas ao design das jaulas do FreeBSD.

Problema / erro

[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

Descrição

De man jail :

Processos presos não podem conceder permissões maiores do que eles
são fornecidos, por exemplo, se uma prisão for criada com allow.nomount,
não é capaz de criar uma prisão com allow.mount definido. Da mesma forma, tal
restrições como ip4.addr e securelevel não podem ser ignoradas na criança
prisões.

Portanto, deve-se definir os endereços IP 127.0.0.1 e ::1 para
loopback interface lo0 no sistema de super prisão (prisão de Poudriere). O mesmo acontece com qualquer outro endereço IP, você só pode usar os IPs para jaulas hierárquicas definidas para a super jaula.

Teste (em 10.1-ESTÁVEL)

Ao executar, este obtém o erro declarado acima:

# 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

A execução do código abaixo não apresenta problemas (você pode ver que
'ip4.addr=127.0.0.1' 'ip6.addr=::1' params são removidos):

# 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

O teste pode ser reproduzido removendo a variável ${network} da linha
252 de /usr/local/share/poudriere/common.sh .

Solução (por ezjail apenas, mas o mesmo método pode ser aplicado a /etc/jail.conf )

Anexar 127.0.0.1,::1 à lista de IP da prisão em
/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 velho bug esmagado!

c756e1822013a763c8a5e4ccee273794bd182e11 também ajuda.

Esta página foi útil?
0 / 5 - 0 avaliações