/etc/rc.conf włączamy ładowanie wymaganych modułówkld_list="nullfs tmpfs linux linprocfs"
zfs create -o jailed=on zroot/poudriere
Wypakowujemy base system do /usr/jails/pkg01.domain.tld, jail konfigurujemy następująco:
/etc/jail./confexec.start = "/bin/sleep 1 && /bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
pkg01 {
path = /usr/jail/pkg01.domain.tld;
mount.devfs;
mount.fdescfs;
mount = "proc /usr/jail/pkg01.domain.tld/proc procfs rw 0 0";
host.hostname = pkg01.domain.tld;
ip4.addr = xxx.xx.xxx.xx, 127.0.0.1;
ip6.addr = 2001:xxx:xx:xxx::xx, ::1;
allow.chflags;
allow.raw_sockets;
# Poudriere specific
allow.mount;
allow.mount.devfs;
allow.mount.nullfs;
allow.mount.linprocfs;
allow.mount.procfs;
allow.mount.tmpfs;
allow.mount.zfs;
allow.socket_af;
allow.sysvipc;
children.max = 16;
enforce_statfs = 1;
exec.poststart = "/sbin/zfs jail pkg01 zroot/poudriere && /usr/sbin/jexec pkg01 service zfs start";
}
/etc/rc.confjail_enable="YES" jail_list="poudriere" kld_list="nullfs tmpfs"
Przed pierwszym uruchomieniem jaila, wykonujemy zmiany w plikach konfiguracyjnych znajdujących się wewnątrz jaila:
/etc/rc.conf:zfs_enable="YES"
/etc/rc.d/zfs#!/bin/sh # # $FreeBSD: releng/11.0/etc/rc.d/zfs 299839 2016-05-15 04:38:50Z ngie $ # # PROVIDE: zfs # REQUIRE: mountcritlocal # KEYWORD: shutdown <<< wstaw te linie dokladnie w tym miejscu # BEFORE: FILESYSTEMS var . /etc/rc.subr [...]
Powyższe zmiany poprawiają działanie ZFS w jailu.
Instalacja:
pkg install poudriere
/usr/local/etc/poudriere.confZPOOL=zroot ZROOTFS=/poudriere FREEBSD_HOST=ftp://ftp.freebsd.org RESOLV_CONF=/etc/resolv.conf BASEFS=/poudriere USE_PORTLINT=no USE_TMPFS=yes DISTFILES_CACHE=/usr/ports/distfiles PARALLEL_JOBS=4 WRKDIR_ARCHIVE_FORMAT=txz TIMESTAMP_LOGS=yes BUILDER_HOSTNAME=pkg01.domain.tld PRESERVE_TIMESTAMP=yes
Z uwagi na limit 88 bajtów w ścieżce i problemy z montowaniem nullfs(5), w powyższym został zmieniony BASEFS:
BASEFS=/poudriere
Problem ten ma być miał być rozwiązany we FreeBSD 11 (ale nie jest): http://lists.freebsd.org/pipermail/freebsd-fs/2015-February/020815.html
Tworzymy katalog dla nowego basefs:
mkdir /poudriere
poudriere ports -c
Powyższe tworzy domyślne drzewo portów default, pobierane za pomocą portsnap. Jest to drzewo latest.
quarterly zaciągane przez gitpoudriere ports -c -B branches/2017Q1 -p 2017q1 -m git
root@pkg:~ # poudriere ports -l PORTSTREE METHOD TIMESTAMP PATH default portsnap 2015-09-21 23:37:13 /poudriere/ports/default
mkdir -p /usr/ports/distfiles
- tworzymy jaila budującego pakiety dla FreeBSD 11, system budujący 11.0-RELEASE, architektura amd64
poudriere jail -c -j 11amd64 -v 11.0-RELEASE -a amd64
ftp/pure-ftpd mail/postfix www/squid
poudriere options -n -j 10amd64 -f 10amd64-packages.txt
poudriere ports -u
poudriere bulk -j 10amd64 -f 10amd64-packages.txt
Instalacja:
pkg install lighttpd htdigest
Plik /usr/local/etc/lighttpd/lighttpd.conf
server.bind = 2001:xxxx::xxxx
server.document-root = "/usr/local/www/data/catch-all/" <file> i wrzucamy tak cokolwiek (np. ''echo "It works!" > index.html'') * włączamy obsługę vhostów: <file> include_shell "cat /usr/local/etc/lighttpd/vhosts.d/*.conf"
# IPv4 listening socket
$SERVER["socket"] == "192.168.31.4:80" { }
W modules.conf włączamy moduły:
W vhost.d/ tworzymy wirtualne serwery:
pkg.domena.com.conf$HTTP["host"] == "pkg.domena.com" {
var.server_name = "pkg.domena.com"
server.name = server_name
server.document-root = vhosts_dir + "/pkg.domena.com"
dir-listing.activate = "enable"
dir-listing.hide-dotfiles = "enable"
accesslog.filename = log_root + "/" + server_name + "-access.log"
}
Dodatkowo tworzymy strukturę z katalogu document root:
cd /usr/local/www/data mkdir -p vhosts/pkg.domena.com cd vhosts/pkg.domena.com ln -s /poudriere/data/packages/10amd64-default FreeBSD:10:amd64
poudriere.domena.com.conf$HTTP["host"] == "poudriere.domena.com" {
var.server_name = "poudriere.domena.com"
server.name = server_name
server.document-root = vhosts_dir + "/poudriere.domena.com"
alias.url = ( "/data/" => "/poudriere/data/logs/bulk/" )
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/usr/local/etc/lighttpd/lighttpd-htdigest.user"
auth.require = ( "/" =>
(
"method" => "digest",
"realm" => "Restricted Area",
"require" => "valid-user"
)
)
accesslog.filename = log_root + "/" + server_name + "-access.log"
}
Dodatkowo tworzymy strukturę katalogu document root:
cd /usr/local/www/data/vhosts ln -s /usr/local/share/poudriere/html poudriere.domena.com
Oraz plik z hasłami zabezpieczający dostęp do strony:
apache-htdigest -c /usr/local/etc/lighttpd/lighttpd-htdigest.user "Restricted Area" web_user
Tworzymy drzewo w /usr/local/etc
cd /usr/local/etc && mkdir -p pkg/repos
Dodajemy repozytorium my_repo.conf (przykładowe opcje):
My_Repo: {
url: "http://pkg.domena.com/${ABI}",
enabled: yes
mirror_type: "none"
ip_version: 6
priority: 1
}
Od FreeBSD 10.2 domyślnym repozytorium jest drzewo „quarterly”. W poudriere można je pobrać przy pomocy svn-a:
sudo poudriere ports -c -B branches/2015Q3 -p quarterly -m svn+http
W ten sposób mamy dodatkowe drzewo portów:
root@pkg:~ # poudriere ports -l PORTSTREE METHOD TIMESTAMP PATH default portsnap 2015-09-21 23:37:13 /poudriere/ports/default quarterly svn+http 2015-09-22 00:08:39 /poudriere/ports/quarterly
Aktualizacja:
sudo poudriere ports -u -p quarterly