<p>poudriere не работает в тюрьме</p>

Созданный на 18 сент. 2014  ·  8Комментарии  ·  Источник: freebsd/poudriere

Невозможно начать poudriere bulk в тюрьме:

# 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

Я как можно больше следил за вики-записями, но не использую ZFS. Поэтому моя конфигурация FreeBSD 10 для тюрьмы выглядит так:

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

}

Сообщение об ошибке указывает на то, что создать тюрьму внутри тюрьмы невозможно. Поэтому я попробовал это вручную - я могу создать тюрьму в пределах тюрьмы - нет.

Если у вас есть IPv6, вы можете предоставить вам доступ к тюрьме для дальнейшего тестирования.

Code_Defect Imported bug

Самый полезный комментарий

Проблема, описанная в этом выпуске, связана не с Poudriere, а с дизайном джейлов FreeBSD.

Проблема / ошибка

[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

Описание

От man jail :

Заключенным в тюрьму процессам не разрешено предоставлять более широкие права, чем они
даны сами, например, если тюрьма создана с помощью allow.nomount, она
не может создать тюрьму с установленным параметром allow.mount. Аналогично, такие
ограничения, такие как ip4.addr и securelevel, нельзя обойти в дочернем
тюрьмы.

Следовательно, необходимо определить IP-адреса 127.0.0.1 и ::1 для
loopback interface lo0 в системе супер тюрьмы (тюрьма Поудриер). То же самое и с любым другим IP-адресом. Вы можете использовать IP-адреса только для иерархических тюрем, которые установлены для супер-тюрьмы.

Тест (на 10.1-STABLE)

При запуске выдает ошибку, указанную выше:

# 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

Выполнение приведенного ниже кода проходит без проблем (вы можете видеть, что
'ip4.addr=127.0.0.1' 'ip6.addr=::1' параметры удалены):

# 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

Тест можно воспроизвести, удалив переменную ${network} из строки
252 из /usr/local/share/poudriere/common.sh .

Решение (только для ezjail , но тот же метод можно применить к /etc/jail.conf )

Добавить 127.0.0.1,::1 в список IP-адресов тюрьмы в
/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"

Все 8 Комментарий

Вероятно, это происходит из-за отсутствия записи «ip4». Можете ли вы запустить 'poudriere -x bulk ... 2> log' и либо загрузить файл журнала, либо разместить его где-нибудь, чтобы я мог посмотреть?

Вы можете увидеть журнал здесь:
http://pkg.toco-domains.de/poudriere-in-jail-error.log

Я попробовал ваше предложение с «ip4 = наследовать; ip6 = наследовать;». Вы правы - после настройки все работает :)

Под словом «это работает» я имею в виду:
Сообщение об ошибке исчезло. Я не смог протестировать создание портов, потому что у меня нет IPv4-адреса для использования. poudriere не может получить порты - кажется, принудительная загрузка через IPv4?

Я смотрю журнал. Ошибка возникает в этой строке:

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

Если изменить строку на:

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

Тюрьма создана успешно. Также я могу с этим работать. Надеюсь, это поможет.

Спасибо за вашу работу :)

После установки жестко заданного IPv6-адреса начинается построение порта.

Но останавливается сразу после компиляции pkg-package. Сообщение об ошибке:

=== Начало ===

====> Сжатие страниц руководства (compress-man)

======================= ===> Сборка пакета для pkg-1.3.5.1
pkg-static: невозможно открыть "/var/run/ld-elf.so.hints": нет такого файла или каталога
*** Код ошибки 1

Останавливаться.
make [1]: остановлен в / usr / ports / ports-mgmt / pkg
*** Код ошибки 1

Останавливаться.
make: остановлен в / usr / ports / ports-mgmt / pkg
==== >> Очистка wrkdir
===> Очистка для pkg-1.3.5.1
сборка / usr / ports / ports-mgmt / pkg завершилась в понедельник, 11 августа, 08:35:21 UTC 2014 г.
время сборки: 00:00:30
!!! произошла ошибка сборки !!!
[ корень @ poudriere /] # ls -lah /var/run/ld-elf.so.hints

=== Конец ===

Файл существует:

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

-r - r - r-- 1 root wheel 199B 6 августа 13:58 /var/run/ld-elf.so.hints

Так я считаю, что это неправильно скопировано?

После некоторой отладки я обнаружил проблему с подсказками эльфов. При создании эталонной тюрьмы для копирования используется путь к ней.

В моем случае это / usr / local / jail / poudriere / var / run ->, и этот путь не существует внутри тюрьмы.
В качестве обходного пути я жестко запрограммировал копирование / var / run. Кажется, это работает :)

Проблема, описанная в этом выпуске, связана не с Poudriere, а с дизайном джейлов FreeBSD.

Проблема / ошибка

[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

Описание

От man jail :

Заключенным в тюрьму процессам не разрешено предоставлять более широкие права, чем они
даны сами, например, если тюрьма создана с помощью allow.nomount, она
не может создать тюрьму с установленным параметром allow.mount. Аналогично, такие
ограничения, такие как ip4.addr и securelevel, нельзя обойти в дочернем
тюрьмы.

Следовательно, необходимо определить IP-адреса 127.0.0.1 и ::1 для
loopback interface lo0 в системе супер тюрьмы (тюрьма Поудриер). То же самое и с любым другим IP-адресом. Вы можете использовать IP-адреса только для иерархических тюрем, которые установлены для супер-тюрьмы.

Тест (на 10.1-STABLE)

При запуске выдает ошибку, указанную выше:

# 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

Выполнение приведенного ниже кода проходит без проблем (вы можете видеть, что
'ip4.addr=127.0.0.1' 'ip6.addr=::1' параметры удалены):

# 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

Тест можно воспроизвести, удалив переменную ${network} из строки
252 из /usr/local/share/poudriere/common.sh .

Решение (только для ezjail , но тот же метод можно применить к /etc/jail.conf )

Добавить 127.0.0.1,::1 в список IP-адресов тюрьмы в
/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"

Супер старый жук раздавлен!

c756e1822013a763c8a5e4ccee273794bd182e11 также помогает.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги