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).
Poudrière requiert un pool ZFS, même si ce n’est pas obligatoire c’est fortement conseillé.
Rien de plus simple:
cd /usr/ports/ports-mgmt/poudriere
make install clean
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:
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 "11_1" -v "11.1-RELEASE" -a amd64
Dans l’exemple ci-dessus, cela créée la jail 11_1, correspondant à FreeBSD 11.1 pour l’architecture amd64. (attention je ne recommande pas de mettre des . dans le nom de la jail, cela a des effets indésirables) Pour utiliser le format de packages pkg (devenu le seul, exécutez les lignes suivantes (11_1 correspond au nom de votre jail):
mkdir /usr/local/etc/poudriere.d
echo "WITH_PKGNG=yes" > /usr/local/etc/poudriere.d/11_1-make.conf
Il faut maintenant définir une liste de ports à forger. Ouvrez un fichier (par exemple dans /usr/local/etc/poudriere.d/11_1-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/11_1-ports -j 11_1 -p default
Enfin on lance la génération des ports:
poudriere bulk -f /usr/local/etc/poudriere.d/11_1-ports -j 11_1 -p default
Vous devriez avoir un résultat similaire:
fbsd91-tests# poudriere bulk -f /usr/local/etc/poudriere.d/11_1-ports -j 11_1 -p default
====>> Creating the reference jail... done
====>> Mounting system devices for 11_1-default
====>> Mounting ports/packages/distfiles
====>> Mounting packages from: /usr/local/poudriere/data/packages/11_1-default
====>> Mounting /var/db/ports from: /usr/local/etc/poudriere.d/11_1-options
====>> Logs: /usr/local/poudriere/data/logs/bulk/11_1-default/2013-08-01_22h06m39s
/etc/resolv.conf -> /usr/local/poudriere/data/build/11_1-default/ref/etc/resolv.conf
====>> Starting jail 11_1-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
====>> [11_1-default] 3 packages built, 0 failures, 0 ignored, 0 skipped
====>> Logs: /usr/local/poudriere/data/logs/bulk/11_1-default/2013-08-01_22h06m39s
Vous devriez voir apparaître l’arborescence de vos packages dans /usr/local/poudriere/data/packages/11_1-default (nom de la jail et de l’arbre de ports):
fbsd91-tests# ls -al /usr/local/poudriere/data/packages/11_1-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
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 /usr/local/etc/poudriere.d/11.1-ports -j 11_1 -p default
Vous avez désormais une forge de paquets et un repository FreeBSD.
Nous allons maintenant configurer notre client pour aller chercher ses packages sur le repository FreeBSD (il vous faudra un serveur http/ftp). Tout d’abord créez le répertoire /usr/local/etc/pkg/repos/ s’il n’existe pas Ouvrez le fichier /usr/local/etc/pkg/repos/local.conf
myrepo: {
url: "pkg+http://freebsdrepo.lan/pub/FreeBSD/11.1",
mirror_type: "http",
signature_type: "none",
fingerprints: "/usr/share/keys/pkg",
enabled: yes,
}
puis tapez les commandes suivantes afin d’installer les paquets que nous avons forgé avec poudrière:
pkg update
pkg install zsh portmaster