Narzędzia użytkownika

Narzędzia witryny


freebsd:ports:poudriere

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
freebsd/ports/poudriere.txt · ostatnio zmienione: 2017/03/18 22:12 przez mky