Mise a jour de votre FreeBSD
Un article de Diablotins.org.
|
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.
- Automatiquement Ă l'aide du fichier /etc/make.conf
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.
