Spis treści
Poudriere
Konfiguracja wstępna
- w
/etc/rc.conf
włączamy ładowanie wymaganych modułów
kld_list="nullfs tmpfs linux linprocfs"
- tworzymy nowy dataset na ZFS:
zfs create -o jailed=on zroot/poudriere
Instalacja Jail-a
Wypakowujemy base system do /usr/jails/pkg01.domain.tld, jail konfigurujemy następująco:
/etc/jail./conf
exec.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.conf
jail_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.
Poudriere
Konfiguracja
Instalacja:
pkg install poudriere
/usr/local/etc/poudriere.conf
ZPOOL=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
Przygotowanie środowiska
- instalujemy drzewo portów dla poudriere:
poudriere ports -c
Powyższe tworzy domyślne drzewo portów default
, pobierane za pomocą portsnap. Jest to drzewo latest
.
- dodatkowo: aktualne drzewo
quarterly
zaciągane przez git
poudriere ports -c -B branches/2017Q1 -p 2017q1 -m git
- Listowanie aktualnych drzew portów:
root@pkg:~ # poudriere ports -l PORTSTREE METHOD TIMESTAMP PATH default portsnap 2015-09-21 23:37:13 /poudriere/ports/default
- jeśli nie mamy portów w jailu dla poudriere (a pewnie nie ma, bo i po co), tworzymy tylko katalog, gdzie będą przechowywane pliki ze źródłami dla portowanych aplikacji:
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
Eksploatacja
- tworzenie listy pakietów:
- tworzymy plik tekstowy a listą pakietów np. 10amd64-packages.txt:
ftp/pure-ftpd mail/postfix www/squid
- konfiguracja portów:
poudriere options -n -j 10amd64 -f 10amd64-packages.txt
- aktualizacja drzewa portów:
poudriere ports -u
- budowanie portów:
poudriere bulk -j 10amd64 -f 10amd64-packages.txt
Lighttpd
Instalacja:
pkg install lighttpd htdigest
Konfiguracja
Plik /usr/local/etc/lighttpd/lighttpd.conf
- jeśli używamy IPv6, definiujemy:
server.bind = 2001:xxxx::xxxx
- definiujemy document root dla domyślnego serwera:
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"
- definiujemy adres nasłuchu na IPv4:
# IPv4 listening socket $SERVER["socket"] == "192.168.31.4:80" { }
W modules.conf
włączamy moduły:
- mod_alias
- mod_auth
W vhost.d/
tworzymy wirtualne serwery:
Serwer z pakietami - pkg.domena.com
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
Serwer z dostępem do logów - poudriere.domena.com
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
Dodanie repozytorium do pkg
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 }
Porty Quarterly
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