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

        $FreeBSD$
        Original revision: 1.11
--> 

<chapter id="linuxemu">
  <title>Emulation Linux</title>
  
  <para><emphasis>Contribution de Brian N. Handy et &a.rich;</emphasis></para>
  &trans.a.haby;
  
  <sect1>
    <title>Comment installer l'&eacute;mulateur Linux</title>
    
    <para>L'&eacute;mulation de Linux sous FreeBSD a atteint un point o&ugrave;
      il est possible d'ex&eacute;cuter une grande partie des binaires Linux
      et au format a.out et au format ELF. L'&eacute;mulation Linux de la
      branche 2.1-stable peut ex&eacute;cuter les versions Linux de Doom et
      Mathematica; la version de l'&eacute;mulateur sous &rel.current;-release
      a encore plus de possibilit&eacute;s et ex&eacute;cute en plus de ces 
      programmes, les versions Linux de Quake, Abuse, IDL, netrek et bien
      d'autres programmes.</para>
	
    <para>Il y a quelques particularit&eacute;s du syst&egrave;me d'exploitation
      Linux qui ne sont pas support&eacute;es sous FreeBSD. Les binaires Linux
      ne fonctionneront pas sous FreeBSD s'ils utilisent le syst&egrave;me de
      fichiers <filename>/proc</filename> de Linux (qui diff&egrave;re du
      syst&egrave;me de fichiers <filename>/proc</filename> optionnel de 
      FreeBSD) ou des appels i386 sp&eacute;cifiques, comme l'activation du
      mode virtuel 8086.</para>
	
    <para>Selon la version de FreeBSD que vous utilisez, la mise en oeuvre de
      l'&eacute;mulation Linux se fait de fa&ccedil;on l&eacute;g&egrave;rement
      diff&eacute;rente&nbsp;:</para>
	
    <sect2>
      <title>Installer l'&eacute;mulation Linux sous 2.1-stable</title>
      
      <para>Le noyau <filename>GENERIC</filename> de 2.1-stable n'est pas
        configur&eacute; pour &ecirc;tre compatible Linux, vous devez donc le
        reconfigurer pour cela. Il y a deux fa&ccedil;ons de faire&nbsp;:</para>

      <orderedlist>
        <listitem>
          <para>Lier statiquement l'&eacute;mulateur Linux au noyau
            lui-m&ecirc;me,</para>
	</listitem>
        <listitem>
          <para>Configurer le noyau pour qu'il charge dynamiquement le module
            Linux.</para>
	</listitem>
      </orderedlist>

      <para>Pour mettre en oeuvre l'&eacute;mulateur, ajoutez la ligne suivante
        &agrave; votre fichier de configuration du noyau (c.f. 
        <filename>/sys/i386/conf/LINT</filename>)&nbsp;:</para>

      <programlisting>
options COMPAT_LINUX
      </programlisting>

      <para>Si vous voulez utiliser Doom ou d'autres applications qui utilisent
        les m&eacute;moires partag&eacute;es, ajoutez aussi&nbsp;:</para>

      <programlisting>
options SYSVSHM
      </programlisting>

      <para>Les appels syst&egrave;me Linux ont besoin de la 
        compatibilit&eacute; 4.3BSD. V&eacute;rifiez que vous avez bien la
        ligne&nbsp;:</para>

      <programlisting>
options "COMPAT_43"
      </programlisting>
	  
      <para>Si vous pr&eacute;f&eacute;rez lier statiquement l'&eacute;mulateur
        au noyau plut&ocirc;t qu'utiliser le module du noyau &agrave;
        chargement dynamique&nbsp;-&nbsp;<foreignphrase>loadable kernel module 
        (LKM)</foreignphrase>, ajoutez aussi&nbsp;:</para>

      <programlisting>
options  LINUX
      </programlisting>

      <para>Configurez et installez ensuite le nouveau noyau comme d&eacute;crit
        au chapitre <link linkend="kernelconfig">Configurer le noyau de
        FreeBSD</link>.</para>
	  
      <para>Si vous avez choisi d'utiliser le LKM, vous devez aussi installer
        le module. Une incompatibilit&eacute; de version entre le noyau et le module
        &agrave; chargement dynamique peut planter le noyau. La fa&ccedil;on la
        plus s&ucirc;re de proc&eacute;der est donc de r&eacute;installer le
        LKM en m&ecirc;me temps que le noyau&nbsp;:</para>

      <screen>&prompt.root; <userinput>cd /usr/src/lkm/linux</userinput>
&prompt.root; <userinput>make all install</userinput></screen>
	    
      <para>Une fois que vous avez install&eacute; le noyau et le LKM, vous
        pouvez utiliser <command>linux</command> sous le compte 
        super-utilisateur <username>root</username> pour charger le 
        LKM&nbsp;:</para>
	    
      <screen>&prompt.root; <userinput>linux</userinput>
Linux emulator installed
Module loaded as ID 0</screen>
	    
      <para>Pour v&eacute;rifier que le LKM est charg&eacute;, utilisez
	<command>modstat</command>&nbsp;:</para>
	  
      <screen>&prompt.user; modstat
Type     Id Off Loadaddr Size Info     Rev
Module Name EXEC      0   3 f0baf000 0018 f0bb4000   1 linux_emulator</screen>
	    
      <para>Il y a deux fa&ccedil;ons de charger le LKM au d&eacute;marrage. 
        Sous FreeBSD 2.2.1-release et 2.1-stable, activez-le dans
	<filename>/etc/sysconfig</filename>&nbsp;:</para>

      <programlisting>
linux=YES
      </programlisting>

      <para>en rempla&ccedil;ant <literal>NO</literal> par 
        <literal>YES</literal>. Sous FreeBSD 2.1-release et ant&eacute;rieurs,
        cette ligne n'existe pas. Vous devez donc &eacute;diter
	<filename>/etc/rc.local</filename> et y ajouter la ligne&nbsp;:</para>
      
      <programlisting>
linux
      </programlisting>
    </sect2>
    
    <sect2>
      <title>Installer l'&eacute;mulation Linux sous 2.2.2-release et
        ult&eacute;rieurs</title>
      
      <para>Il n'y a plus besoin de pr&eacute;ciser <literal>options
	  LINUX</literal> ou <literal>options COMPAT_LINUX</literal>.
          L'&eacute;mulation Linux est r&eacute;alis&eacute;e par un module du
          noyau &agrave; chargement dynamique&nbsp;-&nbsp;LKM 
          (&ldquo;<foreignphrase>Loadable Kernel 
          Module</foreignphrase>&rdquo;)&nbsp;-&nbsp;et peut donc &ecirc;tre
          install&eacute;e &agrave; la vol&eacute;e sans avoir &agrave;
          red&eacute;marrer le syst&egrave;me. Vos fichiers de d&eacute;marrage
          devront n&eacute;anmoins comporter les instructions 
          suivantes&nbsp;:</para>
      
      <orderedlist>
	<listitem>
	  <para>Dans <filename>/etc/rc.conf</filename>, la ligne 
            suivante&nbsp;:</para>

	  <programlisting>
linux_enable=YES
          </programlisting>
	</listitem>
	      
	<listitem>
	  <para>Ce qui ensuite active les commandes ci-dessous dans
	    <filename>/etc/rc.i386</filename>&nbsp;:</para>
	  
	  <programlisting>
# Start the Linux binary emulation if requested.
if [ "X${linux_enable}" = X"YES" ]; then echo -n '
        linux';               linux &gt; /dev/null 2&gt;&amp;1
fi
          </programlisting>
	</listitem>
      </orderedlist>
      
      <para>Si vous voulez v&eacute;rifier que l'&eacute;mulation est active,
        utilisez <command>modstat</command>&nbsp;:</para>

      <screen>&prompt.user; modstat
Type     Id Off Loadaddr Size Info     Rev Module Name
EXEC      0   4 f09e6000 001c f09ec010   1 linux_mod</screen>
      
      <para>On a cependant signal&eacute; des cas o&ugrave; cela ne marchait pas
        avec certains syst&egrave;mes 2.2-release et ult&eacute;rieurs. Si pour
        une raison ou une autre vous ne pouvez pas charger le LKM Linux, liez
        alors statiquement l'&eacute;mulateur au noyau en ajoutant la 
        ligne&nbsp;:</para>

	<programlisting>
options  LINUX
        </programlisting>

        <para>&agrave; votre fichier de configuration du noyau. Configurez et 
        installez ensuite le nouveau noyau comme d&eacute;crit au chapitre
	<link linkend="kernelconfig">Configurer le noyau de 
        FreeBSD</link>.</para>
    </sect2>
    
    <sect2>
      <title>Installer les biblioth&egrave;ques Linux</title>
      
      <sect3>
	<title>Installation &agrave; l'aide du &ldquo;logiciel 
          port&eacute;&rdquo; <filename>linux_lib</filename></title>
	
	<para>La plupart des applications Linux utilisent des 
          biblioth&egrave;ques partag&eacute;es, vous n'avez donc pas tout ce
          qu'il vous faut tant que vous n'avez pas install&eacute; les
          biblioth&egrave;ques partag&eacute;es. Vous pouvez le faire &agrave;
          la main, mais il est beaucoup plus facile d'installer le logiciel
          port&eacute; <filename>linux_lib</filename>&nbsp;:</para>

	<screen>&prompt.root; <userinput>cd /usr/ports/emulators/linux_lib</userinput>
&prompt.root; <userinput>make all install</userinput></screen>
	      
	<para>et votre &eacute;mulation Linux devrait fonctionner. La 
          l&eacute;gende et les archives du courrier &eacute;lectronique 
	  <!-- smiley -->:-) veulent que l'&eacute;mulation Linux fonctionne
          mieux avec des binaires Linux li&eacute;s avec les 
          biblioth&egrave;ques ZMAGIC; Les biblioth&egrave;ques QMAGIC (telles
          celles utilis&eacute;es par la distribution Slackware V2.0) peuvent
          avoir tendance &agrave; donner des maux d'estomac au 
          &ldquo;Linuxlateur&rdquo;. Attendez-vous aussi &agrave; ce que
          certains programmes se plaignent de versions mineures incorrectes de
          biblioth&egrave;ques syst&egrave;me. Ce n'est cependant
          g&eacute;n&eacute;ralement pas un probl&egrave;me.</para>
      </sect3>
      
      <sect3>
	<title>Installer les biblioth&egrave;ques &agrave; la main</title>
	
	<para>Si vous n'avez pas install&eacute; la distribution pour les
          &ldquo;logiciels port&eacute;s&rdquo;, vous pouvez &agrave; la place
          installer les biblioth&egrave;ques &agrave; la main. Il vous faudra
          les biblioth&egrave;ques partag&eacute;es Linux dont a besoin le
          programme et l'&eacute;diteur de liens dynamiques. Vous devrez aussi
          cr&eacute;er un r&eacute;pertoire racine 
          &ldquo;masquant&rdquo;&nbsp;-&nbsp;<foreignphrase>shadow 
          root</foreignphrase>&nbsp;-&nbsp;<filename>/compat/linux</filename>
          pour les biblioth&egrave;ques Linux sur votre syst&egrave;me FreeBSD.
          Les biblioth&egrave;ques partag&eacute;es ouvertes par les programmes
          Linux ex&eacute;cut&eacute;s sous FreeBSD iront d'abord voir dans 
          cette arborescence. Ainsi, si un programme Linux charge par exemple,
	  <filename>/lib/libc.so</filename>, FreeBSD essayera d'abord d'ouvrir
	  <filename>/compat/linux/lib/libc.so</filename>, puis, si cette
          biblioth&egrave;que n'existe pas, <filename>/lib/libc.so</filename>.
          Les biblioth&egrave;ques partag&eacute;es doivent donc &ecirc;tre
          install&eacute;es sous l'arborescence 
          <filename>/compat/linux/lib</filename> plut&ocirc;t que sous les
          chemins d'acc&egrave;s mentionn&eacute;s par la commande Linux
	  <command>ld.so</command>.</para>
	    
	<para>Le fonctionnement de FreeBSD-2.2-release et ult&eacute;rieurs est
          l&eacute;g&egrave;rement diff&eacute;rent en ce qui concerne
	  <filename>/compat/linux</filename>&nbsp;: tous les fichiers, et pas
          seulement les biblioth&egrave;ques, sont recherch&eacute;s dans 
          l'arborescence &ldquo;<foreignphrase>shadow 
          root</foreignphrase>&rdquo; <filename>/compat/linux</filename>.</para>
	    
	<para>Habituellement, vous n'aurez &agrave; chercher &agrave; savoir
          de quelles biblioth&egrave;ques partag&eacute;es d&eacute;pendent les
          binaires Linux que les premi&egrave;res fois que vous installerez des
          ex&eacute;cutables Linux sur votre syst&egrave;me FreeBSD. 
          Apr&egrave;s quelques temps, vous disposerez d'un jeu suffisant de
          biblioth&egrave;ques partag&eacute;es Linux sur votre syst&egrave;me
          pour pouvoir ex&eacute;cuter les binaires Linux nouvellement
          import&eacute;s sans installation suppl&eacute;mentaire.</para>
      </sect3>
      
      <sect3>
	<title>Comment installer des biblioth&egrave;ques partag&eacute;es
          suppl&eacute;mentaires</title>
	
	<para>Comment faire si vous avez install&eacute; le logiciel 
          port&eacute; <filename>linux_lib</filename> et que votre application
          se plaint toujours qu'il lui manque des biblioth&egrave;ques 
          partag&eacute;es&nbsp;? Comment savoir de quelles biblioth&egrave;ques
          partag&eacute;es ont besoin les binaires Linux, et o&ugrave; se les
          procurer&nbsp;? Il y a habituellement deux possibilit&eacute;s (si
          vous suivez les instructions ci-dessous&nbsp;, vous devrez &ecirc;tre
          en session sous le compte super-utilisateur <username>root</username>
	  pour effectuer les &eacute;tapes n&eacute;cessaires &agrave;
          l'installation).</para>
	    
	<para>Si vous avez acc&egrave;s un syst&egrave;me Linux, 
          d&eacute;terminez de quelles biblioth&egrave;ques partag&eacute;es
          l'application a besoin et copiez-les sur votre syst&egrave;me
          FreeBSD. Supposons que vous veniez de t&eacute;l&eacute;charger le
          binaire Linux de Doom. Installez-le sur le syst&egrave;me Linux
          auquel vous avez acc&egrave;s, et v&eacute;rifiez de quelles
          biblioth&egrave;ques partag&eacute;es il a besoin avec la commande
	  <command>ldd linuxxdoom</command>&nbsp;:</para>
	      
	<screen>&prompt.user; <userinput>ldd linuxxdoom</userinput>
libXt.so.3 (DLL Jump 3.1) =&gt; /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) =&gt; /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</screen>
	
	<para>Vous devrez r&eacute;cup&eacute;rer tous les fichiers 
          mentionn&eacute;s dans la derni&egrave;re colonne et les installer
          sous <filename>/compat/linux</filename>, en utilisant les noms de
          la premi&egrave;re colonne comme liens symboliques qui pointent 
          dessus. Ce qui signifie que vous aurez &eacute;ventuellement les
          fichiers suivants sur votre syst&egrave;me FreeBSD&nbsp;:</para>
	      
	<screen>/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -&gt; libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -&gt; libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29 
/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.29</screen>
	      
	<note>
	  <para>Remarquez que si vous avez d&eacute;j&agrave; une 
            biblioth&egrave;que partag&eacute;e de m&ecirc;me num&eacute;ro de
            version majeure que celle indiqu&eacute;e par la premi&egrave;re
            colonne du r&eacute;sultat de <command>ldd</command>, il est inutile
            de copier le fichier d&eacute;crit par la derni&egrave;re colonne
            sur votre syst&egrave;me, celui que vous avez d&eacute;j&agrave;
            devrait suffire. Il est cependant recommand&eacute; de recopier
            malgr&eacute; tout la biblioth&egrave;que partag&eacute;e si c'est
            une version plus r&eacute;cente. Vous pouvez supprimer la version
            plus ancienne, du moment que le lien symbolique pointe sur la
            nouvelle. Par exemple, si vous avez les biblioth&egrave;ques
            suivantes sur votre syst&egrave;me&nbsp;:</para>

	  <screen>/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.27</screen>
		
	  <para>et que vous trouvez un nouveau binaire qui, d'apr&egrave;s le
            r&eacute;sultat de la commande <command>ldd</command> semble avoir
            besoin d'une version plus r&eacute;cente&nbsp;:</para>

	  <screen>libc.so.4 (DLL Jump 4.5pl26) -&gt; libc.so.4.6.29</screen>
		
	  <para>Si vous n'avez qu'une ou deux versions de retard sur le dernier
            indice, ne vous souciez pas d'installer la version 
	    <filename>/lib/libc.so.4.6.29</filename> plus r&eacute;cente,
            parce que le programme devrait fonctionner sans probl&egrave;me
            avec une version l&eacute;g&egrave;rement ant&eacute;rieure. Vous
            pouvez n&eacute;anmoins d&eacute;cider de remplacer
	    <filename>libc.so</filename>, ce qui devrait vous donner quelque
            chose comme&nbsp;:</para>

	  <screen>/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.29</screen>
	</note>
	
	<note>
	  <para>Le m&eacute;canisme de lien symbolique n'est n&eacute;cessaire
            que pour les binaires Linux. L'&eacute;diteur de liens dynamiques de
            FreeBSD se charge lui-m&ecirc;me de trouver les num&eacute;ros de
            versions majeures ad&eacute;quats et vous n'avez pas &agrave; vous
            en pr&eacute;occuper.</para>
	</note>
      </sect3>
      
      <sect3>
	<title>Configurer <filename>ld.so</filename>&mdash;pour FreeBSD
	  2.2-release et ult&eacute;rieurs</title>
	
	<para>Cette section ne s'applique qu'&agrave; FreeBSD 2.2-release et 
          ult&eacute;rieurs. Ceux qui utilisent 2.1-stable peuvent
          l'ignorer.</para>
	    
	<para>Pour finir, si vous utilisez FreeBSD 2.2-release, vous devez
          v&eacute;rifier que vous disposez de l'&eacute;diteur de liens
          dynamiques Linux et de ses fichiers de configuration sur votre
          syst&egrave;me. Vous devez copier ces fichiers du syst&egrave;me
          Linux &agrave; l'endroit appropri&eacute; sur votre syst&egrave;me
          FreeBSD (dans l'arborescence 
          <filename>/compat/linux</filename>)&nbsp;:</para>
	      
	<screen>/compat/linux/lib/ld.so
/compat/linux/etc/ld.so.config</screen>
	      
	<para>Si vous n'avez pas acc&egrave;s &agrave; un syst&egrave;me Linux,
          vous devrez r&eacute;cup&eacute;rer les fichiers 
          suppl&eacute;mentaires de diff&eacute;rents sites ftp. Des 
          informations sur o&ugrave; trouver les divers fichiers sont 
          donn&eacute;es plus bas. Supposons pour l'instant que vous savez 
          o&ugrave; r&eacute;cup&eacute;rer les fichiers.</para>
	
	<para>T&eacute;l&eacute;chargez les fichiers suivants (du m&ecirc;me
          site ftp pour &eacute;viter les incompatibilit&eacute;s de version)
          et installez-les sous <filename>/compat/linux</filename> (i.e.,
	  <filename>/foo/bar</filename> est install&eacute; sous
	  <filename>/compat/linux/foo/bar</filename>):</para>

	<screen>/sbin/ldconfig
/usr/bin/ldd
/lib/libc.so.x.y.z
/lib/ld.so</screen>
	      
	<para><command>ldconfig</command> et <command>ldd</command> n'ont pas
          obligatoirement besoin d'&ecirc;tre sous l'arborescence
	  <filename>/compat/linux</filename>; vous pouvez aussi les installer
          ailleurs sur votre syst&egrave;me. Veillez cependant &agrave; ce
          qu'il n'y ait pas de conflit avec leurs &eacute;quivalents FreeBSD.
          C'est une bonne id&eacute;e de les mettre dans
	  <filename>/usr/local/bin</filename> o&ugrave; sont
	  <command>ldconfig-linux</command> et
          <command>ldd-linux</command>.</para>
	    
	<para>Cr&eacute;ez le fichier
	  <filename>/compat/linux/etc/ld.so.conf</filename>, d&eacute;crivant
          les r&eacute;pertoires o&ugrave; l'&eacute;diteur de liens dynamiques
          Linux devra chercher les biblioth&egrave;ques partag&eacute;es. C'est
          un fichier texte ordinaire, avec un nom de r&eacute;pertoire par
          ligne.  <filename>/lib</filename> and <filename>/usr/lib</filename>
	  sont standard, vous pourriez ajouter les lignes 
          suivantes&nbsp;:</para>

	<programlisting>
/usr/X11/lib
/usr/local/lib
        </programlisting>
	    
	<para>Quand un binaire Linux ouvre une biblioth&egrave;que telle que
	  <filename>/lib/libc.so</filename>, l'&eacute;mulateur effectue en 
          interne la correspondance avec
	  <filename>/compat/linux/lib/libc.so</filename>. Toutes les
          biblioth&egrave;ques Linux doivent &ecirc;tre install&eacute;es sous
	  <filename>/compat/linux</filename> (e.g.,
	  <filename>/compat/linux/lib/libc.so</filename>,
	  <filename>/compat/linux/usr/X11/lib/libX11.so</filename>, etc.) 
          pour que l'&eacute;mulateur puisse les trouver.</para>
	    
	<para>Ceux qui utilisent FreeBSD 2.2-release doivent ex&eacute;cuter le
          programme <command>ldconfig</command> Linux.</para>
	      
	<screen>&prompt.root <userinput>cd /compat/linux/lib</userinput>
&prompt.root; <userinput>/compat/linux/sbin/ldconfig</userinput></screen>
	    
	<para><command>ldconfig</command> est li&eacute; statiquement, il n'a
          donc pas besoin des biblioth&egrave;ques partag&eacute;es pour
          s'ex&eacute;cuter. Il cr&eacute;e le fichier
	  <filename>/compat/linux/etc/ld.so.cache</filename> qui contient les
          noms de toutes les biblioth&egrave;ques partag&eacute;es, et doit
          &ecirc;tre r&eacute;ex&eacute;cut&eacute; pour recr&eacute;er ce
          fichier chaque fois que vous installez de nouvelles 
          biblioth&egrave;ques partag&eacute;es.</para>
	
	<para>Sous 2.1-stable, n'installez pas
	  <filename>/compat/linux/etc/ld.so.cache</filename> et 
          n'ex&eacute;cutez pas <command>ldconfig</command>; sous 2.1-stable, 
          les appels syst&egrave;me sont impl&eacute;ment&eacute;s 
          diff&eacute;remment et <command>ldconfig</command> n'est ni utile ni 
          utilis&eacute;.</para>
	    
	<para>Tout devrait &ecirc;tre maintenant en place pour les binaires
          Linux qui n'ont besoin que d'une biblioth&egrave;que 
          <filename>libc</filename> partag&eacute;e. Vous pouvez le tester en
          ex&eacute;cutant la commande <command>ldd</command> Linux sur
          elle-m&ecirc;me. Supposons que vous l'ayez install&eacute; sous le nom
	  <command>ldd-linux</command>, le r&eacute;sultat devrait ressembler
          &agrave; quelque chose comme&nbsp;:</para>

	<screen>&prompt.root; <userinput>ldd-linux `which ldd-linux`</userinput>
libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</screen>
	      
	<para>Une fois que c'est fait, vous &ecirc;tes pr&ecirc;t &agrave; 
          installer de nouveaux binaires Linux. Toutes les fois que vous 
          installez un nouveau programme Linux, vous devriez v&eacute;rifier 
          s'il a besoin de nouvelles biblioth&egrave;ques partag&eacute;es, et
          si tel est le cas, les installer dans l'arborescence
	  <filename>/compat/linux</filename>. Pour cela, vous ex&eacute;cutez la
          version Linux de <command>ldd</command> sur le nouveau programme et
          consultez le r&eacute;sultat. <command>ldd</command> (reportez-vous
          aussi aux pages de manuel de &man.ldd.1;) imprimera la liste des
          biblioth&egrave;ques partag&eacute;es dont d&eacute;pend le programme,
          sous la forme <literal><replaceable>nom principal</replaceable>
	  (<replaceable>r&eacute;f&eacute;rence de version</replaceable>) =&gt;
          <replaceable>nom complet</replaceable></literal>.</para>
	    
	<para>S'il imprime <literal>not found</literal> au lieu du
	  <replaceable>nom complet</replaceable>, cela signifie qu'il vous faut
          une nouvelle biblioth&egrave;que. La biblioth&egrave;que dont vous
          avez besoin est celle indiqu&eacute;e par son
          <literal><replaceable>nom principal</replaceable></literal> sous forme
	  <literal>lib<replaceable>XXXX</replaceable>.so.<replaceable>N</replaceable></literal>.
	  Il faudra que vous trouviez
	  <filename>lib<replaceable>XXXX</replaceable>.so.N.mm</filename> sur un
	  site ftp Linux et que vous l'installiez sur votre syst&egrave;me.
	  <replaceable>XXXX</replaceable> (nom) et
	  <replaceable>N</replaceable> (num&eacute;ro de version majeure)
          doivent correspondre; le(s) num&eacute;ro(s) de version(s) mineure(s)
          sont moins importants, bien qu'il soit conseill&eacute; de prendre la
          version la plus r&eacute;cente.</para>
      </sect3>
    </sect2>
    
    <sect2>
      <title>Installer des binaires Linux ELF</title>
      
      <para>Il y a parfois besoin d'une &eacute;tape suppl&eacute;mentaire pour
        les binaires ELF&nbsp;: &ldquo;le marquage&rdquo;. Si vous essayez
        d'ex&eacute;cuter un binaire ELF non marqu&eacute; vous aurez un
        message d'erreur ressemblant &agrave; ce qui suit&nbsp;:</para>

      <screen>&prompt.user; <userinput>./mon-binaire-elf-linux</userinput>
ELF binary type not known
Abort</screen>

      <para>Pour que le noyau de FreeBSD puisse distinguer entre un binaire ELF
        FreeBSD et un binaire Linux, vous devez employer l'utilitaire
	&man.brandelf.1;.</para>

      <screen>&prompt.user; <userinput>brandelf -t Linux mon-binaire-elf-linux</userinput></screen>
      
      <para>Les outils GNU incorporent maintenant automatiquement les marques 
        n&eacute;cessaires dans les binaires ELF, vous aurez donc de moins en
        moins besoin de passer par cette &eacute;tape &agrave; l'avenir.</para>
    </sect2>
    
    <sect2>
      <title>Configurer le solveur de noms de domaines</title>
      
      <para>Si le DNS ne fonctionne pas, ou si vous avez les 
        messages&nbsp;:</para>
	
	<screen>resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keyword</screen>
	
      <para>vous devez renseigner un fichier
	<filename>/compat/linux/etc/host.conf</filename> contenant&nbsp;:</para>

	<programlisting>
order hosts, bind
multi on</programlisting>
	  
      <para>o&ugrave; l'ordre ci-dessus sp&eacute;cifie qu'il faut d'abord 
        regarder dans le fichier <filename>/etc/hosts</filename> puis 
        interroger le DNS.  Si le fichier 
        <filename>/compat/linux/etc/host.conf</filename> n'est pas
        install&eacute;, les applications Linux trouvent le fichier
        <filename>/etc/host.conf</filename> de FreeBSD et se plaignent de sa
        syntaxe FreeBSD incompatible. Supprimez <literal>bind</literal>, si 
        vous n'avez pas configur&eacute; de serveur de noms avec le fichier
   	<filename>/etc/resolv.conf</filename>.</para>
      
      <para>Enfin, ceux qui utilisent 2.1-stable doivent d&eacute;finir une
        variable d'environnement <envar>RESOLV_HOST_CONF</envar> pour que les
        applications sachent comment chercher dans les tables de noms de
        machines. Si vous &ecirc;tes sous FreeBSD 2.2-release ou 
        ult&eacute;rieurs, vous pouvez vous en passer. Avec
        l'interpr&eacute;teur de commandes <filename>/bin/csh</filename>,
        utilisez&nbsp;:</para>
      
      <screen>&prompt.user; <userinput>setenv RESOLV_HOST_CONF /compat/linux/etc/host.conf</userinput></screen>
	    
      <para>Avec <filename>/bin/sh</filename>, utilisez&nbsp;:</para>
      
      <screen>&prompt.user; <userinput>RESOLV_HOST_CONF=/compat/linux/etc/host.conf; export RESOLV_HOST_CONF</userinput></screen>
    </sect2>
    
    <sect2>
      <title>Trouver les fichiers n&eacute;cessaires</title>
      
      <note>
	<para>Les informations qui suivent sont valables &agrave; la date de
          r&eacute;daction de ce document, mais certains d&eacute;tails, tels
          que les noms des sites ftp, des r&eacute;pertoires ou des
          distributions peuvent avoir chang&eacute; au moment o&ugrave; vous le
          lirez.</para>
      </note>
      
      <para>Linux est distribu&eacute; par plusieurs groupes donc chacun
        constitue l'ensemble de programmes qu'il distribue. Chaque distribution
        a son propre nom, &ldquo;Slackware&rdquo; ou &ldquo;Yggdrasil&rdquo;, 
        par exemple. Ces distributions sont disponibles sur nombre de sites
        ftp. Les fichiers sont parfois individualis&eacute;s, et vous pouvez
        r&eacute;cup&eacute;rer uniquement les fichiers dont vous avez besoin,
        mais ils sont g&eacute;n&eacute;ralement archiv&eacute;s par
        distributions, compact&eacute;es et compress&eacute;es avec
        <citerefentry><refentrytitle>tar</refentrytitle>
        <manvolnum>1</manvolnum></citerefentry> et
        <citerefentry><refentrytitle>gzip</refentrytitle>
        <manvolnum>1</manvolnum></citerefentry>. Les sites ftp principaux
	pour les distributions sont&nbsp;:</para>
      
      <orderedlist>
	<listitem>
	  <para>sunsite.unc.edu:/pub/Linux/distributions</para>
	</listitem>
	
	<listitem>
	  <para>tsx-11.mit.edu:/pub/linux/distributions</para>
	</listitem>
      </orderedlist>
      
      <para>Quelques sites miroirs europ&eacute;ens&nbsp;:</para>
      
      <orderedlist>
	<listitem>
	  <para>ftp.luth.se:/pub/linux/distributions</para>
	</listitem>
	
	<listitem>
	  <para>ftp.demon.co.uk:/pub/unix/linux</para>
	</listitem>
	
	<listitem>
	  <para>src.doc.ic.ac.uk:/packages/linux/distributions</para>
	</listitem>
      </orderedlist>
      
      <para>Pour simplifier, nous nous concentrerons sur la Slackware. Cette
        distribution est compos&eacute;e d'un certain nombre de 
        sous-r&eacute;pertoires, contenant des paquetages s&eacute;par&eacute;s.
        Ils sont normalement contr&ocirc;l&eacute;s par un programme
        d'installation, mais vous pouvez aussi les r&eacute;cup&eacute;rer
        &agrave; la main. Vous devrez d'abord aller voir dans le
        sous-r&eacute;pertoire <filename>contents</filename> de la
        distribution. Vous y trouverez de nombreux petits fichiers texte
        d&eacute;crivant le contenu de chacun des paquetages. La fa&ccedil;on
        la plus rapide de retrouver quelque chose est de r&eacute;cup&eacute;rer
        tous les fichiers de ce sous-r&eacute;pertoire et d'y rechercher avec
        <citerefentry><refentrytitle>grep</refentrytitle>
        <manvolnum>1</manvolnum></citerefentry> le fichier dont vous avez
        besoin. Voici un exemple d'une liste de fichiers dont vous pourriez
        avoir besoin et o&ugrave; vous les trouveriez en cherchant dans les
        fichiers de contenu&nbsp;:</para>

      <informaltable frame="none">
	<tgroup cols="2">
	  <thead>
	    <row>
	      <entry>Biblioth&egrave;que</entry>
	      <entry>Paquetage</entry>
	    </row>
	  </thead>
	  
	  <tbody>
	    <row>
	      <entry><filename>ld.so</filename></entry>
	      <entry>ldso</entry>
	    </row>

	    <row>
	      <entry><filename>ldconfig</filename></entry>
	      <entry>ldso</entry>
	    </row>

	    <row>
	      <entry><filename>ldd</filename></entry>
	      <entry>ldso</entry>
	    </row>

	    <row>
	      <entry><filename>libc.so.4</filename></entry>
	      <entry>shlibs</entry>
	    </row>

	    <row>
	      <entry><filename>libX11.so.6.0</filename></entry>
	      <entry>xf_lib</entry>
	    </row>

	    <row>
	      <entry><filename>libXt.so.6.0</filename></entry>
	      <entry>xf_lib</entry>
	    </row>

	    <row>
	      <entry><filename>libX11.so.3</filename></entry>
	      <entry>oldlibs</entry>
	    </row>

	    <row>
	      <entry><filename>libXt.so.3</filename></entry>
	      <entry>oldlibs</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>
      
      <para>Dans ce cas donc, vous auriez besoin des paquetages
        <filename>ldso</filename>, <filename>shlibs</filename>, 
        <filename>xf_lib</filename> et <filename>oldlibs</filename>. Dans
        chacun des fichiers de contenu de ces paquetages, recherchez la ligne
	<literal>PACKAGE LOCATION</literal>, qui vous dira sur quel
	&ldquo;disque&rdquo; le paquetage se trouve; dans notre cas, cela nous
        dira dans quel sous-r&eacute;pertoire il faut regarder. Pour notre
        exemple, nous trouverions&nbsp;:</para>

      <informaltable frame="none">
	<tgroup cols="2">
	  <thead
	    <row>
	      <entry>Paquetage</entry>
	      <entry>Localisation</entry>
	    </row>
	  </thead>
	  
	  <tbody>
	    <row>
	      <entry>ldso</entry>
	      <entry>diska2</entry>
	    </row>

	    <row>
	      <entry>shlibs</entry>
	      <entry>diska2</entry>
	    </row>

	    <row>
	      <entry>oldlibs</entry>
	      <entry>diskx6</entry>
	    </row>

	    <row>
	      <entry>xf_lib</entry>
	      <entry>diskx9</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>
      
      <para>Les localisations appel&eacute;es
	&ldquo;disk<replaceable>XX</replaceable>&rdquo; se rapportent aux
        sous-r&eacute;pertoires
	<filename>slakware/<replaceable>XX</replaceable></filename>
	de la distribution, d'autres peuvent se trouver dans le 
        sous-r&eacute;pertoire <filename>contrib</filename>. Dans notre cas,
        nous pouvons maintenant t&eacute;l&eacute;charger les paquetages dont
        nous avons besoin en r&eacute;cup&eacute;rant les fichiers suivants
	(&agrave; partir du r&eacute;pertoire racine de l'arborescence de la
        distribution Slackware)&nbsp;:</para>
      
      <itemizedlist>
	<listitem>
	  <para><filename>slakware/a2/ldso.tgz</filename></para>
	</listitem>
	
	<listitem>
	  <para><filename>slakware/a2/shlibs.tgz</filename></para>
	</listitem>
	
	<listitem>
	  <para><filename>slakware/x6/oldlibs/tgz</filename></para>
	</listitem>
	
	<listitem>
	  <para><filename>slakware/x9/xf_lib.tgz</filename></para>
	</listitem>
      </itemizedlist>
      
      <para>Extrayez les fichiers de ces archives compress&eacute;es dans le
        r&eacute;pertoire <filename>/compat/linux</filename> (en ommettant ou en
        supprimant ensuite les fichiers dont vous n'avez pas besoin) et vous 
        aurez tout ce qu'il vous faut.</para>
	  
      <para><emphasis>Consultez aussi&nbsp;:</emphasis>
	<filename>ftp.freebsd.org:pub/FreeBSD/2.0.5-RELEASE/xperimnt/linux-emu/README</filename> 
        et <filename>/usr/src/sys/i386/ibcs2/README.iBCS2</filename></para>
    </sect2>
  </sect1>
  
  <sect1 id="mathematica">
    <title>Comment installer Mathematica sous FreeBSD</title>
    
    <para><emphasis>Contribution de &a.rich; et Chuck Robey</emphasis></para>
    
    <para>Ce document explique comment installer la distribution binaire Linux
      de Mathematica 2.2 sous FreeBSD 2.1.</para>
    
    <para>Mathematica supporte en natif Linux mais pas FreeBSD. Une fois donc 
      que vous avez configur&eacute; votre syst&egrave;me pour qu'il soit 
      compatible Linux, vous avez &agrave; peu pr&egrave;s tout ce qu'il vous 
      faut pour utiliser Mathematica.</para>
    
    <para>Pour ceux qui ont d&eacute;j&agrave; la version 
      &ldquo;&eacute;tudiant&rdquo de Mathematica pour DOS, la mise &agrave;
      jour pour Linux co&ucirc;tait, quand ce document a &eacute;t&eacute 
      r&eacute;dig&eacute;, en Mars 1996, &#36;45.00. Vous pouvez la commander
      directement &agrave; Wolfram au (217) 398-6500 et payer par carte de
      cr&eacute;dit.</para>
	
    <sect2>
      <title>D&eacute;compacter la distribution de Mathematica</title>
	  
      <para>Les binaires sont actuellement distribu&eacute;s par Wolfram sur
        CD-ROM. Il y a une douzaine de fichiers d'archive sur le CD-ROM, chacun
        contenant une distribution binaire pour une des architectures
        support&eacute;es. Celle pour Linux s'appelle 
        <filename>LINUX.TAR</filename>.  Vous pouvez, par exemple, la
        d&eacute;compacter dans 
        <filename>/usr/local/Mathematica</filename>&nbsp;:</para>
      
      <screen>&prompt.root; <userinput>cd /usr/local</userinput>
&prompt.root; <userinput>mkdir Mathematica</userinput>
&prompt.root; <userinput>cd Mathematica</userinput>
&prompt.root; <userinput>tar -xvf /cdrom/LINUX.TAR</userinput></screen>
    </sect2>
    
    <sect2>
      <title>Obtenir votre mot de passe pour Mathematica</title>
      
      <para>Avant de pouvoir utiliser Mathematica, vous devrez obtenir de
        Wolfram un mot de passe qui corresponde &agrave 
        l'&ldquo;IDentifiant&rdquo; de votre machine&nbsp;:</para>
	  
      <para>Une fois que vous avez install&eacute; les biblioth&egrave;ques pour
        la compatibilit&eacute; Linux et d&eacute;compact&eacute; Mathematica,
        vous pouvez conna&icirc;tre l'&ldquo;IDentifiant&rdquo; de votre machine
	en ex&eacute;cutant le programme <command>mathinfo</command> dans le
        r&eacute;pertoire d'installation&nbsp;:</para>

      <screen>&prompt.root; <userinput>cd /usr/local/Mathematica/Install</userinput>
&prompt.root; <userinput>mathinfo</userinput>
LINUX: 'ioctl' fd=5, typ=0x89(), num=0x27 not implemented
richc.isdn.bcm.tmc.edu   9845-03452-90255</screen>
      
      <para>Ici, par exemple, l'&ldquo;IDentifiant&rdquo; de la machine
	<hostid>richc</hostid> est <literal>9845-03452-90255</literal>. Ne vous
        souciez pas du message &agrave; propos de l'<literal>ioctl</literal>
        qui n'est pas impl&eacute;ment&eacute;. Cela ne vous emp&egrave;chera
        pas d'utiliser Mathematica, bien que vous aurez ce message toutes les
        fois que vous ex&eacute;cuterez Mathematica.</para>
	  
      <para>Quand vous vous enregistrerez aupr&egrave;s de Wolfram, par courrier
        &eacute;lectronique, t&eacute;l&eacute;phone, ou fax, vous leur
        communiquerez l'&ldquo;IDentifiant&rdquo; de la machine et ils vous
        donneront en r&eacute;ponse le mot de passe correspondant qui consiste
        en groupes de chiffres. Vous devrez ajouter les deux, ainsi que le nom
        de la machine et le num&eacute;ro de licence, dans votre fichier
        <filename>mathpass</filename>.</para>
	  
      <para>Vous pouvez le faire en utilisant&nbsp;:</para>
      
      <screen>&prompt.root; <userinput>cd /usr/local/Mathematica/Install</userinput>
&prompt.root; <userinput>math.install</userinput></screen>
	    
      <para>Il vous demandera votre num&eacute;ro de licence et le mot de passe
        que Wolfram vous a fourni. Si vous vous trompez ou si pour une raison ou
        une autre <command>math.install</command> &eacute;choue, ce n'est pas un
        probl&egrave;me; vous pouvez simplement &eacute;diter le fichier
	<filename>mathpass</filename>, qui se trouve dans le m&ecirc;me 
        r&eacute;pertoire, pour corriger &agrave; la main ces 
        informations.</para>
	  
      <para>Apr&egrave;s le mot de passe, <command>math.install</command> vous
        demandera si vous voulez utiliser la configuration d'installation par
        d&eacute;faut ou si vous pr&eacute;f&eacute;rez d&eacute;finir la 
        v&ocirc;tre. Si vous &ecirc;tes comme nous et n'avez pas confiance dans
        les programmes d'installation, vous voudrez certainement indiquer
        vous-m&ecirc;me les r&eacute;pertoires d'installation. Attention. Bien
        que <command>math.install</command> vous demande les noms des
        r&eacute;pertoires, il ne les cr&eacute;e pas &agrave; votre place, vous
        devriez donc ouvrir une deuxi&egrave;me fen&ecirc;tre pour le faire
        avant de donner leurs noms au programme d'installation. Ou, si vous
        &eacute;chouez, vous pouvez cr&eacute;er les r&eacute;pertoires puis
        relancer le programme <command>math.install</command>. Nous avons choisi
        de cr&eacute;er au pr&eacute;alable et d'indiquer &agrave;
        <command>math.install</command> les r&eacute;pertoires 
        suivants&nbsp;:</para>

      <informaltable frame="none">
	<tgroup cols="2">
	  <tbody>
	    <row>
	      <entry><filename>/usr/local/Mathematica/bin</filename></entry>
	      <entry>pour les binaires</entry>
	    </row>
	    
	    <row>
	      <entry><filename>/usr/local/Mathematica/man/man1</filename></entry>
	      <entry>pour les pages de manuel</entry>
	    </row>
	    
	    <row>
	      <entry><filename>/usr/local/Mathematica/lib/X11</filename></entry>
	      <entry>pour le fichier <filename>XKeysymb</filename></entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>
      
      <para>Vous pouvez aussi lui dire d'utiliser 
        <filename>/tmp/math.record</filename> comme fichier d'enregistrement
        syst&egrave;me, dans lequel il conserve les traces des sessions.
	<command>math.install</command> continuera ensuite en 
        d&eacute;compactant la distribution et en mettant les fichiers l&agrave;
        o&ugrave; il faut.</para>
	  
      <para>La fonction calepin de Mathematica est fournie s&eacute;parement,
        de m&ecirc;me que l'interface X, et vous devez les installer &agrave;
        part. Pour que l'interface X soit correctement install&eacute;e, allez
        dans le r&eacute;pertoire 
        <filename>/usr/local/Mathematica/FrontEnd</filename> et ex&eacute;cutez
        la proc&eacute;dure <command>xfe.install</command>. Vous devrez lui
        dire o&ugrave; mettre les fichiers, mais vous n'aurez pas de 
        r&eacute;pertoire &agrave; cr&eacute;er, parce qu'elle utilise les 
        m&ecirc;mes que ceux qui ont &eacute;t&eacute; cr&eacute;&eacute;s
        pour <command>math.install</command>. Finalement, il doit y avoir
        une nouvelle proc&eacute;dure appel&eacute;e
        <filename>mathematica</filename> dans le r&eacute;pertoire
	<filename>/usr/local/Mathematica/bin</filename>.</para>

      <para>Pour finir, vous devrez modifier chacune des proc&eacute;dures que
        Mathematica a install&eacute; pour y ajouter la ligne 
        suivante&nbsp;:</para>

      <screen>&prompt.user; <userinput>XKEYSYMDB=/usr/local/Mathematica/lib/X11/XKeysymDB; export XKEYSYMDB</userinput></screen>
	    
      <para>Cela pour dire &agrave; Mathematica o&ugrave; trouver sa propre 
        version du fichier de correspondance clavier 
        <filename>XKeysymDB</filename>, sinon vous aurez des messages d'erreur
        dus &agrave; des correspondances de touches manquantes.</para>
      
      <para>Sous 2.1-stable, vous devrez aussi ajouter la ligne 
        suivante&nbsp;:</para>
      
      <screen>&prompt.user; <userinput>RESOLV_HOST_CONF=/compat/linux/etc/host.conf; export RESOLV_HOST_CONF</userinput></screen>
	    
      <para>pour dire &agrave; Mathematica d'utiliser la version Linux de 
        <filename>host.conf</filename>. Ce fichier a une syntaxe 
        diff&eacute;rente de celui de FreeBSD, vous aurez donc un message
        d'erreur &agrave; propos de <filename>/etc/host.conf</filename> si vous
        oubliez cette modification.</para>
	  
      <para>Vous voudrez peut-&ecirc;tre aussi modifier votre fichier
	<filename>/etc/manpath.config</filename> pour lire le nouveau
        r&eacute;pertoire pour les pages de manuel, et aurez peut-&ecirc;tre
        besoin d'&eacute;diter votre fichier <filename>~/.cshrc</filename>
	pour ajouter <filename>/usr/local/Mathematica/bin</filename> &agrave;
	vos chemins d'acc&egrave;s par d&eacute;faut.</para>
	  
      <para>C'est &agrave; peu pr&egrave;s tout. Vous devriez maintenant pouvoir
        taper <command>mathematica</command> et obtenir un calepin Mathematica
        vraiment &ldquo;nickel&rdquo;. Mathematica a inclu des interfaces
        utilisateurs Motif, mais elles sont li&eacute;es statiquement, vous
        n'avez donc pas besoin des biblioth&egrave;ques Motif. Bonne chance
        pour votre propre installation&nbsp;!</para>
    </sect2>
    
    <sect2>
      <title>Bogues</title>
      
      <para>Il est connu que l'interface calepin se bloque parfois &agrave; la
        lecture de certains fichiers calepin avec des messages d'erreur
        du type&nbsp;:</para>
	  
      <screen><errorname>File .../Untitled-1.mb appears to be broken for OMPR.257.0</errorname></screen>
	    
      <para>Nous n'en avons pas trouv&eacute; la raison, mais cela ne touche que
        l'interface calepin X, et non le moteur Mathematica lui-m&ecirc;me.
        L'interface en ligne de commande invoqu&eacute;e par 
        <command>math</command> n'est pas affect&eacute;e par ce bogue.</para>
    </sect2>
    
    <sect2>
      <title>Remerciements</title>
      
      <para>Remerciements bien m&eacute;rit&eacute;s &agrave; &a.sos; et
        &a.peter; qui ont fait de l'&eacute;mulation Linux ce qu'elle est
        aujourd'hui, et &agrave; Michael Smith qui les a pouss&eacute; au
        point qu'elle ex&eacute;cute les binaires Linux mieux que Linux
	lui-m&ecirc;me&nbsp;! <!-- smiley -->:-)</para>
    </sect2>
  </sect1>
</chapter>

<!-- 
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../handbook.sgml" "part" "chapter")
     End:
-->

