Сервер сетевой загрузки (PXE) на Freebsd ч.1 - Настройка сервера

 Устав от однотипных операций установки различных операционных систем, задумался, каким образом это можно все упростить, чтобы не прожигать болванки каждый раз, т.к. при моей аккуратности они имеют свойств царапаться, теряться. Тем более, что не на всех компьютерах (серверах) присутствуют устройства чтения CD-DVD, а значит надо создавать загрузочные устройства на флешках. Выбор пал на установку (загрузку) операционных систем по сети.

 
Итак, что можно использовать? Если устанавливать продукты только от Microsoft, то можно воспользоваться WDS (Windows Deployment Server) и SMS (System Management Server). Конечно существует возможность установки Linux c  помощью MS WDS - WDSLinux, но учитывая мое отношение к MS, эта возможность была откинута сразу же. 
 
В итоге останавливаемся на утилитах Питера Арвина Syslinux, тем более что старая машинка с FreeBSD в наличии уже есть (используется для мелких внутренних вэб-приложений).
 
Для решения данной задачи нам понадобятся DHCP, tftp, ну и утилиты из пакета Syslinux, в дальнейшем понадобятся samba (для установки Windows) и NFS (для установки Unix-like систем), в данной части их настройку рассматривать не будем.
 
Т.к. DHCP сервер в сети уже присутствует (на базе Win2003), то используем его. Открываем оснастку  DHCP и переходим в параметры нашей области.
 
Добавляем параметры - 066 - имя узла сервера загрузки и указываем адрес нашего  сервера загрузки. А также - 067 - Имя файла загрузки - gpxelinux.0
 

Если у Вас DHCP под Linux, то необходимо добавить следущие строки в описание области в /usr/local/etc/dhcp.conf:

next-server 192.168.1.5;  # TFTP server address
filename "gpxelinux.0";   # PXE boot loader filename
 
Переходим к настройке TFTP, т.к. стандартный нам не подойдет, по крайней мере потому, что не поддерживает правила (необходимы для установки Windows), то будем использовать  - tftp-hpa
Создаем папки -
# mkdir -p /usr/tftpboot/images
# mkdir /usr/tftpboot/pxelinux.cfg
Устанавливаем -
# cd /usr/ports/ftp/tftp-hpa
# make install clean
Включаем TFTP сервер -
# ee /etc/inetd.conf
и редактируем строку с tftp до такого состояния -
tftp    dgram   udp     wait    root    /usr/local/libexec/in.tftpd     in.tftpd -p -s 
/usr/tftpboot -B 1024
Добавляем в /etc/rc.conf -
inetd_enable="YES"
И перезапускаем inetd -
/etc/rc.d/inetd restart
Логи этого tftp сервера можно будет смотреть в  /var/log/xferlog
На этом пока с tftp закончили.
 
Перейдем к утилитам syslinux -
Т.к. на момент написания статьи сайт проекта Syslinux был недоступен, то скачиваем их отсюда.
 
Для скачивания я использовал wget, у кого не установлен, то
cd /usr/ports/ftp/wget
make install clean
rehash
Скачиваем
wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.04.tar.gz
Распаковываем
tar xvfz syslinux-4.04.tar.gz
И копируем
#cp /home/user/syslinux-4.04/gpxe/gpxelinux.0 /usr/tftpboot/
#cp /home/user/syslinux-4.04/com32/menu/menu.c32 /usr/tftpboot/
#cp /home/user/syslinux-4.04/com32/menu/vesamenu.c32 /usr/tftpboot/
#cp /home/user/syslinux-4.04/com32/modules/reboot.c32 /usr/tftpboot/
#cp /home/user/syslinux-4.04/com32/modules/chain.c32 /usr/tftpboot/
#cp /home/user/syslinux-4.04/memdisk/memdisk /usr/tftpboot/
 
Где 
gpxelinux.0 - загрузчик PXE (PXE boot loader)
menu.c32 - модуль текстового меню
vesamenu.c32 - модуль графического меню
reboot.c32 - модуль перезагрузки
chain.c32 - chain loader module
memdisk - Эмулятор memory disk
 
Файлы конфигурации находятся в каталоге /usr/tftpboot/pxelinux.cfg
Создадим файл параметров главного меню
touch /usr/tftpboot/pxelinux.cfg/default
Дальнейшую настройку рассмотрим на основе примера, добавим в сетевую загрузку FreeBSD LiveCD - mfsBSD
 
wget h_ttp://mfsbsd.vx.sk/iso/mfsbsd-se-8.2-i386.iso
mkdir /usr/tftpboot/images/mfsbsd
cp /tmp/mfsbsd-8.2-i386.iso /usr/tftpboot/images/mfsbsd
Для ускорения загрузки рекомендуется сжимать образы с помощью zip или gzip, но я не стал.
добавляем в /usr/tftpboot/pxelinux.cfg/default
ui menu.c32
menu title Utilities
	 
label mfsbsd
  menu label ^MfsBSD
  kernel memdisk
  initrd images/mfsbsd/mfsbsd-8.2-i386.iso 
  append iso raw
 
Где 
ui -  подключаем menu.c32 модуль текстового меню
menu title - заголовок главного меню
label - создаем пункт меню
menu label - заголовок пункта меню
kernel - загрузка ядра, путь начинает с корневого каталога tftp сервера - /usr/tftpboot/
append - добавляет опции командной строки для ядра
initrd - путь до инициализируемого образа.
 
Добавим в этот же файл пункт меню перезагрузки -

label reboot
  menu label Reboot
  kernel reboot.c32
 
Проверяем, выставляем в BIOS - загрузку по сети -
 
Все работает и загружаеццо.
В принципе первоначальная настройка сервера на этом закончена, но поговорим еще о некоторых моментах.
 
Протокол tftp довольно медленный, ускорить загрузку можно например используя http, тем более что на моем серевере apache22 уже стоял, итак попробуем
 
Для Apache делаем ссылку на наш каталог -
ln -s /usr/tftpboot/images/ /usr/local/www/apache22/data/
в файл httpd.conf добавляем -
ee /usr/local/etc/apache22/httpd.conf
<Directory "/images">
	   Order Deny,Allow
	   Deny from all
	   Allow from 192.168.1.0/24
	   Options Indexes
</Directory>
Перезапускаем Apache и правим наш файл - /usr/tftpboot/pxelinux.cfg/default, меняя протокол с tftp на http -
 label mfsbsd
   menu label ^MfsBSD
   kernel h_ttp://192.168.1.5/memdisk
   initrd  http://192.168.1.5/images/mfsbsd/mfsbsd-8.2-i386.iso 
   append iso raw
И пробуем загрузиться. Скорость загрузки увеличилась в разы.
 
Для дальнейшего примера добавим еще memtest86 и Hardware Detection Tools
 
 Memtest
wget http://downloads.sourceforge.net/project/systemrescuecd/sysresccd-x86/2.5.0/systemrescuecd-x86-2.5.0.iso 
# mkdir /usr/tftpboot/images/memtest/
# mount -t cd9660 /dev/`mdconfig -f systemrescuecd-x86-2.5.0iso` /mnt
# cp /mnt/bootdisk/memtestp /usr/tftpboot/images/memtest
# umount /mnt
И добавляем в файл нашего меню default -
  label memtest
	 menu label ^Memtest
	 kernel images/memtest/memtestp
 
 Hardware Detection Tools 
Эта утилита включена в состав Syslinux, поэтому просто копируем ее оттуда
cp /tmp/syslinux-4.04/com32/hdt/hdt.c32 /usr/tftpboot/
И добавляем в default
label hdt
 menu label ^Hardware Detection Tool
 kernel hdt.c32
 
Поговорим еще о меню загрузки, что еще можно сделать для удобства и украшательства? Первое - это можно сделать меню многоуровневым, второе - это использовать любой фон для меню (графический режим).
 
 Рассмотрим пример многоуровнего меню -
Приведу листинг конфигурационный файлов:
/usr/tftpboot/pxelinux.cfg/default - описание разделов основного меню
Развернуть или свернуть блок текста
 
            default menu.c32
	    prompt 0
	 
	    menu title Welcome PXE Boot Menu
	    menu INCLUDE pxelinux.cfg/graphics.conf
	    MENU AUTOBOOT Starting Local System in # seconds
	 
	    label bootlocal
	        menu label ^Boot from Local hard disk
	        menu default
	        localboot 0
	        timeout 80
	        TOTALTIMEOUT 9000
	 
	    LABEL LiveCD
	        MENU PASSWD 1234567
                MENU LABEL ^LiveCD
	        KERNEL menu.c32
	        APPEND pxelinux.cfg/graphics.conf pxelinux.cfg/livecd.menu
	 
	    LABEL Utilites
	        MENU LABEL ^Utilities
	        KERNEL menu.c32
	        APPEND pxelinux.cfg/graphics.conf pxelinux.cfg/utilities.menu
	 
	    LABEL Setup OS Menu
	        MENU LABEL ^Install system
	        KERNEL menu.c32
	        APPEND pxelinux.cfg/graphics.conf pxelinux.cfg/setup.menu
	 
	    LABEL reboot
	    menu label ^Reboot
	    kernel reboot.c32
 
/usr/tftpboot/pxelinux.cfg/graphics.conf - параметры меню (цвет, размеры, задержка загрузки и т.д.)
Развернуть или свернуть блок текста
 
        menu color tabmsg 37;40      #80ffffff #00000000
	menu color hotsel 30;47      #40000000 #20ffffff
	menu color sel 30;47      #40000000 #20ffffff
	menu color scrollbar 30;47      #40000000 #20ffffff
	MENU MASTER PASSWD 444444
	MENU WIDTH 80
	MENU MARGIN 22
	MENU PASSWORDMARGIN 26
	MENU ROWS 10
	MENU TABMSGROW 15
	MENU CMDLINEROW 15
	MENU ENDROW 26
	MENU PASSWORDROW 12
	MENU TIMEOUTROW 25
	MENU VSHIFT 6
	MENU PASSPROMPT Enter Password:
	NOESCAPE 1
	ALLOWOPTIONS 0
 
/usr/tftpboot/pxelinux.cfg/livecd.menu - описание дополнительного меню
Развернуть или свернуть блок текста
 
            MENU TITLE LiveCD
	 
	    LABEL LiveCD
	        MENU LABEL ^Return to Main Menu
	        KERNEL menu.c32
	        APPEND pxelinux.cfg/default
	 
	    label MfsBSD
	        menu label ^MfsBSD
	        kernel memdisk
	        initrd images/mfsbsd/mfsbsd-se-8.2-i386.iso
	        append iso raw
	 
	    label Systemrescue
	        menu label ^System Rescue CD
	        kernel images/systemrescuecd/rescuecd
	        append setkmap=ru netboot=tftp://10.218.138.246/images/systemrescuecd/sysrcd.dat
	        initrd images/systemrescuecd/initram.igz
	 

 

/usr/tftpboot/pxelinux.cfg/setup.menu

/usr/tftpboot/pxelinux.cfg/Utilities.menu - также являются дополнительными пунктами меню и заполняются подобно  livecd.menu, в зависимости от вносимых в него приложений.

Создание меню в графическом режиме (использование фона и т.п.) -
Файл default будет начинаться
ui vesamenu.c3
menu title Utilities
menu background backgnd.png
	 
Где backgnd.png - это графическое изображение в формате PNG, размером 640x480 - 8bit.
 
 
Вот теперь про сервер вроде все, остальные настройки будем делать по мере необходимости. В следующих частях рассмотрим возможность установки разных дистрибутив как Windows, так и Unix-Like.
При изучении данного вопроса очень помогли статьи  Сергея Крутских в журнале Системный администратор и материалы сайта wonkity.com

 

 

Также интересно:

Интересное на сайте: 
5
Ваша оценка: Нет Средняя: 5 (2 оценок)

Комментарии

Не получается запустить Live CD systemrescuecd.
На пункте где через tftp загружается sysrcd.dat доходит до 10% и сбрасывается на 0 и снова
sysrcd.md5 загружается нормально.

Попробуйте загрузить по http или nfs, если не получится отпишите. В понедельник на работу выйду, гляну.
Upd: По http загружается отлично и быстро

Дополнительно замечу:
1) Не загружался LiveCD - mfsBSD пришлось из /usr/tftpboot/pxelinux.cfg/default
строка append iso raw убрать опцию raw - все заработало
2)Приведенный bootlocal не работает - переделал на
label bootlocal
menu label ^Boot from Local hard disk
menu default
kernel chain.c32
append hd0 0
timeout 80
TOTALTIMEOUT 9000

День добрый! Задался вопростом сделать отключение машинки из меню. Не подскажите как его правильно сделать? Добавил файлик poweroff.com в корень
label shutdown
    menu label power off
    comboot poweroff.com
Проблемка в том, что виртуалка (Oracle VM) отключается, а реальная машина нет. На мгновенье вылетает APM not present. гуглил, но что-то не особо результативно..Версия syslinux 4.04-4.06 без разницы.
В версиях после 4.06 этот файл вообще отсутствует (