В статье рассказано, как настроить бездисковую рабочую станцию для загрузки по сети с помощью сетевого адаптера, поддерживающего технологию Preboot Execution Environment (PXE). PXE широко поддерживается производителями сетевых карт (Intel, 3Com и т.д.), материнских плат, а также программ эмуляции, таких как VMWare. Файловые системы и swap размещаются на сервере и предоставляются клиенту через NFS. Сначала необходимо создать файловую систему для клиента. Проще всего это сделать, распаковав сеты на существующую файловую систему (в данном случае base38.tgz и etc38.tgz, остальные сеты распаковываются по мере надобности). # mkdir -p /home/diskless/root # tar xzpf base38.tgz -C /home/diskless/root # tar xzpf etc38.tgz -C /home/diskless/root Также необходимо создать файл подкачки. На клиентской машине экспортированный swap файл монтируется к пустой директории /home/diskless/root/swap, которая после монтирования станет файлом. Суть операции в том, чтобы swap файл получил inode на файловой системе и swapctl(8) смог его подключить. Создадим файл и директорию: # mkdir /home/diskless/root/swap # dd if=/dev/zero of=/home/diskless/swap bs=1m count=128 # chmod 600 /home/diskless/swap Создадим стандартные устройства: # cd /home/diskless/root/dev && ./MAKEDEV all Для того чтобы собрать ядро для бездисковой станции, необходимо установить исходные коды из файла sys.tar.gz. Создадим новый файл конфигурации ядра на основе ядра GENERIC: # cd /sys/arch/i386/conf # cp GENERIC DISKLESS Теперь необходимо отредактировать файл DISKLESS и заменить в нем строку: config bsd swap generic на config bsd root on nfs swap on nfs Соберем ядро, но пока не будем его никуда инсталлировать: # config DISKLESS # cd ../compile/DISKLESS # make depend && make Далее необходимо настроить сервер так, чтобы он мог предоставить клиенту сетевую информацию и файловые системы. PXE содержит в себе DHCP-клиент, который позволяет получить сетевую информацию, а также имя файла, который необходимо загрузить встроенным TFTP клиентом для продолжения загрузки. Это копия файла /usr/mdec/pxeboot. После загрузки этого файла в память на него передается управление, а он в свою очередь представляет собой модифицированную версию загрузчика boot(8), способного обрабатывать те же команды, а также поддерживающего загрузку ядра по TFTP. В данном случае управляющий файл boot.conf(5) располагается на сервере. Выполним конфигурацию DHCP и TFTP сервисов. Для настройки необходимо знать MAC-адрес сетевой карты клиента. Для примера будем считать, что это 00:02:b3:5c:1e:81. IP адрес сервера 10.0.1.1, клиента: 10.0.1.2. Бездисковый клиент назовем netboot. Настроим DHCP сервис: # vi /etc/dhcpd.conf shared-network LOCAL-NET { option domain-name "example.com"; option domain-name-servers 10.1.1.1; option routers 10.0.1.1; subnet 10.0.1.0 netmask 255.255.255.0 { range 10.0.1.32 10.0.1.127; } } host netboot { hardware ethernet 00:02:b3:5c:1e:81; filename "pxeboot"; fixed-address 10.0.1.2; } Запустим dhcpd на требуемом интерфейсе (для примера взят xl0): # dhcpd xl0 Для того, чтобы стартовать dhcpd при загрузке системы, выполните: # echo 'dhcpd_flags=""' >>/etc/rc.conf.local # echo 'xl0' >>/etc/dhcpd.interfaces Настроим TFTP сервис. TFTP запускается через inetd, поэтому необходимо раскомментировать строку: tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot и перезагрузить конфигурацию inetd: # kill -HUP `head -1 /var/run/inetd.pid` Создадим директорию /tftpboot и скопируем в нее необходимые файлы (загрузочный код pxeboot и файл ядра bsd для бездисковой станции): # mkdir /tftpboot # cp /sys/arch/i386/compile/DISKLESS/bsd /tftpboot/ # cp /usr/mdec/pxeboot /tftpboot/
Если вы не планируете производить установку OpenBSD по сети
( # mkdir /tftpboot/etc # echo 'boot tftp:bsd' >/tftpboot/etc/boot.conf Теперь разберемся с монтированием файловых систем по NFS. Для того чтобы получить параметры об экспортированных на сервере файловых системах, клиентское ядро посылает специальный BOOTPARAM запрос (перед этим система должна узнать определенное ей имя - это выполняется в ходе Reverse ARP запроса, который отрабатывается сервисом rarpd(8)). На запрос BOOTPARAM отвечает сервис rpc.bootparamd(8). Перейдем к их настройке. Сервис rarpd работает с двумя файлами: /etc/ethers, в котором хранится соответствие MAC-адресов и символьных имен, а также /etc/hosts, с помощью которого по известному имени можно получить IP-адрес. # echo '00:02:b3:5c:1e:81 netboot' >>/etc/ethers # echo '10.0.1.2 netboot' >>/etc/hosts Запустим rarpd и настроим автоматическую загрузку при старте системы: # rarpd xl0 # echo 'rarpd_flags="xl0"' >>/etc/rc.conf.local Сервис rpc.bootparamd настраивается через конфигурационный файл /etc/bootparams: # vi /etc/bootparams netboot root=10.0.1.1:/home/diskless/root \ swap=10.0.1.1:/home/diskless/swap \ dump=10.0.1.1:/home/diskless/swap Настроим автоматический запуск rpc.bootparamd и запустим его (portmap должен быть также запущен, поскольку именно он реализует маппинг TCP или UDP портов на номера RPC программ): # portmap # rpc.bootparamd # echo 'bootparamd_flags=""' >>/etc/rc.conf.local
Запись Выполним конфигурацию NFS сервера (предполагается, что NFS сервер выключен). Добавьте записи об экспортируемых файловых системах в /etc/exports: # vi /etc/exports /home/diskless/root -maproot=root -alldirs 10.0.1.2 /home/diskless/swap -maproot=root 10.0.1.2 Запустим компоненты: # touch /var/db/mountdtab # mountd # nfsd -tun 4 И настроим автоматический запуск: # echo 'portmap=YES' >>/etc/rc.conf.local # echo 'nfs_server=YES' >>/etc/rc.conf.local Теперь сделаем ряд настроек клиентской машины. Отредактируем /etc/fstab: # vi /home/diskless/root/etc/fstab 10.0.1.1:/home/diskless/root / nfs rw 0 0 10.0.1.1:/home/diskless/swap none swap sw,nfsmntpt=/swap 0 0 Также следует указать имя клиентского хоста, IP-адреса шлюза и DNS-сервера: # echo 'netboot' >/home/diskless/root/etc/myname # echo '10.0.1.1' >/home/diskless/root/etc/mygate # echo 'nameserver 10.0.1.1' >/home/diskless/root/etc/resolv.conf
Примечание. При получении бездисковой
станции сетевых настроек с помощью DHCP, в связи с особенностями стартового
сценария /etc/netstart, в hostname.if(5)
необходимо указать запуск dhclient(8),
а не использовать ключевое слово " # vi /home/diskless/root/etc/hostname.xl0 !/sbin/dhclient -q \$if Установим временную зону для клиентской системы. Для примера возьмем московское летнее время (UTC+003). Смещение в этом случае составляет -180 минут. Установим эти значения: # cd /home/diskless/root/etc # ln -fs /usr/share/zoneinfo/Europe/Moscow localtime # config -ef /tftpboot/bsd OpenBSD 3.8-stable (DISKLESS) #0: Tue Jan 24 11:52:24 MSK 2006 root@ultra.crypt.org.ru:/sys/arch/i386/compile/DISKLESS Enter 'help' for information ukc> timezone timezone = 0, dst = 0 ukc> timezone -180 timezone = -180, dst = 0 ukc> quit Saving modified kernel. На этом настройка завершена. Теперь можно запустить бездисковый клиент. |