Ключевые слова:netbsd, bsd, diskless, xterm, boot, (найти похожие документы)
From: Сгибнев Михаил <http://dreamcatcher.ru>
Date: Mon, 22 Oct 2005 14:31:37 +0000 (UTC)
Subject: Реализация бездисковой рабочей станции на базе NetBSD
Оригинал: http://dreamcatcher.ru/docs/diskless.html
Введение
--------
Применение бездисковых рабочих станций оправдано практически в любой
организации. Рассмотрим несколько аспектов их применениия:
* Удешевление стоимости рабочей станции
* Увеличение срока службы рабочей станции
* Повышение информационной безопасности
* Снижение времени простоя рабочей станции вследствие отказа
* Легкость и централизованность администрирования
Применение NetBSD в качестве операционной системы, используемой
конечным пользователем, позволит отказатся от коммерческого ПО,
косвенным образом увеличит коэффициент полезного использования
работниками служебного времени, исключит возможность
несанкционированной установки программ или использование съемных
носителей, позволит своевременно и централизованно обновлять версии
программного обеспечения, сократит время развертывания нового рабочего
места, предоставит администратору возможность удаленного управления
рабочей станцией с использованием защищенных протоколов.
Итак, для создания нашей сети нам потребуется сервер, с которого будет
загружатся операционная система для рабочей станции, рабочая станция и
соответствующим образом подготовленный дистрибутив. Рассмотрим
реализацию этих компонентов.
Рабочая станция
Большинство современных материнских плат имеют встроенную сетевую
карту и поддерживают возможность загрузку по сети. Вам просто
потребуется выставить соответствующую опцию в BIOS. Если материнская
плата не имеет такой возможности, то есть другие способы реализации
загрузки по сети, которые более подробно описаны здесь:
http://www.netbsd.org/Documentation/network/netboot/intro.i386.htmlСервер
В данной статье мы не будем рассматривать вопросы установки и
первоначальной настройки сервера, для получения дополнительной
информации я советую вам обратиться к соответствующей главе
руководства пользователя NetBSD (http://netbsd.org/guide/en/part-install.html)
Настройка сервера будет включать в себя:
* настройку сервера DHCP
* настройку сервера NFS
* создание клиентской файловой системы
Настройка сервера DHCP
Протокол DHCP(Dynamic Host Configuration Protocol) используется для
назначения рабочей станции сетевых параметров и передачи ей начального
загрузчика. Служба DHCP, как правило, запускается в качестве демона.
Большинство серверов DHCP поддерживают запросы BOOTP. Перед началом
работы необходимо удостовериться, что на сервере не запущен сервер
bootpd, поскольку он будет препятствовать нормальной работе dhcpd.
Существует две основные реализации dhcpd, от ISC и CMU. NetBSD
использует вариант от ISC, так как он в настоящее время активно
разрабатывается и применяется в различных операционных системах.
Файл конфигурации /etc/dhcpd.conf легко читаем и одинаково выглядит на
всех платформах. В настоящей статье мы будем использовать конфигурацию
для клиента с предопределенным адресом, но ее легко изменить и
дополнить, прочитав страницы руководства man dhcpd(8),
dhpcpd.conf(5) и dhcpd-options(5).
Будьте осторожны при использовании директивы next-server, когда
используете сервер tftp в качестве следующего этапа загрузки, так как
клиент предполагает, что next-server использует и tftp и nfs. Если в
сети не планируется наличие старых станций, которые для загрузки будут
использовать tftp, то удалите соответствующие строки из файла
конфигурации. Процесс найстройки сервера dhcpd выглядит следующим
образом:
удостоверьтесь, что ядро содержит опцию
pseudo-device bpfilter 4
создадим файл, где будут храниться записи о аренде адресов
# touch /var/db/dhcpd.leases
создаем файл конфигурации, откорректировав его под свои параметры
# global dhcpd parameters
deny unknown-clients; #disallow unknown connections
ddns-update-style none; #disallow dynamic DNS updates
allow bootp; #allow bootp requests, thus the dhcp
#server will act as a bootp server
# which network interface the server will listen on
subnet 192.168.1.0 netmask 255.255.255.0 {
#the zeros indicate which range
}
#of addresses are allowed to connect
#set of parameters common to all clients
group {
option broadcast-address 192.168.1.255;
option domain-name "test.net";
option domain-name-servers dns.test.net;
option routers router.test.net;
option subnet-mask 255.255.255.0;
}
#set of parameters specific to one particular host
host client.test.net {
hardware ethernet CC:CC:CC:CC:CC:CC;
fixed-address 192.168.1.10;
option host-name "client"; #name of the host (if the fixed address
#doesn't resolve to a simple name)
filename "ofwboot.xcf"; #name of the bootloader or kernel to
#download via tftp
next-server tftpserver.test.net; #which machine to tftp filename from
option root-path "/export/client/root"; #the path on the NFS server.
#typically the client assumes the
#nfsserver = tftpserver
#always-reply-rfc1048 true; #this is needed if your client isn't
#getting the options you set and
#the log says "(non-rfc1048)"
#next68k machines require this to be
#set false
}
#you may paste another "host" entry here for additional clients on this network
Запускаем демон dhcpd в режиме отладки
# /usr/sbin/dhcpd -d -f
Когда сервер получит запрос, мы должны увидеть примерно следующее:
BOOTREQUEST from CC:CC:CC:CC:CC:CC via le0 (non-rfc1048)
BOOTREPLY for 192.168.1.10 to client.test.net (CC:CC:CC:CC:CC:CC) via le0
DHCPDISCOVER from CC:CC:CC:CC:CC:CC via le0
DHCPOFFER on 192.168.1.10 to CC:CC:CC:CC:CC:CC via le0
DHCPREQUEST for 192.168.1.10 from CC:CC:CC:CC:CC:CC via le0
DHCPACK on 192.168.1.10 to CC:CC:CC:CC:CC:CC via le0
Обычно, загрузчик не имеет функций обратной связи, но он будет искать
файловую ситему, что приведет к следующим сообщениям:
boot device:
nfs_boot: trying DHCP/BOOTP
nfs_boot: DHCP server: 0xC0A80105
nfs_boot: my_name=client
nfs_boot: my_domain=test.net
nfs_boot: my_addr=0xC0A8010A
nfs_boot: my_mask=0xffffff00
nfs_boot: gateway=0xC0A80101
root on :/export/client/root
Настройка сервера NFS
NFS является стандартной сетевой файловой системой UNIX. Обычно,
загрузчик рабочей станции ищет ядро на сервере nfs, загружает его в
память и передает ему управление. Клиенту необходим доступ на
чтение/запись на сервере nfs с правами root, поэтому обратите внимание
на разграничение доступа к каталогам. К следующим каталогам доступ с
правами root необходим:
/
/var
/etc
/dev
Самым простым, будет экспортировать /home и /usr отдельно от
/export/client/root и без привилегий root. Обратите внимание, что
/swap должен быть примонтирован как файл.
|Сервер (экспортируемые каталоги) Клиент
/export/client/root /
/export/client/swap (file) /swap (file)
/export/client/usr /usr
/export/client/home /home
Настройка сервера будет включать в себя следующие шаги:
Удостоверимся, что ядро содержит опцию
options NFSSERVER
Выполним
# mkdir -p /export/client/root/dev
Выполним
# mkdir /export/client/usr
Выполним
# mkdir /export/client/home
Выполним
# touch /export/client/swap
Выполним
# cd /export/client/root
Выполним
# tar -xvpzf /export/client/NetBSD-release/binary/sets/kern.tgz
Выполним
# mknod /export/client/root/dev/console c 0 0
Добавим следующие строки в /etc/exports:
#/etc/exports
/export/client/root -maproot=root:wheel client.test.net
/export/client/swap -maproot=root:wheel client.test.net
/export/client/usr -maproot=nobody:nobody client.test.net
/export/client/home -maproot=nobody:nobody client.test.net
Выполним
# ps -aux | grep mountd
Если сервер mountd запущен, выполним kill -HUP для повторного
считывания файла конфигурации /etc/exports. В противном случае,
запустим его:
# /usr/sbin/mountd
Выполним
# ps -aux | grep nfsd
Если демон nfsdaemons не запущен, запустим его:
# /usr/sbin/nfsd -tun 4
В случае, когда NFS сервер не запущен, клиент получит следующее
сообщение:
le(0,0,0,0): Unknown error: code -1
boot: Unknown error: code -1
Если NFS запущен, но не может экспортировать корневой каталог, то
клиент получит сообщение:
boot: no such file or directory
Если у вас все получилось правильно, то вы увидете на экране несколько
строк и вращающийся курсор. Так как клиентская файловая система у нас
еще не создана, то мы получим панику на старте init.
Внесем изменения в /etc/rc.conf
nfs_server=YES # enable server daemons
mountd_flags=""
nfsd_flags="-6tun 4"
dhcpd=YES
dhcpd_flags="-q"
Создание клиентской файловой системы
Для создания файловой системы необходимо выполнить следущие действия:
# cd /export/client/root
Распакуем наборы из дистрибутива NetBSD:
# tar [--numeric-owner] -xvpzf /export/client/NetBSD-release/binary/sets/base.tgz
# tar [--numeric-owner] -xvpzf /export/client/NetBSD-release/binary/sets/etc.tgz
# mkdir /export/client/root/kern
Создадим раздел подкачки в 16 Мб:
# mkdir /export/client/root/swap
# dd if=/dev/zero of=/export/client/swap bs=4k count=4k
Создадим файл /etc/ifconfig.le0, где le0 является именем сетевого
интерфейса в клиентской системе NetBSD. Создаем файл
/export/client/root/etc/ifconfig.le0, содержащий следующую строку:
inet client netmask 255.255.255.0 broadcast 192.168.1.255
В данном примере, маску 255.255.255.0 необходимо заменить на
маску, используемую в вашей сети, также, как широковещательный
адрес 192.168.1.255
Создадим файл /export/client/root/etc/fstab, содержащий следующие
строки:
#/etc/fstab
nfsserver:/export/client/swap none swap sw,nfsmntpt=/swap
nfsserver:/export/client/root / nfs rw 0 0
nfsserver:/export/client/usr /usr nfs rw 0 0
nfsserver:/export/client/home /home nfs rw 0 0
Откроем файл /export/client/root/etc/rc.conf и внесем в него
следующие изменения:
hostname="client"
defaultroute="192.168.1.1"
nfs_client=YES
auto_ifconfig=NO
net_interfaces=""
Внесем изменеия в /export/client/root/etc/hosts:
#/etc/hosts
192.168.1.10 client.test.net client
192.168.1.5 nfsserver.test.net nfsserver
# mv /export/client/root/usr/* /export/client/usr/
Завершение
Первую свою загрузку клиентская машина осуществит в
однопользовательском режиме, после чего необходимо будет создать
устройства в каталоге /dev:
Enter pathname of shell or RETURN for sh:
# mount /usr
# cd /dev
# /bin/sh MAKEDEV all
Проверить работу swap:
# swapctl -A
swapctl: adding nfsserver:/export/client/swap as swap device at priority 0
# swapctl -l
Device 512-blocks Used Avail Capacity Priority
/dev/?? 32768 0 32768 0% 0
И внести очередное изменеие в /etc/rc.conf:
#vi /etc/rc.conf
rc_configured=YES
После чего можно перейти в многопользовательский режим и использовать
рабочую станцию в обычном порядке. После перезагрузки работа станции
ничем не будет отличаться от загрузки с жесткого диска.