Introduction aux ports FreeBSD

Dans ce billet, nous allons voir comment utiliser le gestionnaire de paquets de FreeBSD. Un logiciel puissant, bon marché, réduisant le time-to-market et optimisant votre daily work stream (j’ai bon ?).

Qu’est-ce qu’un port ?

FreeBSD est une distribution source, cela signifie qu’il est nécessaire de compiler l’ensemble des binaires que l’on souhaite installer. Les informations permettant de compiler un logiciel sont appelées un port.

Le système des ports permet de rendre la compilation de binaires simple et agréable en gérant automatiquement les dépendances et leur compilation.

La collection des ports regroupe l’ensemble des logiciels disponibles pour FreeBSD de façon organisée. Cette collection se trouve dans /usr/ports.

Chaque port contient les éléments suivants :

  • deux fichiers de description (pkg-descr et distinfo) ;
  • un fichier Makefile ;
  • un ensemble de patchs contenus dans un répertoire files (optionnel).

Note : les dépôts officiels fournissent des paquets précompilés, la compilation ayant lieu chaque trimestre. Ce billet n’aborde pas l’usage de ces paquets.

pkg-descr

Le fichier pkg-descr est une présentation normée du logiciel :

  • WWW : site web officiel du projet ;
  • LICENSE: type de licence du logiciel ;
  • etc.

distinfo

Le fichier distinfo sert à garantir que les fichiers sources récupérés sont ceux attendus. Pour cela il contient trois informations :

  • TIMESTAMP : la date au format Unix timestamp de création du fichier distinfo ;
  • SHA256 : le hash au format sha256 de l’archive contenant les sources ;
  • SIZE : la taille de l’archive contenant les sources ;

Il est généré automatiquement par le mainteneur du port. Si un seul de ces trois paramètres n’est pas conforme à ceux attendu, alors les sources récupérées ne sont pas les bonnes et le port ne sera pas compilés.

Ce système de sécurité est efficace et facile à gérer pour le mainteneur du port. Il suffit au mainteneur de taper la commande suivante pour le générer :

make makesum

Mais gérer un port est une autre histoire et nous en parlerons sûrement dans un autre article, stay tuned 😉 !

Makefile

Le fichier Makefile contient quelques informations descriptives sur le logiciel et sur le port, son mainteneur, sa licence etc. Mais surtout, il contient l’ensemble des informations nécessaires à la compilation, à l’installation et à la désinstallation du logiciel. C’est aussi ce fichier qui permettra de gérer les dépendances nécessaires à la compilation et à l’utilisation du logiciel. C’est principalement grâce au Makefile que la compilation d’un port FreeBSD est simplissime.

Si vous êtes développeur, ce fichier devrait vous être familier.

files

Il s’agit d’un répertoire contenant l’ensemble des patchs qui ont été intégrés au port. Les fichiers de patch sont des fichiers générés soit avec diff, soit avec la commande :

make makepatch

Ils ont une nomenclature particulière et il ne doit exister au maximum qu’un seul fichier patch par fichier source à patcher.

Cette fonctionnalité rend le système des ports beaucoup plus pratique que les systèmes de gestion de paquets binaires dès lors qu’il vous faut patcher directement les logiciels que vous utilisez.

Bilan

Comme vous pouvez le constater, il n’y a rien d’extraordinaire au contenu d’un port. 

Ce système, facile à maintenir, permet aux ports FreeBSD d’être souples, fiables et simples d’utilisation. Au moins autant que les gestionnaires de paquets binaires.

Comment mettre en place la collection des ports

FreeBSD, sauf si l’option a été choisie lors de l’installation, ne contient pas la collection des ports. Il faut donc l’ajouter.

Au premier démarrage d’une installation standard, vous disposerez du binaire portsnap. Voyons ensemble comment l’utiliser.

Récupérer la collection de ports

Pour récupérer l’archive, il vous suffit d’une connexion internet et de taper la commande suivante :

portsnap fetch

Rendre les ports utilisables

Une fois l’archive récupérée, il ne reste qu’à l’extraire. Par défaut, elle sera stockée dans le répertoire /usr/ports. Entrez donc la commande suivante :

portsnap extract

Mettre à jour la collection des ports

Pour mettre à jour les ports, récupérez les comme initialement, puis utilisez l’argument update :

portsnap fetch
portsnap update

Ou sinon, en une seule commande :

portsnap fetch update

Plutôt simple n’est-ce pas ?

Attention : mettre à jour les ports ne signifie pas mettre à jour les logiciels ! Les ports ne sont que le référentiel permettant de compiler et d’installer les logiciels, pas les logiciels eux-mêmes. La mise à jour des logiciels sera peut-être abordée dans un prochain billet. En attendant, les curieux peuvent aller voir du côté de portupgrade.

Comment gérer les logiciels via les ports

Maintenant que nous avons descendue collection des ports, nous allons voir comment installer un logiciel.

Imaginons que vous souhaitiez installer nginx.

Trouver le port contenant nginx

Pour installer un port, il faut se rendre dans son répertoire et appliquer une série de commandes. La première étape est de trouver le répertoire dans lequel est rangé le port que l’on souhaite installer.

Le port nginx se situe dans la catégorie www. Cependant, cela n’est pas toujours aussi simple. Pour localiser un port dans la liste des ports, utilisez la commande :

whereis nginx

Nous constatons que le port contenant nginx se trouve dans /usr/ports/www/nginx. Avant de poursuivre, rendez-vous donc dans ce répertoire :

cd /usr/ports/www/nginx

Choisir les options avec lesquels nginx sera installé

Le système des ports permet de choisir les options avec lesquels nginx sera compilé. Cette étape est également nécessaire pour chacune des dépendances. Afin de choisir ces options avant que la compilation commence, il suffit de faire :

make configure

Compiler et installer nginx

Maintenant, nous pouvons lancer la compilation et l’installation de nginx :

make install clean

Si vous souhaitez seulement compiler nginx sans l’installer il suffit de taper make.

L’ajout de l’argument clean aura pour effet, une fois la compilation et l’installation terminées, de nettoyer le répertoire de travail. Les différents fichiers temporaires créés lors de l’installation seront supprimés.

Désinstaller nginx

Enfin, nous allons voir comment supprimer nginx.

Partons du principe que son installation est assez vieille et que nous ne savons plus dans quel répertoire se trouve son port.

Commençons par utiliser à nouveau la commande whereis afin de le retrouver.

Nous n’avons plus qu’à nous déplacer dans ce répertoire et à taper la commande suivante :

make deinstall

Conclusion

Voilà vous savez maintenant utiliser les ports, simple et puissant comme système n’est-ce pas ?

Ce système souffre néanmoins d’un défaut : la compilation peut être un processus long qui consomme des ressources.

Il est donc intéressant de ne la réaliser qu’une seule fois pour plusieurs machines et d’utiliser le gestionnaire de paquets pkgng. Mais nous verrons cela dans le prochain billet !