Ce cours est visible gratuitement en ligne.

J'ai tout compris !
A la découverte d'UNIX (FreeBSD)

A la découverte d'UNIX (FreeBSD)

Mis à jour le mardi 8 janvier 2013
  • 4 semaines
  • Moyen

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.

A - Mise à jour

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.

[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.

*default tag=RELENG_8_2

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

*default host=cvsup6.fr.FreeBSD.org

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

/usr, bien sûr. Bravo ! :)

*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.

*default base=/var/db

Encore quelques options à préciser :

*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 :

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 :

[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 :

[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.

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

[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) :

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

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

[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

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.

[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/ :

[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 :

[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.

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 :

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 :

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 :

options     PROCFS
options     PSEUDOFS

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

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 :

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.

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

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

[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 ! ;) ) :

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

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

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

Fin de la parenthèse. Retournons à notre chantier. Il est temps de créer enfin une prison.

Découvrez aussi ce cours en...

Exemple de certificat de réussite
Exemple de certificat de réussite