Почему poudriere создает пару джейлов с и без IP-адресов

При тестировании порта с помощью 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 Я могу пинговать / извлекать любой хост, например, но если я вхожу в тюрьму с IP-адресом jexec 363, в этом случае 127.0.0.1 Я не могу пинговать / разрешать:

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 

Это был ужасный хак, но главной проблемой была плохая строка в Makefile, которая дублировала содержимое:

 GH_ACCOUNT=    nbari:DEFAULT,www

Должно быть:

 GH_ACCOUNT=    nbari:DEFAULT

Но все еще задаюсь вопросом, почему пара тюрем создается с и без IP.

1 ответ

Решение

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: 42114211 - размер повторяющейся записи.

Данная запись добавляется дважды из-за групп, указанных с помощью GH_ACCOUNT, DEFAUT добавляет PORTNAME (www), а также www добавляет себя.

Другие вопросы по тегам