20 февраля 2003 г.
Данное руководство описывает настройку сервера удаленной загрузки и создание бездисковых клиентов, на которых можно запускать Х-сервер. На сервере удаленной загрузки будет использоваться пакет isc-dhcp, который имеет поддержку протокола bootp, на клиентских машинах сетевая карта с поддержкой PXE.
Этот документ не является полным описанием процесса создания и конфигурирования бездисковых терминалов и серверов загрузки, а также технологий, которые используются для этого. Он содержит начальные сведения по созданию бездисковых терминалов для того, чтобы столкнувшийся в первые с этой проблемой человек смог быстро войти в курс дела, а затем самостоятельно под свои задачи конфигурировать сервер и клиентские станции. При написании этого руководства активно использовалось содержимое каталога /usr/share/examples/diskless, файлы /etc/rc.diskless1, /etc/rc.diskless2 и соответствующий раздел handbook (ru).
В этом руководстве не рассматривается пакет программ для сетевой загрузки etherboot.
Открытая спецификация 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 мегабитной сети.
Настройка бездисковой станции сводится к установке сетевой карты с поддержкой 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 (C)Copyright 1999 Lanworks Technologies Co. a subsidiary of 3Com Corporation All right reserved Pre-boot eXecution Environment (PXE) v2.00 (C)Copyright 1999 Intel Corporation. (C)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-М, если вы используете карту другого производителя - настройки могут отличаться.
Для реализации возможности загрузки по сети на сервере потребуется запустить демон 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.
Для загрузки бездисковых станций по сети необходимо собрать специальное ядро. Перейдите в каталог /usr/src/sys/i386/conf, создайте файл конфигурации DISKLESS и добавьте в него опции в зависимости от вашей версии FreeBSD.
Подробнее о конфигурировании ядра читайте в handbook (ru).
Note: Если вы хотите использовать firewall на бездисковой станции, не забудьте включить в ядро опцию IPFIREWALL_DEFAULT_TO_ACCEPT, в противном случае машина не сможет загрузиться по сети. Возможно вам придется убрать из ядра строку "device plip #TCP/IP over parallel", так как она может помешать загрузке ядра, перехватив на себя функции сетевого интерфейса.
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
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"
Для бездисковых клиентов необходимо создать корневую файловую систему и основные файлы конфигурации. В каталоге /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 на отдельный раздел винчестера.
Корневую файловую систему для 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"
Теперь осталось создать файлы конфигураций для бездисковых станций. Подробности смотрите выше, в разделе Корневая файловая система для FreeBSD 4.x.
Единственное отличие будет в файле fstab, его содержимое приведено ниже:
192.168.4.1:/diskless_root / nfs rw 0 0 192.168.4.1:/usr/local /usr/local nfs ro 0 0 192.168.4.1:/usr/X11R6 /usr/X11R6 nfs ro 0 0 proc /proc procfs rw 0 0
Note: Скрипт clone_root автоматически копирует каталог /conf в /diskless_root. При желании вы можете создать каталог с конфигурациями бездисковых станций непосредственно в /diskless_root, но при этом не забывайте, что скрипт clone_root при запуске сначала уничтожает содержимое каталога /diskless_root, а уже потом копирует в него необходимый набор файлов.
Если вы не хотите использовать clone_root, то корневую файловую систему можно создать в ручную. Для этого в каталог /diskless_root необходимо скопировать определенный набор файлов и каталогов из базовой системы.
Ниже приведен список каталогов, которые нужно полностью скопировать в каталог /diskless_root:
bin boot etc sbin stand usr/bin usr/lib usr/libdata usr/libexec usr/sbin usr/share
Также создайте в /diskless_root следующие пустые каталоги:
dev proc root tmp var usr/X11R6 usr/local usr/tmp
После этого скопируйте ядро собранное для бездисковой станции в каталог /diskless_root/boot/kernel/. Если необходимо, внесите поправки в файл loader.conf. Копию каталога /etc скопируйте в /diskless_root/conf/default и создайте, как описано выше, конфигурационные файлы для бездисковых станций.
Если на бездисковых станциях установлено мало оперативной памяти - создайте файлы подкачки на сервере. Для этого нужно создать каталог, например /home/swap, и для каждой станции создать в нем свой файл подкачки. Ниже приведен пример по созданию swap файла для бездискового клиента с IP адресом 192.168.4.10 размером 64Мб:
# mkdir /home/swap # dd if=/dev/zero bs=1024 count=64000 of=/home/swap/swap.192.168.4.10 # chmod 0600 /home/swap/swap.192.168.4.10
Если у вас несколько бездисковых терминалов, проделайте тоже самое для каждого из них. Размер файла зависит от ваших потребностей.
Демон nfsd(8) потребуется для экспорта файловых систем для бездисковых станций.
Для автоматического запуска nfsd(8) во время загрузки ОС добавьте следующие строки в /etc/rc.conf:
для FreeBSD 4.x:
portmap_enable="YES" nfs_server_enable="YES"
для FreeBSD 5.x:
rpcbind_enable="YES" nfs_server_enable="YES"
Если вы хотите запустить nfsd(8) без перезагрузки системы, введите следующие команды:
для FreeBSD 4.x:
# portmap # nfsd -u -t -n 4 # mountd -r
для FreeBSD 5.x:
# rpcbind # nfsd -u -t -n 4 # mountd -r
Создайте файл /etc/exports и добавьте в него описание файловых систем, которые вы хотите экспортировать. В данном случае это будет выглядеть так:
для FreeBSD 4.x:
/diskless_root -alldirs -maproot=0 192.168.4.10 /usr -alldirs -ro 192.168.4.10 /home/swap -maproot=0:10 192.168.4.10
для FreeBSD 5.x:
/diskless_root -maproot=0 -alldirs 192.168.4.10 /usr/local /usr/X11R6 -ro 192.168.4.10
Note: Если вы хотите экспортировать каталоги, находящиеся на одном разделе, то в /etc/exports нужно указать их в одной строке друг за другом, например: /home/diskless /home/swap -maproot=0 192.168.4.10. В противном случае экспорт пройдет неправильно.
Для того, чтобы изменения вступили в силу, необходимо перезапустить демон mountd(8)
# kill -HUP `cat /var/run/mountd.pid`
После этого нужно проверить, правильно ли экспортировались файловые системы командой:
% showmount -e Exports list on localhost: /usr 192.168.4.10 /home/swap 192.168.4.10 /diskless_root 192.168.4.10
Дополнительную информацию по настройке nfsd(8) вы найдете в handbook (ru).
DHCP сервер isc-dhcp доступен в портах. Для его установки необходимо обновить коллекцию портов и выполнить команду:
# cd /usr/ports/net/isc-dhcp3 && make install clean
Подробнее об использовании портов читайте в handbook (ru).
Для DHCP сервера нужно создать файл конфигурации /usr/local/etc/dhcpd.conf и добавить в него следующие строки:
Note: В вашем случае настройки могут немного отличаться, рассмотрим их ниже.
default-lease-time 600; max-lease-time 7200; authoritative; ddns-update-style none; option domain-name "your.domain"; option domain-name-servers 192.168.4.1; option routers 192.168.4.1; option swap-path code 128 = string; option swap-size code 129 = integer 32; subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.10 192.168.4.11; use-host-decl-names on; option subnet-mask 255.255.255.0; option broadcast-address 192.168.4.255; host test1 { hardware ethernet 00:01:02:f9:e2:c1; fixed-address 192.168.4.10; next-server 192.168.4.1; filename "pxeboot"; option root-path "192.168.4.1:/diskless_root"; option swap-path "192.168.4.1:/home/swap"; option swap-size 64000; } host test2 { hardware ethernet 00:01:02:f9:e2:ce; fixed-address 192.168.4.11; next-server 192.168.4.1; filename "pxeboot"; option root-path "192.168.4.1:/diskless_root"; option swap-path "192.168.4.1:/home/swap"; option swap-size 128000; } }
Секция "subnet 192.168.4.0 netmask 255.255.255.0" описывает общие настройки для бездисковых терминалов:
"range" задает количество IP адресов доступных клиентам;
"option domain-name-servers" задает серверы DNS;
"server-name" имя сервера удаленной загрузки;
"option routers" задает шлюз по умолчанию для бездискового терминала.
Секция "host test1" задает настройки для конкретной бездисковой станции:
"hardware ethernet" MAC адрес сетевой карты бездисковой станции, вам необходимо вписать сюда адрес сетевой карты бездискового терминала (подробнее см. Настройка бездисковой станции);
"fixed-address" задает фиксированный IP адрес для бездисковой станции;
"filename" имя файла начального загрузчика, передаваемого бездисковому клиенту по протоколу tftp;
"option root-path" месторасположение корневой файловой системы для бездискового клиента;
"option swap-path" каталог, в котором располагаются файлы подкачки.
Теперь нужно запустить демон dhcpd(8):
# /usr/local/etc/rc.d/isc-dhcpd.sh start Internet Software Consortium DHCP Server V3.0.1rc9 Copyright 1995-2001 Internet Software Consortium. All rights reserved. For info, please visit http://www.isc.org/products/DHCP Wrote 0 deleted host decls to leases file. Wrote 0 new dynamic host decls to leases file. Wrote 1 leases to leases file. Listening on BPF/rl0/00:c0:26:ac:1d:7a/192.168.4.0/24 Sending on BPF/rl0/00:c0:26:ac:1d:7a/192.168.4.0/24 Sending on Socket/fallback/fallback-net
Если сервер не запустился, проверьте конфигурационный файл. Если сервер запустился успешно, самое время опробовать бездисковый терминал.
Х - сервер на бездисковой станции настраивается обычным способом. Вы можете воспользоваться для этого программой xf86cfg(1). Конфигурационный файл сохраните в каталоге /etc/X11. Подробнее о настройке X Window System читайте в handbook (ru).
Note: Так как файловая система /etc размещается в оперативной памяти (MFS), перепишите конфигурационный файл /etc/X11/XF86Config в каталог, где хранится конфигурация бездисковой станции /conf/192.168.4.10/etc/X11, для того, чтобы он не был утерян при следующей загрузке.
Если в качестве бездискового терминала используется достаточно мощная машина, вы можете пользоваться ей как обычной станцией. Создайте файл ~/.xinitrc, добавьте в него любимый оконный менеджер, X - сервер можете запускать командой startx(1).
Если у вас есть старая машина, которая уже давно морально устарела, ее можно успешно использовать в качестве Х - терминала. Для этого на сервере загрузки (или на любой другой машине, включая различные платформы и ОС) нужно настроить xdm(1) для использования протокола XDMCP и запускать Х - сервер командой X -query 192.168.4.1 либо IP адрес другого сервера. Подробнее о настройке X Display Manager читайте в handbook (ru).
Программное обеспечение, используемое для организации сервера удаленной загрузки, несет потенциальную угрозу безопасности системы. Если к вашей машине есть доступ из других сетей, или в вашей сети есть "враждебно" настроенные пользователи, необходимо настроить систему безопасности должным образом. Подробнее о настройке безопасности можно почитать в handbook (ru).
Note: Неправильная настройка системы безопасности на сервере загрузки может привести к блокированию или неправильной работе бездисковых терминалов.