Samir Noir

Construire Ses Paquets Pkgng Avec Poudriere

J’utilise FreeBSD sur mes serveurs, et je me suis intéressé il y a peu à pkgng pour la gestion des paquets. Il apporte l’avantage de gérer toutes les opérations que l’on est susceptible de demander à son gestionnaire de paquet, comme de réaliser des mises à jour, ou de supprimer les paquets orphelins.
Révolutionnaire non ?

Je me suis donc mis en tête de monter mon dépôt utilisable par pkgng, pour éviter d’avoir à compiler plusieurs fois les mêmes applications et pour pouvoir profiter de toutes les fonctionnalités offertes par pkgng.

Pour les personnes qui souhaitent tester pkgng, il est possible de le faire avec le dépôt de PcBSD.

Créer son dépôt avec poudriere

poudriere est l’outil qui va permettre de créer son dépôt. Il demande l’utilisation de zfs pour fonctionner (pour avoir de bonne performance). Cependant, il est aussi possible d’utiliser ufs avec la branche devel de poudriere.

Sur notre serveur de build, il est donc nécessaire d’installer poudriere, depuis les ports par exemple.
Il se configure dans /usr/local/etc/poudriere.conf. Il est bien commenté et les valeurs utilisées par défaut sont convenables.

Ensuite, il faut demander à poudriere de récupérer l’arbre des ports :

    poudriere ports -c

poudriere utilise des jails pour construire les paquets, il faut donc en créer une en précisant son nom, la version de FreeBSD à utiliser dans la jail et l’architecture utilisée.

    poudriere jails -c -j 91amd64 -v 9.1-RELEASE -a amd64

Cette jail est créé dans /usr/local/poudriere/jails.
Le répertoire /usr/local/etc/poudriere.d/ stock les fichiers de configurations utilisés par poudriere pour chaque jails. Ici, je souhaite construire mes paquets pour être utilisés avec pkgng, je dois donc le préciser dans le make.conf de ma jail.

    echo "WITH_PKGNG=yes" > /usr/local/etc/poudriere.d/91amd64-make.conf

Les options de compilations vont aussi pouvoir être définies dans ce même fichier (voir le wiki de FreeBSD)

Suite à cela il va être possible de commencer à construire les paquets, il faut définir les ports à compiler dans un fichier (ici nommé test) :

    sysutils/tmux

Si on ne souhaite pas ajouter chaque options de compilations dans le make.conf de la jail, on peut demander à poudriere d’ouvrir la boite de dialogue que l’on a l’habitude d’utiliser pour les ports :

    poudriere options -f test -j 91amd64

Ces options sont stockées dans le répertoire /usr/local/etc/poudriere.d/91amd64-options

Lancement de la construction des paquets :

    poudriere bulk -f test -j 91amd64

La sortie permet de voir les opérations en cours :

====>> Mounting system devices for 91amd64
/etc/resolv.conf -> /usr/local/poudriere/jails/91amd64/etc/resolv.conf
====>> Starting jail 91amd64
====>> Mounting ports from: /usr/local/poudriere/ports/default
====>> Mounting packages from: /usr/local/poudriere/data/packages/91amd64-default
====>> Appending to /etc/make.conf: /usr/local/etc/poudriere.d/91amd64-make.conf
====>> Calculating ports order and dependencies
====>> Sanity checking the repository
====>> Deleting stale symlinks
====>> Cleaning the build queue
====>> Hit ctrl+t at any time to see build progress and stats
====>> Building 4 packages using 1 builders
====>> [01] Starting build of ports-mgmt/pkg
====>> [01] Finished build of ports-mgmt/pkg: Success
====>> [01] Starting build of devel/libevent
====>> [01] Finished build of devel/libevent: Success
====>> [01] Starting build of devel/pkgconf
====>> [01] Finished build of devel/pkgconf: Success
====>> [01] Starting build of sysutils/tmux
====>> [01] Finished build of sysutils/tmux: Success
====>> Stopping 1 builders
====>> Creating pkgng repository
Generating repo.sqlite in /usr/local/poudriere/data/packages/91amd64-default/: done!
====>> Cleaning up
====>> Umounting file systems
====>> Built ports: ports-mgmt/pkg devel/libevent devel/pkgconf sysutils/tmux

====>> [91amd64] 4 packages built, 0 failures, 0 ignored, 0 skipped

Dans /usr/local/poudriere/data/ on trouve deux répertoires intéressants :

  • packages : contient un répertoire par jails avec les paquet précédemment construits
  • logs : des logs sur la construction des paquets, une page html est aussi créée, permettant de voir les ports qui on bien compilée, ou les compilations qui se sont mal terminées.

Maintenant, on peut mettre à disposition ces paquets en utilisant un serveur Web qui pointe sur /usr/local/poudriere/data/packages/

Utiliser son dépôt avec pkgng

Pour utiliser pkgng, il faut l’installer sur notre système. Depuis FreeBSD 9.1 il est possible de lancer directement la commande pkg pour installer pkgng. Sur les versions précédentes de FreeBSD il est possible de l’installer depuis les ports.

Suite à cela, il nous faut éditer le fichier de configuration de pkgng pour préciser l’adresse du dépôt à utiliser.
Cela ce passe dans /usr/local/etc/pkg.conf

    packagesite: http://pkg.noir.im/91amd64-default

Il ne reste qu’à utiliser pkgng :

    pkg update
    pkg install tmux

Liens