doc/fr_FR.ISO8859-1/articles/make-world/article.sgml

1376 lines
61 KiB
Text
Executable file

<!--
The FreeBSD Documentation Project
The FreeBSD French Documentation Project
$FreeBSD$
Original revision: 1.39
-->
<!DOCTYPE ARTICLE PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"> %man;
<!ENTITY % urls PUBLIC "-//FreeBSD//ENTITIES Common Document URL Entities//FR"> %urls;
<!ENTITY % abstract PUBLIC "-//FreeBSD//ENTITIES DocBook Abstract Entities//FR"> %abstract;
<!ENTITY % artheader PUBLIC "-//FreeBSD//ENTITIES DocBook ArtHeader Entities//FR"> %artheader;
<!ENTITY % translators PUBLIC "-//FreeBSD//ENTITIES DocBook Translator Entities//FR"> %translators;
<!ENTITY % authors PUBLIC "-//FreeBSD//ENTITIES DocBook Author Entities//EN"> %authors;
<!ENTITY % mailing-lists PUBLIC "-//FreeBSD//ENTITIES DocBook Mailing List Entities//FR"> %mailing-lists;
<!ENTITY rel.current CDATA "3.2">
]>
<article lang="fr">
<articleinfo>
<title>Refaire votre monde (avec &ldquo;make world&rdquo;)</title>
<authorgroup>
<author>
<firstname/Nik/
<surname/Clayton/
<affiliation>
<address><email/Nik.Clayton@nothing-going-on.demon.co.uk/</address>
</affiliation>
</author>
</authorgroup>
<pubdate>10 Juillet 1997</pubdate>
<abstract>
<para>Ce document pr&eacute;suppose que vous ayez install&eacute; une version du code
source de FreeBSD dans le r&eacute;pertoire <filename>/usr/src</filename>.
Ce peut &ecirc;tre la derni&egrave;re version de la branche en cours de
d&eacute;veloppement -current, &agrave; moins que vous ne restiez simplement &agrave; niveau
sur la branche -stable. Vous pouvez avoir t&eacute;l&eacute;charg&eacute; l'instantan&eacute; le plus
r&eacute;cent, ou bien rester &agrave; jour en utilisant les m&eacute;canismes fournis
par CVSup ou CTM.</para>
<para>Dans les deux cas, vous diposez du code source et voulez maintenant
mettre &agrave; jour votre syst&egrave;me.</para>
<para>Il y a un certain nombre d'&eacute;tapes &agrave; effectuer pour y arriver,
et quelques pi&egrave;ges &agrave; &eacute;viter en cours de route. Ce document vous
guide pas &agrave; pas &agrave; chacune de ces &eacute;tapes.</para>
<para>Il existe aussi des <link linkend="translations">Traductions</link>
de ce document dans d'autres langues.</para>
&trans.a.haby;
</abstract>
</articleinfo>
<sect1>
<title>Avertissements pr&eacute;alables</title>
<note>
<title>Faites une sauvegarde</title>
<para>Je n'insisterai jamais assez sur l'importance de faire un sauvegarde
de votre syst&egrave;me <emphasis>avant</emphasis> toute autre chose. Bien qu'il
soit facile de &ldquo;refaire le monde&rdquo;
(N.d.T.: recompiler FreeBSD)&nbsp;-&nbsp;si
vous suivez ces instructions, vous ferez forc&eacute;ment des erreurs &agrave; un moment
ou &agrave; un autre, sans compter les erreurs des autres dans l'arborescence des
sources qui emp&ecirc;cheraient votre syst&egrave;me de red&eacute;marrer.</para>
<para>Assurez-vous que vous avez bien fait une sauvegarde. Ayez une
disquette de maintenance &agrave; port&eacute;e de la main. Je n'ai jamais eu &agrave; les
utiliser, et, je touche du bois, esp&egrave;re ne jamais devoir m'en servir,
mais prudence est m&egrave;re de s&ucirc;ret&eacute;.</para>
</note>
<note>
<title>Abonnez-vous &agrave; la bonne liste de diffusion</title>
<para>Les branches -stable et -current du code de FreeBSD sont, par nature,
<emphasis>en d&eacute;veloppement</emphasis>. Les gens qui participent au projet
FreeBSD sont humains, et des erreurs se produisent parfois.</para>
<para>Ces erreurs sont parfois b&eacute;nignes. Votre syst&egrave;me affiche simplement
un nouveau message d'avertissement. Elles peuvent aussi &ecirc;tre
catastrophiques, et emp&ecirc;cher votre syt&egrave;me de red&eacute;marrer, d&eacute;truire vos
syst&egrave;mes de fichiers (ou pire).</para>
<para>Quand de tels probl&egrave;mes se produisent, un avertissement
&ldquo;heads up&rdquo; est post&eacute; sur la liste de diffusion appropri&eacute;e,
d&eacute;crivant le probl&egrave;me et les machines concern&eacute;es. Un message
&ldquo;all clear&rdquo; est diffus&eacute; quand le probl&egrave;me est
r&eacute;solu.</Para>
<para>Si vous restez &agrave; niveau sur -stable ou -current et ne lisez pas
<email>FreeBSD-stable@FreeBSD.ORG</email> ou
<email>FreeBSD-current@FreeBSD.ORG</email>, vous allez au devant
d'ennuis.</para>
</note>
<important>
<para>S'il vous pla&icirc;t, ne me posez pas de questions que vous devriez poster
sur les listes -questions, -current, ou -stable. Je n'ai ni le temps
ni l'environnement n&eacute;cessaire pour diagnostiquer des probl&egrave;mes
sp&eacute;cifiques, et n'ai probablement pas votre r&eacute;ponse. Les membres de
ces listes de diffusion sont nombreux, exp&eacute;riment&eacute;s et serviables, aussi,
posez leur vos questions. Adressez-moi cependant vos commentaires,
r&eacute;ponses et corrections<footnote><para>En anglais !</para></footnote>.
Si vous vous adressez &agrave; moi au sujet de ce
document, <emphasis>merci</emphasis> de m'indiquer le num&eacute;ro de version
qui se trouve en haut de cette page, que je sache &agrave; quelle version vous
faites r&eacute;f&eacute;rence.</para>
<para>Ce document est un effort collectif. De nombreuses personnes y ont
particip&eacute;, elles sont mentionn&eacute;es dans les
<link linkend="contributors">Contributions</link>
en fin de document.</para>
<para>Copyright (c) 1997, 1998 Nik Clayton, All rights reserved.</para>
<para>Vous pouvez redistribuer et utiliser ce document sous forme
de source (SGML DocBook) ou 'compil&eacute;' (HTML, PDF, PostScript, RTF,
etc..) avec ou sans modifications &agrave; la condition suivante:</para>
<itemizedlist>
<listitem>
<para>Le document redistribu&eacute; doit inclure la notice de copyright
ci-dessus et l'avertissement ci-dessous, avant le corps du
document.</para>
</listitem>
</itemizedlist>
<para>THIS TUTORIAL IS PROVIDED BY NIK CLAYTON &ldquo;AS IS&rdquo; AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS TUTORIAL, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.</para>
<para>CE DOCUMENT EST FOURNI PAR NIK CLAYTON &ldquo;TEL QUEL&rdquo; ET
AUCUNE GARANTIE EXPRESSE OU IMPLICITE, Y COMPRIS, MAIS NON LIMITEE,
GARANTIES IMPLICITES DE COMMERCIABILITE ET D'ADEQUATION A UN BUT
PARTICULIER N'EST DONNEE. EN AUCUN CAS NIK CLAYTON NE
SAURAIT ETRE TENU RESPONSABLE
DES DOMMAGES DIRECTS, INDIRECTS, ACCIDENTELS, SPECIAUX OU CONSEQUENTS
(Y COMPRIS, MAIS SANS LIMITATION, LA FOURNITURE DE BIENS ET SERVICES
ANNEXES; DEFAUT D'UTILISABILITE, PERTE DE DONNEES OU DE PROFITS; OU
INTERRUPTION DE TRAVAIL) QUELLE QU'EN SOIT LA CAUSE ET SELON TOUTE
DEFINITION DE RESPONSABILITE, SOIT PAR CONTRAT, RESPONSABILITE STRICTE,
OU PREJUDICE (Y COMPRIS NEGLIGENCE OU AUTRES) IMPUTABLE D'UNE FACON
OU D'UNE AUTRE A L'UTILISATION DE CE DOCUMENT, MEME APRES AVOIR ETE AVISE
DE LA POSSIBILITE D'UN TEL DOMMAGE.</para>
</important>
</sect1>
<sect1>
<title>Examinez <filename>/etc/make.conf</filename></title>
<para>Reportez-vous au fichier <filename>/etc/make.conf</filename>.
Il contient les valeurs par d&eacute;faut utilis&eacute;es par la commande
<command/make/, qui sera employ&eacute;e pour la recompilation. Elles sont aussi
utilis&eacute;es toutes les fois que vous invoquez <command/make/, il est donc
bon de vous assurer qu'elles comportent les valeurs appropri&eacute;es &agrave; votre
syst&egrave;me.</para>
<para>Tout y est, par d&eacute;faut, en commentaire. Activez les options qui
vous para&icirc;ssent utiles. Pour un utilisateur normal (qui ne d&eacute;veloppe
pas), il faut probalement utiliser les d&eacute;finitions de CFLAGS et
NOPROFILE.</para>
<note>
<title/Version 2.1.7 et ant&eacute;rieures/
<para>Si votre machine dispose d'une unit&eacute; de calcul en virgule
flottante (386DX, 486DX, Pentium et ult&eacute;rieurs) vous pouvez aussi
activer l'option HAVE_FPU.</para>
<para>Cette d&eacute;finition a disparu depuis la version 2.2.2 de
FreeBSD.</para>
</note>
<para>Examinez les autres d&eacute;finitions (COPTFLAGS, NOPORTDOCS et ainsi de
suite) et d&eacute;cidez de celles qui vous conviennent.</para>
</sect1>
<sect1>
<title>Mettez &agrave; jour le fichier <filename>/etc/group</filename></title>
<para>Le r&eacute;pertoire <filename>/etc</filename> contient la plupart des
informations de configuration de votre syst&egrave;me, ainsi que ses proc&eacute;dures
de d&eacute;marrage. Certaines de ces proc&eacute;dures changent d'une version &agrave; l'autre
de FreeBSD.</para>
<para>Certains fichiers de configuration sont aussi utilis&eacute;s en permanence
par le syst&egrave;me. En particulier, <filename>/etc/group</filename>.</para>
<para>Il est arriv&eacute; que la phase d'installation de &ldquo;make
world&rdquo; ait besoin que certains utilisateurs et groupes existent.
Il y a de fortes chances qu'ils n'aient pas &eacute;t&eacute; d&eacute;finis avant la mise
&agrave; jour. C'est une source de probl&egrave;mes.</para>
<para>L'exemple le plus r&eacute;cent concerne l'ajout du groupe &ldquo;ppp&rdquo;
(renomm&eacute; par la suite &ldquo;network&rdquo;). Les utilisateurs ont vu leur
mise &agrave; jour avorter &agrave; l'installation du sous-syt&egrave;me
<filename>ppp</filename> sous un groupe inexistant (chez eux).</para>
<para>La solution consiste &agrave; examiner le fichier
<filename>/usr/src/etc/group</filename> et &agrave; le comparer &agrave; votre propre
liste de groupes. S'il y a des groupes dans le nouveau fichier qui ne
sont pas dans votre fichier, copiez-les. De m&ecirc;me, vous devez renommer
tout groupe de votre fichier <filename>/etc/group</filename> qui a le
m&ecirc;me GID, mais un nom diff&eacute;rent, qu'un groupe du fichier
<filename>/usr/src/etc/group</filename>.</para>
<tip>
<para>Si vous &ecirc;tes particuli&egrave;rement parano&iuml;aque, vous pouvez contr&ocirc;ler
votre syst&egrave;me pour trouver les fichiers appartenant au groupe que vous
renommez ou supprimez. Une commande du type:
<informalexample>
<screen><prompt/#/ <userinput>find / -group <replaceable>GID</replaceable> -print</userinput></screen>
</informalexample>
vous donnera la liste des fichiers appartenant au groupe
<replaceable>GID</replaceable>
(qui peut &ecirc;tre un nom de groupe ou un identifiant num&eacute;rique).</para>
</tip>
</sect1>
<sect1>
<title/Passez en mode mono-utilisateur/
<para>Il vaut mieux recompiler le syst&egrave;me en mode mono-utilisateur. En
dehors du fait que cela ira un peu plus vite, la r&eacute;installation va
modifier un grand nombre de fichiers syst&egrave;mes importants, tous les
binaires de base, les biblioth&egrave;ques, les fichiers inclus et ainsi de
suite. Les modifier quand le syst&egrave;me est en service (en particulier
s'il y a des utilisateurs connect&eacute;s &agrave; ce moment l&agrave;), c'est aller au devant
de probl&egrave;mes.</para>
<para>Cela dit, si vous avez confiance en vous, vous pouvez vous en
passer.</para>
<note>
<title>Version 2.2.5 et ult&eacute;rieure</title>
<para>Comme d&eacute;crit plus bas, la version 2.2.5 et les suivantes de
FreeBSD s&eacute;parent la recompilation et l'installation. Vous pouvez
d&egrave;s lors <emphasis>compiler</emphasis> le nouveau syst&egrave;me en mode
multi-utilisateurs et passer en mode mono-utilisateur juste pour
l'installer.</para>
</note>
<para>En tant que super-utilisateur, vous pouvez passer la commande:
<informalexample>
<screen><prompt/#/ <userinput/shutdown now/</screen>
</informalexample>
sur un syst&egrave;me en fonctionnement, pour passer en mode
mono-utilisateur.</para>
<para>Ou bien, red&eacute;marrez le syst&egrave;me, et, &agrave; l'invite de d&eacute;marrage, entrez
l'indicateur <option>-s</option>. Le syst&egrave;me red&eacute;marrera en mode
mono-utilisateur. A l'invite de l'interpr&eacute;teur de commandes, ex&eacute;cutez:
<informalexample>
<screen><prompt/#/ <userinput/fsck -p/
<prompt/#/ <userinput>mount -u /</userinput>
<prompt/#/ <userinput/mount -a -t ufs/
<prompt/#/ <userinput/swapon -a/</screen>
</informalexample>
pour effectuer la v&eacute;rification des syst&egrave;mes de fichiers, remontez
<filename>/</filename> en mode lecture/&eacute;criture, et monter tous les
autres syst&egrave;mes de fichiers UFS list&eacute;s dans le fichier
<filename>/etc/fstab</filename>, puis activez la pagination.</para>
</sect1>
<sect1>
<title>Effacez <filename>/usr/obj</filename></title>
<para>Les composants du syst&egrave;me reconstruit sont au fur et &agrave; mesure plac&eacute;s
dans les sous-r&eacute;pertoires de <filename>/usr/obj</filename> (par d&eacute;faut).
Ces r&eacute;pertoires masquent ceux de <filename>/usr/src</filename>.</para>
<para>Vous pouvez acc&eacute;l&eacute;rer le travail de &ldquo;make world&rdquo;,
et peut-&ecirc;tre vous &eacute;viter quelques maux de t&ecirc;te en supprimant aussi
le r&eacute;pertoire <filename>/usr/obj</filename>.</para>
<para>Certains fichiers dans <filename>/usr/obj</filename> sont marqu&eacute;s
immuables (reportez-vous aux pages de manuel de
<command>chflags(1)</command> pour plus de d&eacute;tails). Il faut d'abord
supprimer cet indicateur.</para>
<para><informalexample>
<screen><prompt/#/ <userinput>cd /usr/obj</userinput>
<prompt/#/ <userinput/chflags -R noschg */
<prompt/#/ <userinput/rm -rf */</screen></informalexample></para>
</sect1>
<sect1>
<title/Recompilez les sources et installez le nouveau syst&egrave;me/
<sect2>
<title>Toutes versions</title>
<para>Vous devez &ecirc;tre dans le r&eacute;pertoire <filename>/usr/src</filename>,
donc:
<informalexample>
<screen><prompt/#/ <userinput>cd /usr/src</userinput></screen>
</informalexample>
(&agrave; moins, bien s&ucirc;r, que votre code source soit ailleurs, auquel cas vous
devez aller dans le r&eacute;pertoire correspondant).</para>
<para>Pour recompiler le syst&egrave;me, vous utilisez la commande <citerefentry>
<refentrytitle>make</refentrytitle>
<manvolnum>1</manvolnum>
</citerefentry>. Cette commande lit ses instructions dans le fichier
<filename>Makefile</filename>, qui d&eacute;crit comment reconstruire les
modules qui constituent FreeBSD, dans quel ordre,
et ainsi de suite.</para>
<para>Le format g&eacute;n&eacute;ral de la commande que vous taperez sera:
<informalexample>
<screen><prompt/#/ <userinput>make <option>-<replaceable/x/</option> <option>-D<replaceable>VARIABLE</replaceable></option> <replaceable>cible</replaceable></userinput></screen>
</informalexample>
</para>
<para>Dans cet exemple, <option>-<replaceable>x</replaceable></option> est
une option que vous donnez &agrave; <citerefentry>
<refentrytitle>make</refentrytitle>
<manvolnum>1</manvolnum>
</citerefentry>. Reportez-vous aux pages de manuel pour conna&icirc;tre les
options disponibles.</para>
<para><option>-D<replaceable>VARIABLE</replaceable></option> transmet une
variable au fichier <filename>Makefile</filename>. Le comportement de
<filename>Makefile</filename> est d&eacute;fini par ces variables. Ce sont les
m&ecirc;mes variables que l'on trouve dans
<filename>/etc/make.conf</filename>, et c'est un autre moyen de les
positionner.</para>
<para>Par exemple:
<informalexample>
<screen><prompt/#/ <userinput>make -DNOPROFILE=true <replaceable>cible</replaceable></userinput></screen>
</informalexample>
est une autre mani&egrave;re de dire qu'il ne faut pas compiler les
biblioth&egrave;ques profil&eacute;es et correspond aux lignes:
<programlisting>NOPROFILE= true
# Avoid compiling profiled librairies
# Ne pas compiler les biblioth&egrave;ques profil&eacute;es
</programlisting>
du fichier <filename>/etc/make.conf</filename>.</para>
<para><replaceable>cible</replaceable> dit &agrave; <citerefentry>
<refentrytitle>make</refentrytitle>
<manvolnum>1</manvolnum>
</citerefentry> ce que vous voulez faire. Chaque
<filename>Makefile</filename> d&eacute;finit un certains nombre de
&ldquo;cibles&rdquo; diff&eacute;rentes, et votre choix de cibles d&eacute;termine
ce qui se passe.</para>
<para>Il y a des cibles d&eacute;finies dans le fichier
<filename>Makefile</filename> que
vous n'avez pas &agrave; employer. Ce sont des &eacute;tapes interm&eacute;diaires utilis&eacute;es
par le processus de recompilation pour d&eacute;composer les &eacute;tapes en
sous-&eacute;tapes.</para>
<para>La plupart du temps, vous n'aurez pas besoin de donner d'options &agrave;
<citerefentry>
<refentrytitle>make</refentrytitle>
<manvolnum>1</manvolnum>
</citerefentry>, et votre commande sera simplement:
<informalexample>
<screen><prompt/#/ <userinput>make <replaceable>cible</replaceable></userinput></screen>
</informalexample>
</para>
</sect2>
<sect2>
<title>Enregistrez le r&eacute;sultat</title>
<para>C'est une bonne id&eacute;e d'enregistrer le r&eacute;sultat de
<citerefentry>
<refentrytitle>make</refentrytitle>
<manvolnum>1</manvolnum>
</citerefentry> dans un ficher. Si quelque chose se passe mal, vous
aurez une trace des messages d'erreur, et la liste compl&egrave;te de ce qui
a &eacute;t&eacute; fait. M&ecirc;me si cela ne vous aide pas &agrave; diagnostiquer ce qui n'a pas
march&eacute;, cela peut aider les autres si vous soumettez votre probl&egrave;me sur
une des listes de diffusion de FreeBSD.</para>
<para>La meilleure fa&ccedil;on de faire cela est d'utiliser la commande
<citerefentry><refentrytitle>script</refentrytitle>
<manvolnum>1</manvolnum>
</citerefentry>, avec en param&egrave;tre le nom du fichier o&ugrave; enregistrer
les r&eacute;sultats. Vous devez faire cela juste avant de recompiler le
syst&egrave;me, et taper <userinput>exit</userinput> une fois que c'est
termin&eacute;.</para>
<informalexample>
<screen><prompt/#/ <userinput>script /var/tmp/mw.out</userinput>
Script started, output file is /var/tmp/mw.out
<prompt/#/ <userinput/make world/
<emphasis>&hellip; compile, compile, compile &hellip;</emphasis>
<prompt/#/ <userinput/exit/
Script done, &hellip;
</screen>
</informalexample>
<para>Si vous le faites, <emphasis>n'enregistrez pas</emphasis> les
r&eacute;sultats dans <filename>/tmp</filename>. Ce r&eacute;pertoire peut &ecirc;tre vid&eacute;
au prochain red&eacute;marrage du syt&egrave;me. Il vaut mieux les mettre dans
<filename>/var/tmp</filename>
(comme dans l'exemple pr&eacute;c&eacute;dent) ou dans le r&eacute;pertoire utilisateur de
root.</para>
</sect2>
<sect2>
<title>Version 2.2.2 et ant&eacute;rieure</title>
<para><filename>/usr/src/Makefile</filename> contient la cible
&ldquo;world&rdquo;, qui recompile tout le syst&egrave;me et
l'installe.</para>
<para>Utilisez donc:
<informalexample>
<screen><prompt/#/ <userinput>make world</userinput></screen>
</informalexample>
</para>
</sect2>
<sect2>
<title>Version 2.2.5 et ult&eacute;rieure</title>
<para>A partir de la version 2.2.5 de FreeBSD (de fait, c'est la premi&egrave;re
version &agrave; avoir &eacute;t&eacute; cr&eacute;&eacute;e sur la branche -current, puis rapatri&eacute;e dans
la branche -stable entre les versions 2.2.2 et 2.2.5) la cible
&ldquo;world&rdquo; a &eacute;t&eacute; d&eacute;compos&eacute;e en deux: &ldquo;buildworld&rdquo;
et &ldquo;installworld&rdquo;.</para>
<para>Comme leurs noms l'indiquent, &ldquo;buildworld&rdquo; reconstruit
la nouvelle arborescence dans <filename>/usr/obj</filename>, et
&ldquo;installworld&rdquo; l'installe sur la
machine.</para>
<para>C'est tr&egrave;s utile pour deux raisons. Tout d'abord, vous pouvez
recompiler en toute s&ucirc;ret&eacute;, sans toucher aux composants du syst&egrave;me
actuel. Le processus est &ldquo;autonome&rdquo;. Vous pouvez donc
ex&eacute;cuter &ldquo;buildworld&rdquo; sur une machine en mode
multi-utilisateurs
sans redouter d'effets f&acirc;cheux. Je vous recommande n&eacute;anmoins de toujours
ex&eacute;cuter l'&eacute;tape &ldquo;installworld&rdquo; en mode
mono-utilisateur.</para>
<para>En second lieu, cela vous permet d'utiliser des syst&egrave;mes de fichiers
mont&eacute;s par NFS pour mettre &agrave; jour les autres machines de votre r&eacute;seau.
Si vous avez trois machines, A, B, et C que vous voulez mettre &agrave; jour,
ex&eacute;cutez <command>make buildworld</command> et
<command>make installworld</command> sur A. B et C doivent alors monter
par NFS <filename>/usr/src</filename> et <filename>/usr/obj</filename>
depuis A, et vous pouvez alors ex&eacute;cuter
<command>make installworld</command> pour
installer le syst&egrave;me recompil&eacute; sur B et C.</para>
<para>La cible &ldquo;world&rdquo; existe toujours
et vous pouvez l'utiliser
exactement comme avec la version 2.2.2.
<command>make world</command> ex&eacute;cute
<command>make buildworld</command> suivi de <command>make
installworld</command>.</para>
<note>
<para>Si vous utilisez s&eacute;parement <command>make buildworld</command> et
<command>make installworld</command>, vous devez donner &agrave; chaque fois
les m&ecirc;mes param&egrave;tres &agrave; <citerefentry>
<refentrytitle>make</refentrytitle>
<manvolnum>1</manvolnum>
</citerefentry>.</para>
<para>Par exemple, si vous ex&eacute;cutez:
<informalexample>
<screen><prompt/#/ <userinput>make -DNOPROFILE=true buildworld</userinput></screen>
</informalexample>
vous devrez ensuite installer les r&eacute;sultats avec:
<informalexample>
<screen><prompt/#/ <userinput>make -DNOPROFILE=true installworld</userinput></screen>
</informalexample>
sinon il essayera d'installer les biblioth&egrave;ques profil&eacute;es
qui n'ont pas &eacute;t&eacute; recompil&eacute;es &agrave; l'&eacute;tape
<command>make buildworld</command>.</para>
</note>
</sect2>
<sect2>
<title>-current et ult&eacute;rieure</title>
<para>Si vous &ecirc;tes sur la branche -current, vous pouvez aussi donner
l'option <option>-j</option> &agrave; <command>make</command>. Cela permet &agrave;
<command>make</command> d'ex&eacute;cuter plusieurs programmes
simultan&eacute;ment.</para>
<para>C'est particuli&egrave;rement utile sur une machine avec plusieurs
processeurs. N&eacute;anmoins, comme la compilation est plus gourmande en
Entr&eacute;es/Sorties qu'en CPU, c'est aussi
utile sur une machine mono-processeur.</para>
<para>Typiquement, sur une machine mono-processeur, vous ex&eacute;cuteriez:
<informalexample>
<screen><prompt/#/ <userinput>make -j4 <replaceable>cible</replaceable></userinput></screen>
</informalexample>
pour autoriser
<citerefentry>
<refentrytitle>make</refentrytitle>
<manvolnum>1</manvolnum>
</citerefentry> &agrave; ex&eacute;cuter 4 programmes simultan&eacute;ment.
Les constatations empiriques post&eacute;es sur les listes de diffusion
montrent que c'est en g&eacute;n&eacute;ral ce qui apporte le plus de gain en
performances.</para>
<para>Si vous avez une machine multi-processeurs et que vous avez
configur&eacute; un noyau SMP, essayez des valeurs entre 6 et 10 et voyez quel
b&eacute;n&eacute;fice vous en tirez.</para>
<para>N'oubliez pas que c'est toujours exp&eacute;rimental (au moment o&ugrave; j'&eacute;cris
ceci), et que des modifications de l'arborescence des sources rendent
parfois cette possibilit&eacute; inutilisable. Si vous n'arrivez pas &agrave; recompiler
avec ce param&egrave;tre, essayez sans avant de signaler votre probl&egrave;me.</para>
</sect2>
<sect2>
<title/Dur&eacute;e/
<para>En supposant que tout ce passe bien, il vous faudra attendre
entre une heure et demie et une demi-journ&eacute;e.</para>
<para>En r&egrave;gle g&eacute;n&eacute;rale, un P6 200MHz avec plus de 32MB de RAM
et des disques SCSI corrects ex&eacute;cutera <command>make world</command>
en environ une heure et demie. Un P133 32MB prendra 5 &agrave; 6
heures. Revoyez ces chiffres &agrave; la baisse si vos machines sont
plus lentes&hellip;</para>
</sect2>
</sect1>
<sect1>
<title>Mettez &agrave; jour <filename>/etc</filename></title>
<para>Recompiler le syst&egrave;me ne met pas &agrave; jour certains r&eacute;pertoires (en
particulier, <filename>/etc</filename>, <filename>/var</filename> et
<filename>/usr</filename>) pour y installer des fichiers de configuration
nouveaux ou modifi&eacute;s.
Il vous faudra le faire &agrave; la main, &agrave; vue, et en utilisant &agrave; bon escient
la commande <command/diff/.</para>
<para>Vous ne pouvez pas vous contenter de copier les fichiers de
<filename>/usr/src/etc</filename> dans <filename>/etc</filename> pour
que cela marche. Certains de ces fichiers doivent d'abord &ecirc;tre
&ldquo;install&eacute;s&rdquo;.
En effet le r&eacute;pertoire <filename>/usr/src/etc</filename>
<emphasis>n'est pas</emphasis> une simple copie de ce que devrait
contenir votre r&eacute;pertoire<filename>/etc</filename>. De plus, il y a
des fichiers qui doivent &ecirc;tre dans <filename>/etc</filename> et ne
sont pas dans <filename>/usr/src/etc</filename>.</para>
<para>La fa&ccedil;on la plus simple de proc&eacute;der est d'installer les fichiers
dans un nouveau r&eacute;pertoire, puis de passer en revue les diff&eacute;rences.</para>
<note>
<title>Sauvegardez vos fichiers actuels dans
<filename>/etc</filename></title>
<para>Bien qu'en principe rien ne sera modifi&eacute; automatiquement dans ce
r&eacute;pertoire, prudence est m&egrave;re de s&ucirc;ret&eacute;. Copiez donc votre r&eacute;pertoire
<filename>/etc</filename> dans un endroit s&ucirc;r.
Quelque chose du genre:</para>
<informalexample>
<screen><prompt/#/ <userinput>cp -Rp /etc /etc.old</userinput></screen>
</informalexample>
<para>fera l'affaire (<option>-R</option> fait une copie r&eacute;cursive,
<option>-p</option> conserve la date, les autorisations des fichiers
et ainsi de suite).</para>
</note>
<para>Vous devez cr&eacute;er un jeu de r&eacute;pertoires provisoires pour y installer
les fichiers de <filename>/etc</filename> et autres. En g&eacute;n&eacute;ral,
je les mets dans <filename>/var/tmp/root</filename>;
il y a un certain nombre de sous-r&eacute;pertoires &agrave; cr&eacute;er. Pour ce faire,
ex&eacute;cutez:
<informalexample>
<screen><prompt/#/ <userinput>mkdir /var/tmp/root</userinput>
<prompt/#/ <userinput>cd /usr/src/etc</userinput>
<prompt/#/ <userinput>make DESTDIR=/var/tmp/root distrib-dirs distribution</userinput></screen>
</informalexample>
qui va cr&eacute;er l'arborescence n&eacute;cessaire et y installera les fichiers. Un
grand nombre des sous-r&eacute;pertoires cr&eacute;&eacute;s dans
<filename>/var/tmp/root</filename> seront vides et devront &ecirc;tre
supprim&eacute;s. La fa&ccedil;on la plus simple de le faire est:
<informalexample>
<screen><prompt/#/ <userinput>cd /var/tmp/root</userinput>
<prompt/#/ <userinput>find -d . -type d | /usr/bin/perl -lne \
'opendir(D,$_);@f=readdir(D);rmdir if $#f == 1;closedir(D);'</userinput></screen>
</informalexample>
qui fait une recherche en profondeur, examine chaque r&eacute;pertoire, et s'il
ne contient que 2 fichiers (&ldquo;1&rdquo; n'est pas une faute de frappe
dans la proc&eacute;dure), i.e. &ldquo;<filename>.</filename>&rdquo; et
&ldquo;<filename>..</filename>&rdquo; supprime le r&eacute;pertoire.</para>
<para><filename>/var/tmp/root</filename> contient maintenant tous les
fichiers &agrave; installer &agrave; l'endroit requis sous
<filename>/</filename>. Vous devez ensuite examiner chacun de ces
fichiers pour voir en quoi ils diff&egrave;rent de vos propres fichiers.</para>
<para>Notez que certains des fichiers qui ont &eacute;t&eacute; install&eacute;s dans
<filename>/var/tmp/root</filename> commencent par un &ldquo;.&rdquo; Au
moment o&ugrave; j'&eacute;cris ceci, les seuls fichiers concern&eacute;s sont les fichiers
d'initialisation des interpr&eacute;teurs de commandes dans
<filename>/var/tmp/root/</filename> et
<filename>/var/tmp/root/root/</filename>, mais il pourrait y en
avoir d'autres
(cela d&eacute;pend de quand vous lirez ces lignes). Assurez-vous d'utiliser
<command/ls -a/ pour ne pas les oublier.</para>
<para>La mani&egrave;re la plus simple de proc&eacute;der est d'utiliser la commande
<command/diff/ pour comparer deux fichiers.</para>
<para>Par exemple:
<informalexample>
<screen><prompt/#/ <userinput>diff /etc/shells /var/tmp/root/etc/shells</userinput></screen>
</informalexample>
vous indiquera les diff&eacute;rences entre votre fichier
<filename>/etc/shells</filename> et le nouveau fichier
<filename>/etc/shells</filename>. A partir de l&agrave;, d&eacute;cidez si vous
allez reporter les modifications que vous y avez apport&eacute;es ou si vous
allez simplement recopier le nouveau fichier.</para>
<para><ulink url="http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/dircmp.pl"><filename>http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/dircmp.pl</filename></ulink> est une
petite proc&eacute;dure Perl (Perl 4.036, qui est install&eacute; par d&eacute;faut &agrave; partir de
la version 2.0 de FreeBSD) qui compare les fichiers de deux r&eacute;pertoires
(<filename>/etc</filename> et
<filename>/var/tmp/root/etc</filename> par d&eacute;faut) et liste les fichiers
absents ou diff&eacute;rents dans les deux r&eacute;pertoires.</para>
<tip>
<title>Donnez au nouveau r&eacute;pertoire
(<filename>/var/tmp/root</filename>) un nom qui inclue une date, pour
pouvoir facilement comparer diff&eacute;rentes versions</title>
<para>Si vous recompilez fr&eacute;quemment votre syst&egrave;me, vous devrez aussi
souvent mettre &agrave; jour <filename>/etc</filename>, ce qui peut devenir
une vrai corv&eacute;e.</para>
<para>Vous pouvez acc&eacute;l&eacute;rer le processus en gardant une copie du dernier
jeu de fichiers report&eacute;s dans <filename>/etc</filename>. La
proc&eacute;dure suivante vous sugg&egrave;re comment faire.</para>
<procedure>
<step>
<para>Recompilez le syst&egrave;me comme d'habitude. Au moment de mettre &agrave;
jour <filename>/etc</filename> et les autres r&eacute;pertoires, donnez au
r&eacute;pertoire cible un nom bas&eacute; sur la date du jour. Si vous faisiez
cela le 14 F&eacute;vrier 1998, vous pouviez proc&eacute;der comme suit:</para>
<informalexample>
<screen><prompt/#/ <userinput>mkdir /var/tmp/root-980214</userinput>
<prompt/#/ <userinput>cd /usr/src/etc</userinput>
<prompt/#/ <userinput>make DESTDIR=/var/tmp/root-980214 \
distrib-dirs distribution</userinput></screen>
</informalexample>
</step>
<step>
<para>Reportez les modifications depuis ce r&eacute;pertoire comme d&eacute;crit
plus haut.</para>
<para><emphasis>Ne supprimez pas</emphasis> le r&eacute;pertoire
<filename>/var/tmp/root-980214</filename> quand vous aurez
termin&eacute;.</para>
</step>
<step>
<para>Quand vous chargerez la version la plus r&eacute;cente des sources et
la recompilerez, faites de m&ecirc;me. Vous aurez alors un nouveau
r&eacute;pertoire,
<filename>/var/tmp/root-980221</filename> par exemple
(si vous faites une mise &agrave; jour chaque semaine).</para>
</step>
<step>
<para>Vous pouvez maintenant voir les modifications intervenues
d'une semaine &agrave; l'autre avec quelque chose comme:
<informalexample>
<screen><prompt/#/ <userinput>cd /var/tmp</userinput>
<prompt/#/ <userinput>diff -r root-980214 root-980221</userinput></screen>
</informalexample>
qui vous donnera les diff&eacute;rences entre tous les fichiers des deux
r&eacute;pertoires.</para>
<para>Typiquement, il y aura beaucoup moins de diff&eacute;rences
qu'entre <filename>/var/tmp/root-980221/etc</filename>
et <filename>/etc</filename>. Comme il y a beaucoup moins de
diff&eacute;rences, il est beaucoup plus facile de les reporter dans
le r&eacute;pertoire <filename>/etc</filename>.</para>
</step>
<step>
<para>Vous pouvez maintenant supprimer le plus ancien des deux
r&eacute;pertoires <filename>/var/tmp/root-*</filename>:
<informalexample>
<screen><prompt/#/ <userinput>rm -rf /var/tmp/root-980214</userinput></screen>
</informalexample>
</para>
</step>
<step>
<para>R&eacute;p&eacute;tez l'op&eacute;ration chaque fois que vous devez reporter
des modifications dans <filename>/etc</filename>.</para>
</step>
</procedure>
<para>Vous pouvez utiliser la commande <command>date(1)</command> pour
automatiser la g&eacute;n&eacute;ration des noms de r&eacute;pertoires. Par exemple:
<informalexample>
<screen><prompt/#/ <userinput>mkdir /var/tmp/root-`date "+%y%m%d"`</userinput></screen>
</informalexample>
cr&eacute;e un r&eacute;pertoire dont le nom d&eacute;pend de l'ann&eacute;e, du mois et
du jour.</para>
</tip>
</sect1>
<sect1>
<title>Mettez &agrave; jour <filename>/dev</filename></title>
<note>
<title>DEVFS</title>
<para>Si vous utilisez DEVFS ce qui suit ne vous concerne probalement
pas.</para>
</note>
<para>Pour des raisons de s&eacute;curit&eacute;, cette mise &agrave; jour se fait en plusieurs
&eacute;tapes.</para>
<para>Copiez tout d'abord <filename>/var/tmp/root/dev/MAKEDEV</filename>
dans <filename>/dev</filename>.
<informalexample>
<screen><prompt/#/ <userinput>cp /var/tmp/root/dev/MAKEDEV /dev</userinput></screen>
</informalexample></para>
<para>Prenez maintenant un instantan&eacute; de l'&eacute;tat de votre r&eacute;pertoire
<filename>/dev</filename>. Il doit indiquer
les propri&eacute;taires, les droits et les codes majeur et mineur de chaque
fichier sp&eacute;cial de p&eacute;riph&eacute;rique, mais pas leur date de derni&egrave;re mise &agrave; jour.
La fa&ccedil;on la plus facile de proc&eacute;der est d'utiliser
la commande <command>awk</command> pour &eacute;liminer les informations inutiles:
<informalexample>
<screen><prompt/#/ <userinput>cd /dev</userinput>
<prompt/#/ <userinput>ls -l | awk '{print $1, $2, $3, $4, $5, $6, $NF}' > /var/tmp/dev.out</userinput></screen>
</informalexample></para>
<para>Ensuite, recr&eacute;ez tous les fichiers sp&eacute;ciaux de p&eacute;riph&eacute;riques:.
<informalexample>
<screen><prompt/#/ <userinput/sh MAKEDEV all/</screen>
</informalexample></para>
<para>Reprenez un instantan&eacute; de l'&eacute;tat de votre r&eacute;pertoire, cette fois-ci
dans <filename>/var/tmp/dev2.out</filename>. Comparez maintenant ces deux
instantan&eacute;s pour voir si certains fichiers sp&eacute;ciaux de p&eacute;riph&eacute;riques
n'ont pas &eacute;t&eacute; recr&eacute;&eacute;s. Il ne devrait pas en manquer, mais prudence est
m&egrave;re de s&ucirc;ret&eacute;.
<informalexample>
<screen><prompt/#/ <userinput>diff /var/tmp/dev.out /var/tmp/dev2.out</userinput></screen>
</informalexample></para>
<para>Il manquera peut-&ecirc;tre des descripteurs de partitions,
il vous faudra alors ex&eacute;cuter des commandes du type :
<informalexample>
<screen><prompt/#/ <userinput>sh MAKEDEV sd0s1</userinput>
</screen>
</informalexample>
pour les recr&eacute;er. Les d&eacute;tails d&eacute;pendent de votre installation.</para>
</sect1>
<sect1>
<title>Mettez &agrave; jour <filename>/stand</filename></title>
<note>
<para>Cette &eacute;tape n'est d&eacute;crite que pour &ecirc;tre exhaustif, elle peut &ecirc;tre
omise sans danger.</para>
</note>
<para>Pour &ecirc;tre exhaustif, vous pouvez aussi mettre &agrave; jour les fichiers de
<filename>/stand</filename>. Ces fichiers sont des liens physiques sur
le programme <filename>/stand/sysinstall</filename>. L'&eacute;dition de liens
de cet ex&eacute;cutable doit &ecirc;tre statique, pour qu'on puisse l'utiliser sans
qu'aucun autre syst&egrave;me de fichiers (et en particulier
<filename>/usr</filename>) ne soit mont&eacute;.</para>
<informalexample>
<screen><prompt/#/ <userinput>cd /usr/src/release/sysinstall</userinput>
<prompt/#/ <userinput>make all install</userinput></screen>
</informalexample>
<note>
<title>Sources ant&eacute;rieurs au 2 Avril 1998</title>
<para>Si votre code source date d'avant le 2 Avril 1998, ou que
la version de votre <filename>Makefile</filename> est inf&eacute;rieure &agrave;
1.68 (pour FreeBSD-current et les syst&egrave;mes 3.x) ou &agrave; 1.48.2.21
(pour les syst&egrave;mes 2.2.x), vous devrez ajouter l'option
<userinput>NOSHARED=yes</userinput> comme suit:</para>
<informalexample>
<screen><prompt/#/ <userinput>make NOSHARED=yes all install</userinput></screen>
</informalexample>
</note>
</sect1>
<sect1>
<title/Compilez et installez un nouvau noyau/
<para>Pour tirer pleinement parti de votre nouveau syst&egrave;me, vous devez
recompiler le noyau. C'est pratiquement indispensable, parce que des
structures de donn&eacute;es peuvent avoir chang&eacute;, et des programmes
comme <command/ps/ et <command/top/ ne marcheront pas
tant que le syst&egrave;me et le noyau ne seront pas au m&ecirc;me niveau
de version.</para>
<para>Suivez les instructions du "manuel" pour compiler un nouveau
noyau. Si vous avez d&eacute;j&agrave; recompil&eacute; un noyau personnalis&eacute;
examinez en d&eacute;tail le fichier de configuration
<filename/LINT/ pour voir s'il y a de nouvelles options dont vous
pourriez tirer parti.</para>
<para>Une version pr&eacute;c&eacute;dente de ce document sugg&eacute;rait de red&eacute;marrer
le syst&egrave;me avant de recompiler le noyau. C'est un erreur parce
que :</para>
<itemizedlist>
<listitem><para>Des commandes comme <command/ps/, <command/ifconfig/ and
<command/sysctl/ peuvent ne plus fonctionner. Dans ce cas, votre
machine ne peut plus se connecter au r&eacute;seau.</para></listitem>
<listitem><para>De m&ecirc;me, des utilitaires essentiels comme
<command/mount/ peuvent aussi &ecirc;tre inutilisables,
auquel cas <filename>/</filename>, <filename>/usr</filename> et ainsi
de suite, ne peuvent plus &ecirc;tre mont&eacute;s. Il y a peu de chances
que cela arrive si vous &ecirc;tes sur la branche -stable, mais c'est plus
probable sur la branche -current apr&egrave;s des modifications
importantes.</para></listitem>
<listitem>
<para>Les LKMs ("Loadable Kernel Modules"&nbsp;-&nbsp;modules du noyau &agrave; chargement
dynamique) reconstruits en m&ecirc;me temps que &ldquo;world&rdquo;
peuvent "planter" un noyau plus ancien.</para>
</listitem>
</itemizedlist>
<para>Pour toutes ces raisons, il vaut mieux recompiler et installer un
nouveau noyau avant de red&eacute;marrer.</para>
<para>Vous devez recompiler le noyau apr&egrave;s avoir termin&eacute;
<userinput>make world</userinput> (ou <userinput>make
installworld</userinput>). Si vous ne le faites pas (peut-&ecirc;tre
voulez-vous vous assurer que le noyau compile avant de mettre &agrave;
jour le syst&egrave;me), vous pourriez avoir des probl&egrave;mes. Cela parce que
votre commande <command>config</command> n'est pas &agrave; niveau
avec les sources du noyau.</para>
<para>Dans ce cas, ex&eacute;cutez:
<informalexample>
<screen><prompt/#/ <userinput>/usr/obj/usr/src/usr.sbin/config <replaceable>NOM_DU_NOYAU</replaceable></userinput></screen>
</informalexample>
pour recompiler le noyau avec la nouvelle version de
<command>config</command>. Cela ne marchera peut-&ecirc;tre pas &agrave; tous les
coups. Il est recommand&eacute; d'en finir avec
<userinput>make world</userinput> (ou
<userinput>make installworld</userinput>) avant de compiler un nouveau
noyau.</para>
</sect1>
<sect1>
<title/Red&eacute;marrez/
<para>Vous en avez fini. Apr&egrave;s avoir v&eacute;rifi&eacute; que tout semble &ecirc;tre en
place, vous pouvez maintenant red&eacute;marrez votre syst&egrave;me. Un simple
<citerefentry>
<refentrytitle>fastboot</refentrytitle>
<manvolnum>8</manvolnum>
</citerefentry> devrait suffire.</para>
<informalexample>
<screen><prompt/#/ <userinput>fastboot</userinput></screen>
</informalexample>
</sect1>
<sect1>
<title>C'est fini</title>
<para>Vous devriez maintenant avoir mis &agrave; jour avec succ&egrave;s votre syst&egrave;me
FreeBSD.
F&eacute;licitations.</para>
<para>Vous aurez peut-&ecirc;tre de petits probl&egrave;mes si des d&eacute;tails vous
ont &eacute;chapp&eacute;s. Par
exemple, il m'est arriv&eacute; d'effacer le fichier
<filename>/etc/magic</filename> au moment de la mise &agrave; jour de
<filename>/etc</filename>, de ce fait, la commande
<command>file</command> ne marchait plus. Un petit moment de r&eacute;flexion
et j'ai trouv&eacute; que:
<informalexample>
<screen><prompt/#/ <userinput>cd /usr/src/usr.bin/file</userinput>
<prompt/#/ <userinput/make all install/</screen>
</informalexample>
suffisait &agrave; r&eacute;gler ce probl&egrave;me.</para>
</sect1>
<sect1>
<title/Questions?/
<sect2>
<title/Dois-je refaire le monde &agrave; chaque &eacute;volution?/
<para>Il n'y a pas de r&eacute;ponse toute faite &agrave; cette question, tout d&eacute;pend
de la nature des &eacute;volutions. Je viens juste, par exemple, d'ex&eacute;cuter
CVSup, et les fichiers suivants ont &eacute;t&eacute; modifi&eacute;s depuis ma derni&egrave;re
recompilation:</para>
<informalexample>
<screen><filename>src/games/cribbage/instr.c</filename>
<filename>src/games/sail/pl_main.c</filename>
<filename>src/release/sysinstall/config.c</filename>
<filename>src/release/sysinstall/media.c</filename>
<filename>src/share/mk/bsd.port.mk</filename></screen>
</informalexample>
<para>Il n'y a pas l&agrave; mati&egrave;re &agrave; ce que je recompile mon syst&egrave;me. Je
vais simplement aller dans les bons sous-r&eacute;pertoires et ex&eacute;cuter
<command/make all
install/, et c'est &agrave; peu pr&egrave;s tout. Mais s'il y a des &eacute;volutions
importantes, par
exemple sur <filename>src/lib/libc/stdlib</filename> alors ou je
referais, le monde, ou je recompilerais au moins toutes les parties
du syst&egrave;me qui sont li&eacute;es statiquement
(de m&ecirc;me que tout ce que je pourrais avoir ajout&eacute; qui serait li&eacute;
statiquement).</para>
<para>En fin de journ&eacute;e, c'est &agrave; vous de voir.
Vous pr&eacute;f&eacute;rerez peut-&ecirc;tre recompiler votre syst&egrave;me tous les quinze
jours, et laisser les modifications s'empiler pendant ces quinze jours.
Ou bien vous pr&eacute;f&eacute;rez ne recompiler que ce qui a chang&eacute; et vous faire
confiance pour rep&eacute;rer ce qui en d&eacute;pend.</para>
<para>Et, bien s&ucirc;r, cela d&eacute;pend de la fr&eacute;quence avec laquelle vous voulez
faire vos mises &agrave; jour, et de si vous &ecirc;tes sur la branche -stable ou
sur la branche -current.</para>
</sect2>
<sect2>
<title>Ma compilation &eacute;choue avec de nombreuses erreurs "signal 12"
(ou tout autre num&eacute;ro de signal)</title>
<para>Cela indique g&eacute;n&eacute;ralement un probl&egrave;me mat&eacute;riel. (Re)faire le
monde est un bon moyen de mettre votre mat&eacute;riel sous pression, et
mettra souvent en &eacute;vidence des d&eacute;faillances de la m&eacute;moire vive. Cela se
manifeste normalement de soi-m&ecirc;me: le compilation &eacute;choue en recevant
de myst&eacute;rieux signaux.</para>
<para>Vous pouvez vous en assurer si vous relancer la compilation
et qu'elle &eacute;choue en un endroit diff&eacute;rent.</para>
<para>Dans ce cas, vous ne pouvez gu&egrave;re faire autre chose que
d'intervertir les diff&eacute;rents composants de votre mat&eacute;riel pour d&eacute;terminer
lequel est en cause.</para>
</sect2>
<sect2>
<title>Puis-je d&eacute;truire <filename>/usr/obj</filename> apr&egrave;s avoir
fini?</title>
<para>Tout d&eacute;pend de comment vous voulez refaire le monde par
la suite.</para>
<para><filename>/usr/obj</filename> contient tous les fichiers objets
g&eacute;n&eacute;r&eacute;s &agrave; la compilation. Normalement, une des premi&egrave;res &eacute;tapes de
&ldquo;make world&rdquo; est de supprimer ce r&eacute;pertoire
et de repartir &agrave; z&eacute;ro. Dans ce cas, conserver ce r&eacute;pertoire
<filename>/usr/obj</filename> apr&egrave;s en avoir termin&eacute; ne sert pas &agrave;
grand chose, alors que vous &eacute;conomiseriez pas mal d'espace disque
(au jour d'aujourd'hui
environ 150Mo).</para>
<para>N&eacute;anmoins, si vous savez ce que vous faites, vous pouvez faire en
sorte que &ldquo;make
world&rdquo; saute cette &eacute;tape. Les reconstructions ult&eacute;rieures seront
beaucoup plus rapides, car la plupart des sources n'auront pas besoin
d'&ecirc;tre recompil&eacute;s. Le revers de la m&eacute;daille est que des
probl&egrave;mes de d&eacute;pendance subtils peuvent se manifester, provoquant
l'&eacute;chec de votre recompilation de mani&egrave;re &eacute;trange. Cela g&eacute;n&egrave;re
fr&eacute;quemment du bruit sur les listes de diffusion de FreeBSD,
quand quelqu'un se plaint que sa mise &agrave; jour a &eacute;chou&eacute;, sans r&eacute;aliser
qu'il a tent&eacute; de br&ucirc;ler les &eacute;tapes.</para>
<para>Si vous aimez vivre dangereusement, passez le param&egrave;tre
&ldquo;NOCLEAN&rdquo; &agrave; <command/make/, comme suit:
<informalexample>
<screen><prompt/#/ <userinput>make -DNOCLEAN world</userinput></screen>
</informalexample>
</para>
</sect2>
<sect2>
<title>Une recompilation interrompue peut-elle &ecirc;tre reprise?</title>
<para>Tout d&eacute;pend de jusqu'o&ugrave; vous &ecirc;tes all&eacute; avant de rencontrer un
probl&egrave;me.</para>
<para><emphasis>En g&eacute;n&eacute;ral</emphasis> (mais ce n'est pas une r&egrave;gle
absolue) &ldquo;make world&rdquo; cr&eacute;e de nouveaux exemplaires
des utilitaires de base (comme <command>gcc</command>, et
<command>make</command>) et des biblioth&egrave;ques syst&egrave;me. Ces outils et
biblioth&egrave;ques sont ensuite install&eacute;s. Ils sont ensuite utilis&eacute;s
pour se reconstruire eux-m&ecirc;mes, et install&eacute;s de nouveau. Le syst&egrave;me
entier (y compris maintenant les outils usuels, comme
<command>ls</command> ou
<command>grep</command>) est ensuite recompil&eacute; avec les nouveaux
outils et biblioth&egrave;ques de base.</para>
<para>Si vous en &ecirc;tes &agrave; cette derni&egrave;re &eacute;tape, et que vous le savez
(parce que vous avez consult&eacute; les r&eacute;sultats que vous avez enregistr&eacute;s)
alors vous pouvez (avec une bonne chance de r&eacute;ussite) faire:
<informalexample>
<screen><emphasis>&hellip; r&eacute;gler le probl&egrave;me &hellip;</emphasis>
<prompt/#/ <userinput>cd /usr/src</userinput>
<prompt/#/ <userinput/make -DNOCLEAN all/
</screen>
</informalexample>
qui ne d&eacute;truira pas les r&eacute;sultats du travail qu'a d&eacute;j&agrave; effectu&eacute;
&ldquo;make world&rdquo;.</para>
<para>Si vous voyez le message :
<screen>
--------------------------------------------------------------
Building everything..
--------------------------------------------------------------
</screen>
dans les comptes-rendus de &ldquo;make world&rdquo;, cette fa&ccedil;on de
proc&eacute;der est probablement s&ucirc;re.</para>
<para>Si vous ne voyez pas ce message, ou doutez de vous, alors prudence
est m&egrave;re de s&ucirc;ret&eacute;, et il vaut mieux tout reprendre depuis le
d&eacute;but.</para>
</sect2>
<sect2>
<title/Puis-je utiliser une seule machine de <emphasis/r&eacute;f&eacute;rence/ pour
mettre &agrave; jour plusieurs machines (NFS)?/
<para>On pose souvent la question sur les listes de diffusion de FreeBSD
de savoir s'il est possible de tout compiler sur une seule machine
puis d'installer les r&eacute;sultats de cette compilation sur d'autres
machines du r&eacute;seau avec <command/make install/.</para>
<para>C'est quelque chose que je n'ai jamais fait, aussi les indications
qui suivent m'ont-elles &eacute;t&eacute; donn&eacute;es par d'autres ou d&eacute;duites des
<filename>Makefile</filename>s.</para>
<para>La marche exacte &agrave; suivre d&eacute;pend de votre version de FreeBSD.</para>
<note>
<para>Vous devrez encore mettre &agrave; jour <filename>/etc</filename> et
<filename>/dev</filename> sur les machines cibles apr&egrave;s cette
&eacute;tape.</para>
</note>
<sect3>
<title>Version 2.1.7 et ant&eacute;rieures</title>
<para>Dans un message adress&eacute; &agrave; questions@freebsd.org,
Antonio Bemfica a sugg&eacute;r&eacute; la m&eacute;thode suivante:</para>
<screen>
Date: Thu, 20 Feb 1997 14:05:01 -0400 (AST)
From: Antonio Bemfica &lt;bemfica@militzer.me.tuns.ca&gt;
To: freebsd-questions@freebsd.org
Message-ID: &lt;Pine.BSI.3.94.970220135725.245C-100000@militzer.me.tuns.ca&gt;
Josef Karthauser a demand&eacute;:
&gt; Quelqu'un a-t-il la bonne m&eacute;thode pour mettre &agrave; jour
&gt; les machines d'un r&eacute;seau?
D'abord <command>make world</command>, etc... sur votre machine de r&eacute;f&eacute;rence
Ensuite, montez <filename>/</filename> and <filename>/usr</filename> sur la machine distante:
machine_de_r&eacute;f&eacute;rence% mount machine_distante:/ /mnt
machine_de_r&eacute;f&eacute;rence% mount machine_distante:/usr /mnt/usr
Ensuite, faites <command>make install</command> avec <filename>/mnt</filename> comme cible:
machine_de_r&eacute;f&eacute;rence% make install DESTDIR=/mnt
R&eacute;p&eacute;tez cela pour chaque machine de votre r&eacute;seau.
Cela marche tr&egrave;s bien dans mon cas.
Antonio
</screen>
<para>Ce m&eacute;canisme ne fonctionne (autant que je sache) que si
vous pouvez &eacute;crire sur <filename>/usr/src</filename> sur le serveur
NFS, car ce devait &ecirc;tre la cible d'&ldquo;install&rdquo; avec la
version 2.1.7 et les pr&eacute;c&eacute;dentes.</para>
</sect3>
<sect3>
<title>Version 2.2.0 and ult&eacute;rieures</title>
<para>Entre les versions 2.1.7 et 2.2.0 la cible
&ldquo;reinstall&rdquo; a &eacute;t&eacute; introduite. Vous pouvez utiliser
la m&eacute;thode d&eacute;crite ci-dessus pour
la version 2.1.7, en rempla&ccedil;ant &ldquo;install&rdquo; par
&ldquo;reinstall&rdquo;.</para>
<para>Cela <emphasis>ne demande plus</emphasis> de droits d'&eacute;criture
sur le r&eacute;pertoire <filename>/usr/src</filename> du serveur NFS.</para>
<note>
<para>Un bogue est apparu avec cette cible entre les versions
1.68 et 1.107 du <filename>Makefile</filename>, qui impliquait
qu'il <emphasis>fallait</emphasis>
avoir les droits d'&eacute;criture. Ce bogue a &eacute;t&eacute; corrig&eacute; avant la
diffusion de la version 2.2.0 de FreeBSD, mais peut encore poser
probl&egrave;me si vous avez un vieux serveur sous -stable de cette
&eacute;poque.</para>
</note>
</sect3>
<sect3>
<title>Version 2.2.5 et ult&eacute;rieure</title>
<para>Comme d&eacute;crit plus haut, les cibles &ldquo;buildworld&rdquo; et
&ldquo;installworld&rdquo; peuvent &ecirc;tre employ&eacute;es pour recompiler
sur une machine, puis monter par NFS
<filename>/usr/src</filename> et <filename>/usr/obj</filename> sur
la machine distante et y installer le nouveau syst&egrave;me.</para>
</sect3>
</sect2>
<sect2>
<title>Comment puis-je acc&eacute;l&eacute;rer <command>make world</command>?</title>
<itemizedlist>
<listitem>
<para>Passez en mode mono-utilisateur.</para>
</listitem>
<listitem>
<para>Mettez les r&eacute;pertoires <filename>/usr/src</filename> et
<filename>/usr/obj</filename> sur des syst&egrave;mes de fichiers
et des disques diff&eacute;rents. Si possible, installez ces disques
sur des contr&ocirc;leurs diff&eacute;rents.</para>
</listitem>
<listitem>
<para>Mieux encore, mettez ces syst&egrave;mes de fichiers sur
plusieurs disques et utilisez &ldquo;ccd&rdquo;
("concatenated disk driver" = pilote de disques concat&eacute;n&eacute;s).</para>
</listitem>
<listitem>
<para>Ne compilez pas les biblioth&egrave;ques profil&eacute;es
(mettez &ldquo;NOPROFILE=true&rdquo; dans
<filename>/etc/make.conf</filename>). Vous n'en avez certainement
pas besoin.</para>
</listitem>
<listitem>
<para>Dans <filename>/etc/make.conf</filename>, positionnez aussi
&ldquo;CFLAGS&rdquo; &agrave; quelque chose comme &ldquo;-O -pipe&rdquo;.
L'optimisation &ldquo;-O2&rdquo; est bien plus lente, et la
diff&eacute;rence d'optimisation entre &ldquo;-O&rdquo; et
&ldquo;-O2&rdquo; est en g&eacute;n&eacute;ral n&eacute;gligeable. &ldquo;-pipe&rdquo;
dit au compilateur d'utiliser des tuyaux (&ldquo;pipes&rdquo;)
&agrave; la place de fichiers, ce qui &eacute;conomise des acc&egrave;s disque
(mais utilise plus de m&eacute;moire).</para>
</listitem>
<listitem>
<para>Donnez l'option <option>-j&lt;n&gt;</option> au compilateur
(Si vous avez une version suffisamment r&eacute;cente de FreeBSD)
pour ex&eacute;cuter plusieurs programmes en parall&egrave;le. Cela am&eacute;liore
les choses, que vous ayez une machine mono- ou
multi-processeurs. </para>
</listitem>
<listitem><para>Le syst&egrave;me de fichiers qui contient
<filename>/usr/src</filename> peut &ecirc;tre mont&eacute; (ou remont&eacute;) avec l'option
&ldquo;noatime&rdquo;. De cette mani&egrave;re, les dates de dernier acc&egrave;s
aux fichiers ne sont pas enregistr&eacute;es sur disque. Vous n'avez de toute
fa&ccedil;on probablement pas besoin de cette information.
<note>
<para>&ldquo;noatime&rdquo; existe &agrave; partir de la version
2.2.0.</para>
</note>
<informalexample>
<screen><prompt/#/ <userinput>mount -u -o noatime /usr/src</userinput></screen>
</informalexample>
<note>
<para>Cet exemple suppose que <filename>/usr/src</filename>
constitue &agrave; lui seul un syst&egrave;me de fichiers. Si ce n'est
pas le cas (s'il fait partie de
<filename>/usr</filename> par exemple) vous devez indiquez
le point de montage de ce syst&egrave;me de fichiers, et non
<filename>/usr/src</filename>.</para>
</note></para>
</listitem>
<listitem><para>Le syst&egrave;me de fichiers o&ugrave; se trouve
<filename>/usr/obj</filename>
peut &ecirc;tre mont&eacute; (ou remont&eacute;) avec l'option &ldquo;async&rdquo;.
Les &eacute;critures sur disque se font alors de fa&ccedil;on asynchrone. En
d'autres termes, le programme reprend imm&eacute;diatement la main,
mais l'&eacute;criture se fait quelques secondes apr&egrave;s. Les acc&egrave;s
disque sont ainsi group&eacute;s, et le gain en performances est
spectaculaire.</para>
<note>
<para>Rappelez-vous que cette option rend votre syst&egrave;me de
fichiers plus fragile. Avec cette option, les risques sont accrus
qu'en cas de coupure d'alimentation, le syst&egrave;me de fichiers soit
irr&eacute;cup&eacute;rable quand la machine red&eacute;marrera.</para>
<para>S'il n'y a que <filename>/usr/obj</filename> sur ce syst&egrave;me
de fichiers, ce n'est pas un probl&egrave;me. S'il contient des
informations
plus sensibles, assurez-vous que vos sauvegardes soient &agrave; jour
avant d'activer cette option.</para>
</note>
<para><informalexample>
<screen><prompt/#/ <userinput>mount -u -o async /usr/obj</userinput></screen>
</informalexample>
<note>
<para>Comme auparavant, si <filename>/usr/obj</filename> ne
constitue pas un syst&egrave;me de fichiers en soit,
remplacez-le dans l'exemple par le nom du point
de montage qui convient.</para>
</note></para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 id="translations">
<title>Traductions</title>
<sect2>
<title>Document original</title>
<para>L'original de ce document se trouve sur
<ulink url="http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html">http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html</ulink>.</para>
</sect2>
<sect2>
<title>Japonais</title>
<para>MAEKAWA Masahide a traduit ce document en
Japonais. Sa traduction est disponible &agrave; l'adresse <ulink
url="http://www.rr.iij4u.or.jp/~bishop/FreeBSD/mw.html">http://www.rr.iij4u.or.jp/~bishop/FreeBSD/mw.html</ulink>.</para>
</sect2>
</sect1>
<sect1 id="contributors">
<title>Contributions</title>
<para>Les personnes suivantes ont contribu&eacute; d'une fa&ccedil;on ou d'une autre &agrave; la
r&eacute;daction de ce document. Soit directement en sugg&eacute;rant des modifications
ou des am&eacute;liorations ou en signalant des erreurs, soit par leurs messages
sur les listes de diffusion de FreeBSD, o&ugrave; j'ai puis&eacute; sans scrupule de
l'information. Mes remerciements &agrave; tous.</para>
<itemizedlist>
<listitem>
<para>Antonio Bemfica, <ulink url="mailto:bemfica@militzer.me.tuns.ca">bemfica@militzer.me.tuns.ca</ulink></para>
</listitem>
<listitem>
<para>Sue Blake, <ulink url="mailto:sue@welearn.com.au">sue@welearn.com.au</ulink></para>
</listitem>
<listitem>
<para>Brian Haskin, <ulink url="mailto:haskin@ptway.com">haskin@ptway.com</ulink></para>
</listitem>
<listitem>
<para>Kees Jan Koster, <ulink url="mailto:kjkoster@kjkoster.org">kjkoster@kjkoster.org</ulink></para>
</listitem>
<listitem>
<para>A Joseph Kosy, <ulink url="mailto:koshy@india.hp.com">koshy@india.hp.com</ulink></para>
</listitem>
<listitem>
<para>Greg Lehey, <ulink url="mailto:grog@lemis.com">grog@lemis.com</ulink></para>
</listitem>
<listitem>
<para>Wes Peters, <ulink
url="mailto:softweyr@xmission.com">softweyr@xmission.com</ulink></para>
</listitem>
<listitem>
<para>Joseph Stein, <ulink url="mailto:joes@wstein.com">joes@wstein.com</ulink></para>
</listitem>
<listitem>
<para>Studded, <ulink url="mailto:studded@dal.net">studded@dal.net</ulink></para>
</listitem>
<listitem>
<para>Axel Thimm <ulink url="mailto:Axel.Thimm@physik.fu-berlin.de">Axel.Thimm@physik.fu-berlin.de</ulink></para>
</listitem>
<listitem>
<para>Matthew Thyer <ulink url="mailto:Matthew.Thyer@dsto.defence.gov.au">Matthew.Thyer@dsto.defence.gov.au</ulink></para>
</listitem>
</itemizedlist>
</sect1>
</article>