# Бездисковый X-сервер: руководство по настройке

### Jerry Kendall

`<jerry@kcis.com>`

Copyright © 1996 Jerry Kendall

28 декабря 1996

FreeBSD это зарегистрированная торговая марка FreeBSD Foundation.

3Com и HomeConnect это зарегистрированные торговые марки 3Com Corporation.

Microsoft, FrontPage, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media и Windows NT это или зарегистрированные торговые марки или торговые марки Microsoft Corporation в Соединенных Штатах и/или других странах.

Sun, Sun Microsystems, Java, Java Virtual Machine, JavaServer Pages, JDK, JRE, JSP, JVM, Netra, Solaris, StarOffice, Sun Blade, Sun Enterprise, Sun Fire, SunOS и Ultra это торговые марки или зарегистрированные торговые марки Sun Microsystems, Inc. в Соединенных Штатах и других странах.

Многие из обозначений, используемые производителями и продавцами для обозначения своих продуктов, заявляются в качестве торговых марок. Когда такие обозначения появляются в этом документе, и Проекту FreeBSD известно о торговой марке, к обозначению добавляется знак ''™'' или ''®''.

С помощью нескольких друзей из списка рассылки FreeBSD-hackers я смог настроить бездисковый X-терминал. Создание X-терминала, во-первых, требует сначала настройки бездисковой системы с минимальным набором утилит, доступных через NFS. Те же самые шаги были применены для создания двух разных бездисковых систем. Первая из них была `altair.example.com`. Бездисковый X-терминал, который работал на моей старой машине 386DX-40. На ней был диск объемом 340 мегабайт, но я не хотел его менять. Так что машина загружалась с `antares.example.com` по сети Ethernet. Второй системой является 486DX2-66. Я настроил (полностью) бездисковую систему FreeBSD, которая не использует локальный диск. Сервером в этом случае выступает Sun 670MP под управлением SunOS™ 4.1.3. В обоих случаях требовалась одна и та же начальная настройка.

Я уверен, что к этому есть что добавить. Пожалуйста, присылайте мне любые замечания.

[ По разделам / Одним файлом ]

## 1. Создание загрузочной дискеты (на бездисковой системе)

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

Пример 1. `config.sys`

    [menu]
    menuitem=normal, normal
    menuitem=unix, unix
    [normal]
    ....
    normal config.sys stuff
    ...
    [unix]

Пример 2. `autoexec.bat`

    @ECHO OFF
    goto %config%

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

    :unix
    cd \netboot
    nb8390.com

    :end

## 2. Получение программ для сетевой загрузки (на сервере)

Откомпилируйте программы ''net-boot'', расположенные в каталоге `/usr/src/sys/i386/boot/netboot`. Вы должны прочесть замечания в начале файла `Makefile`. Измените настройки, как это нужно. Сделайте резервную копию оригинала на тот случай, если что-то пойдёт не так, как ожидалось. Когда построение будет закончено, должно получиться 2 выполнимых файла для MS-DOS, `nb8390.com` и `nb3c509.com`. Одна из этих программ и будет тем, что вам нужно запустить на бездисковом сервере. Она будет загружать ядро с сервера. На этом этапе поместите обе программы на загрузочную дискету MS-DOS, созданную ранее.

## 3. Определите, какую программу нужно запускать (на бездисковой системе)

Если вы знаете, какой набор микросхем используется в вашем адаптере Ethernet, это легко. Если у вас используется набор микросхем NS8390 или другой на ее основе, то нужно использовать `nb8390.com`. Если у вас используется набор микросхем на основе 3Com® 509, то используйте программу загрузки `nb3C509.com`. Если вы не уверены в том, что у вас установлено, попробуйте использовать любой, и если он выдаст сообщение “`No adapter found`”, попробуйте другой. Кроме этого, вам ничего не остается делать.

## 4. Загрузка по сети

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

Мой адаптер Ethernet работает на наборе WD8013 в 16-разрядном режиме, так что я запускаю `nb8390.com`

    C:> cd \netboot
    C:> nb8390

    Boot from Network (Y/N) ?  Y

    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...

Теперь моя бездисковая система пытается найти машину, которая выступает в качестве сервера загрузки. Запомните строку `addr` выше, позже она вам понадобится. Перезагрузите бездисковую систему и измените ваши файлы `config.sys` и `autoexec.bat`, чтобы они выполняли эти действия автоматически. Может быть, в меню. Если вы запускали `nb3c509.com`, а не `nb8390.com`, то выводимые сообщения будут точно такими же. Если вы получили сообщение “`No adapter found`” после `Searching for adapter...`, проверьте правильность задания параметров времени компиляции в файле `Makefile`.

## 5. Настройка возможности системам загружаться по сети (на сервере)

Проверьте, что в файле `/etc/inetd.conf` имеются записи для tftp и bootps. Ниже показаны мои записи:

    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

Если вы изменили файл `/etc/inetd.conf`, то пошлите программе inetd(8) сигнал `HUP`. Для этого найдите ID процесса `inetd` командой `ps -ax | grep inetd | grep -v grep`. После этого пошлите ему сигнал `HUP`. Это делается командой `kill -HUP <pid>`. Это заставит `inetd` повторно прочесть свой конфигурационный файл.

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

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

    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:

Строки имеют такой смысл:

`altair` | название бездисковой системы без доменной части.
`ht=ether` | тип оборудования ''ethernet''.
`ha=004001432666` | аппаратный адрес (число, записанное ранее).
`sm=255.255.255.0` | маска подсети.
`hn` | указывает серверу посылать клиенту его имя хоста.
`ds=199.246.76.1` | указывает клиенту расположение сервера имен.
`ip=199.246.76.2` | указывает клиенту его IP-адрес.
`gw=199.246.76.1` | указывает клиенту маршрутизатор по умолчанию.
`vm=...` | просто оставьте это так.

> Замечание: Проверьте правильность настройки IP-адресов, адреса выше являются моими.

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

    rootfs 199.246.76.1:/DiskLess/rootfs/altair
    hostname altair.example.com

Строка `hostname altair.example.com` просто указывает бездисковой системе её полное доменное имя.

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

> Замечание: Корневая файловая система, монтируемая через NFS, будет монтироваться в режиме только для чтения.

Дерево для бездисковой системы может быть смонтировано повторно с правом на выполнение операций чтения и записи, если это потребуется.

Я использую свой никому не нужный 386DX-40 в качестве выделенного X-терминала.

Дерево для `altair` имеет такой вид:

/
/bin
/etc
/tmp
/sbin
/dev
/dev/fd
/usr
/var
/var/run

Вот реальный список файлов:

    -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

Если вы не используете devfs(5) (которая во FreeBSD 5.X по умолчанию активирована), то должны убедиться, что запускали команду `MAKEDEV all` в каталоге `dev`.

Мой `/etc/rc` для `altair` выглядит вот так:

    #!/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

Приветствуются любые замечания и вопросы.

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.