Mise a jour de votre FreeBSD

Un article de Diablotins.org.


Image:brush.png

Comment mettre son machine Ă  jour ?



Les divers éléments, ports, le monde et le noyau, qui composent votre système évoluent.
Une mise à jour est souvent nécessaire pour installer un logiciel, obtenir une nouvelle fonction dans un autre ou corriger un trou de sécurité.


Sommaire

Obtenir les sources

Les différentes versions de FreeBSD sont étiquetées par un “Release tag” dont vous pouvez consulter la liste sur le site de FreeBSD. Il existe différentes manières de récupérer les sources de ces versions; nous allons en étudier deux parmi les plus efficaces.

CVS

À l'aide de “CVS” ( Concurent Versionning System ) nous allons récupérer sur la “Repository CVS” de FreeBSD les sources et les ports du système. Un minimum de connaissance du fonctionnement de Serveur CVS est requis pour bien appréhender ce chapitre et les suivants. Pour se connecter sur un serveur CVS, la variable d'environnement “CVSROOT” doit être renseignée:

Sous batch ou sh:
  # export CVSROOT=':pserver:anoncvs@anoncvs.freebsd.org:/home/ncvs'
Sous csh/tcsh:
  # setenv  CVSROOT ':pserver:anoncvs@anoncvs.freebsd.org:/home/ncvs'

Supprimons d'abord les sources présentes sur notre machine avant d'en récupérer de nouvelles:

  # rm -rf /usr/src

Ensuite, connectons nous sur le serveur CVS anonyme de FreeBSD:

  # cvs login    - le mot de passe est anoncvs -
  # cd /usr
  # cvs co -rTag src

N'oubliez pas de créer une première fois un fichier vide pour le mot de passe:

touch ~/.cvspass

CVSUP

C'est la solution la plus couramment utilisée pour mettre à jour les sources de FreeBSD.
CVSUP est un client pour CVSUPD. Il repose sur le système CVS, mais vous en simplifie les tâches.

Installer CVSUP

CVSUP n'est pas livré avec le monde de FreeBSD. Vous devez donc avoir installé l'arbre des logiciels portés ( port tree ).Installez net/cvsup-without-gui.
CVSUP dépend du langage de macro EZM3, qui nécessite quelques outils gnu pour être compilé. L'installation de CVSUP va donc entraîner l'installation d'autres ports.
Attention : Prenez le temps de bien vĂ©rifier l'heure et la date de votre système sinon l'installation de CVSUP s'arrĂŞtera sur l'installation de gmake, lors de sa dĂ©compression via tar gzip.
Vous pouvez aussi, dans le cas d'une station équipée d'un serveur X, installez la version avec interface graphique ( gtk ): net/cvsup. L'interface graphique n'apporte rien de vraiment confortable. Je n'en traiterais donc pas dans cette documentation.

Csup

Les impatients qui utilisent la branche “HEAD”, soit FreeBSD 7, ont accès à “CSUP” livré avec le monde de cette branche.
Csup est une adaptation de CVSup, écrite en C. Il suffit donc de remplacer «cvsup» par «csup» dans toutes les commandes de ce document.

Utiliser CVSUP

Ce logiciel repose sur quelques fichiers de configuration dont vous trouverez des exemples sous “/usr/share/examples/cvsup/”. Copiez ces exemples dans /usr/local/etc/cvsup pour pouvoir les modifier à loisir:

cp -r /usr/share/examples/cvsup/ /usr/local/etc/cvsup/

Les fichiers supfile contiennent les variables à renseigner pour définir le serveur et l'étiquette de version à utiliser.

# less /usr/local/etc/cvsup/stable-supfile
--
*default host=cvsup.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_4
*default delete use-rel-suffix
*default compress
src-all

Définissez par exemple, “host” à “cvsup.fr.FreeBSD.org” pour utiliser le miroir français des sources de FreeBSD et “tag” à “RELENG_6” pour ne charger que les versions stables de la branche 6. Nous allons voir deux façons d'exploiter ces fichiers sous FreeBSD.

  • la première, directement lors de la commande cvsup :
  # cvsup -g -L 2 /usr/local/etc/cvsup/stable-supfile

Cette méthode permet, en utilisant un autre fichier supfile, de charger différentes versions selon vos projets.

Compilation du monde

Méthode standard sans échec

Dans l'absolu, la mise à jour du Monde sous FreeBSD, doit se faire en mode de maintenance. En suite, on va dans le répertoire des sources et on lance la compilation du Monde, du noyau et l'installation du tout:

  # cd /usr/src/
  # mergemaster -p
  # make buildworld
  # make kernel
  # make installworld
  # mergemaster -i 

Notez une nouvelle option de 'mergemaster' introduite récemment

  # mergemaster -U

qui met à jour automatiquement que vous n'avez pas modifiés par vous-même.

Méthode temps limite d'interruption de service

En pratique, il est tout à fait possible de compiler et d'installer le monde sans plus de précautions, mis à part un démontage de NFS (important) et les services dans la mesure du possible. Si vous utilisez des services installé à partir d'un port qui concurrencent le service livré avec le monde, n'oubliez pas de les supprimer de la compilation du monde
Ajouter les lignes adéquates dans le /etc/make.conf:

NO_CVS= true
NO_BIND= true
NO_FORTRAN= true
NO_I4B= true
NO_LPR= true
NO_MAILWRAPPER=true
NO_MODULES= true
NO_OBJC= true
NO_OPENSSH= true
NO_OPENSSL= true
NO_SENDMAIL= true
NO_SHAREDOCS= true
NO_TCSH= true
NO_X= true
NOCRYPT= true
NOINFO= true
NOPERL= true
NOPROFILE= true
NOSECURE= true
NOSHARE= true
NOUUCP= true

Remarque : Pour Perl utilisez use.perl, voir l' astuce sur le sujet. Enfin:

  # cd /usr/src # make world

Ne bootez jamais sans avoir aussi mis Ă  jour le noyau.

Le Noyau

Les sources mises Ă  jour, compiler et installer un noyau est un jeu d'enfant:

make kernel

va construire le noyau défini dans make.conf soit par défaut, GENERIC.
Précisez votre noyau si nécessaire:

make kernel KERNCONF=MonNoyau


Toutefois, lors de modifications majeures, un changement de branches par exemple, ils est nécessaire de construire le monde au préalable, sans l'installer. Ce faisant, de nouveaux outils sont introduits qui vont permettre de compiler le noyau selon les nouvelles règles.

Les ports

Avant de mettre Ă  jour les ports, vous devez mettre Ă  jour le catalogue.

L'arbre des ports

Voyons maintenant comment rapatrier les ports via Serveur CVS. ( Ce n'est pas la méthode que je conseille pour les ports pas plus que pour les sources).
L'arbre des ports existant doit ĂŞtre supprimĂ©, il va ĂŞtre intĂ©gralement remplacĂ©. tapez :

  # cd /usr && rm -rf ports

Le processus est relativement long.
Une fois la suppression effectuĂ©e, connectez vous sur le serveur CVS anonyme de FreeBSD.org (ou tout autre serveur plus proche de vous tel que anoncvs.fr.freebsd.org). Tapez :

  # cvs login
  password :

Une fois connectĂ©, vous n'avez plus qu'a recuperer le catalogue de ports du CVS anonyme. Aussi, tapez :

  # cvs co ports

Le processus est lui aussi assez long. Une fois celui-ci terminĂ©, vous avez de nouveau un arbre de ports Ă  jour et synchronisĂ© sur la version HEAD du CVS. Remarque : vous pouvez en choisir d'autre, comme pour les sources du dĂ©pĂ´t (repository) CVS de FreeBSD] des ports comprend toutes des versions de l'arbre depuis la racine mere 4.4BSD. ContrĂ´lez la version qui vous convient le mieux; entrez:

  # cvs -R RELEASE_XXX co ports

Pour [[mettre a jour des maintenant votre arbre de ports, vous n'avez plus qu'a faire des mise à jours régulières.
Ainsi, placez vous dans “/usr/ports” et tapez:

  # cd /usr/ports && cvs update

Le systeme CVS met alors a jour votre arbre.
Lors d'un contrôle, CVS ajoute des répertoires administratifs nommés CVS dans chaque sous-répertoires.
Si vous n'en voulez pas pour une raison ou une autre faites un export au lieu d'un contrĂ´le:

  # cvs -R RELEASE_XXX export ports

Remarque : la prĂ©sence de ces rĂ©pertoires dans un arbre CVS n'est pas du tout gĂŞnante. DĂ©sormais, Ă  chaque mise Ă  jour, il vous faut tout recommencer car CVS ne peut plus Ă©valuer le niveau de vos versions et l'Ă©tat de votre système local.

CVSUP

La méthode est la même que celle utilisée pour récupérer les sources du système, nous allons utiliser cvsup pour récupérer les modifications sur l'arbre des ports.
Ainsi, nous devons modifier le fichier /usr/local/etc/cvsup/port-supfile copié dans un paragraphe précédent depuis /usr/share/examples/cvsup/.
Indiquons le serveur cvsup.fr.FreeBSD.org pour la variable host; l'étiquette de version n'est pas utile, laissez donc la variable tag à «.». Ensuite, il suffit d'utiliser cvsup:

cvsup -g -L 2 /usr/local/etc/cvsup/port-supfile/

L'arbre étant à jour, il faut créer un index à jour:

cd /usr/ports
make index

Vous constaterez que c'est un processus assez long, alors, vous pouvez vous contentez de le rĂ©cupĂ©rer sur le site :

make fetchindex

L'index du site n'est créé qu'une fois pas jour, il n'est donc pas Ă  jour Ă  la minute ni mĂŞme Ă  l'heure près, mais est-ce si important ? Enfin, si vous utilisez portupgrade, mettez sa base Ă  jour :

portsdb -u

ou

(cd /usr/ports && make fetchindex) ; portsdb -u

Portsnap

Portsnap est une méthode sécurisée qui utilise simplement http (cvsup nécessite une bidouille derrière un NAT ou un pare-feu). Le dernier snapshot de l’arbre des ports s'obtient ainsi:

# portsnap fetch

L'opĂ©ration d'extraction nĂ©cessaire dans /usr/ports est relativement longue :

# portsnap extract

Les mise-Ă -jours manuelles se font avec :

# portsnap update

Pour une mise-à-jour automagique, ajoutez dans la crontab du système:

# crontab -e                  
0 6 * * * root /usr/local/sbin/portsnap cron
ici: tous les jours Ă  6h du matin

Les ports

L'arbre Ă©tant Ă  jour, il vous faut notez les ports qui ont Ă©tĂ© modifiĂ© et les recompiler. Attention, n'oubliez pas de consulter le fichier “/usr/ports/UPDATING” qui vous indique les problèmes que vous risquerez de rencontrer et les commandes Ă  utiliser pour les contourner. Oui, c'est fastidieux, n'essayez pas d'Ă©crire un script qui le fasse, il existe dĂ©jĂ  : “portupgrade”.

Portupgrade

C'est un ensemble d'outils qui va vous permettre de gérer aisément les ports. Le fichier /usr/ports/UPDATING y fait souvent référence. Installez ces outils:

cd /usr/ports/sysutils/portupgrade && make install distclean

Vous disposez désormais des outils:

  • portupgrade : Mettre Ă  jour et/ou installer des logiciels
  • portinstall : Installer un logiciel.
  • portsdb : manipuler les dĂ©pendances entres les diffĂ©rents logiciels et bibliothèques.
  • portsclean : Nettoyer les rĂ©pertoires et les fichiers tĂ©lĂ©chargĂ©s.

Pour mettre Ă  jour les logiciels installĂ©s, une fois l'arbre des ports et la base mis Ă  jour, tapez simplement :

portupgrade -ar

qui va mettre à jour tous les logiciels ou bibliothèques qui ont été modifié ainsi que tous ce qui en dépend. L'option «-a» signifie «all» et désigne tous les paquetages qui doivent être mis à jour. Si vous désirez choisir ce que portupgrade doit mettre à jour, précisez en le nom du paquetage, ou un ensemble de paquetages, dans la commande:

portupgrade -r deskutil/xfce4\*

La suite «\*» indique à la commande d'interpréter le symbole «*» comme suivant «deskutil/xfce4», donc tout ce qui commence par «xfce4» dans le catalogue «deskutil». Cette commande va tout recompiler, si vous ne désirez n'installer que les paquetages disposant de fichiers déjà compilés:

portupgrade -aPP

Si ces paquetages n'existent pas pour le logiciel concerné, ce logiciel restera en l'état. Donc, pour compiler et installer les paquetages qui ne fournissent pas de version déjà compilées et télécharger les autres:

portupgrade -aP

Pour nettoyez la base :

portsclean -CDDLPP

Enfin, ces outils utilisent le fichiers /usr/local/etc/pkgtools.conf qui permet d'automatiser certaines tâches pour des paquetages définis, comme d'en ignorer certains, de n'utiliser que les fichiers précompilés pour d'autres, d'affecter des options particulières à la compilation etc. Je vous invite à consulter les manuels de chacune de ces commandes, elles fourmillent d'options utiles. De plus n'oubliez pas que chaque compilation utilise les variables de /etc/make.conf, qui permet de préciser par exemple le type de processeur cible.

Portmaster

Le petit dernier de la série est un ensemble de scripts, plus rapide que ces prédécesseurs pour déterminer les dépendances et les ports à mettre à jour.
Son utilisation est simple:

portmaster -a

Comme ses concurrents il fourmille d'options dont l'une, intéressante:

portmaster --force_config -n -a

Ceci va parcourir tous les ports à mettre à jour et vous afficher le menu de configuration. Ainsi, vous pourrez lancer la procédure complète, avec portupgrade, pourquoi pas, assuré de ne plus rien avoir à lui dire.
Mieux, profitez en pour télécharger les paquets:

portmaster --force_config -F -n -a


Une fois ceci terminé, lancez un

portupgrade -ra

ou

portmaster -a

...coupez le réseau et allez faire un tour.

Évitez de compiler OpenOffice, vous n'avez pas assez de place de toute façon:

portmaster -x openoffice -a

Ceci est vrai à quelques exceptions près; si un port est marqué “IS_INTERACTIVE_WITH”, portmaster va s'arrêter après l'installation de la mise à jour, pour vous demander si vous voulez garder ou pas le fichier distfile de l'ancienne version.
Pour y remédier ajouter l'option «-d» pour les effacer ou «-D» pour les garder.

portmaster -d -x openoffice -a

Précisons que vous ne gagnerez pas de temps à la compilation, seulement aux calculs récursifs de dépendances.
Ce qui peut déjà être intéressant.

Projets :
Boîte à outils