Accueil

© 2002 - 2012
Thomas van Oudenhove vanouden [AT] mines-albi.fr
Mise à jour : 25/02/2012

Mise à jour de ports sous FreeBSD

Introduction, principes

FreeBSD utilise le système des ports. Un port est une application portée sur FreeBSD. Pour l'exemple, prenons l'application portupgrade. Sur le répertoire /usr/ports/sysutils/portupgrade/, on trouve un fichier README.html qui contient les informations nécessaires pour installer cette application :

Un package est en fait une version particulière d'un port (déjà compilée). portupgrade est en fait la commande qui permet de mettre à jour ou d'installer un port (portupgrade -N ou portinstall). Il existe d'autres commandes permettant de gérer les packages, mais je trouve le système des ports plus intéressant, puisqu'il permet de recompiler chaque port, et donc d'obtenir des applications adaptées au matériel (parfois inutile, mais bon...).

Voyons maintenant concrètement comment maintenir des applications à jour (version stable des ports).

La mise à jour des ports

Pour toutes les manipulations suivantes, il faut être connecté en root. La première chose à faire est de créer un fichier disant quelles nouvelles versions de ports rechercher. Un fichier exemple est disponible sur /usr/share/examples/cvsup/ports-supfile, vous pouvez décommenter ou ajouter les parties qui vos intéressent. Mon fichier est simple :

zola# more my-ports-supfile
*default host=cvsup2.fr.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
ports-all

Une fois ce fichier créé, il faut appeler la commande cvsup, qui va mettre à jour l'arbre des ports :

zola# cvsup my-ports-supfile

On peut ensuite régénérer la base de données et l'index des ports grâce à la commande suivante :

zola# portsdb -uU
Updating the ports index ... Generating INDEX.tmp - please wait..Done.
[Updating the portsdb <format:bdb1_btree> in /usr/ports ... - 10793 port entries 
found .........
1000.........2000.........3000.........4000.........5000.........6000.........
7000.........8000.........9000.........10000....... ..... done]

Alors, on peut voir quelles sont les applications qui disposent de mises à jour :

zola# portversion -l "<"
ImageMagick                 <
grip                        <
lame                        <
linux-sun-jdk               <
mkisofs                     <
samba                       <

puis lancer une mise à jour totale (de toutes les applications), l'option r permet de vérifier les dépendances, ) :

zola# portupgrade -rR ImageMagick
--->  Upgrading 'ImageMagick-5.5.7.16' to 'ImageMagick-5.5.7.16_1' 
	  (graphics/ImageMagick)
--->  Building '/usr/ports/graphics/ImageMagick'
[...]
--->  Backing up the old version
--->  Uninstalling the old version
--->  Deinstalling 'ImageMagick-5.5.7.16'
[Updating the pkgdb <format:bdb1_btree> in /var/db/pkg ... - 284 packages found 
	  (-1 +0) (...) done]
--->  Installing the new version via the port
===>  Installing for ImageMagick-5.5.7.16_1
===>   ImageMagick-5.5.7.16_1 depends on file: /usr/local/bin/perl5.6.1 - found
[...]
===>   Compressing manual pages for ImageMagick-5.5.7.16_1
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===>   Registering installation for ImageMagick-5.5.7.16_1
[...]
===>  Cleaning for ImageMagick-5.5.7.16_1
--->  Cleaning out obsolete shared libraries
[Updating the pkgdb <format:bdb1_btree> in /var/db/pkg ... - 285
packages found 
	(-0 +1) . done]

L'option r permet de vérifier les dépendances, l'option R de vérifier les dépendances inverses, l'option a sert à remettre à jour toutes les applications. L'option N permet d'installer un nouveau port. Pour en savoir plus sur la syntaxe de portupgrade, cf. :

zola# man portupgrade

Enfin, il faut nettoyer les répertoires ayant servi à la compilation des applications, grâce aux deux commandes suivantes (l'option C permet de nettoyer les répertoires de travail, et l'option DD d'effacer les fichiers non référencés par des ports installés) :

zola# portsclean -C
Cleaning out /usr/ports/*/*/work...
done.
zola# portsclean -DD
Detecting unreferenced distfiles...

Conclusion

Voila l'essentiel des commandes à connaître pour la mise à jour d'applications sous FreeBSD. A noter qu'il existe une procédure très similaire pour mettre à jour les sources du noyau. Pour finir, je ne peux que vous conseiller d'aller lire ou jeter un oeil au HandBook FreeBSD, la bible.