====== 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