Руководство по настройке
Олег Мухутдинов mor@FreeBSD.org.ru
$Id: article.sgml,v 1.14 2003/03/14 08:55:14 mor Exp $
20 февраля 2003 г.
Данное руководство описывает настройку сервера удаленной загрузки и создание бездисковых клиентов, на которых можно запускать Х-сервер. На сервере удаленной загрузки будет использоваться пакет isc-dhcp, который имеет поддержку протокола bootp, на клиентских машинах сетевая карта с поддержкой PXE.
Этот документ не является полным описанием процесса создания и конфигурирования бездисковых терминалов и серверов загрузки, а также технологий, которые используются для этого. Он содержит начальные сведения по созданию бездисковых терминалов для того, чтобы столкнувшийся в первые с этой проблемой человек смог быстро войти в курс дела, а затем самостоятельно под свои задачи конфигурировать сервер и клиентские станции. При написании этого руководства активно использовалось содержимое каталога /usr/share/examples/diskless, файлы /etc/rc.diskless1, /etc/rc.diskless2 и соответствующий раздел handbook (ru).
В этом руководстве не рассматривается пакет программ для сетевой загрузки etherboot.
1. Общие сведения
Открытая спецификация PXE (Preboot Execution Environment), созданная корпорацией Intel позволяет осуществлять загрузку операционной системы по сети. Для использования этой возможности на бездисковой станции нужно установить сетевую карту c поддержкой PXE. Сейчас практически у любого производителя сетевого оборудования в линейке продуктов можно найти такой сетевой адаптер.
В этом руководстве для примера будет рассматриваться сетевая карта 3Com 3C905C-TX-М. В качестве сервера удаленной загрузки использовался компьютер Celeron 1.2Ghz, OЗУ 256Мb, диск 20Gb 7200rpm, ОС FreeBSD 4.7-STABLE и FreeBSD 5.0 Release, в качестве бездисковых терминалов P100, ОЗУ 32Mb, 3Com 3C905C-TX-М, Matrox MGA 1024SG, PII266, ОЗУ 128Mb, 3Com 3C905C-TX-М, Matrox MGA 1024SG, а также ноутбук COMPAQ Armada M700. Тесты проводились на 10 и 100 мегабитной сети.
2. Настройка бездисковой станции
Настройка бездисковой станции сводится к установке сетевой карты с поддержкой PXE, выбора метода загрузки в BIOS'е и установке параметров в программе конфигурирования сетевой карты.
После установки сетевой карты, зайдите в BIOS и в качестве устройства загрузки выберите Network, если в BIOS'е нет такой функции, то просто оставьте все как есть. После перезагрузки должна появиться строка, предлагающая сконфигурировать сетевой адаптер:
Initializing MBA. Press Ctrl+Alt+B to configure...
Нажмите Ctrl+Alt+B для того, чтобы попасть в меню конфигурирования сетевой карты и поставьте следующие параметры:
Boot Method: PXE
Default Boot: Network
Local Boot: Disabled
Config Message: Enabled
Message Timeout: 3 Seconds
Boot Failure Prompt: Wait for timeout
Для сохранения настроек и выхода из меню нажмите F10, после этого машина попытается загрузиться по сети:
Managed PC Boot Agent (MBA) v4.00
©Copyright 1999 Lanworks Technologies Co. a subsidiary of 3Com Corporation
All right reserved
Pre-boot eXecution Environment (PXE) v2.00
©Copyright 1999 Intel Corporation.
©Copyright 1999 Lanworks Technologies Co. a subsidiary of 3Com Corporation
All right reserved
DHCP MAC ADDR: 00 01 02 F9 E2 C1
DHCP...
Запомните MAC адрес сетевой карты, который отобразится на второй строчке снизу (DHCP MAC ADDR: 00 01 02 F9 E2 C1), он пригодится в дальнейшем при настройке сервера. На этом конфигурирование бездисковой станции можно считать завершенным.
Note: В данном примере использовалась сетевая карта 3Com 3C905C-TX-М, если вы используете карту другого производителя - настройки могут отличаться.
3. Настройка сервера удаленной загрузки
3.1. Запуск сервера tftp (Trivial File Transfer Protocol)
Для реализации возможности загрузки по сети на сервере потребуется запустить демон tftpd(8), он является частью базовой системы и запускается при помощи inetd(8). Протокол tftp (Trivial File Transfer Protocol - простой протокол пересылки файлов) необходим для получения начального загрузчика бездисковым клиентом.
Для запуска tftpd(8) необходимо добавить в файл /etc/inetd.conf следующую строку:
tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot
После этого нужно создать каталог /tftpboot, затем переписать в него начальный загрузчик FreeBSD для загрузки по протоколу PXE /boot/pxeboot и перезапустить inetd(8).
# mkdir /tftpboot
# cp /boot/pxeboot /tftpboot/
# kill -HUP `cat /var/run/inetd.pid`
Note: Если у вас не запущен демон inetd(8), добавьте строку inetd_enable="YES" в файл /etc/rc.conf и при следующей загрузке он запустится автоматически, либо запустите его вручную командой inetd -wW от пользователя root.
3.2. Построение специального ядра для бездисковых станций
Для загрузки бездисковых станций по сети необходимо собрать специальное ядро. Перейдите в каталог /usr/src/sys/i386/conf, создайте файл конфигурации DISKLESS и добавьте в него опции в зависимости от вашей версии FreeBSD.
Подробнее о конфигурировании ядра читайте в handbook (ru).
Note: Если вы хотите использовать firewall на бездисковой станции, не забудьте включить в ядро опцию IPFIREWALL_DEFAULT_TO_ACCEPT, в противном случае машина не сможет загрузиться по сети. Возможно вам придется убрать из ядра строку "device plip #TCP/IP over parallel", так как она может помешать загрузке ядра, перехватив на себя функции сетевого интерфейса.
3.2.1. Опции для ядра FreeBSD 4.x
options BOOTP #Use BOOTP to obtain IP address/hostname
options BOOTP_NFSROOT #NFS mount root filesystem using BOOTP info
options BOOTP_NFSV3 #Use NFS v3 to NFS mount rootoptions
options BOOTP_COMPAT #Workaround for broken bootp daemons.
options MFS #Memory Filesystem
options NFS #Network Filesystem
options NFS_ROOT #NFS usable as root device, NFS required
options NULLFS #nullfs
3.2.2. Опции для ядра FreeBSD 5.x
options BOOTP #Use BOOTP to obtain IP address/hostname
options BOOTP_NFSROOT #NFS mount root filesystem using BOOTP info
options BOOTP_NFSV3 #Use NFS v3 to NFS mount rootoptions
options BOOTP_COMPAT #Workaround for broken bootp daemons.
options NFSCLIENT #Network File System
options NFS_ROOT #NFS usable as root device, NFS required
options NULLFS #nullfs
device md #Memory "disks"
3.3. Создание корневой файловой системы
3.3.1. Корневая файловая система для FreeBSD 4.x
Для бездисковых клиентов необходимо создать корневую файловую систему и основные файлы конфигурации. В каталоге /usr/share/examples/diskless есть скрипт clone_root, который автоматически создает корневую файловую систему для бездисковых станций. Обязательно загляните в этот скрипт, там достаточно подробно описана процедура создания файловой системы и файлов конфигурации. Он достаточно простой, и при необходимости вы можете внести в него свои изменения для ваших конкретных нужд.
Note: Здесь будет описано использование стандартного скрипта /usr/share/examples/diskless/clone_root без каких либо изменений.
Перед тем, как запускать скрипт clone_root, нужно создать каталог /conf/default/etc и создать в нем основные файлы конфигурации системы rc.conf, fstab, ttys, hosts, а также по вашему желанию любые другие файлы из каталога /etc которые вы хотите переопределить. В противном случае clone_root перенесет файлы конфигурации вашей системы, что может создать определенные проблемы.
Необходимо внести некоторые изменения в файл rc.conf, в первую очередь стоит определить пути для запуска локальных скриптов во время загрузки системы local_startup="/etc/rc.d.local", соответственно необходимо создать каталог /conf/default/etc/rc.d.local. Так как IP адрес, адрес шлюза по умолчанию и имя хоста будут выдаваться DHCP сервером автоматически, нужно удалить соответствующие строки из файла конфигурации. Все остальное остается как обычно. Ниже приведен примерный файл конфигурации rc.conf:
local_startup="/etc/rc.d.local"
sendmail_enable="NONE"
inetd_enable="NO"
sshd_enable="YES"
Файл fstab будет выглядеть примерно так:
192.168.4.1:/usr /usr nfs ro 0 0
192.168.4.1:/diskless_root / nfs rw 0 0
proc /proc procfs rw 0 0
Подробнее об экспорте файловых систем будет рассказано ниже. Теперь можно создать файлы конфигурации для конкретных бездисковых машин. Для этого нужно создать каталог с именем машины, или с IP адресом, например /conf/192.168.4.10/etc, и создать в нем необходимые конфигурационные файлы. После того, как были созданы базовые конфигурационные файлы, можно запустить скрипт для создания корневой файловой системы:
# sh /usr/share/examples/diskless/clone_root all
Warning Если каталог /diskless_root существует, скрипт clone_root перед тем, как копировать в него файлы, удаляет старое содержимое каталога. Будьте внимательны.
Скрипт создаст каталог /diskless_root, в котором будет находится корневая файловая система для бездисковых клиентов, ядро он скопирует из каталога /usr/src/sys/compile/DISKLESS. Oбщие файлы конфигурации, и файлы для конкретных бездисковых машин будут скопированы в каталог /diskless_root/conf.
Note: По умолчанию скрипт clone_root создает дерево каталогов /diskless_root в корневой файловой системе. Общий размер создаваемых файлов составляет примерно 35Mb, это может привести к переполнению корневой файловой системы, что черевато системными сбоями. Прежде чем запускать этот скрипт, убедитесь, что у вас достаточно свободного места на диске. Хорошим решением будет вынести /diskless_root на отдельный раздел винчестера.
3.3.2. Корневая файловая система для FreeBSD 5.x
Корневую файловую систему для FreeBSD 5.x можно создать при помощи скрипта clone_root, или скопировать необходимые файлы и каталоги вручную.
Для использования скрипта clone_root, нужно внести в него некоторые изменения.
Note: В данном примере использовался скрипт clone_root ревизии "$FreeBSD: src/share/examples/diskless/clone_root,v 1.1 2001/04/16 06:37:03 luigi Exp $", возможно в последствии он подвергнется изменению и действия приведенные ниже будут лишены смысла.
Откройте файл /usr/share/examples/diskless/clone_root в текстовом редакторе, найдите переменную SYSDIRS, удалите из нее путь "/usr", но добавьте пути "usr/local usr/X11R6". Затем найдите переменную TOCOPY и добавьте в нее пути "usr/bin usr/lib usr/libdata usr/libexec usr/sbin usr/share". В итоге, после сделанных в файле clone_root изменений у вас должно получиться следующее:
SYSDIRS="dev proc root var usr/local usr/X11R6"
TOCOPY="bin boot compat etc modules sbin stand sys usr/bin \
usr/lib usr/libdata usr/libexec usr/sbin usr/share"