为什么poudriere会创建一对有IP地址和无IP地址的jail

时间:2017-09-27 18:46:37

标签: freebsd jail

使用poudriere测试端口时使用如下内容:

poudriere testport -v -j 11amd64 -p custom www/go-www 

我收到了这个错误:

!!! build failure encountered !!!               
[00:00:06] ====>> Error: Build failed in phase: fetch 

由于某种原因,无法找到/下载该软件包,因此在我尝试检查jail解析器是否存在问题时,我通过执行jls列出了现有的jails - 我得到了这个引起我注意的输出:

>  jls
   JID  IP Address      Hostname                      Path
   363  127.0.0.1       11amd64-custom                /usr/local/poudriere/data/.m/11amd64-custom/ref
   364                  11amd64-custom                /usr/local/poudriere/data/.m/11amd64-custom/ref
   365  127.0.0.1       11amd64-custom-job-02         /usr/local/poudriere/data/.m/11amd64-custom/02
   366                  11amd64-custom-job-02         /usr/local/poudriere/data/.m/11amd64-custom/02
   367  127.0.0.1       11amd64-custom-job-01         /usr/local/poudriere/data/.m/11amd64-custom/01
   368                  11amd64-custom-job-01         /usr/local/poudriere/data/.m/11amd64-custom/01
   369  127.0.0.1       11amd64-custom-job-03         /usr/local/poudriere/data/.m/11amd64-custom/03
   370                  11amd64-custom-job-03         /usr/local/poudriere/data/.m/11amd64-custom/03

我注意到的事情是,如果我进入一个没有分配IP地址的监狱jexec 364,我可以ping /取任何主机,例如,但是如果我进入一个带有IP地址的监狱{ {1}},在这种情况下jexec 363我无法ping /解决:

127.0.0.1

因此,我想知道创建一对jails的想法是什么,一个是IP(没有可路由),另一个是whitout IP(可路由),背后的逻辑是什么?

以防这是我用于poudriere ping: sendto: Can't assign requested address 的配置:

/usr/local/etc/poudriere.conf

更新

要解决我在交互模式下输入的问题 - 请注意ZPOOL=tank ZROOTFS=/poudriere FREEBSD_HOST=https://download.FreeBSD.org RESOLV_CONF=/etc/resolv.conf BASEFS=/usr/local/poudriere POUDRIERE_DATA=${BASEFS}/data USE_PORTLINT=no USE_TMPFS=yes DISTFILES_CACHE=/usr/ports/distfiles CHECK_CHANGED_OPTIONS=verbose CHECK_CHANGED_DEPS=yes PKG_REPO_SIGNING_KEY=/usr/local/etc/ssl/keys/pkg.key CCACHE_DIR=/var/cache/ccache NOLINUX=yes

-i

然后:

poudriere testport -v -i -j 11amd64 -p custom www/go-www 

提取包,我只是将它们复制到cd /usr/ports/www/go-www/; make

然后再说:

/usr/ports/distfiles/

这是一个丑陋的黑客攻击,但主要问题是Makefile中的重复内容是一个重复内容:

poudriere testport -v -j 11amd64 -p custom www/go-www 

应该是:

 GH_ACCOUNT=    nbari:DEFAULT,www

但仍然想知道为什么使用和不使用IP创建这对jail。

1 个答案:

答案 0 :(得分:2)

poudriere(8)预先形成预先形成不需要联网的阶段是一个限制性更强的监狱,以增加安全性。 Previously使用或不使用网络功能重新启动jail,现在整个过程中都会保留两个单独的jail以降低复杂性。

具有列出的IP地址的jail显式设置为环回地址,并且没有从主机继承网络的地址:

: ${LOIP6:=::1}
: ${LOIP4:=127.0.0.1}
case $IPS in
01)
        localipargs="ip6.addr=${LOIP6}"
        ipargs="ip6=inherit"
        ;;
10)
        localipargs="ip4.addr=${LOIP4}"
        ipargs="ip4=inherit"
        ;;
11)
        localipargs="ip4.addr=${LOIP4} ip6.addr=${LOIP6}"
        ipargs="ip4=inherit ip6=inherit"
        ;;
esac

...

jstart() {
        local name network

        network="${localipargs}"

        [ "${RESTRICT_NETWORKING}" = "yes" ] || network="${ipargs}"

        _my_name name
        jail -c persist name=${name} \
                path=${MASTERMNT}${MY_JOBID+/../${MY_JOBID}} \
                host.hostname=${BUILDER_HOSTNAME-${name}} \
                ${network} ${JAIL_PARAMS} \
                allow.socket_af allow.raw_sockets allow.chflags allow.sysvipc
        jail -c persist name=${name}-n \
                path=${MASTERMNT}${MY_JOBID+/../${MY_JOBID}} \
                host.hostname=${BUILDER_HOSTNAME-${name}} \
                ${ipargs} ${JAIL_PARAMS} \
                allow.socket_af allow.raw_sockets allow.chflags allow.sysvipc
}

获取错误似乎是因为新distfile中的重复条目(nbari-www-1.1.1_GH0.tar.gz的两个条目)。错误行 在您的日志文件中以fetch: 4211开头,4211是重复条目的大小。

由于使用GH_ACCOUNT指定的群组,DEFAUT添加PORTNAMEwww),www添加,因此相关条目会被添加两次本身。