Aller au menu - Aller au contenu

Icône Autres applications de la recompilation

Avatar
Mise à jour : 04/08/2011
Difficulté : Intermédiaire Intermédiaire Creative Commons BY-NC-SA
7 018 visites depuis 7 jours, dont 42 sur ce chapitre classé 32/786
J'ouvre une petite parenthèse dans la construction de notre serveur web. Je vais vous montrer à quoi d'autre la recompilation peut servir :
  • La mise à jour vers une nouvelle version de FreeBSD.
  • La personnalisation du noyau.

Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

A - Mise à jour

On met FreeBSD à jour pour bénéficier des nouveautés du système de base, pas pour accéder à des logiciels plus récents. Pour ça, on peut lancer portsnap fetch update n'importe quand : l'arbre des ports évolue tous les jours.

Pour mettre FreeBSD à jour, la méthode auguste :soleil: consiste à le recompiler entièrement, à partir du nouveau code-source.

Il faut d'abord vous procurer les nouvelles sources, en les téléchargeant depuis un serveur un peu particulier, qu'on appelle un dépôt CVSup. Il y en a 9 en France : cvsup.fr.FreeBSD.org, cvsup1.fr.FreeBSD.org, ..., cvsup8.fr.FreeBSD.org. La commande à employer est csup.

csup ? Il ne manquerait pas un v, par hasard ?


C'est vrai qu'il y a encore quelques années, la commande s'appelait cvsup, comme les dépôts. Mais depuis, elle a été réimplémentée en langage C et s'appelle donc csup.

Pour que csup fonctionne, vous allez devoir lui écrire un fichier de configuration. J'ai décidé d'appeler ce fichier miseAjour puisque c'est ce que nous voulons faire. Rendez-vous dans le dossier des sources (/usr/src/) et créez miseAjour avec Emacs.

Code : Console
[Nom de l'ordinateur]# cd /usr/src
[Nom de l'ordinateur]# emacs miseAjour


Dans ce fichier, vous devez indiquer toutes les informations dont csup va avoir besoin et, pour commencer, la référence de la version à télécharger. Direction le site officiel de FreeBSD pour trouver cette référence. Vous la découvrez à la rubrique Update from source : RELENG_8_2. C'est donc la première chose à écrire dans le fichier miseAjour.

Code : Console
*default tag=RELENG_8_2


En principe, vous utilisez déjà la version 8.2. Attendez peut-être la sortie de la version 9.0 pour essayer cette procédure.


Choisissez ensuite un dépôt au hasard. Par exemple :

Code : Console
*default host=cvsup6.fr.FreeBSD.org


La prochaine fois qu'une version sort, merci de ne pas tous choisir le dépôt n°6. ;)

Puis, précisez dans quel dossier se trouve src/ pour que la commande sache où installer les nouvelles sources. Je vous écoute...

Secret (cliquez pour afficher)
/usr, bien sûr. Bravo ! :)


Code : Console
*default prefix=/usr


csup va tenir une sorte de journal de bord et noter quelles mises à jour il a accomplies. Indiquez lui un endroit où ranger ce journal, de préférence sur la tranche /var. Ce doit être obligatoirement un dossier qui existe déjà. Classiquement, on prend /var/db.

Code : Console
*default base=/var/db


Encore quelques options à préciser :

Code : Console
*default release=cvs delete use-rel-suffix


release=cvs signifie qu'il ne faut pas s'adresser au serveur principal de FreeBSD mais à celui que vous avez spécifié un peu plus haut. delete demande d'effacer l'ancien code-source et use-rel-suffix permet d'apposer à chaque fichier créé et géré par csup un suffixe précisant sa version. Ce sera utile pour la mise à jour suivante.

Maintenant, le plus important : csup ne téléchargera la totalité du code-source que si vous le lui demandez explicitement :

Code : Console
src-all


Si vous n'en vouliez qu'une partie, ce serait comme pour l'installation à la carte sous sysinstall, vous pourriez demander : src-base, src-man ou src-cddl.

Et voilà : en six lignes, vous venez d'écrire un fichier de configuration. Félicitations ! :D

Sauvegardez-le, quittez emacs et lancez le téléchargement :

Code : Console
[Nom de l'ordinateur]# csup miseAjour


Après, vous pouvez recompiler en suivant la procédure du chapitre précédent.

B - Mise à jour binaire

N'allez pas croire que la méthode décrite ci-dessus est la seule qui permet de mettre FreeBSD à jour (c'est juste la meilleure ;) ).


sysinstall



C'est ce qu'il y a de plus simple : lancez le programme sysinstall et demandez Upgrade puis laissez-vous guider. Comme pendant la première installation, vous pouvez choisir de tout mettre à jour (All) ou seulement certains composants (base, kernel, etc.)

Comme vous avez personnalisé les fichiers de configuration du dossier /etc, il ne faut pas perdre votre version. Celle-ci va donc être déplacée vers le dossier /var/tmp/etc avant la mise à jour. Votre ancien noyau, lui, sera déplacé vers /boot/kernel.prev.

Je dois mettre mon CD-ROM d'installation dans le lecteur ?

Ah non, pas cette fois, voyons ! :colere2: Votre CD-ROM concerne l'ancienne version de FreeBSD. Pour passer à la nouvelle, vous devez sélectionner un serveur FTP. Choisissez-en un situé en France. Si la nouvelle version vient seulement de sortir, certains serveurs secondaires ne seront peut-être pas à jour. Si vous sélectionnez l'un de ceux-là, un message d'erreur vous avertira du problème et vous pourrez en demander un autre.


freebsd-update



Autre technique : télécharger les fichiers binaires de la nouvelle version avec freebsd-update :

Code : Console
[Nom de l'ordinateur]# freebsd-update upgrade -r 8.2-RELEASE


La difficulté, :( avec cette méthode, concerne la mise à jour des fichiers de configuration : le programme vous demandera s'il doit conserver votre version, installer la nouvelle ou mélanger les deux.

Comme je le disais plus haut, c'est une opération très délicate ! :o Evitez au maximum de modifier les fichiers de configuration avec freebsd-update. Dès que vous avez un doute, gardez plutôt votre version à vous.


Ensuite, il faut exécuter deux fois ces commandes :

Code : Console
[Nom de l'ordinateur]# freebsd-update install
[Nom de l'ordinateur]# reboot


La première fois pour installer le nouveau noyau et la seconde pour le nouvel espace utilisateur.


Les applications



Et pour mettre à jour les logiciels que j'ai installés ?


Avec près de 23 000 ports, il y a des évolutions tout le temps, pas seulement une fois tous les six mois ;) . Le site FreshPorts affiche en permanence sur sa page d'accueil la liste des ports créés ou modifiés au cours des 10 jours précédents.

Pensez à exécuter souvent la commande portsnap fetch update, pour mettre à jour votre arbre des ports.

Une fois que votre collection de ports est à la page, vous pouvez vous occuper des applications déjà installées. Il y a plusieurs méthodes possibles pour ça. Pour les inconditionnels du mode graphique, servez-vous du dbsd-pkgmgr, que vous avez probablement installé (voir le chapitre Un bureau complet).

Si vous préférez la console, vous feriez bien d'installer l'utilitaire portmanager. Ensuite, pour mettre une application à jour (emacs, par exemple) :

Code : Console
[Nom de l'ordinateur]# portmanager editors/emacs


Et pour mettre toutes vos applications à jour d'un seul coup :

Code : Console
[Nom de l'ordinateur]# portmanager -u


Pour savoir quelles applications ont besoin d'une mise à jour, vous pouvez employer pkg_version de temps à autres. Je précise que ça fonctionne avec tous les logiciels, que vous les ayez installés avec pkg_add ou via les ports.

Comme pkg_info, la commande pkg_version affiche la liste des paquets (au sens large) présents sur votre disque. Mais au lieu de donner leur description, elle indique pour chacun un symbole : <, = ou >.

Vous ne devriez normalement jamais voir le >. Ou alors, c'est que votre collection de ports est vraiment dépassée :'( depuis longtemps et qu'il est grand temps de faire un portsnap fetch update. > signifie en effet que la version du logiciel présent sur votre disque est plus récente que celle du port du même nom.

Si vous voyez un <, en général peu de temps après avoir fait, justement, un portsnap fetch update, c'est l'inverse : votre collection de ports propose une version du logiciel plus récente que celle présente sur votre disque. Peut-être est-il temps de faire travailler portmanager. Mais la plupart du temps, vous verrez = : la version du logiciel installé correspond à celle de vos ports. :)

C - Personnaliser le noyau

Attendez bien d'avoir terminé la mise à jour de FreeBSD et vérifié que la nouvelle version fonctionne avant de modifier le noyau.

Vous utilisez par défaut le noyau GENERIC, dont le fichier de configuration est dans le dossier /usr/src/sys/amd64/conf/ (bien sûr, amd64 doit être remplacé par i386 si vous utilisez cette version). Mais ce n'est pas une obligation. Vous pouvez aussi préparer votre propre noyau.

Il ne faut pas modifier le fichier GENERIC original, mais en faire une copie dans le dossier /root/.

Code : Console
[Nom de l'ordinateur]# cd /usr/src/sys/amd64/conf
[Nom de l'ordinateur]# cp GENERIC /root/MONNOYAU

Pour que FreeBSD trouve votre fichier MONNOYAU, il faut placer un lien (un raccourci) vers lui dans /usr/src/sys/amd64/conf/ :

Code : Console
[Nom de l'ordinateur]# ln -s /root/MONNOYAU

Avec l'option -s, la commande ln permet la création d'un lien symbolique vers MONNOYAU : un fichier de type lien (qui s'appellera aussi MONNOYAU) est créé dans le dossier /usr/src/sys/amd64/conf/. Si vous tapez ls -G, il apparaîtra en rose. Symbolique signifie que, si le fichier lien venait à être détruit, le vrai fichier /root/MONNOYAU ne serait pas affecté. :)

Sans l'option -s, c'est un lien physique que ln établit : si le fichier lien est détruit, le vrai fichier l'est aussi. :waw:

Voyons maintenant ce qu'on peut améliorer dans ce noyau. Dans une première console, affichez le fichier /var/run/dmesg.boot (avec less). Vous reconnaissez ce texte ? ;) Oui, c'est celui qui s'affiche pendant le démarrage. Vous allez pouvoir, cette fois, prendre tout votre temps pour le lire.

Parallèlement, ouvrez avec emacs le fichier /root/MONNOYAU :

Code : Console
[Nom de l'ordinateur]# emacs /root/MONNOYAU


Vous allez retirer certaines lignes qui sont inutiles sur votre ordinateur. Par prudence, plutôt que de les effacer, placez simplement un # au début de ces lignes. Ainsi, elles seront considérées comme des commentaires et ignorées par l'ordinateur.

Je ne comprends pas ! :euh: Un coup, on utilise /* */ pour les commentaires et, d'autres fois, c'est #. Qu'elle est la différence ?

Il ne s'agit pas du même langage ! En C, les commentaires sont entourés des symboles /* */ (ou précédés de // pour ceux qui tiennent sur une seule ligne). Le #, en C, désigne les directives de préprocesseur, dont je vous ai parlé au chapitre précédent. Mais, dans un fichier de configuration de FreeBSD, les conventions sont différentes : c'est le # qui précède les commentaires.

C'est bon ? Vous n'êtes pas trop perdus ? :( N'hésitez pas à revenir en arrière si c'est le cas. Vous avez tout votre temps.

Après les commentaires initiaux, MONNOYAU vous parle d'abord de votre CPU : le type de microprocesseur présent sur votre ordinateur. Si vous utilisez la version i386 de FreeBSD, vous voyez certainement plusieurs lignes commençant par cpu. Une seule de ces lignes est utile. Cherchez dans /var/run/dmesg.boot quel est votre CPU à vous et mettez les autres lignes en commentaires.


Il faut être très prudent avant de mettre des lignes en commentaires. Si vous commettez une erreur et si votre nouveau noyau refuse de démarrer, c'est le menu de boot :magicien: qui vous sauvera : choisissez-y Escape to a loader prompt, puis tapez unload kernel pour décharger le nouveau noyau et /boot/kernel.old/kernel pour démarrer l'ancien.


Pas trop effrayés ? :waw: Alors, repérez la ligne ident GENERIC, juste après le CPU. Elle permet d'identifier ce noyau. Remplacez-y GENERIC par MONNOYAU. Ensuite, voici une série de lignes que vous pouvez mettre en commentaires sans trop de risques.

Si vous n'utilisez pas un serveur de fichiers, ces lignes ne devraient pas vous manquer :

Code : Console
options            NFSCLIENT
options            NFSSERVER
options            NFS_ROOT


Comme vous n'avez certainement pas besoin d'une partition MS-DOS pendant le démarrage, vous pouvez aussi commenter :

Code : Console
options            MSDOSFS


Cela ne vous empêchera pas de monter une clé USB par la suite.

Le système PROCFS est un ancien système qui apportait des informations supplémentaires sur les processus en cours. Certains UNIX l'utilisent toujours mais plus FreeBSD. Vous pouvez donc vous passer de :

Code : Console
options     PROCFS
options     PSEUDOFS


Comme votre machine n'a probablement pas de lecteur de disquettes, débarassez-vous de :

Code : Console
device          fdc
device          atapifd


Je vous parle d'un temps que les moins de vingt ans ne peuvent pas connaître... :D

Les ordinateurs, en ce temps-là, n'avaient pas de disques durs mais stockaient leurs données sur des cassettes, qui ressemblaient à s'y méprendre à des cassettes audio. Comme votre machine n'est pas si antique, vous allez me faire le plaisir de commenter la ligne :

Code : Console
device       atapist


Ensuite, tout dépend des périphériques que vous avez. Le fichier /var/run/dmesg.boot vous renseigne à ce sujet. Cette page du manuel officiel, d'autre part, décrit ligne par ligne le contenu du fichier GENERIC. Et le fichier /usr/src/sys/i386/conf/NOTES propose un grand nombre d'options que vous pouvez ajouter pour vous concocter le noyau de vos rêves, avec des explications pour chacune.

En le lisant, vous verrez que la plupart des modules de votre /boot/loader.conf peuvent être compilés directement avec le noyau. Ainsi, vous n'aurez plus besoin de les charger séparément : vous pourrez les retirer de /boot/loader.conf et donc réduire (un peu) votre temps de démarrage. En particulier, vous ajouterez certainement device sound et device snd_[votre pilote].

Si vous n'êtes pas surs de vous, attendez peut-être d'avoir un peu plus d'expérience. Restez raisonnables et ne modifiez que quelques lignes dans un premier temps : vous n'avez pas besoin d'avoir un noyau parfait. :)

Quand vous aurez terminé et sauvegardé, vous pourrez aller dans /usr/src pour compiler votre nouveau noyau. Si c'est la première fois que vous recompilez le système, il faudra d'abord faire un make buildworld.

Code : Console
[Nom de l'ordinateur]# make -j4 buildkernel KERNCONF=MONNOYAU


Avant d'installer définitivement le nouveau noyau, testons-le déjà une fois :

Code : Console
[Nom de l'ordinateur]# make installkernel KERNCONF=MONNOYAU KODIR=/boot/testing
[Nom de l'ordinateur]# nextboot -k testing


Vous installez ainsi le noyau personnalisé, non pas dans /boot/kernel mais dans /boot/testing. Il ne sera utilisé que pour le prochain boot. En cas de problème, vous n'aurez donc qu'à redémarrer pour retrouver l'ancien noyau.

Par contre, si le test s'avère convaincant :D et si vous voulez embaucher définitivement MONNOYAU, l'étape suivante consiste à mettre son prédécesseur à la retraite (même s'il n'a pas encore 60 ans ! ;) ) :

Code : Console
[Nom de l'ordinateur]# mv /boot/kernel /boot/kernel.old


C'est fait. MONNOYAU peut maintenant prendre ses fonctions :

Code : Console
[Nom de l'ordinateur]# mv /boot/testing /boot/kernel


Q.C.M.

La commande pkg_version affiche le symbole < en face du nom d'un paquet. Que faut-il faire ?
Votre mise à jour s'est mal passée et vous voulez récupérer votre ancien noyau. Où est-il ?
Quelle commande permet une mise à jour rapide vers une nouvelle version de FreeBSD ?
Vous voulez télécharger le code-source d'une nouvelle version avec csup et le placer dans votre dossier personnel. Que faut-il écrire dans miseAjour ?
Je ne veux mettre à jour que le noyau. Que dois-je écrire à la fin de miseAjour ?

Statistiques de réponses au QCM

Fin de la parenthèse. Retournons à notre chantier. Il est temps de créer enfin une prison.
Chapitre précédent Sommaire Chapitre suivant

Partager

5 commentaires pour "Autres applications de la recompilation"
Note moyenne : 3.71 / 4 (299 votes)
Pseudo Commentaire
Hors ligne popernik # Posté le 13/09/2010 à 10:29:18
N'abandonne jamais
Avatar

Avis : Très bon

Ville : Bruxelles
Pays : Belgique
Études : EPHEC

Bonjour,

Code : Console
[popernik_PC]# portsnap update

ça ne fonctionnait pas chez moi :( j'ai plustot fait :
Code : Console
[popernik_PC]# portsnap extract


Et la ça fonctionne :magicien:

Exerces ta volontés à renoncer à tout ce que tu redoutes de perdre un jour.
 
Hors ligne funkylexoo # Posté le 05/10/2010 à 09:14:52

Pareil.
D'ailleurs, un rapide coup d'œil au manuel FreeBSD le confirme:

"If you are running Portsnap for the first time, extract the snapshot into /usr/ports:

# portsnap extract"

Pour les n00bs comme moi qui suivent religieusement pas à pas cette tuto ca vaudrais peut être le coup de préciser?

Très bonne tuto par ailleurs. Infiniment merci.
Hors ligne Titi5187 # Posté le 15/02/2011 à 22:33:53

Avis : Très bon

Hello !!
tous d’abord mercii pour ce tuto il m'aide énormement à utiliser freebsd.

Mais.....j'ai un ti souci et j'espère qu'on pourra m'aider. J'ai suivit la commande "portsnap fetch extract" pour mettre /usr/port à jour. Puis j'ai installer portmanager et fait enfin un portmanager -u. Seulement voila maintenant je ne peux plus démarer enlightenment. Voila le message d'erreur :

"Errors from xkbcomp are not fatal to the X server
E - PID=98969, do_precache=0
/libexec/ld-elf.so.1: Shared object "libecore_imf_evas.so.9" not found, required by "enlightenment"


Je vois pas trop ce que j'ai fait...ou pas....mais j'ai passé mon après midi dessus sans rien trouver, pouvez vous m'aider ???

Mercii

Le monde du partage devra remplacer le partage du monde. :p
 
Hors ligne UNIX develloper # Posté le 08/05/2011 à 03:40:35
Powered by FreeBSD 9.0
Avatar

Études : Epitech Toulouse

La librairie a été perdue en cours de route vas dans /usr/ports/X11-vm/enlightenment/ && make deinstall && make reinstall si tu l'as installé par les ports ou pkg_info | grep enlightenment; note sa version exacte puis pkg_delete enlightenment_x.x.x.x,x puis pkg_add -r enlightenment si tu l'as installé avec pkg_add

Image utilisateur FreeBSD 9.0-RELEASE
Le daemon domminera!!!
Image utilisateur
Image utilisateur
Image utilisateur
 
Hors ligne Bilbax # Posté le 29/07/2011 à 13:24:45
www.bilbax.com
Avatar

Avis : Très bon

Ville : Saint-pierre
Pays : Saint-Pierre-et-Miquelon

J’ai lancé un portmanager -u, mais j’ai remarqué qu’il compile soit même les applications (installées avec pkg_add), est-ce au final comme si j’avais installé les logiciels à partir des ports ?


“What gets us into trouble is not what we don’t know, it’s what we know for sure that just ain’t so.”
      — Mark Twain
 

Voir tous les commentaires