2

在使用poudriere测试端口时,如下所示:

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

我收到了这个错误:

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

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

>  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 地址的监狱jexec 363,在这种情况下127.0.0.1我无法 ping /解决:

ping: sendto: Can't assign requested address

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

以防万一这是我用于 poudriere 的配置/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/

再说一遍:

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

这是一个丑陋的 hack,但主要问题是Makefile中有一条错误的行正在复制内容:

 GH_ACCOUNT=    nbari:DEFAULT,www

应该:

 GH_ACCOUNT=    nbari:DEFAULT

但仍然想知道为什么这对监狱是在有 IP 和没有 IP 的情况下创建的。

4

1 回答 1

3

poudriere(8)preforms preforms 不需要联网的阶段是一个更严格的监狱,以增加安全性。 以前监狱在有或没有网络功能的情况下重新启动,现在在整个过程中保留两个独立的监狱以降低复杂性。

具有列出 IP 地址的监狱被明确设置为环回地址,没有的监狱从主机继承网络:

: ${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_ACCOUNTDEFAUT添加PORTNAME( www),并www添加自身。

于 2017-09-27T19:52:30.543 回答