Poudriere: 12-рд╕реНрдерд┐рд░, рдЬреЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рджрд┐рд╕ре░ 2018  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: freebsd/poudriere

рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ 12-рд╕реНрдерд┐рд░ рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдореБрдЭреЗ рдЬреЗрд▓ рдХреЗ рдЕрдВрджрд░ рдкреМрдбрд┐рдпрд░реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред рдореЗрд░реЗ рдХреЙрдиреНрдлрд┐рдЧ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛, рдореБрдЭреЗ рдЕрдм 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 рдФрд░ рдмрд╛рд╣рд░реА рдЬреЗрд▓ рдЖрдИрдкреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

common.sh рдореЗрдВ рдХреЛрдб рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ poudriere рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ IP рдХреЛ рдЬреЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН ip4.addr рдФрд░ ip6.addr ред рдореИрдВрдиреЗ localipargs рдХреЛ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рд╣рд╛рд░реНрдб-рд░реАрд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИ ( case $IPS рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рдж рд▓рдЧрднрдЧ рд▓рд╛рдЗрди 7734 рдкрд░), рдЬреЛ рдореЗрд░реЗ рдмрд┐рд▓реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ 12-рд╕реНрдерд┐рд░ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╕рдВрдЧрддрд┐ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ VIMAGE рдФрд░ рдПрдХ vnet рдЬреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реЗрдЯрдЕрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдмреА рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИред рдпрджрд┐ "рдХреНрд▓рд╛рд╕рд┐рдХ" рд╕рд╛рдЭрд╛ рдЖрдИрдкреА рд╕реЗрдЯрдЕрдк рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗред

рд╕рднреА 17 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдбрд╛рдВрдЧ, рдЙрд╕ рдкреИрдЪ рдХреЗ рд╕рд╛рде рднреА, рдкрд╛рдпрдерди рдФрд░ рд░реВрдмреА рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддреЗ рд╣реИрдВред

рдЕрдЬрдЧрд░:

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 рдЬреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реЗрдЯрдЕрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдмреА рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИред рдпрджрд┐ "рдХреНрд▓рд╛рд╕рд┐рдХ" рд╕рд╛рдЭрд╛ рдЖрдИрдкреА рд╕реЗрдЯрдЕрдк рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗред

12.0-рд░рд┐рд▓реАрдЬрд╝-рдкреА2 рдЬреЗрд▓ рдХреЗ рдЕрдВрджрд░ рдорд╛рдгрд┐рдХ рдмрдирд╛рдирд╛ рдЕрднреА рднреА рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред
11.2-рд░рд┐рд▓реАрдЬ-рдкреА8 рдЬреЗрд▓ рдХреЗ рдЕрдВрджрд░ рдорд╛рдгрд┐рдХ рдмрдирд╛рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХреЛрдИ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐?

рдмрд┐рд▓реНрдб рд▓реЙрдЧ рд╕рдВрд▓рдЧреНрди рд╣реИ:
рдорд╛рдгрд┐рдХ-2.5.3_1,1.рд▓реЙрдЧ

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=231773 рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

@stblassitude рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ vnet рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╣рд╛рдБ рд╣реИ? рдЬреЗрд▓ рдореЗрдВ Poudriere рдореЗрдВ рд╣реИ рдпрд╛ Poudriere-рдирд┐рд░реНрдорд┐рдд рдЬреЗрд▓реЛрдВ рдореЗрдВ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд▓реВрдкрдмреИрдХ рдкрддрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

LOIP4=127.0.0.2
LOIP6=::2

@bdrewery , рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдИ рдЧрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╣реА рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ:
(рдПрд▓рдУрдЖрдИрдкреА4="127.0.0.2/32" рднреА рдЖрдЬрдорд╛рдпрд╛)ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ LOIP4 рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдкреМрдбрд┐рдпрд░реЗ рдЬреЗрд▓ рдХреЗ рд▓реВрдкрдмреИрдХ рдХреЛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рднреА рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

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

рдПрд▓рдУрдЖрдИрдкреА4=127.0.0.2
рдПрд▓рдУрдЖрдИрдкреА6=::2
NO_ZFS=рд╣рд╛рдБ
FREEBSD_HOST= ftp://ftp.freebsd.org
RESOLV_CONF=/etc/resolv.conf
рдЖрдзрд╛рд░ =/рдкреА
USE_PORTLINT=рдирд╣реАрдВ
USE_TMPFS=рдирд╣реАрдВ
DISTFILES_CACHE=/usr/ports/distfiles
рдиреЛрд▓рд┐рдирдХреНрд╕ = рд╣рд╛рдБ
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 , рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдИ рдЧрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╣реА рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ:
(рдПрд▓рдУрдЖрдИрдкреА4="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

рдмрд╕ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдлреНрд░реАрдмреАрдПрд╕рдбреА 12.0-рд░рд┐рд▓реАрдЬ-рдкреА3 рдЬреЗрдиреЗрд░рд┐рдХ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╣реЛрд╕реНрдЯ рдкрд░ рдЖрдИрдУрд╕реАрдЬ рдЬреЗрд▓ рдХреЗ рдЕрдВрджрд░ рдкреЙрдбреНрд░рд┐рдпрд░ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ

# 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 рдХрд░реЗрдВред

рдЕрдЧрд░ рдкреМрдбрд┐рдпрд░реЗ рдЬреЗрд▓ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдЬреЗрд▓.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 рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд▓реЛ рдореЗрдВ рдХрд╣реАрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдЕрдм рдпрд╣ (::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 рдЬреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реЗрдЯрдЕрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдмреА рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИред рдпрджрд┐ "рдХреНрд▓рд╛рд╕рд┐рдХ" рд╕рд╛рдЭрд╛ рдЖрдИрдкреА рд╕реЗрдЯрдЕрдк рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗред

рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ vnet рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рднреА рдЧрдпрд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред рд╢реБрдХреНрд░рд┐рдпрд╛ред

@stblassitude рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ vnet рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╣рд╛рдБ рд╣реИ? рдЬреЗрд▓ рдореЗрдВ 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-рд░рд┐рд▓реАрдЬрд╝-рдкреА 7 рдЪрд▓рд╛рддреЗ рд╕рдордп рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рдЕрдиреБрд╡рд░реНрддреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

"рдЗрд╕рдХрд╛ рдпрд╣ рднреА рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рдЬреЗрд▓ рдореЗрдВ рдмрдВрдж рдбреЗрдореЙрди "рд▓реВрдкрдмреИрдХ рдПрдбреНрд░реЗрд╕" рдкрд░ рдПрдХ рдкреЛрд░реНрдЯ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЗрд▓ рдХреЗ рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддреЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред
рд▓реБрдХрд╛рд╕, рдорд╛рдЗрдХрд▓ рдбрдмреНрд▓реНрдпреВ. рдлреНрд░реАрдмреАрдПрд╕рдбреА рдорд╛рд╕реНрдЯрд░реА: рдЬреЗрд▓реНрд╕ (рдЖрдИрдЯреА рдорд╛рд╕реНрдЯрд░реА рдмреБрдХ 15)

LOIP4 рдХреЛ poudriere.conf рдореЗрдВ рдЬреЗрд▓ рдХреЗ ip4_addr рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд░реВрдмреА рдХреЛ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ:
# iocage ip4_addr poudriere рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рд▓реЛ1|192.168.10.100

# grep LOIP4 /usr/local/etc/poudriere.conf
рдПрд▓рдУрдЖрдИрдкреА4=192.168.10.100

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jbeich picture jbeich  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bapt picture bapt  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

VVelox picture VVelox  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cperciva picture cperciva  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alexbirkett picture alexbirkett  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ