Poudriere: 12개 λ§ˆκ΅¬κ°„, 감μ˜₯ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰

에 λ§Œλ“  2018λ…„ 12μ›” 10일  Β·  17μ½”λ©˜νŠΈ  Β·  좜처: freebsd/poudriere

λ©°μΉ  전에 12-stable둜 μ—…κ·Έλ ˆμ΄λ“œν•œ ν›„ 감μ˜₯μ—μ„œ poudriereλ₯Ό μ‹€ν–‰ν•˜λŠ” 데 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚΄ ꡬ성을 λ³€κ²½ν•˜μ§€ μ•Šκ³  λΉŒλ“œ 쀑에 poudriere builder 감μ˜₯이 μ‹œμž‘λ˜λŠ” λ™μ•ˆ 이제 jail: IPv4 addresses clash λ₯Ό μ–»μŠ΅λ‹ˆλ‹€.

# poudriere bulk -j 12amd64 -p local -z zs64 -f /root/11amd64-local-zs64-pkglist
[00:00:00] Creating the reference jail... done
[00:00:01] Mounting system devices for 12amd64-local-zs64
[00:00:01] Mounting ports/packages/distfiles
[00:00:01] Using packages from previously failed build
[00:00:01] Mounting ccache from: /var/cache/ccache
[00:00:01] Mounting packages from: /p/data/packages/12amd64-local-zs64
[00:00:02] Appending to make.conf: /usr/local/etc/poudriere.d/make.conf
[00:00:02] Appending to make.conf: /usr/local/etc/poudriere.d/zs64-make.conf
/etc/resolv.conf -> /p/data/.m/12amd64-local-zs64/ref/etc/resolv.conf
[00:00:02] Starting jail 12amd64-local-zs64
jail: IPv4 addresses clash
[00:00:02] Cleaning up
[00:00:02] Unmounting file systems

λ‚˜λŠ” LOIP4 및 LOIP6κ³Ό μ™ΈλΆ€ 감μ˜₯ IP ꡬ성을 λ§Œμ§€μž‘κ±°λ Έμ§€λ§Œ 아무 μ†Œμš©μ΄ μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

common.sh 의 μ½”λ“œλ₯Ό κ²€μ‚¬ν•˜λ©΄ poudriereκ°€ ip4.addr 및 ip6.addr 와 같이 감μ˜₯ μ‹œμž‘ ν˜ΈμΆœμ— 전달할 IPλ₯Ό κ²°μ •ν•˜λ €κ³  μ‹œλ„ν•˜λŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. localipargs λ₯Ό 빈 λ¬Έμžμ—΄λ‘œ ν•˜λ“œ λ¦¬μ…‹ν–ˆμŠ΅λ‹ˆλ‹€(7734번째 μ€„μ—μ„œ case $IPS 블둝 λ°”λ‘œ λ’€). 그러면 λΉŒλ“œκ°€ λ‹€μ‹œ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.

이것은 12-stableκ³Ό 잠재적인 λΉ„ν˜Έν™˜μ„±μž…λ‹ˆκΉŒ?

Base Issue

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

VIMAGE와 vnet 감μ˜₯을 μ‚¬μš©ν•˜μ—¬ λ‹€μ‹œ μž‘μ—… 섀정을 얻을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. "ν΄λž˜μ‹" 곡유 IP 섀정이 μž‘λ™ν•˜λ„λ‘ λ§Œλ“€ 수 μžˆλ‹€λ©΄ 방법을 λ“£κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  17 λŒ“κΈ€

μ  μž₯, κ·Έ νŒ¨μΉ˜μ—λ„ λΆˆκ΅¬ν•˜κ³  Pythonκ³Ό RubyλŠ” λΉŒλ“œμ— μ‹€νŒ¨ν•©λ‹ˆλ‹€.

파이썬:

checking getaddrinfo bug... yes
Fatal: You must get working getaddrinfo() function.
       or you can specify "--disable-ipv6".
===>  Script "configure" failed unexpectedly.

루비:

compiling raddrinfo.c
raddrinfo.c:214:17: warning: implicit declaration of function 'parse_numeric_port' is invalid in C99 [-Wimplicit-function-declaration]
    if (node && parse_numeric_port(service, &port)) {
                ^
1 warning generated.
compiling ifaddr.c
compiling getaddrinfo.c
In file included from getaddrinfo.c:86:
./addrinfo.h:165:12: error: conflicting types for 'getnameinfo'
extern int getnameinfo __P((
           ^
/usr/include/netdb.h:251:6: note: previous declaration is here
int             getnameinfo(const struct sockaddr *, socklen_t, char *,
                ^
getaddrinfo.c:408:7: warning: add explicit braces to avoid dangling else [-Wdangling-else]
                                } else if (strcmp(sp->s_proto, "tcp") == 0) {
                                  ^
1 warning and 1 error generated.
*** Error code 1

VIMAGE와 vnet 감μ˜₯을 μ‚¬μš©ν•˜μ—¬ λ‹€μ‹œ μž‘μ—… 섀정을 얻을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. "ν΄λž˜μ‹" 곡유 IP 섀정이 μž‘λ™ν•˜λ„λ‘ λ§Œλ“€ 수 μžˆλ‹€λ©΄ 방법을 λ“£κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

12.0-RELEASE-p2 감μ˜₯μ—μ„œ 루비λ₯Ό λΉŒλ“œν•˜λŠ” 것은 μ—¬μ „νžˆ β€‹β€‹μ‹€νŒ¨ν•©λ‹ˆλ‹€.
11.2-RELEASE-p8 감μ˜₯ λ‚΄λΆ€μ—μ„œ 루비λ₯Ό λΉŒλ“œν•˜λŠ” 것이 μž‘λ™ν•©λ‹ˆλ‹€.
μ–΄λ–€ 톡찰λ ₯이 μžˆμŠ΅λ‹ˆκΉŒ?

μ²¨λΆ€λœ λΉŒλ“œ λ‘œκ·ΈλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
ruby-2.5.3_1,1.log

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=231773 처럼 λ³΄μž…λ‹ˆλ‹€.

@stblassitude μž‘λ™ν•˜λ €λ©΄ 무엇을 μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆκΉŒ? 특히 vnet μ˜΅μ…˜μ΄ ν•„μš”ν•œ μœ„μΉ˜λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? 감μ˜₯μ—μ„œ PoudriereλŠ” Poudriereκ°€ λ§Œλ“  감μ˜₯ μ•ˆμ— μžˆμŠ΅λ‹ˆκΉŒ?

ν•΄κ²° 방법은 κ³ μœ ν•œ 루프백 μ£Όμ†Œλ₯Ό μ„€μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

LOIP4=127.0.0.2
LOIP6=::2

@bdrewery , μ œμ•ˆν•œ 섀정을 μ‚¬μš©ν•˜λ©΄ λ™μΌν•œ κ²½κ³  및 였λ₯˜κ°€ μƒμ„±λ©λ‹ˆλ‹€.
(LOIP4="127.0.0.2/32"도 μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€). LOIP4κ°€ λ¬΄μ‹œλ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ 곳에 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆκΉŒ?
poudriere 감μ˜₯의 루프백을 μ™ΈλΆ€μ μœΌλ‘œ μ„€μ •ν•˜λŠ” 것도 μ‹€νŒ¨ν•©λ‹ˆλ‹€.

grep '^[AZ]' /usr/local/etc/poudriere.conf

LOIP4=127.0.0.2
LOIP6=::2
NO_ZFS=예
FREEBSD_HOST= ftp://ftp.freebsd.org
RESOLV_CONF=/etc/resolv.conf
BASEFS=/p
USE_PORTLINT=μ•„λ‹ˆμš”
USE_TMPFS=μ•„λ‹ˆμš”
DISTFILES_CACHE=/usr/ports/distfiles
NOLINUX=예
ALLOW_MAKE_JOBS=예

[00:00:00] Warning: No loopback address defined, consider setting LOIP6/LOIP4 or assigning a loopback address to the jail.
[00:00:00] Updating portstree "default" with portsnap...Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
In file included from getaddrinfo.c:86:
./addrinfo.h:165:12: error: conflicting types for 'getnameinfo'
extern int getnameinfo __P((
           ^
/usr/include/netdb.h:251:6: note: previous declaration is here
int             getnameinfo(const struct sockaddr *, socklen_t, char *,
                ^
--- ext/cgi/escape/all ---
--- escape.o ---
compiling escape.c
--- ext/ripper/all ---
--- pre-install-rb-default ---
installing default ripper libraries
--- ../../.ext/common/ripper.rb ---
--- ext/json/all ---
--- ../../.ext/common/json/add/rational.rb ---
--- ext/fiddle/all ---
--- fiddle.o ---
--- ext/openssl/all ---
--- ossl.o ---
--- ext/fiddle/all ---
compiling fiddle.c
--- ext/openssl/all ---
compiling ossl.c
--- ext/rbconfig/sizeof/all ---
--- limits.o ---
compiling limits.c
--- ext/socket/all ---
getaddrinfo.c:408:7: warning: add explicit braces to avoid dangling else [-Wdangling-else]
                                } else if (strcmp(sp->s_proto, "tcp") == 0) {
                                  ^
--- ext/bigdecimal/all ---
--- ../../.ext/common/bigdecimal/math.rb ---
--- ext/socket/all ---
1 warning and 1 error generated.
*** [getaddrinfo.o] Error code 1

@bdrewery , μ œμ•ˆν•œ 섀정을 μ‚¬μš©ν•˜λ©΄ λ™μΌν•œ κ²½κ³  및 였λ₯˜κ°€ μƒμ„±λ©λ‹ˆλ‹€.
(LOIP4="127.0.0.2/32"도 μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€). LOIP4κ°€ λ¬΄μ‹œλ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ 곳에 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆκΉŒ?

common.sh의 λ‹€μŒ μ½”λ“œ λ•Œλ¬Έμž…λ‹ˆλ‹€.

# If in a nested jail we may not even have a loopback to use.            
if [ ${JAILED} -eq 1 ]; then                                             
        # !! Note these exit statuses are inverted                       
        ifconfig | \                                                     
            awk -vip="${LOIP6}" '$1 == "inet6" && $2 == ip {exit 1}' && \
            LOIP6=                                                       
        ifconfig | \                                                     
            awk -vip="${LOIP4}" '$1 == "inet" && $2 == ip {exit 1}' && \ 
            LOIP4=                                                       
fi                                                                       

μ§€κΈˆμ€ μ œκ±°ν•΄ λ³΄μ„Έμš”. ν˜„μž¬ 감μ˜₯에 μ€‘μ²©λœ 감μ˜₯에 ν• λ‹Ήν•˜λ €λŠ” IPκ°€ μžˆλŠ”μ§€ ν™•μΈν•˜λ €κ³  ν•©λ‹ˆλ‹€. (문제의 νšŒκ·€.)

주석 μ²˜λ¦¬ν•˜λ©΄ λ‹€μŒμ΄ ν‘œμ‹œλ˜κ³  λΉŒλ“œκ°€ μ§„ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

jail: jail_set: Operation not permitted

확인을 μœ„ν•΄ μ €λŠ” FreeBSD 12.0-RELEASE-p3 GENERIC을 μ‹€ν–‰ν•˜λŠ” 호슀트의 iocage 감μ˜₯μ—μ„œ Poudriereλ₯Ό μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

# iocage list -l
+------+------------+------+-------+------+-----------------+--------------------+-----+----------+----------+
| JID  |    NAME    | BOOT | STATE | TYPE |     RELEASE     |        IP4         | IP6 | TEMPLATE | BASEJAIL |
+======+============+======+=======+======+=================+====================+=====+==========+==========+
| 2963 | poudriere  | on   | up    | jail | 12.0-RELEASE-p3 | lo1|192.168.250.10 | -   | -        | no       |

μ•„λž˜ λ‚˜μ—΄λœ 감μ˜₯에 λŒ€ν•œ 루비 컴파일 μ‹€νŒ¨:

root<strong i="12">@poudriere</strong>:~ # poudriere jail -l
[00:00:00] Warning: No loopback address defined, consider setting LOIP6/LOIP4 or assigning a loopback address to the jail.
JAILNAME    VERSION         ARCH  METHOD TIMESTAMP           PATH
11_2        11.2-RELEASE-p9 amd64 ftp    2019-03-05 13:49:56 /p/jails/11_2
12_0        12.0-RELEASE-p3 amd64 ftp    2019-03-05 13:52:05 /p/jails/12_0

@stblassitude μž‘λ™ν•˜λ €λ©΄ 무엇을 μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆκΉŒ? 특히 vnet μ˜΅μ…˜μ΄ ν•„μš”ν•œ μœ„μΉ˜λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? 감μ˜₯μ—μ„œ PoudriereλŠ” Poudriereκ°€ λ§Œλ“  감μ˜₯ μ•ˆμ— μžˆμŠ΅λ‹ˆκΉŒ?

λ‚΄ jail.conf λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

mount.devfs;
devfs_ruleset = 4;

exec.clean;
exec.jail_user = "root";
exec.system_user = "root";
exec.consolelog = "/var/log/jail_${name}.log";
exec.prestart = "/root/bin/jail-helper prestart ${name} ${host.hostname} ${path}";
exec.poststop = "/root/bin/jail-helper poststop ${name} ${host.hostname} ${path}";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
interface = "bridge0";
allow.raw_sockets;
allow.sysvipc;
...
pkg {
        path = "/jail/pkg.zs64.net";
        vnet;
        vnet.interface = "ji${name}";
        host.hostname = "pkg.zs64.net";
        children.max = 40;
        exec.prestart += "/root/bin/jail-helper prevnet ${name} bridge1";
        exec.poststart += "zfs jail $name data/jail/${host.hostname}/poudriere";
        exec.poststart += "jexec $name zfs mount -a";
        #exec.prestop += "zfs unjail $name data/jail/${host.hostname}/poudriere";
        exec.poststop += "/root/bin/jail-helper postvnet ${name}";
        allow.mount;
        allow.mount.devfs;
        allow.mount.linprocfs;
        allow.mount.nullfs;
        allow.mount.procfs;
        allow.mount.tmpfs;
        allow.mount.zfs;
        allow.socket_af;
        allow.chflags;
        enforce_statfs=1;
}

λ„μš°λ―Έ μŠ€ν¬λ¦½νŠΈλŠ” λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

#!/bin/sh

#
# Mount system directories via nullfs
#

cmd="$1"
name="$2"
host="$3"
path="$4"

rofs="/bin /lib /libexec /sbin /usr/bin /usr/include /usr/lib /usr/libdata /usr/libexec /usr/sbin /usr/share /usr/ports"

mountall() {
    mount -t devfs -o ruleset=10 devfs ${path}/dev
    ls ${path}/dev/null >/dev/null
    for i in $rofs; do
        mount -t nullfs -o ro "${i}" "${path}${i}"
    done
    mount -t nullfs -w /freebsd/distfiles ${path}/var/ports/distfiles
}

umountall() {
    mount | \
        sed -nEe 's#.* on ('"${path}"'/[^ ]*) \(.*#\1#p' | \
        sort -r | \
        xargs -n1 umount
}

vnet_create() {
    ifname="$(/sbin/ifconfig epair create)"
    ifbase="${ifname%%a}"
    /sbin/ifconfig "${ifbase}a" up name "jo${name}" >/dev/null
    /sbin/ifconfig "${ifbase}b" name "ji${name}" >/dev/null
    /sbin/ifconfig "${host}" addm "jo${name}"
}

vnet_destroy() {
    /sbin/ifconfig "jo${name}" destroy 2>/dev/null || true
}

case ${cmd} in
    prestart)
        umountall
        mountall
        ;;
    prevnet)
        vnet_destroy
        vnet_create
        ;;
    poststop)
        umountall
        ;;
    postvnet)
        vnet_destroy
        ;;
esac

pkg 감μ˜₯ λ‚΄λΆ€μ—μ„œ λ‹€μŒμ„ μ‚¬μš©ν•©λ‹ˆλ‹€. poudriere.conf :

BASEFS=/usr/local/poudriere
CCACHE_DIR=/var/cache/ccache
DISTFILES_CACHE=/var/ports/distfiles
FREEBSD_HOST=https://download.FreeBSD.org
PKG_REPO_SIGNING_KEY=/usr/local/etc/poudriere.key
TMPFS_LIMIT=6
URL_BASE=http://pkg.example.com
ZPOOL=data
ZROOTFS=/jail/pkg.example.com/poudriere

ZFS 데이터 μ„ΈνŠΈλŠ” 감μ˜₯ λ‚΄λΆ€μ—μ„œ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

$ zfs list
NAME                                             USED  AVAIL  REFER  MOUNTPOINT
data                                            1.74T   858G    88K  /data
data/jail                                       1.33T   858G    96K  /jail
data/jail/pkg.example.com                          34.2G   858G  5.54G  /jail/pkg.example.com
data/jail/pkg.example.com/poudriere                24.3G   858G    88K  /p
data/jail/pkg.example.com/poudriere/data           19.1G   858G    96K  /p/data
data/jail/pkg.example.com/poudriere/data/.m        11.6G   858G   112K  /p/data/.m
data/jail/pkg.example.com/poudriere/data/cache      260M   858G  23.8M  /p/data/cache
data/jail/pkg.example.com/poudriere/data/logs      3.17G   858G  2.74G  /p/data/logs
data/jail/pkg.example.com/poudriere/data/packages  4.12G   858G  1.95G  /p/data/packages
data/jail/pkg.example.com/poudriere/data/wrkdirs     88K   858G    88K  /p/data/wrkdirs
data/jail/pkg.example.com/poudriere/jails          1.27G   858G    88K  /p/jails
data/jail/pkg.example.com/poudriere/jails/11amd64    88K   858G    88K  /usr/local/poudriere/jails/11amd64
data/jail/pkg.example.com/poudriere/jails/12amd64  1.27G   858G  1.24G  /usr/local/poudriere/jails/12amd64
data/jail/pkg.example.com/poudriere/ports          3.91G   858G    88K  /p/ports
data/jail/pkg.example.com/poudriere/ports/local    3.91G   858G   903M  /usr/local/poudriere/ports/local

저도 이 λ¬Έμ œκ°€ μžˆμ—ˆλ˜ 것 같은데, 12일에 처음 μ‹œλ„ν–ˆκΈ° λ•Œλ¬Έμ— 12 μ—…κ·Έλ ˆμ΄λ“œμ™€ 관련이 μžˆλ‹€κ³  μƒκ°ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ μ—¬λŸ¬λΆ„ λͺ¨λ‘κ°€ μ–΄λ–€ μ†”λ£¨μ…˜μ„ 생각해 λƒˆλŠ”μ§€ 계속 μ‚΄νŽ΄λ³΄μ‹­μ‹œμ˜€.

ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. IPv6 μ˜΅μ…˜κ³Ό 이쀑 μŠ€νƒ 감μ˜₯으둜 lang/python27 λ˜λŠ” lang/python3 λ₯Ό λΉŒλ“œν•©λ‹ˆλ‹€.

poudriere jail export jail.conf인 경우
ip4=inherit; ip6=inherit;
λΉŒλ“œ 성곡

ip4.addr 내보내기 및 ip6.addr μ£Όμ†Œ λΉŒλ“œκ°€ ꡬ성 μ‹œ μ‹€νŒ¨ν•˜λŠ” 경우
checking for getaddrinfo... yes checking getaddrinfo bug... yes Fatal: You must get working getaddrinfo() function. or you can specify "--disable-ipv6".
λΉ„ν™œμ„±ν™” μ˜΅μ…˜ IPv6 μˆ˜μ • λΉŒλ“œ.

λΆ„λͺ…νžˆ IPv6에 λŒ€ν•œ set lo μ–΄λ”˜κ°€μ— 였λ₯˜κ°€μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 이것은 μ§€κΈˆ (::1/128) /8이 μ•„λ‹™λ‹ˆλ‹€.

ν₯λ―Έλ‘­κ²Œλ„ 차이점은 λŒ€ν™”ν˜• μž‘μ—…μžκ°€ μ•„λ‹™λ‹ˆλ‹€.
bulk -i μžλ™ λΉŒλ“œ μ‹€νŒ¨ ꡬ성을 μ‚¬μš©ν•˜λŠ” 경우 이 감μ˜₯μ—μ„œ μˆ˜λ™ λΉŒλ“œ 성곡
make -C /usr/ports/lang/python27/ .... checking for getaddrinfo... yes checking getaddrinfo bug... no checking for getnameinfo... (cached) yes .... creating Makefile ....

RESTRICT_NETWORKING=no 이 문제λ₯Ό μˆ˜μ •ν•˜κ³  NO_RESTRICT_NETWORKING_PACKAGES="python27 ..." μœ μ‚¬ν•œ ALLOW_NETWORKING_PACKAGES ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

VIMAGE와 vnet 감μ˜₯을 μ‚¬μš©ν•˜μ—¬ λ‹€μ‹œ μž‘μ—… 섀정을 얻을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. "ν΄λž˜μ‹" 곡유 IP 섀정이 μž‘λ™ν•˜λ„λ‘ λ§Œλ“€ 수 μžˆλ‹€λ©΄ 방법을 λ“£κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ˜κ²¬μ„ λ°”νƒ•μœΌλ‘œ vnet μ†”λ£¨μ…˜λ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.

@stblassitude μž‘λ™ν•˜λ €λ©΄ 무엇을 μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆκΉŒ? 특히 vnet μ˜΅μ…˜μ΄ ν•„μš”ν•œ μœ„μΉ˜λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? 감μ˜₯μ—μ„œ PoudriereλŠ” Poudriereκ°€ λ§Œλ“  감μ˜₯ μ•ˆμ— μžˆμŠ΅λ‹ˆκΉŒ?

그것은 poudriere 감μ˜₯에 λŒ€ν•œ κ΅¬μ„±μž…λ‹ˆλ‹€. μ €λŠ” 이것을 ν–ˆμ–΄μš”.

/etc/rc.conf의 경우:

cloned_interfaces="bridge0"
ifconfig_bridge0="addm ix0 up"

그런 λ‹€μŒ 감μ˜₯ κ΅¬μ„±μ˜ 경우:

$ sudo iocage set vnet=on pkg01
$ sudo iocage set ip4_addr="vnet0|10.55.0.29/24" pkg01
$ sudo iocage set ip6_addr="vnet0|[redacted]:23/64" pkg01

λ‹€μŒ μ£Ό 정도에 λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Όμ΄ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

이 λ‚΄μš©μ„ 읽은 ν›„ 12.1-RELEASE-p7을 μ‹€ν–‰ν•˜λŠ” λ™μ•ˆ μ—…λ°μ΄νŠΈλ₯Ό μˆ˜ν–‰ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€.

"그것은 λ˜ν•œ 감μ˜₯에 κ°‡νžŒ 데λͺ¬μ΄ "루프백 μ£Όμ†Œ"의 ν¬νŠΈμ— 연결될 λ•Œ μ‹€μ œλ‘œ 감μ˜₯의 μ™ΈλΆ€ IP μ£Όμ†Œμ— μ—°κ²°λœλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€."
Lucas, Michael W. FreeBSD λ§ˆμŠ€ν„°λ¦¬: 감μ˜₯(IT λ§ˆμŠ€ν„°λ¦¬ 뢁 15)

poudriere.conf의 LOIP4λ₯Ό 감μ˜₯의 ip4_addr둜 μ„€μ •ν•˜λ©΄ 루비가 컴파일될 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜μ˜ κ²½μš°μ—λŠ”:
# iocageλŠ” ip4_addr poudriereλ₯Ό μ–»μŠ΅λ‹ˆλ‹€.
lo1|192.168.10.100

# grep LOIP4 /usr/local/etc/poudriere.conf
LOIP4=192.168.10.100

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰