<!--
     The FreeBSD Documentation Project
     The FreeBSD French Documentation Project

     $FreeBSD: doc/fr_FR.ISO8859-1/articles/make-world/article.sgml,v 1.4 2001/07/13 15:48:39 nik Exp $
     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:kjk1@ukc.ac.uk">kjk1@ukc.ac.uk</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>
