====== Poudriere ======
''Poudriere'' est un infrastructure de compilation permettant de construire ses propres paquets pour une ou plusieurs //releases//. Elle repose sur les jails.
===== Création d'un certificat SSL (optionnel) =====
Nous allons signé nos paquets à l'aide de l'utilitaire ''openssl''. Ce n'est pas une obligation mais nos utilisateurs seront sans doute plus rassurés.
==== Génération de la clé privée ====
openssl genpkey -algorithm RSA -out /usr/local/etc/ssl/rsa-key.pem -pkeyopt rsa_keygen_bits:4096
==== Génération de la clé publique ====
openssl pkey -in /usr/local/etc/ssl/rsa-key.pem -pubout -out /usr/local/etc/ssl/rsa-key.cert
===== Installation =====
Rien de plus simple, on installe la version déjà fournie pour notre système.
pkg install poudriere dialog4ports
===== Configuration =====
Il faut éditer le fichier ''/usr/local/etc/poudriere.conf''. Ci dessous mes propres réglages, je n'utilise pas de système de fichiers ZFS.
**C'est une configuration sans ZFS.**
NO_ZFS=yes
FREEBSD_HOST=http://ftp.fr.freebsd.org
RESOLV_CONF=/etc/resolv.conf
BASEFS=/usr/local/poudriere
POUDRIERE_DATA=${BASEFS}/data
USE_PORTLINT=yes
USE_TMPFS=yes
DISTFILES_CACHE=/usr/ports/distfiles
SVN_HOST=svn.FreeBSD.org
CHECK_CHANGED_OPTIONS=verbose
CHECK_CHANGED_DEPS=yes
PKG_REPO_SIGNING_KEY=/usr/local/etc/ssl/rsa-key.pem
NOLINUX=yes
NO_RESTRICTED=no
Explication concernant certaines variables :
* **FREEBSD_HOST**, j'utilise le protocole ''http'', car mon pare-feu bloque les connexions vers les serveurs FTP
* **USE_PORTLINT**, cette option n'est pas obligatoire, c'est plus pour les développeurs
* **SVN_HOST**, la géolocalisation d'un miroir SVN se fait désormais tout seul
* **PKG_REPO_SIGNING_KEY** la clé privée
* **NO_RESTRICTED** en plaçant la valeur à **no**, les paquets qui sont sous une licence propriétaire seront conservés
===== Création des jails =====
Nous avons besoin au minimum de deux //jail//s :
* Une contenant l'arbre des ports
* Une contenant le système sur lequel on souhaite construire les ports
==== Pour les ports ====
Je préfère utiliser l'utilitaire ''svn'' (''devel/subversion'') au lieu de ''portsnap'' ((Il utilise un ''snapshot''.)).
pkg install subversion ca_root_nss
poudriere ports -c -m svn+https -p HEAD
L'arbre des ports est désormais situé dans ''/usr/local/poudriere/ports/HEAD''.
Si l'on ne souhaite pas utiliser Subversion, voici la commande qui faut taper :
poudriere ports -c
Dans ce cas là, la //jail// s'appelle **default**. On la retrouvera dans ''/usr/local/poudriere/ports/default''.
**Quelques options à connaître**
Pour lister toutes les //jails// relatives aux ports (créées avec l'option **ports**) :
poudriere ports -l
Pour supprimer une //jail// en particulier (créée avec l'option **ports**) :
poudriere ports -d default
==== Pour le système de base ====
poudriere jail -c -j amd64-102 -v 10.2-RELEASE -a amd64
Cela va créer une //jail// ayant comme nom **amd64-102**. Si notre système de base est une architecture [[https://fr.wikipedia.org/wiki/AMD64|amd64]], on peut éventuellement préciser une autre architecture avec l'option **-a**.
Par exemple, si je veux contruire des ports pour l'architecture **i386**.
poudriere jail -c -j i386-93 -v 9.3-RELEASE -a i386
**Quelques options à connaître**
Pour lister toutes nos //jails// (créées avec l'option **jail**) :
poudriere jail -l
Pour supprimer une //jail// en particulier (créée avec l'option **jail**) :
poudriere jail -d amd64-102
Dans ce cas là, je supprime la //jail// intitulée amd64-102.