====== 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/"
i wrzucamy tak cokolwiek (np. ''echo "It works!" > index.html'')
* włączamy obsługę vhostów:
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