<p>poudriere 不在监狱里工作</p>

创建于 2014-09-18  ·  8评论  ·  资料来源: freebsd/poudriere

不可能在监狱中启动 poudriere 批量:

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

}

错误消息表明不可能在监狱中创建监狱。 因此,我手动尝试了 - 我能够在监狱中创建监狱 - poudriere 不是。

如果您有 IPv6,则可以让您访问监狱以进行进一步测试。

Code_Defect Imported bug

最有用的评论

本期描述的问题与 Poudriere 无关,而是与 FreeBSD jail 的设计有关。

问题/错误

[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 创建了一个 jail,则它
无法使用 allow.mount 设置创建监狱。 同样,这样的
ip4.addr 和 securelevel 的限制可能不会在 child 中被绕过
监狱。

因此必须定义 IP 地址127.0.0.1::1
超级监狱系统(Poudriere jail)中的loopback接口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}变量来重现测试
/usr/local/share/poudriere/common.sh 252

解决方案(仅适用于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=inherit;ip6=inherit;”试过你的建议。 你是对的 - 设置这个选项后,它的工作原理:)

“它有效”我的意思是:
错误信息消失了。 我无法测试端口的构建,因为我没有可以使用的 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 的构建于 UTC 2014 年 8 月 11 日星期一 08:35:21 结束
构建时间:00:00:30
!!! 遇到构建失败!!!
[ root@poudriere /]# ls -lah /var/run/ld-elf.so.hints

=== 结束 ===

该文件存在:

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

-r--r--r-- 1 根轮 199B Aug 6 13:58 /var/run/ld-elf.so.hints

所以我相信它没有正确复制?

经过一些调试,我发现了精灵提示的问题。 创建参考监狱时,监狱的路径用于复制。

在我的情况下,这是 /usr/local/jail/poudriere/var/run -> 并且该路径在监狱中不存在。
作为我的解决方法,我硬编码了 /var/run 的复制。 这似乎有效:)

本期描述的问题与 Poudriere 无关,而是与 FreeBSD jail 的设计有关。

问题/错误

[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 创建了一个 jail,则它
无法使用 allow.mount 设置创建监狱。 同样,这样的
ip4.addr 和 securelevel 的限制可能不会在 child 中被绕过
监狱。

因此必须定义 IP 地址127.0.0.1::1
超级监狱系统(Poudriere jail)中的loopback接口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}变量来重现测试
/usr/local/share/poudriere/common.sh 252

解决方案(仅适用于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 等级