Halfje-Bruin

Halfje-Bruin

Een collectie interessante ditjes en datjes.

Kees de Bruin

4 minuten leestijd

Je kunt natuurlijk gebruik maken van de port packages welke door FreeBSD beschikbaar worden gesteld maar dan mis je de mogelijkheid om aanpassingen te maken in de configuratie van deze packages. Bijvoorbeeld heb ik geen X11 windows server draaien en dan hoeft dat ook niet in de packages meegenomen te worden.

De oplossing is dus om zelf de port packages te bouwen. Dit kan direct in de ports boom op het systeem maar hier kleven een aantal nadelen aan, met name wat betreft het afhandelen van afhankelijkheden tussen de verschillende ports. Om dit op te vangen maak ik gebruik van ports-mgmt/poudriere om in een afgeschermde omgeving de port packages te bouwen welke dan lokaal geïnstalleerd kunnen worden.

Poudriere configuratie

Voordat we kunnen beginnen moeten we de configuratie voor de standaard port packages aanpassen. Normaal wordt gebruik gemaakt van kwartaalupdates maar we willen dit aanpassen naar de laatste versies. Dit kan door het bestand /usr/local/etc/pkg/repos/FreeBSD.conf te maken met de volgende inhoud:

FreeBSD: {  
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",  
  mirror_type: "srv",  
  signature_type: "fingerprints",  
  fingerprints: "/usr/share/keys/pkg",  
  enabled: yes  
}

Nu dit is aangepast kunnen we poudriere installeren. Hierbij wordt gevraagd om ook de laatste versie van pkg te installeren. Daarnaast installeren we ook een port voor het afhandelen van de cache.

# pkg install ports-mgmt/poudriere devel/ccache

Na installatie kun je een voorbeeld configuratie vinden in /usr/local/etc/poudriere.conf.sample met uitleg over de verschillende parameters welke ingesteld kunnen worden. Voor onze configuratie maken we het bestand /usr/local/etc/poudriere.conf met de volgende inhoud:

# Poudriere configuration file  
  
ZPOOL=zbase  
ZROOTFS=/p  
FREEBSD_HOST=ftp://ftp.nl.freebsd.org  
RESOLV_CONF=/etc/resolv.conf  
BASEFS=/poudriere  
POUDRIERE_DATA=${BASEFS}/data  
USE_PORTLINT=no  
USE_TMPFS=all  
DISTFILES_CACHE=/poudriere/distfiles  
CHECK_CHANGED_OPTIONS=verbose  
CHECK_CHANGED_DEPS=yes  
PKG_REPO_SIGNING_KEY=/usr/local/etc/pki/poudriere/poudriere.key  
CCACHE_DIR=/var/cache/ccache  
WRKDIR_ARCHIVE_FORMAT=tbz  
NOLINUX=yes  
URL_BASE=http://poudriere.home.lan/poudriere/  
ATOMIC_PACKAGE_REPOSITORY=yes  
COMMIT_PACKAGES_ON_FAILURE=yes  
KEEP_OLD_PACKAGES=yes  
KEEP_OLD_PACKAGES_COUNT=3  

Belangrijk in deze configuratie is dat de juiste ZFS pool naam gebruikt wordt, in mijn geval dus zbase. Verder configureren we alvast de URL voor de web client zodat we het bouwproces in de gaten kunnen houden.

Jails, ports en settings

Om gebruik te kunnen maken van poudriere moeten we eerst een jail maken waarin de port packages gebouwd gaan worden. Dit en de vervolg stappen staan uitgebreid beschreven in het FreeBSD Handbook.

# poudriere jail -c -j 12amd64 -v 12.0-RELEASE  

Vervolgens moeten we de ports tree ophalen. Deze bevat de makefiles en patches voor alle beschikbare port packages.

# poudriere ports -c

Het bestand /usr/local/etc/poudriere.d/make.conf bevat de algemene opties voor het bouwen van de ports.

# Use the OpenSSL port version where possible  
DEFAULT_VERSIONS+=      ssl=openssl  
  
# Default versions for some programs  
DEFAULT_VERSIONS+=      bdb=5  
DEFAULT_VERSIONS+=      mysql=10.2m  
DEFAULT_VERSIONS+=      perl5=5.26  
DEFAULT_VERSIONS+=      python=2.7  
DEFAULT_VERSIONS+=      python2=2.7  
DEFAULT_VERSIONS+=      python3=3.6  
DEFAULT_VERSIONS+=      ruby=2.4  
DEFAULT_VERSIONS+=      apache=2.4  
DEFAULT_VERSIONS+=      php=7.2  
  
# Enable some features by default  
OPTIONS_SET+=   PKGNG  
OPTIONS_SET+=   MANPAGES  
OPTIONS_SET+=   VP8  
OPTIONS_SET+=   ICONV  
OPTIONS_SET+=   GSSAPI_MIT  
OPTIONS_SET+=   READLINE_PORT  
OPTIONS_SET+=   SSP_PORTS  
  
# Disable some features by default  
OPTIONS_UNSET+= X11  
OPTIONS_UNSET+= WAYLAND  
OPTIONS_UNSET+= CUPS  
OPTIONS_UNSET+= LDAP  
OPTIONS_UNSET+= TCL  
OPTIONS_UNSET+= WXGTK  
OPTIONS_UNSET+= OPENGL  
OPTIONS_UNSET+= EGL  
OPTIONS_UNSET+= NLS  
OPTIONS_UNSET+= EXAMPLES  
OPTIONS_UNSET+= LUA  
OPTIONS_UNSET+= DEBUG  
OPTIONS_UNSET+= SOUND  
OPTIONS_UNSET+= ALSA  
OPTIONS_UNSET+= PULSEAUDIO  
OPTIONS_UNSET+= DOCBOOK  
OPTIONS_UNSET+= GSSAPI_BASE  

Als laatste maken we het bestand /usr/local/etc/poudriere.d/12amd64.pkglist met hierin alle port packages welke we gebouwd willen hebben.

ports-mgmt/pkg  
ports-mgmt/poudriere  
devel/ccache  
ports-mgmt/dialog4ports

Hoewel we de algemene instellingen voor de port packages hebben aangemaakt, moeten we ook de individuele port packages nog configureren.

# poudriere options -j 12amd64 -f /usr/local/etc/poudriere.d/12amd64.pkglist

Dit zal alle gedefinieerde port packages aflopen, inclusief alle afhankelijke packages, en ons de mogelijkheid geven om de configuratie aan te passen. Deze configuratie wordt opgeslagen zodat dit niet elke keer gedaan hoeft te worden.

Port packages bouwen en gebruiken

Nu alle configuratie is gedaan, is het tijd om de port packages te bouwen. Hierbij zal poudriere zelf aangeven of er nog ontbrekende directories gemaakt moeten worden.

# poudriere bulk -j 12amd64 -f /usr/local/etc/poudriere.d/12amd64.pkglist

Als dit klaar is, dan kunnen we de gebouwde port packages gaan gebruiken op ons systeem. We moeten pkg dan wel vertellen waar de port packages staan. Dit doen we door het bestand /usr/local/etc/pkg/repos/Poudriere.conf te maken:

Poudriere: {  
  url: "file:///poudriere/data/packages/12amd64-default",  
  signature_type: "pubkey",  
  pubkey: "/usr/local/etc/pki/poudriere/poudriere.crt",  
  priority: 100,  
  enabled: yes  
}  

Met de huidige configuratie worden ook nog port packages gebruikt van de officiële FreeBSD repository en dat willen we niet. Om dit uit te zetten veranderen we in /usr/local/etc/pkg/repos/FreeBSD.conf de parameter enabled naar no.

We kunnen nu de officiële port packages vervangen door de zojuist gebouwde port packages.

# pkg update  
# pkg upgrade -f

Recente berichten

Blog Series

Categorieën

Over Mij

Amateur fotograaf, korfballer en een liefhebber van lekker eten.