Рассмотрена загрузка через Etherboot и PXE.
См. требования к терминальным решениям
Должны быть установлены пакеты: tftp tftp-server dhcp-common dhcp-server nfs-server
Должен работать DNS-сервер, указанный в /etc/dhcp/dhcpd.conf.
Адреса клиента не должно быть в /etc/hosts.deny
Должны быть запущены сервисы dhcpd, nfs, portmap, nfslock, tftp (через xinet.d)
Если сетевая карта отдельная, для загрузки с неё нужно
Для
Готовый загрузчик скачивается с сайта http://rom-o-matic.net
В зависимости от типа, он может грузиться либо через PXE, либо с дискеты.
Без указанного имени файла (file в dhcpd.conf) принимать (DHCP offer) адрес не будет
Если в плату уже встроен загрузчик PXE, задачу можно свести к Etherboot. Загрузчик etherboot должен быть для конкретной сетевой карты.
Сначала к DHCP обращается PXE, получает себе Etherboot-загрузчик. Далее этот загрузчик грузит ядро. Поскольку обращаются они одинаково, проверяем кто именно обращается:
Пример записи в dhcpd.conf:
root-path задаёт параметр nfsroot ядру, указывая, с какой машины, из какого каталога монтировать NFS – в моей сборке этого патча нет.
В параметре filename путь к файлу указывается относительно корневого каталога, указанного для TFTP.
Полный пример:
Удостовериться в правильном пути к каталогу tftp при запуске сервиса. Должен быть /var/lib/tftpboot, баг по этому поводу послан.
Записать в /etc/exports экспорт корневой файловой системы для загружающейся машины
Используется обычное ядро и специально подготовленный initrd. Обратим внимание, что в initrd загружается модуль для сетевой карты, так что надо ли все известные модули по очереди грузить, либо определять сетевую карту, либо initrd делать персональный для каждой карты.
Для initrd нужен специальный busybox с патчем для получения пути для загрузки по nfs (хотя это можно сделать и скриптом по IP в initrd).
Файл с ядром для загрузки должен быть специально подготовлен:
mkelf-linux
VER=`uname -r`
mkinitrd -with nfs -f -v -omit-scsi-modules initrd-up.img ${VER}lav1
mkelf-linux -root-dir=/var/lib/tftpboot/root_system -output=vmlinuz vmlinuz-up initrd-up.img