Poudrière est un excellent outil disponible à la fois sur FreeBSD et DragonFlyBSD permettant de forger un repository pour FreeBSD/DragonFlyBSD afin de déployer rapidement un parc de serveurs ou de clients FreeBSD (en le couplant à Puppet vous serez à même de déployer très vite).
Prérequis
Poudrière requiert un pool ZFS, même si ce n’est pas obligatoire c’est fortement conseillé.
Installation
Rien de plus simple:
cd /usr/ports/ports-mgmt/poudriere make install clean
Configuration
On va tout d’abord créer un répertoire et y monter notre pool ZFS:
mkdir /poudriere zpool create -m /poudriere poudriere /dev/ada1
On va maintenant configurer poudriere. Ouvrez le fichier /usr/local/etc/poudriere.conf
ZPOOL=zpool ZROOTFS=/poudriere FREEBSD_HOST=ftp://ftp.freebsd.org RESOLV_CONF=/etc/resolv.conf BASEFS=/usr/local/poudriere USE_PORTLINT=no USE_TMPFS=yes DISTFILES_CACHE=/usr/ports/distfiles PARALLEL_JOBS=1 export HTTP_PROXY=http://myproxy:3128 export HTTPS_PROXY=http://myproxy:3128 export FTP_PROXY=http://myproxy:3128
Détaillons ces options:
- ZPOOL: le nom de votre pool ZFS
- ZROOTFS: la racine de votre pool
- FREEBSD_HOST: l’hôte à partir duquel télécharger les ports et la distribution
- RESOLV_CONF: le fichier de configuration du client DNS utilisé par poudrière
- BASEFS: le répertoire où poudrière va mettre ses jails et ports
- USE_PORTLINT: si vous souhaitez utiliser le nettoyage des ports passer la variable à yes
- USE_TMPFS: demander à poudriere d’utiliser un TMPFS pour la compilation
- DISTFILES_CACHE: permet de mettre en place un répertoire partagé entre les ports et les jails.
- PARALLEL_JOBS: le nombre de tâches parallèles. Si le paramètres n’est pas indiqué, il s’agit du nombre de cœurs de processeur.
Nous aurons besoin d’un arbre de ports dédié. On demande à poudrière de le récupérer.
poudriere ports -c -p default
On va maintenant créer la jail correspondant à notre besoin:
poudriere jail -c -j "F91" -v "9.1-RELEASE" -a amd64
Dans l’exemple ci-dessus, cela créée la jail F91, correspondant à FreeBSD 9.1 pour l’architecture amd64.
Si vous souhaitez utiliser le format de packages pkgng, exécutez les lignes suivantes (F91 correspond au nom de votre jail):
mkdir /usr/local/etc/poudriere.d echo "WITH_PKGNG=yes" > /usr/local/etc/poudriere.d/F91-make.conf
Il faut maintenant définir une liste de ports à forger. Ouvrez un fichier (par exemple dans /usr/local/etc/poudriere.d/F91-ports) et insérez une liste de ports
shells/zsh ports-mgmt/portmaster
Ensuite on va demander à poudriere de nous montrer les options de compilation afin de les sélectionner:
poudriere options -f /usr/local/etc/poudriere.d/F91-ports -j F91 -p default
Enfin on lance la génération des ports:
poudriere bulk -f /root/myportlist -j F91 -p default
Vous devriez avoir un résultat similaire:
fbsd91-tests# poudriere bulk -f /root/myportlist -j F91 -p default ====>> Creating the reference jail... done ====>> Mounting system devices for F91-default ====>> Mounting ports/packages/distfiles ====>> Mounting packages from: /usr/local/poudriere/data/packages/F91-default ====>> Mounting /var/db/ports from: /usr/local/etc/poudriere.d/F91-options ====>> Logs: /usr/local/poudriere/data/logs/bulk/F91-default/2013-08-01_22h06m39s /etc/resolv.conf -> /usr/local/poudriere/data/build/F91-default/ref/etc/resolv.conf ====>> Starting jail F91-default ====>> Calculating ports order and dependencies ====>> Sanity checking the repository ====>> Deleting stale symlinks ====>> Deleting empty directories ====>> Cleaning the build queue ====>> Building 3 packages using 3 builders ====>> Starting/Cloning builders ====>> Hit CTRL+t at any time to see build progress and stats ====>> [01] Starting build of converters/libiconv ====>> [02] Starting build of ports-mgmt/portmaster ====>> [02] Finished build of ports-mgmt/portmaster: Success ====>> [01] Finished build of converters/libiconv: Success ====>> [01] Starting build of shells/zsh ====>> [01] Finished build of shells/zsh: Success ====>> Stopping 3 builders ====>> Preparing INDEX ====>> Generating INDEX... done ====>> Compressing INDEX-9... done ====>> Cleaning up ====>> Umounting file systems ====>> Built ports: ports-mgmt/portmaster converters/libiconv shells/zsh ====>> [F91-default] 3 packages built, 0 failures, 0 ignored, 0 skipped ====>> Logs: /usr/local/poudriere/data/logs/bulk/F91-default/2013-08-01_22h06m39s
Vous devriez voir apparaître l’arborescence de vos packages dans /usr/local/poudriere/data/packages/F91-default (nom de la jail et de l’arbre de ports):
fbsd91-tests# ls -al /usr/local/poudriere/data/packages/F91-default total 13 drwxr-xr-x 8 root wheel 9 Aug 1 22:09 . drwxr-xr-x 3 root wheel 3 Aug 1 22:06 .. drwxr-xr-x 2 root wheel 5 Aug 1 22:09 All -rw-r--r-- 1 root wheel 348 Aug 1 22:09 INDEX-9.bz2 drwxr-xr-x 2 root wheel 5 Aug 1 22:09 Latest drwxr-xr-x 2 root wheel 3 Aug 1 22:07 converters drwxr-xr-x 2 root wheel 3 Aug 1 22:07 devel drwxr-xr-x 2 root wheel 3 Aug 1 22:06 ports-mgmt drwxr-xr-x 2 root wheel 3 Aug 1 22:09 shells
Mettre à jour l’arbre et les packages
Il faudra régulièrement mettre à jour l’arbre de ports et forger de nouveau les paquets ayant été mis à jour. Pour se faire, il suffit de lancer simplement les commandes suivantes:
poudriere ports -u -p default poudriere bulk -f /root/myportlist -j F91 -p default
Vous avez désormais une forge de paquets et un repository FreeBSD.
Configuration côté client
Nous allons maintenant configurer notre client pour aller chercher ses packages sur le repository FreeBSD (il vous faudra un serveur http/ftp).
Ouvrez le fichier /usr/local/etc/pkg.conf (pkgng)
packagesite: http://freebsdrepo.lan/F91-default/
puis tapez les commandes suivantes afin d’installer les paquets que nous avons forgé avec poudrière:
pkg update pkg install zsh portmaster
C’est tout !
Note aux utilisateurs souhaitant passer des ports aux packages
Si vous souhaitez utiliser votre forge mais ne pas réinstaller tous vos serveurs à cause de l’incompatibilité entre packages et ports, il faut noter que pkgng gère très bien l’utilisation des deux systèmes en parallèle.
Si vous êtes sur l’ancien système de packages/ports (FreeBSD 9.1 uniquement), voici la procédure de migration vers pkgng:
pkg pkg2ngecho WITH_PKGNG="YES" >> /etc/make.conf
Vous pourrez ainsi continuer à utiliser les ports et basculer petit à petit vos paquets vers le repo contenant la forge.