Единый загрузочный образ для нескольких сетевых станций QNX 4

Жавнис Роман, Скосаренко Антон

Основной недостаток рассмотренного в [1] метода сетевой загрузки – необходимость создания индивидуального загрузочного образа для каждой сетевой станции в сети. Кроме того, эти образа жестко привязаны к MAC-адресу сервера. При замене сетевого адаптера сервера Вам придется пересобрать образа всех сетевых станций. Согласитесь, нельзя рассчитывать, что квалификации администратора на объекте внедрения хватит для осуществления этого действия.

Конечно, любой процесс можно автоматизировать, разработав дополнительное программное обеспечение. Но ОС QNX 4 предоставляет нам простой вариант гибкой настройки сетевой загрузки. Рассмотрим файл построения загрузочного образа, разработанный для нашего проекта:

/boot/sys/boot
$ boot -v
 
/boot/sys/Proc32
$ Proc32 -l $(lnode) -D
 
/boot/sys/Slib32
$ Slib32
 
/bin/Net
$ Net -m $(netmap)
 
/bin/Net.rtl 
$ Net.rtl -I0
 
/bin/sinit
$ sinit -r //$(bnode)/ -i //$(bnode)/etc/config/sysinit.$(lnode) TERM=qansi 

Непринципиальное отличие от приведенного в [1] образа: мы использовали более распространенный на наш взгляд сетевой адаптер на чипсете Realtek 8139 (вместо драйвера Net.r6040 используется драйвер Net.rtl). Весь «секрет»  же заключается в использовании трех макросов вместо фиксированных констант, привязывающих образ к конкретным узлам сети и MAC-адресу. Вот значения этих макросов:

$(lnode) – номер узла, для которого создается образ (в нашем случае номер сетевой станции);

$(bnode) – номер узла, на котором собирается образ (сервер сетевой загрузки);

$(netmap) – привязка узла, на котором собирается образ, к MAC-адресу.

Заменяет макросы значениями утилита buildqnx. Передает же ей эти значения сервер протокола TFTP, есть у него в QNX4 такая возможность!

А теперь главное: образ мы собирать вообще не будем! Файл построения помещаем в предназначенный для него каталог /boot/build под именем, например, ws.rtl.

Переходим к редактированию файла конфигурации inetd.conf. Необходимо чтобы сервер tftpd запускался от имени обычного пользователя. Соответствующая строка в файле будет выглядеть так:

tftp        dgram       udp   wait   ftp   /usr/ucb/tftpd   in.tftpd

У нас это заранее созданный пользователь ftp. Если в вашей системе протокол FTP разрешен, проверьте что сервера ftpd и tftpd, запускаются от имени разных пользователей.

Следующий шаг – модификация файла /etc/ bootptab. Здесь, к сожалению, придется по прежнему прописывать отдельную строку загрузки для каждой сетевой станции. Проверьте правильность указания IP и MAC адресов:

nodertl:ht=ethernet:ha=00E000F443E3:ip=192.168.1.35:\
bf=|buildqnx -b0x8000 /boot/build/ws.rtl /home/ftp/t; cat /boot/qpxe /home/ftp/t:

Параметр bf выглядит не как имя файла-образа, а как последовательность команд. Сервер bootpd значение этого параметра не анализирует, а передает «как есть» загружающейся сетевой станции. Та в свою очередь аналогично, не проявляя излишнего интеллекта, передает значение по протоколу TFTP, как имя запрашиваемого загрузчика ОС. Разбирает же строку параметра только сервер tftpd. Именно он по первому символу ‘|’ определяет, что перед ним не имя файла, а последовательность команд. Подразумевается, что, исполнив команды, сервер на стандартном выводе получит содержимое запрашиваемого клиентом (загрузчиком PXE) файла.

В приведенном примере параметр bf содержит две команды, разделенные точкой с запятой. Рассмотрим их. Первая команда:

buildqnx -b0x8000 /boot/build/ws.rtl /home/ftp/t

Здесь собирается загрузочный файл-образ QNX4. Выполняя эту команду, tftpd передает buildqnx значения макросов для подстановки в файл образа. Действительно, номер узла и MAC сервера на момент загрузки сетевой станции известны и неизменны. Номер же узла для присвоения самой станции берется из настроек netmap на основе MAC-адреса, с которого от станции пришел запрос загрузчика. Сохраняется образ во временный файл в каталоге пользователя, от имени которого запущен tftpd (в этот каталог tftpd гарантировано сможет сохранить файл).

Вторая команда:

cat /boot/qpxe /home/ftp/t

Подставляет в начало загрузочного образа загрузчик PXE, разработанный компанией «СВД Встраиваемые системы». Его назначение – передача управления со стандартного для PXE смещения 0x7C00 на используемое в QNX 0x8000. Необходимостью соединения двух загрузчиков и обусловлено использование временного файла.

После загрузки всех модулей, указанных в нашем файле построения, управление будет передано файлу /etc/config/sysinit.$(lnode) на сервере загрузки. Если сетевые станции абсолютно идентичны, достаточно создать для них на сервере общий файл с именем /etc/config/sysinit. В таком случае параметр “-i” и имя файла после него в последней строке нашего файла построения можно не указывать вовсе.

Финальным действием при настройке сетевой загрузки является включение всех сетевых станций в файл настройки netmap (/etc/config/netmap) и /etc/hosts.

Литература:

1. http://www.kpda.ru/Publications/QNX4PXEBooting