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

     $FreeBSD: doc/fr_FR.ISO8859-1/articles/diskless-x/article.sgml,v 1.4 2001/07/13 15:48:38 nik Exp $
     Original revision: n.nn
-->   

<!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>Mise en oeuvre d'un terminal X sans disque dur</title>
    
    <authorgroup>
      <author>
	<firstname> Jerry</firstname>
	<surname>Kendall</surname>
	<affiliation>
	  <address>
	    <email>jerry@kcis.com</email>
	  </address>
	</affiliation>
      </author></authorgroup>
    
    <pubdate>28 D&eacute;cembre 1996</pubdate>
    
    <copyright>
      <year>1996</year>
      <holder>Jerry Kendall</holder>
    </copyright>
    
    <abstract>
      <para>Avec l'aide de quelques amis de la &a.hackers;, j'ai pu mettre en service un terminal X sans disque dur. Pour cela, j'ai d'abord d&ucirc; installer une station sans disque qui dispose d'un minimum d'utilitaires mont&eacute;s par NFS. J'ai r&eacute;p&eacute;t&eacute; l'op&eacute;ration pour disposer de deux syst&egrave;mes sans disque. Pour les deux, j'ai proc&eacute;d&eacute; de la m&ecirc;me fa&ccedil;on. Le premier est <hostid role="fqdn">altair.kcis.com</hostid>. C'est un terminal X sur mon vieux 386DX-40. Il a bien un disque dur de 340 Mo, mais je ne voulais pas y toucher. Il d&eacute;marre donc &agrave; partir de <hostid role="fqdn">antares.kcis.com</hostid> sur le r&eacute;seau Ethernet. Le second est un 486DX2-66. J'ai install&eacute; un syst&egrave;me FreeBSD (complet) qui n'utilise pas de disque local. Le serveur de d&eacute;marrage est un Sun 670MP sous SunOs 4.1.3. Les deux syst&egrave;mes FreeBSD sont configur&eacute;s de la m&ecirc;me fa&ccedil;on.</para>

      <para>Je suis s&ucirc;r qu'il y a des choses &agrave; ajouter &agrave; ce document. Faites-moi s'il vous pla&icirc;t part de vos commentaires.</para>

      &abstract.license;
      &abstract.disclaimer;
      &trans.a.haby;
    </abstract>
  </articleinfo>
  
  <sect1>
    <title>Pr&eacute;paration de la disquette de d&eacute;marrage (sur le syst&egrave;me sans disque)</title>
    
    <para>Les gestionnaires de d&eacute;marrage via le r&eacute;seau ne sont pas compatibles avec les TSRs et autres qu'utilise MS-DOS, il est pr&eacute;f&eacute;rable de pr&eacute;parer une disquette de d&eacute;marrage, ou, si vous le pouvez, de mettre en place un menu MS-DOS qui (par l'interm&eacute;diaire des fichiers <filename>config.sys</filename>/<filename>autoexec.bat</filename>) vous demande au d&eacute;marrage quelle configuration charger. C'est cette derni&egrave;re m&eacute;thode que j'ai utilis&eacute;e et elle fonctionne &agrave; merveille. Voici mon menu MS-DOS&nbsp;:</para>
    
    <example>
      <title><filename>config.sys</filename></title>

      <programlisting>[menu]
menuitem=normal, normal
menuitem=unix, unix
[normal]
....
config.sys habituel
...
[unix]</programlisting>
    </example>

    <example>
      <title><filename>autoexec.bat</filename></title>

      <programlisting>@ECHO OFF
goto %config%

:normal
...
autoexec.bat habituel
...
goto end

:unix
cd \netboot
nb8390.com

:end</programlisting>
    </example>
  </sect1>
  
  <sect1>
    <title>G&eacute;n&eacute;rer les programmes de d&eacute;marrage en r&eacute;seau (sur le serveur)</title>
    
    <para>Compilez les programmes de &ldquo;d&eacute;marrage en r&eacute;seau&rdquo; que vous trouverez dans <filename>/usr/src/sys/i386/boot/netboot</filename>. Lisez les commentaires au d&eacute;but du <filename>Makefile</filename>. Faites les modifications n&eacute;cessaires. Faites une sauvegarde de l'original, pour vous pr&eacute;munir en cas de probl&egrave;mes. Apr&egrave;s compilation, vous devriez obtenir deux ex&eacute;cutables, <filename>nb8390.com</filename> et <filename>nb3c509.com</filename>. C'est l'un de ces programmes que vous devrez ex&eacute;cuter sur la machine sans disque. Il chargera le noyau depuis le serveur de d&eacute;marrage. Recopiez alors ces deux programmes sur la disquette de d&eacute;marrage que vous avez cr&eacute;&eacute;e auparavant.</para>
  </sect1>
  
  <sect1>
    <title>D&eacute;terminer le programme &agrave; utiliser (sur la machine sans disque)</title>
    
    <para>Si vous savez quel composant utilise votre carte Ethernet, c'est facile. Si vous avez un circuit NS8390 ou &eacute;quivalent, servez vous de <filename>nb8390.com</filename>. Si vous avez un circuit de type 3Com 509, utilisez le programme de d&eacute;marrage <filename>nb3C509.com</filename>. Si vous ne savez pas, essayez l'un et si vous avez le message &ldquo;<errorname>No adapter found</errorname>&rdquo;, essayez avec l'autre. Si rien ne marche, vous &ecirc;tes livr&eacute; &agrave; vous-m&ecirc;me.</para>
  </sect1>

  <sect1>
    <title>D&eacute;marrer en r&eacute;seau</title>
    
    <para>D&eacute;marrez la station sans disque sans fichiers <filename>config.sys/autoexec.bat</filename>. Essayez d'ex&eacute;cuter le programme de d&eacute;marrage qui correspond &agrave; votre carte Ethernet.</para>

    <para>Ma carte Ethernet utilise le mode 16bit WD8013 16bit, j'ex&eacute;cute donc
      <filename>nb8390.com</filename>&nbsp;:</para>
    
    <screen><prompt>C:&gt;</prompt> <userinput>cd \netboot</userinput>
<prompt>C:&gt</prompt> <userinput>nb8390</userinput>

<prompt>Boot from Network (Y/N) ?</prompt>  <userinput>Y</userinput>

BOOTP/TFTP/NFS bootstrap loader     ESC for menu

Searching for adapter..
WD8013EBT base 0x0300, memory 0x000D8000, addr 00:40:01:43:26:66

Searching for server...</screen>

    <para>La machine sans disque essaye maintenant de trouver un serveur de d&eacute;marrage. Notez la valeur de <literal>addr</literal> sur l'avant derni&egrave;re ligne, vous en aurez besoin ensuire. Red&eacute;marrez la machine sans disque et modifiez vos
fichiers <filename>config.sys</filename> et <filename>autoexec.bat</filename> pour qu'ils fassent automatiquement ce que vous venez de faire &agrave; la main. Peut-&ecirc;tre avec un menu. Si vous aviez d&ucirc; utiliser <command>nb3c509.com</command> au lieu de <command>nb8390.com</command>, les messages seraient identiques. Si vous obtenez le message &ldquo;<errorname>No adapter found</errorname>&rdquo; apr&egrave;s &ldquo;<literal>Searching for adapter...</literal>&rdquo;, v&eacute;rifiez que vous avez d&eacute;fini les bonnes valeurs dans le <filename>Makefile</filename> au moment de compiler.</para>
  </sect1>
  
  <sect1>
    <title>Permettre aux syst&egrave;mes de d&eacute;marrer via le r&eacute;seau (sur le serveur)</title>
    
    <para>V&eacute;rifiez qu'il y a bien des entr&eacute;es pour <citerefentry><refentrytitle>tftp</refentrytitle></citerefentry> et <citerefentry><refentrytitle>bootps</refentrytitle></citerefentry> dans le fichier <filename>/etc/inetd.conf</filename>. Voici le mien&nbsp;:</para>
    
    <programlisting>tftp	dgram	udp	wait	nobody	/usr/libexec/tftpd	tftpd
#
# Ajout de qui que vous soyez
bootps  dgram  udp  wait  root  /usr/libexec/bootpd bootpd /etc/bootptab</programlisting>
    
    <para>Si vous devez modifier le fichier <filename>/etc/inetd.conf</filename>, envoyez ensuite un signal <literal>HUP</literal> &agrave; <citerefentry><refentrytitle>inetd</refentrytitle></citerefentry>. Pour cela, utilisez la commande <command>ps -ax | grep inetd | grep -v grep</command> pour conna&icirc;tre le num&eacute;ro de processus d'<citerefentry><refentrytitle>inetd</refentrytitle></citerefentry>. Une fois que vous l'avez, envoyez lui le signal HUP. Cela se fait avec <command>kill -HUP &lt;pid&gt;</command>. Cela obligera <citerefentry><refentrytitle>inetd</refentrytitle></citerefentry> &agrave; relire ses fichiers de configuration.</para>

    <para>Vous avez bien not&eacute; la valeur de <literal>addr</literal> dans les messages du programme de d&eacute;marrage sur la machine sans disque&nbsp;? C'est maintenant que vous allez en avoir besoin.</para>

    <para>Ajoutez une entr&eacute;e &agrave; <literal>/etc/bootptab</literal> (vous devrez peut-&ecirc;tre cr&eacute;er ce fichier). Voici &agrave; quoi elle doit ressembler&nbsp;:</para>

    <programlisting>altair:\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:ht=ether:\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:ha=004001432666:\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:sm=255.255.255.0:\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:hn:\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:ds=199.246.76.1:\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:ip=199.246.76.2:\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:gw=199.246.76.1:\
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:vm=rfc1048:</programlisting>
    
    <para>Ce qui, ligne par ligne, signifie&nbsp;:</para>

    <informaltable frame="none">
      <tgroup cols="2">
	<tbody>
	  <row>
	    <entry><literal>altair</literal></entry>
	    <entry>nom du syst&egrave;me sans disque, sans nom de domaine</entry>
	  </row>

	  <row>
	    <entry><literal>ht=ether</literal></entry>
            <entry>type mat&eacute;riel &ldquo;ethernet&rdquo;</entry>
	  </row>

	  <row>
	    <entry><literal>ha=004001432666</literal></entry>
	    <entry>adresse mat&eacute;rielle (le nombre que vous avez not&eacute; auparavant)</entry>
	  </row>

	  <row>
	    <entry><literal>sm=255.255.255.0</literal></entry>
	    <entry>masque de sous-r&eacute;seau</entry>
	  </row>

	  <row>
	    <entry><literal>hn</literal></entry>
	    <entry>dit au serveur de donner au client son nom de machine</entry>
	  </row>

	  <row>
	    <entry><literal>ds=199.246.76.1</literal></entry>
	    <entry>dit au client quel est son serveur de noms de domaine</entry>
	  </row>

	  <row>
	    <entry><literal>ip=199.246.76.2</literal></entry>
	    <entry>dit au client quelle est son adresse IP</entry>
	  </row>

	  <row>
	    <entry><literal>gw=199.246.76.1</literal></entry>
	    <entry>dit au client quelle est sa passerelle par d&eacute;faut</entry>
	  </row>

	  <row>
	    <entry><literal>vm=...</literal></entry>
	    <entry>laissez cela tel que</entry>
	  </row>
	</tbody>
      </tgroup>
    </informaltable>

    <note>
      <para>Veillez &agrave; bien d&eacute;finir les adresses IP, j'ai invent&eacute; celles de l'exemple.</para>

    </note>

    <para>Cr&eacute;ez le r&eacute;pertoire <filename>/tftpboot</filename> sur le serveur. Il contiendra les fichiers de configuration pour les syst&egrave;mes sans disque dont ce sera le serveur de d&eacute;marrage. Ces fichiers s'appeleront <filename>cfg.&lt;ip&gt;</filename>, o&ugrave; &lt;ip&gt; est l'adresse IP de la machine sans disque. Le fichier de configuration pour &ldquo;altair&rdquo; est <filename>/tftpboot/cfg.199.246.76.2</filename>. Voici son contenu&nbsp;:</para>

    <programlisting>rootfs 199.246.76.1:/DiskLess/rootfs/altair
hostname altair.kcis.com</programlisting>

    <para>La ligne <literal>hostname altair.kcis.com</literal> indique seulement au syst&egrave;me sans disque quel est son nom qualifi&eacute;.</para>

    <para>La ligne <literal>rootfs 199.246.76.1:/DiskLess/rootfs/altair</literal> lui dit o&ugrave; est son syst&egrave;me de fichiers racine qui sera mont&eacute; par NFS.</para>

    <note>
      <para>Ce syst&egrave;me de fichiers racine sera mont&eacute; en <emphasis>lecture seule</emphasis> par NFS.</para>
    </note>
    
    <para>L'arborescence de la machine sans disque peut ensuite &ecirc;tre remont&eacute;e pour autoriser les op&eacute;rations de lecture/&eacute;criture.</para>
    
    <para>J'utilise mon 386DX-40 comme terminal X d&eacute;di&eacute;.</para>

    <para>Voici l'arborescence d'&ldquo;altair&rdquo;&nbsp;:</para>

    <literallayout>/
/bin
/etc
/tmp
/sbin
/dev
/dev/fd
/usr
/var
/var/run</literallayout>

    <para>Et la liste des fichiers qu'elle contient&nbsp;:</para>

    <screen>-r-xr-xr-x  1 root  wheel  779984 Dec 11 23:44 ./kernel
-r-xr-xr-x  1 root    bin  299008 Dec 12 00:22 ./bin/sh
-rw-r--r--  1 root  wheel     499 Dec 15 15:54 ./etc/rc
-rw-r--r--  1 root  wheel    1411 Dec 11 23:19 ./etc/ttys
-rw-r--r--  1 root  wheel     157 Dec 15 15:42 ./etc/hosts
-rw-r--r--  1 root    bin    1569 Dec 15 15:26 ./etc/XF86Config.altair
-r-x------  1 bin     bin  151552 Jun 10  1995 ./sbin/init
-r-xr-xr-x  1 bin     bin  176128 Jun 10  1995 ./sbin/ifconfig
-r-xr-xr-x  1 bin     bin  110592 Jun 10  1995 ./sbin/mount_nfs
-r-xr-xr-x  1 bin     bin  135168 Jun 10  1995 ./sbin/reboot
-r-xr-xr-x  1 root    bin   73728 Dec 13 22:38 ./sbin/mount
-r-xr-xr-x  1 root  wheel    1992 Jun 10  1995 ./dev/MAKEDEV.local
-r-xr-xr-x  1 root  wheel   24419 Jun 10  1995 ./dev/MAKEDEV</screen>
    
    <para>N'oubliez pas d'ex&eacute;cuter <command>MAKEDEV all</command> dans le r&eacute;pertoire <filename>dev</filename>.</para>

    <para>Voici enfin mon <filename>/etc/rc</filename> pour <hostid>altair</hostid>&nbsp;:</para>

<programlisting>#!/bin/sh
#
PATH=/bin:/
export PATH
#
# configurer l'interface &ldquo;en boucle&rdquo;
/sbin/ifconfig lo0 127.0.0.1
#
# configurer la carte Ethernet
/sbin/ifconfig ed0 199.246.76.2 netmask 0xffffff00
#
# monter le syst&egrave;me de fichiers racine via NFS
/sbin/mount antares:/DiskLess/rootfs/altair /
#
# monter le syst&egrave;me de fichiers /usr via NFS
/sbin/mount antares:/DiskLess/usr /usr
#
/usr/X11R6/bin/XF86_SVGA -query antares -xf86config /etc/XF86Config.altair > /dev/null 2>&1
#
# R&eacute;demarrer lorsque l'on quitte X
/sbin/reboot
#
# Nous avons plant&eacute; ...
exit 1</programlisting>

    <para>Vos commentaires et questions sont bienvenus.</para>
  </sect1>
</article>

<!-- 
     Local Variables:
     mode: sgml
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     End:
-->
