<!--
     The FreeBSD Russian Documentation Project

     $FreeBSD$
     $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/diskless-x/article.sgml,v 1.2 2001/06/30 11:04:39 phantom Exp $

     Original revision: 1.4
-->

<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [

<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
]>

<article>
  <articleinfo>
    <title>Бездисковый X-сервер: руководство по настройке</title>
    
    <authorgroup>
      <author>
	<firstname>Jerry</firstname>
	<surname>Kendall</surname>
	<affiliation>
	  <address>
	    <email>jerry@kcis.com</email>
	  </address>
	</affiliation>
      </author></authorgroup>
    
    <pubdate>28 декабря 1996</pubdate>
    
    <copyright>
      <year>1996</year>
      <holder>Jerry Kendall</holder>
    </copyright>
    
    <abstract>
      <para>С помощью нескольких друзей из списка рассылки FreeBSD-hackers я
        смог настроить бездисковый X-терминал.  Создание X-терминала,
        во-первых, требует сначала настройки бездисковой системы с минимальным
        набором утилит, доступных через NFS.  Те же самые шаги были применены
        для создания двух разных бездисковых систем.  Первая из них была
        <hostid role="fqdn">altair.kcis.com</hostid>.  Бездисковый X-терминал,
        который работал на моей старой машине 386DX-40.  На ней был диск
        объемом 340 мегабайт, но я не хотел его менять.  Так что машина
        загружалась с <hostid role="fqdn">antares.kcis.com</hostid> по сети
        Ethernet.  Второй системой является 486DX2-66.  Я настроил (полностью)
        бездисковую систему FreeBSD, которая не использует локальный диск.
        Сервером в этом случае выступает Sun 670MP под управлением SunOS 4.1.3.
        В обоих случаях требовалась одна и та же начальная настройка.</para>
      
      <para>Я уверен, что к этому есть что добавить.  Пожалуйста, присылайте
        мне любые замечания.</para>
    </abstract>
  </articleinfo>

  <sect1>
    <title>Создание загрузочной дискеты (на бездисковой системе)</title>
    
    <para>Так как сетевые начальные загрузчики не будут работать с некоторыми
      резидентными (TSR) и прочими программами, используемыми в MS-DOS, то
      лучше создать отдельную загрузочную дискету, или, если вы можете, создать
      меню MS-DOS, которое будет (при помощи файлов
      <filename>config.sys</filename>/<filename>autoexec.bat</filename>)
      спрашивать, какую конфигурацию следует загрузить при запуске системы.
      Я использовал последний метод и он прекрасно работает.  Мое меню MS-DOS
      (6.x) приводится ниже.</para>
    
    <example>
      <title><filename>config.sys</filename></title>

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

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

      <programlisting>@ECHO OFF
goto %config%

:normal
...
normal autoexec.bat stuff
...
goto end

:unix
cd \netboot
nb8390.com

:end</programlisting>
    </example>
  </sect1>
  
  <sect1>
    <title>Получение программ для сетевой загрузки (на сервере)</title>
    
    <para>Откомпилируйте программы 'net-boot', расположенные в каталоге
      <filename>/usr/src/sys/i386/boot/netboot</filename>.  Вы должны прочесть
      замечания в начале файла <filename>Makefile</filename>.  Измените
      настройки, как это нужно.  Сделайте резервную копию оригинала на всякий
      случай.  Когда построение будет закончено, должно получиться 2 выполнимых
      файла для MS-DOS, <filename>nb8390.com</filename> и
      <filename>nb3c509.com</filename>.  Одна из этих программ и будет тем, что
      вам нужно запустить на бездисковом сервере.  Она будет загружать ядро
      с сервера.  На этом этапе поместите обе программы на загрузочную дискету
      MS-DOS, созданную ранее.</para>
  </sect1>
  
  <sect1>
    <title>Определите, какую программу нужно запускать (на бездисковой
      системе)</title>
    
    <para>Если вы знаете, какой набор микросхем используется в вашем адаптере
      Ethernet, это легко.  Если у вас используется набор микросхем NS8390 или
      другой на ее основе, то нужно использовать
      <filename>nb8390.com</filename>.  Если у вас используется набор микросхем
      на основе 3Com 509, то используйте программу загрузки
      <filename>nb3C509.com</filename>.  Если вы не уверены в том, что у вас
      установлено, попробуйте использовать любой, и если он выдаст сообщение
      <errorname>No adapter found</errorname>, попробуйте другой.  Кроме этого,
      вам ничего не остается делать.</para>
  </sect1>

  <sect1>
    <title>Загрузка по сети</title>
    
    <para>Загрузите бездисковую систему без каких-либо файлов
      config.sys/autoexec.bat.  Попробуйте запустить загрузочную программу для
      вашего адаптера Ethernet.</para>

    <para>Мой адаптер Ethernet работает на наборе WD8013 в 16-разрядном режиме,
      так что я запускаю <filename>nb8390.com</filename></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>Теперь моя бездисковая система пытается найти машину, которая
      выступает в качестве сервера загрузки.  Запомните строку
      <literal>addr</literal> выше, позже она вам понадобится.  Перезагрузите
      бездисковую систему и измените ваши файлы <filename>config.sys</filename>
      и <filename>autoexec.bat</filename>, чтобы они выполняли эти действия
      автоматически.  Может быть, в меню.  Если вы запускали
      <command>nb3c509.com</command>,  а не <command>nb8390.com</command>, то
      выводимые сообщения будут точно такими же.  Если вы получили сообщение
      <errorname>No adapter found</errorname> после <literal>Searching for
      adapter...</literal>, проверьте правильность задания параметров времени
      компиляции в файле <filename>Makefile</filename>.</para>
  </sect1>
  
  <sect1>
    <title>Настройка возможности системам загружаться по сети (на
      сервере)</title>
    
    <para>Проверьте, что в файле <filename>/etc/inetd.conf</filename> имеются
      записи для tftp и bootps.  Ниже показаны мои записи:</para>
    
    <programlisting>
tftp	dgram	udp	wait	nobody	/usr/libexec/tftpd	tftpd /tftpboot
#
# Additions by who ever you are
bootps  dgram  udp  wait  root  /usr/libexec/bootpd bootpd /etc/bootptab
    </programlisting>
    
    <para>Если вы изменили файл <filename>/etc/inetd.conf</filename>, то
      пошлите программе inetd сигнал <literal>HUP</literal>.  Для этого
      найдите ID процесса inetd командой <command>ps -ax | grep inetd | grep -v
      grep</command>.  После этого пошлите ему сигнал HUP.  Это делается
      командой <command>kill -HUP &lt;pid&gt;</command>.  Это заставит inetd
      повторно прочесть свой конфигурационный файл.</para>

    <para>Не забыли ли вы строку с <literal>addr</literal> из вывода начального
      загрузчика на бездисковой системе?  Как вы можете угадать, теперь он вам
      требуется.</para>

    <para>Добавьте запись в файл <literal>/etc/bootptab</literal> (может быть,
      вам потребуется его создать).  Она должна иметь следующий вид:</para>

    <programlisting>altair:\
        :ht=ether:\
        :ha=004001432666:\
        :sm=255.255.255.0:\
        :hn:\
        :ds=199.246.76.1:\
        :ip=199.246.76.2:\
        :gw=199.246.76.1:\
        :vm=rfc1048:</programlisting>
    
    <para>Строки имеют такой смысл:</para>

    <informaltable frame="none">
    <tgroup cols="2">
    <tbody>
      <row>
        <entry><literal>altair</literal></entry>
	<entry>название бездисковой системы без доменной части.</entry>
      </row>

      <row>
        <entry><literal>ht=ether</literal></entry>
        <entry>тип оборудования 'ethernet'.</entry>
      </row>

      <row>
        <entry><literal>ha=004001432666</literal></entry>
        <entry>аппаратный адрес (число, записанное ранее).</entry>
      </row>

      <row>
        <entry><literal>sm=255.255.255.0</literal></entry>
        <entry>маска подсети.</entry>
      </row>

      <row>
        <entry><literal>hn</literal></entry>
        <entry>указывает серверу посылать клиенту его имя хоста.</entry>
      </row>

      <row>
        <entry><literal>ds=199.246.76.1</literal></entry>
        <entry>указывает клиенту расположение сервера имен.</entry>
      </row>

      <row>
        <entry><literal>ip=199.246.76.2</literal></entry>
        <entry>указывает клиенту его IP-адрес.</entry>
      </row>

      <row>
        <entry><literal>gw=199.246.76.1</literal></entry>
        <entry>указывает клиенту маршрутизатор по умолчанию.</entry>
      </row>

      <row>
        <entry><literal>vm=...</literal></entry>
        <entry>просто оставьте это так.</entry>
      </row>
    </tbody>
    </tgroup>
    </informaltable>

    <note>
      <para>Проверьте правильность настройки IP-адресов, адреса выше являются
        моими.</para>
    </note>

    <para>Создайте каталог '/tftpboot', в котором будут располагаться
      конфигурационные файлы для бездисковых систем, которые будет обслуживать
      сервер.  Эти файлы будут именоваться 'cfg.&lt;ip&gt;', где &lt;ip&gt;
      является IP-адресом бездисковой системы.  Конфигурационный файл для
      'altair' будет носить название /tftpboot/cfg.199.246.76.2.  Его
      содержимое:</para>

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

    <para>Строка <literal>hostname altair.kcis.com</literal> просто указывает
      бездисковой системе ее полное доменное имя.</para>

    <para>Строка <literal>rootfs 199.246.76.1:/DiskLess/rootfs/altair</literal>
      указывает бездисковой системе местоположение ее корневой файловой
      системы, монтируемой по протоколу NFS.</para>

    <note>
      <para>Корневая файловая система, монтируемая через NFS, будет
        монтироваться в режиме <emphasis>только для чтения</emphasis>.</para>
    </note>
    
    <para>Дерево для бездисковой системы может быть смонтировано повторно с
      правом на выполнение операций чтения и записи, если это
      потребуется.</para>
    
    <para>Я использую мой никому не нужный 386DX-40 в качестве выделенного
      X-терминала.</para>

    <para>Дерево для 'altair' имеет такой вид:</para>

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

    <para>Вот реальный список файлов:</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>Не забудьте запустить команду <command>MAKEDEV all</command> в
      каталоге <filename>dev</filename>.</para>

    <para>Мой <filename>/etc/rc</filename> для <hostid>altair</hostid> выглядит
      вот так:</para>

<programlisting>#!/bin/sh
#
PATH=/bin:/
export PATH
#
# configure the localhost
/sbin/ifconfig lo0 127.0.0.1
#
# configure the ethernet card
/sbin/ifconfig ed0 199.246.76.2 netmask 0xffffff00
#
# mount the root filesystem via NFS
/sbin/mount antares:/DiskLess/rootfs/altair /
#
# mount the /usr filesystem via NFS
/sbin/mount antares:/DiskLess/usr /usr
#
/usr/X11R6/bin/XF86_SVGA -query antares -xf86config /etc/XF86Config.altair > /dev/null 2>&1
#
# Reboot after X exits
/sbin/reboot
#
# We blew up....
exit 1</programlisting>

    <para>Приветствуются любые замечания и вопросы.</para>
  </sect1>
</article>

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