Tout d'abord, qu'est qu'un port ? On pourrait le définir ainsi : un " port " est un logiciel " porté " sur FreeBSD. En gros, un port est composé de différents éléments permettant d'installer ledit logiciel sur FreeBSD. Ces différents éléments sont :
- une liste de sites où récupérer les sources ;
- des patches à appliquer au code source pour le rendre compatible avec FreeBSD ;
- des directives de compilation ;
- les dépendances vis-à -vis d'autres ports
Tout le système des ports de FreeBSD (et des ports OpenBSD, ainsi que
pkgsrc) sont organisés autour des
Makefiles. Ce sont les
Makefiles qui donnent les directives énumérées ci-dessus. Exemple :
 % cat /usr/ports/graphics/pornview/Makefile
[...]
PORTNAME= pornview
PORTVERSION= 0.2.0.p.1
[...]
CATEGORIES= graphics
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
[...]
MAINTAINER= dinoex[at]FreeBSD.org
COMMENT= PornView is an image viewer/manager
LIB_DEPENDS= exif.12:${PORTSDIR}/graphics/libexif
USE_XLIB= yes
USE_GNOME= gdkpixbuf gnomehack gnomeprefix
GNU_CONFIGURE= yes
[...]
On a ainsi, successivement, le nom du port, sa version, dans quelle(s) catégorie(s) il est classé, le site où aller le télécharger (dans ce cas, Sourceforge), le mainteneur du port (celui qui s'occupe de le mettre à jour quand c'est nécessaire), une description courte d'une ligne, et des dépendances sur des bibliothèques et/ou des outils GNU.
Cela permet d'utiliser un outil que tout le monde connaît (
make) et ainsi de faciliter l'utilisation des ports. En effet, installer un logiciel comme Gnome, qui présente des dizaines de dépendances, qui elles-mêmes possèdent encore des dépendances, est aussi simple que de taper :
% cd /usr/ports/x11/gnome2 && sudo make install clean
On port se présente sous la forme de quelques fichiers textes. L'ensemble des ports est en fait une arborescence regroupant les ports en catégories. Par exemple
www, mail, java...
En général, sous FreeBSD, on retrouve l'arborescence de ports dans
/usr/ports.
Dans l'article, on parlera d'arbre, pour désigner cette arborescence.
Sous FreeBSD, un port peut aussi se présenter sous la forme d'une archive contenant le port compilé ainsi que des directives d'installation. On nomme cette archive un package. Un package est donc, grossièrement, la version compilée d'un port, comme un
.rpm ou un
.deb l'est d'un
.tar.gz (OUI, ce sont des analogies grossières, voire vulgaires). Ici, nous traiterons principalement de la compilation de sources.
1. Gestion de l'arborescence
1.1 make.conf
La toute première chose avant de manipuler les ports est de configurer le fichier de configuration de
make :
/etc/make.conf. Voici quelques-unes des principales options que vous pouvez utiliser :
# Habitez-vous aux états-unis?
# (si vrai, empêchera certains ports de se compiler,
# notemment ceux relatifs à la crypto.)
USA_RESIDENT= false
# Architecture de votre machine.
# NB le "?=" signifie qu'un port peut outrepasser
# cette valeur.
CPU_TYPE?= i686
# Liste des langues et encodages dans lesquels on
# installera la documentation
DOC_LANG= en_US.ISO8859-1 fr_FR.ISO8859-1
# Ne pas compiler tout ce qui concerne X
# (utile pour un serveur...)
NO_X= true
WITHOUT_X11= true
# Version de certains packages à utiliser
WANT_BDB_VER=44
WANT_OPENLDAP_VER=23
WANT_PGSQL_VER=81
Pour une liste exhaustive des options avec leur explication, consultez le fichier
/usr/share/examples/etc/make.conf.
1.2 Récupérer les ports
On considère que vous avez déjà un FreeBSD installé, mais que celui-ci est tout vierge. En tant que root, exécutez
sysinstall :
- menu Configure : Do post-install configuration of FreeBSD,
- puis Distributions : Install additional distribution sets.
Allez sur la ligne " [ ] ports The FreeBSD Ports collection ", appuyez sur [ESPACE]. Validez. Choisissez votre miroir et c'est parti !
Maintenant, exécutez un petit
ls -l /usr/ports... On va vous présenter trois manières de mettre à jour votre arbre des ports, en fonction de la version de FreeBSD que vous avez :
- CVSup, qui marche sur tous les Freebsd ;
- Csup, qui est livré avec FreeBSD 6.2, mais que l'on peut installer à partir de l'arbre des ports ;
- Portsnap, qui est livré avec FreeBSD 6.0, mais que l'on peut installer à partir de l'arbre des ports (oui, le chat se mord la queue).
1.2.1 CVSup
CVSup est l'outil qui va vous permettre de mettre à jour votre arborescence locale, en la comparant à un serveur.
Installer CVSup
Allez à la racine de votre arbre et recherchez CVSup :
# cd /usr/ports
# make search name=cvsup | grep -A 1 Port
Port: cvsup-16.1h_2
Path: /usr/ports/net/cvsup
--
Port: cvsup-mirror-1.3_5
Path: /usr/ports/net/cvsup-mirror
--
Port: cvsup-without-gui-16.1h_2
Path: /usr/ports/net/cvsup-without-gui
--
Port: cvsupchk-19990209
Path: /usr/ports/net/cvsupchk
--
Port: fastest_cvsup-0.2.9_3
Path: /usr/ports/sysutils/fastest_cvsup
On va utiliser
cvsup-without-gui-16.1h_2. Reste plus qu'Ã l'installer tout simplement :
# cd /usr/ports/net/cvsup-without-gui
# make install clean
Configuration de CVSup
Créer un répertoire pour accueillir nos fichiers de configuration de CVSup et récupérer le fichier de configuration par défaut :
# mkdir /usr/local/etc/cvsup
# cd /usr/local/etc/cvsup
# cp /usr/share/example/cvsup/ports-supfile .
# chmod 644 /usr/local/etc/cvsup/ports-supfile
Grâce à ce fichier, on va indiquer à CVSup un serveur sur lequel se synchroniser, quelle branche des ports récupérer et quelles catégories de ports.
*default host=CHANGE_THIS.FreeBSD.org : Définit le serveur sur lequel se synchroniser. Une liste des serveurs est disponible sur http://www.freebsd.org/doc/handbook/cvsup.html#CVSUP-MIRRORS (Cf. le chapitre " Speedy CVSup " pour choisir le miroir le plus rapide...).
*default base=/var/db : Définit l'emplacement où CVSup va stocker les informations sur la collection de ports transférée sur votre machine. L'emplacement sera, dans ce cas, /var/db/sup.
*default prefix=/usr : Définit l'emplacement où CVSup va stocker les fichiers demandés. Dans ce cas, CVSup va stocker les fichiers dans /usr/ports.
*default release=cvs tag=. : Définit la version de la collection de port à récupérer. Dans ce cas, on prend la toute dernière version. En remplaçant le point final par RELENG_6_1, on va récupérer la collection correspondant à FreeBSD 6.1. (en pratique, je ne connais personne qui utilise autre chose que -HEAD -- mat)
*default delete use-rel-suffix : Autorise CVSup à supprimer des fichiers dans la collection de ports locale. En gros, permet de construire en local une arborescence identique à celle du serveur. use-rel-suffix indique à CVSup d'ajouter un suffixe construit à partir de la version et du tag ajoutés au nom de chaque fichier qu'il maintient. (plus efficace)
*default compress : Les échanges de fichiers du serveur vers le client CVSup seront compressés.
ATTENTION
Utile pour les connexions peu rapides, mais inutile sur un LAN ou si vous avez une grosse connexion internet.
Maintenant, il ne reste plus qu'à savoir quelle partie de la collection récupérer. Pour aller vite, on peut utiliser
ports-all. Ceci permettra de récupérer TOUTE la collection.
Si vous préférez ne récupérer que les catégories qui vous intéressent, utilisez une liste de la sorte :
ports-base
ports-archivers
ports-audio
ports-converters
ports-databases
ports-devel
ports-dns
ports-editors
ports-french
ports-ftp
...
Mettre à jour la collection de ports
Simple, il suffit d'exécuter CVSup en appelant le fichier de configuration :
# cvsup /usr/local/etc/cvsup/ports-supfile
[...]
Checkout ports/audio/amarok/files/patch-configure
Edit ports/audio/amarok/pkg-descr
Edit ports/audio/amarok/pkg-message
Edit ports/audio/amarok/pkg-plist
Edit ports/audio/anthem/Makefile
Edit ports/audio/arts/Makefile
[...]
1.2.2 Csup
Csup est un autre outil qui va vous permettre de mettre à jour votre arborescence locale, en la comparant à un serveur. Les deux différences qu'il a avec CVSup à ma connaissance sont qu'il est écrit en C (et pas dans un langage d'extra-terrestre) et surtout qu'il est présent dans le basesystem de FreeBSD depuis FreeBSD 6.2 (donc cela évite l'installation d'un package supplémentaire).
En revanche, Csup parle le protocole de CVSup. Il se connecte donc à un serveur CVSup, et utilise strictement le même fichier de configuration que CVSup. La description nous dit que " Csup est une réécriture du client de mise à jour CVSup faite dans le langage C ". N'est-ce pas amour, tout cela ?
Installer Csup
% ls -l /usr/bin/csup
-r-xr-xr-x 1 root wheel 86244 Dec 9 03:09 /usr/bin/csup*
Oh, mais que de magie ! Csup est déjà présent parmi nous mes frères ! (Comme dit ci-dessus). Il n'y a plus qu'à suivre les autres étapes présentes pour CVSup, c'est-à -dire : " Configuration de CVSup " et " Mettre à jour la collection de ports ". Bien entendu, à tous les endroits où il est indiqué " CVSup ", il faut remplacer par " Csup " !
1.2.3 Portsnap
Présentation (honteusement repompée du Handbook)
Portsnap est un système de distribution sécurisée du catalogue des logiciels portés sur FreeBSD. Approximativement chaque heure, un " instantané " (snapshot) du catalogue des logiciels portés est généré, rassemblé et signé de manière chiffrée. Les fichiers résultants sont alors distribués par l'intermédiaire du protocole HTTP.
Tout comme CVSup, Portsnap utilise un modèle de mise à jour de type pull : le catalogue des logiciels portés packagé et signé est placé sur un serveur Web qui attend les requêtes des clients. Les utilisateurs doivent soit exécuter manuellement
portsnap(8) pour télécharger les mises à jour, soit configurer
cron(8) pour un téléchargement régulier et automatique des mises à jour.
Pour des raisons techniques, Portsnap ne met pas à jour le catalogue des logiciels portés directement dans le répertoire
/usr/ports ; le logiciel travaille plutôt par défaut sur une version compressée de l'arborescence des logiciels portés dans le répertoire
/var/db/portsnap. Cette copie compressée est ensuite utilisée pour mettre à jour le catalogue des logiciels portés.
Première utilisation de Portsnap
Au premier lancement de la commande, il va chercher la totalité de l'arbre des ports (sous forme compressée) sur un des serveurs Portsnap le mettant à disposition. Cela est effectué avec la commande
portsnap fetch.
Une fois que l'arbre des ports a été récupéré, vous devez le mettre en place dans
/usr/ports. portsnap extract.
Utilisations suivantes (mise à jour de l'arbre des ports)
Très simple,
portsnap fetch update.
ATTENTION
Il ne faut pas exécuter cette commande lorsque des ports sont en train d'être compilés.
1.2.4 Speedy CVSup
Dans les ports, il y a ce magnifique petit outil :
fastest_cvsup. Il va permettre de trouver les 3 serveurs CVSup les plus rapides vis-Ã -vis de notre serveur. On l'installe comme suit.
Si on a déjà installé
portupgrade :
$ sudo portinstall sysutils/fastest_cvsup
Sinon :
# cd /usr/ports/sysutils/fastest_cvsup
# sudo make install clean
Et maintenant, on l'exécute comme suit :
$ fastest_cvsup -c fr
[...]
>>Â Speed Daemons:
   - 1st: cvsup2.fr.freebsd.org
   - 2nd: cvsup4.fr.freebsd.org
   - 3rd: cvsup8.fr.freebsd.org
Et voilà ! Il ne reste plus qu'à choisir le serveur le plus rapide dans vos fichiers de configuration !
2. Gestion avancée des ports
2.1 Installation de portupgrade
Allez dans
/usr/ports/sysutils/portupgrade, puis
# make install clean
Gardez les options par défaut.
portupgrade va nous installer un ensemble d'outils qui vont nous faciliter la maintenance des ports.
2.2 Le fichier pkgtools.conf
Toute la configuration de
portupgrade se fait dans le fichier
/usr/local/etc/pkgtools.conf.
2.2.1 Variables d'environnement
La collection de ports utilise quelques variables, habituellement définies dans
make.conf. Les outils fournis par
portupgrade n'utiliseront pas ces variables, mais celles définies dans le fichier
pkgtools.conf. Voici les variables par défaut :
# Emplacement de la collection de ports
ENV['PORTSDIR'] ||= '/usr/ports'
# Emplacement des packages
ENV['PACKAGES'] ||= ENV['PORTSDIR'] + '/packages'
# Répertoire regroupant tous les packages
ENV['PKG_PATH'] ||= ENV['PACKAGES'] + '/All'
# Où sauvegarder les packages
ENV['PKG_BACKUP_DIR'] ||= ENV['PKG_PATH']
2.2.2 Choix des catégories
Il est possible de signaler aux outils d'ignorer certaines catégories de ports, grâce à la variable
IGNORE_CATEGORIES :
 IGNORE_CATEGORIES = [
  'chinese',
  'german',
  'hebrew',
  'japanese',
  'korean',
  'russian',
  'ukrainian',
  'vietnamese',
  ]
Si vous utilisez cette variable, vous devrez remettre à jour la base des ports avec la commande
portsdb -Ufu.
ATTENTION
C'est long à générer. Pour aller plus vite, exécutez simplement (après un
cvsup) :
portsdb -F. Cela va récupérer la base des ports sur le net plutôt que d'avoir à la regénérer entièrement !
2.2.3 Ports à ne pas mettre à jour
portupgrade nous offre la possibilité de ne pas mettre à jour certains ports. Ça peut permettre de gagner du temps, surtout pour les desktops où l'on pourra se passer de recompiler tout Xorg ou OpenOffice...
 HOLD_PKGS = [
'xorg-*',
'openoffice*',
]
2.2.4 Packages plutôt que ports
Il est possible de donner une liste de ports pour lesquels on souhaite (voire on veut uniquement) installer la version packagée :
# Liste de ports que l'on souhaite gérer via un package,
# mais si pas possible on accepte de compiler la version
# des ports.
USE_PKGS = [
'firefox*',
]
# Liste de ports que l'on souhaite gérer en mode package
# exclusivement.
USE_PKGS_ONLY = [
'openoffice*',
'gimp*',
]
2.2.5 Ports alternatifs
Avec
pkgtools.conf, il est possible de redéfinir les dépendances d'un port. Par exemple, si un port dépend d'un autre port A, on peut le forcer à utiliser B à la place de A.
 ALT_PKGDEP = {
# Utiliser le port OpenLDAP 2.3 Ã la place du port
# OpenLDAP 2.2
'openldap22*' => 'openldap23*',
# La même chose que ci-dessus, mais en utilisant
# l'emplacement du port
'net/openldap22-client' => 'net/openldap23-client',
'net/openldap22-server' => 'net/openldap23-server',
# Si vous avez installé apache directement depuis
# les sources :
'apache' => :delete,
}
2.2.6 Options des ports
Lors de l'installation de
portupgrade, on a vu que l'on pouvait définir des options à la compilation. C'est très pratique, pour tuner au maximum les applications en place, et n'avoir que ce dont on a besoin. Seul inconvénient, lorsque l'on a 150 ports installés, il faut retenir chacune des options que l'on a décidé d'installer...
pkgtools.conf nous permet de nous affranchir de cela grâce à la variable
MAKE_ARGS.
 MAKE_ARGS = {
'mail/p5-Mail-SpamAssassin' => [
'WITH_AS_ROOT=yes',
'WITHOUT_DOMAINKEYS=yes',
'WITHOUT_MYSQL=yes',
'WITH_PGSQL=yes',
'WITH_RAZOR=yes',
'WITHOUT_SPF_QUERY=yes',
'WITHOUT_RELAY_COUNTRY=yes',
'WITH_TOOLS=yes',
],
}
2.2.7 Gestion des services
Sur un serveur, un port peut installer un service qui tourne sous forme de démon (Apache, ldap, MySQL, etc.).
pkgtools.conf va nous permettre de configurer des commandes à exécuter lors d'un upgrade de port.
 # L'upgrade consiste à désinstaller l'ancienne
# version du port
# Ici, on demande d'arrêter apache avant de le
# désinstaller :
BEFOREDEINSTALL = {
# Arrêter apache
# localbase() retourne le répertoire où sont
# installé les ports.
'www/apache*' => localbase() + '/sbin/apachectl -k stop',
# Arrêter automatiquement tout les ports
# qui ont un script rc activé
'*' => proc { |origin|
cmd_stop_rc(origin)
},
}
# Ensuite, l'upgrade installe la nouvelle version
# du port
AFTERINSTALL = {
# Démarrer apache
'www/apache*' => localbase() + '/sbin/apachectl -k start',
# Démarrer automatiquement tous les port
# qui ont un script rc activé
'*' => proc { |origin|
cmd_start_rc(origin)
},
}
2.3 Rechercher un port
Allez dans
/usr/ports et utilisez une commande du style
make search name=PORT. Exemple :
# make search name=cvsup
Port: cvsup-16.1h_2
Path: /usr/ports/net/cvsup
Info: General network file distribution system optimized\
for CVS (GUI version)Maint: jdp@FreeBSD.org
B-deps: expat-2.0.0_1 ezm3-1.2 fontconfig-2.3.2_3,1\
freetype2-2.1.10_3 libdrm-2.0_1 pkgconfig-0.20\
xorg-libraries-6.9.0
R-deps: expat-2.0.0_1 fontconfig-2.3.2_3,1\
freetype2-2.1.10_3 libdrm-2.0_1 pkgconfig-0.20\
xorg-libraries-6.9.0
WWW: http:\/\/www.cvsup.org/
[...]
On peut aussi rechercher par mot clé en utilisant
make search key=KEYWORD.
2.4 Installer un port
Pour installer un port, nous allons utiliser la commande
ortinstall. Principales options :
-e ou --emit-summaries : génère un rapport après chaque port installé
-f ou --force : force la mise à jour, même si le port est en version inférieure ou égale au port déjà installé ou s'il est défini dans la variable HOLD_PKGS.
-i ou --interactive : mode interactif.
-k ou --keep-going : continue, même si l'installation d'un port échoue.
-l FILE ou --result-file FILE : fichier où écrire le résultat des opérations.
-m ou --make-args : spécifier des arguments à passer à chaque commande make.
-M ou --make-env : spécifier des variables d'environnement.
-n ou --noexecute : n'installe ni ne met à jour aucun port. Montre juste ce qui va être fait.
-p ou --package : crée le package du port.
-P ou --use-packages : utilise un package au lieu d'un port, quand c'est possible.
-PP ou --use-packages-only : n'utilise jamais le port, mais uniquement le package.
-q ou --noconfig : ne lit pas le fichier de configuration pkgtools.conf.
-r ou --recursive : agit sur tous les ports dépendants du port donné.
-R ou --upward-recursive : agit sur tous les ports qui requièrent le port donné.
-s ou --sudo : exécute sudo sur les commandes le nécessitant.
-u ou --uninstall-shlibs : supprime les bibliothèques partagées obsolètes.
-v ou --verbose : mode bavard.
-y ou --yes : répond yes à toutes les questions.
Cas d'école : installation de Postfix :
1. Aller dans le répertoire du port :
# cd /usr/ports/mail/postfix
2. Voir quelles sont les options de configuration disponibles :
# make config
NOTE
On peut aussi utiliser un
make showconfig, mais y'a pas les couleurs...

3. Compléter la variable
MAKE_ARGS du fichier
pkgtools.conf avec les options désirées ou non :
MAKE_ARGS = {
'mail/postfix' => [
'WITH_PCRE=yes',
'WITHOUT_SASL=yes',
'WITH_SASL2=yes',
[...]
],
}
4. Lancer l'installation
sudo portinstall mail/postfix
---> Installing 'postfix-2.3.3,1' from a port (mail/postfix)
---> Building '/usr/ports/mail/postfix' with make flags: \
WITH_PCRE=1 WITHOUT_SASL=1 WITHOUT_SASL2=1 WITH_TLS=1
Notez la prise en compte des variables positionnées dans le fichier
pkgtools.conf.
2.5 Suivi des mises à jour
Une fois que vous avez installé vos logiciels et que votre serveur est en production, il faut le maintenir à jour.
2.5.1 Maintien de l'arbre des ports à jour
Très simple, placez la commande
/usr/local/bin/cvsup /usr/local/etc/cvsup/ports-supfile dans un cron. Après chaque mise à jour, vous devrez mettre à jour le fichier
INDEX (base des ports disponibles). C'est possible de le faire grâce Ã
portsdb :
portsdb -U : génère le fichier en analysant l'arbre complet. Déconseillé, car long et coûteux en ressources.
portsdb -Fu : récupère le fichier INDEX du net, puis met à jour le INDEX.db.
Ce qui nous donne :
22 12 * * * /usr/local/bin/cvsup /usr/local/etc/cvsup/\
ports-supfile 2>&1 >>/dev/null
22 34 * * * /usr/local/sbin/portsdb -Fu 2>&1 >>/dev/null
Compter 30 minutes environ pour le CVSup.
2.5.2 Recherche des ports à mettre à jour
Pour savoir quels ports ne sont pas up to date sur notre serveur, on va utiliser la commande
portversion. Principales options :
-l CAR ou --limit CAR : inclut uniquement les packages avec le statut CHARS
-v ou --verbose : active le mode bavard
-x CHAINE ou --exclude CHAINE : n'effectue pas de comparaison pour les ports dont les noms matchent la CHAINE.
Utilisation : ne lister que les ports qui ne sont pas à jour :
portversion -v -l\<
ezm3-1.2 < needs updating (port has 1.2_1)
gmake-3.80_2 < needs updating (port has 3.81_1)
postfix-2.3.3,1 < needs updating (port has 2.3.4,1)
Il ne reste plus qu'Ã coller le tout dans une crontab, avec un
| mail :
22 44 * * * /usr/local/sbin/portversion -v -l\< | \
/usr/bin/mail admin@domaine.tld
Et voilà . Nous venons de voir comment maintenir à jour la base des ports et configurer un agent qui nous remontera chaque port ou package à mettre à jour.
2.6 Mise à jour d'un port
Maintenant que notre arborescence des ports se maintient à jour, nous allons pouvoir mettre à jour les ports. Nous allons utiliser la commande
portupgrade. Les options sont les mêmes que pour
portinstall.
REMARQUE
A la racine de votre arborescence des ports (traditionnellement
/usr/ports), il y a un fichier
UPDATING, qu'il est de bon ton de consulter avant chaque mise à jour.
Ce fichier contient les problèmes pouvant survenir suite à une mise à jour, et surtout une méthode pour les régler.
Fonctionnement : grossièrement,
portupgrade va récupérer les sources et compiler. Si tout se passe bien, alors il va désinstaller le port actuellement en production et installer celui fraîchement compilé.
ATTENTION
Si le port en question installe un démon, pensez à le signaler dans
pkgtools.conf, directives
AFTERINSTALL et
BEFOREDEINSTALL, afin que
portupgrade l'arrête, désinstalle l'ancienne version, installe la nouvelle version et redémarre le service.
Dans le chapitre précédent, nous avons vu que notre Postfix n'est pas à jour. Nous allons donc le mettre à jour. Premièrement, éditez
pkgtools.conf, directive
BEFOREDEINSTALL :
# Stop postfix
'mail/postfix*' => localbase() + '/etc/rc.d/postfix stop',
Directive
AFTERINSTALL :
# Start postfix
'mail/postfix*' => localbase() + '/etc/rc.d/postfix start',
Puis exécutez
portupgrade :
# portupgrade -r postfix-2.3.3,1
[...]
---> Building '/usr/ports/mail/postfix' with make flags: \
  WITH_PCRE=1 WITHOUT_SASL=1 WITHOUT_SASL2=1 WITH_TLS=1
[...]
---> Executing a command before deinstalling 'mail/postfix':\
  /usr/local/etc/rc.d/postfix stop
postfix/postfix-script: stopping the Postfix mail system
[...]
---> Executing a post-install command for 'mail/postfix':\
  /usr/local/etc/rc.d/postfix start
postfix/postfix-script: starting the Postfix mail system
Et voilà Postfix démarré et fonctionnel. Temps de downtime du service, quelques secondes, et le package a été recompilé avec les mêmes options qu'à l'installation.
2.7 Désinstallation d'un port
Pour désinstaller un port, nous allons utiliser
pkg_deinstall. Il est capable de gérer les dépendances. Principales options :
-d ou
--rmdir : supprime les répertoires vides.
-f ou
--force : force la suppression d'un port.
-i ou
--interractive : demande confirmation avant chaque suppression.
-n ou
--noexexute : montre ce que la commande ferait sans l'exécuter.
-r ou
--recursive : supprime le package et toutes ses dépendances.
-R ou
--upward-recursive : supprime le package et les packages requis pour installer celui-ci.
-v ou
--verbose : mode bavard.
Veuillez noter les différences :
 # pkg_deinstall -n ruby
---> Deinstalling 'ruby-1.8.5_3,1'
---> Listing the results (+:done / -:ignored / *:skipped /\
!:failed)
+ ruby-1.8.5_3,1
---> Packages processed: 1 done, 0 ignored, 0 skipped and \
0 failed
# pkg_deinstall -n -r ruby
---> Deinstalling 'libchk-1.9'
---> Deinstalling 'portupgrade-2.1.3.3_1,2'
---> Deinstalling 'ruby18-bdb-0.5.9_2'
---> Deinstalling 'ruby-1.8.5_3,1'
---> Listing the results (+:done / -:ignored / *:skipped /\
!:failed)
+ libchk-1.9
+ portupgrade-2.1.3.3_1,2
+ ruby18-bdb-0.5.9_2
+ ruby-1.8.5_3,1
---> Packages processed: 4 done, 0 ignored, 0 skipped and\
0 failed
# pkg_deinstall -n -R ruby
---> Deinstalling 'ruby-1.8.5_3,1'
---> Listing the results (+:done / -:ignored / *:skipped /\
!:failed)
+ ruby-1.8.5_3,1
---> Packages processed: 1 done, 0 ignored, 0 skipped and\
0 failed
2.8 Nettoyage de l'arbre des ports
Avec toutes ces installations, il est possible que certains fichiers obsolètes encombrent notre disque dur. Nous allons utiliser
portsclean pour nettoyer tout ça. Principales options :
-C : supprime les répertoires de compilation (work dans chaque répertoire d'un port).
-D : supprime les archives sources qui ne sont pas référencées dans l'arbre.
-DD : supprime les archives sources des ports qui ne sont pas installés.
-P : supprime les archives de packages obsolètes.
-PP : supprime toutes les archives de packages.
Nous allons procéder à un petit nettoyage comme suit :
$ sudo portsclean -C -DD -PP
3. Sécurité
3.1 Audit des ports
Sur des serveurs en production, on ne peut pas tous les jours compiler les ports qui ne sont pas à la dernière version. Par contre, il est très important de savoir si une faille de sécurité a été découverte dans un des ports installés sur la machine.
On va utiliser
security/portaudit pour cela. Principales options de
portaudit :
-a : teste tous les ports installés.
-d : affiche la date de création de la DB.
-F : récupère la dernière version de la DB.
-v : mode bavard.
Une fois installé, exécutez :
# /usr/local/sbin/portaudit -Fda
Cela va récupérer la dernière DB contenant les vulnérabilités et effectuer un test. Par ailleurs, Portaudit s'exécutera une fois par nuit et son rapport sera envoyé avec le mail " security " du système. Voici un exemple de vulnérabilité :
Affected package: php5-5.1.6
Type of problem: php -- open_basedir Race Condition
Vulnerability.
Reference:
<http://www.FreeBSD.org/ports/portaudit/\
edabe438-542f-11db-a5ae-00508d6a62df.html>
1 problem(s) in your installed packages found.
Si j'essaye de mettre à jour ce port malgré la faille, je vais avoir un message d'erreur :
sudo portupgrade -r php5-5.1.6
---> Upgrading 'php5-5.1.6' to 'php5-5.1.6_1' (lang/php5)
[...]
=> php -- open_basedir Race Condition Vulnerability.
Reference:
<http://www.FreeBSD.org/ports/portaudit/\
edabe438-542f-11db-a5ae-00508d6a62df.html>
=> Please update your ports tree and try again.
* Error code 1
Stop in /usr/ports/lang/php5.
Vous aurez beau mettre à jour vos ports, si la version disponible est vulnérable, cela ne changera rien et l'installation/mise à jour du port sera bloquée. Pour passer outre cela, il faut utiliser :
sudo portupgrade -r -m -DDISABLE_VULNERABILITIES php5
Lien
http://www.FreeBSD.org/ports
Donnez votre avis
Vous devez avoir ouvert une session pour écrire un commentaire.