Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

FreeBSD: сервер сетевой загрузки PXE (наподобие RIS)

Практика



Итак, сегодня наша задача - поднять сервер сетевой загрузки PXE на базе FreeBSD. Для чего:

  • Чтобы диагностические утилиты можно было запускать по сети (MemTest, MHDD и т.п.)
  • Чтобы можно было загрузить LiveCD через сеть
  • Чтобы можно было разворачивать ОС через сеть


На самом деле данная статья описывает только 1й и 2й пункты. Установку Windows 7 и других ОС через PXE - я напишу чуточку позже (ибо это по объему еще столько же).

Использовать для PXE-сервера мы будем пакет syslinux, в купе с местным же DHCP.

Следует сделать вставку нотиса (поди ж кто-то не знает). Машина, которая хочет загрузиться по PXE (т.е. через сеть) получает сетевые реквизиты через DHCP. Это означает как минимум то, что сервер DHCP должен находиться в той же сети, что и загружающийся компьютер - т.е. ДО первого роутера.

1) Первое: нам необходим DHCP сервер для того, чтобы клиенты смогли получить реквизиты. Как такой сервер поднять на FreeBSD - вот ссылка.

После того, как сервер мы поднимем - нужно в его конфиге добавить следующие строчки (в описании зоны):

next-server 192.168.0.1;
filename "gpxelinux.0";

где вместо 192.168.0.1 - укажите IP-адрес сервера PXE.

А также изменить вид объявления диапазона:

range dynamic-bootp 192.168.0.100 192.168.0.200;

т.е. добавить опцию "dynamic-bootp".

получим что-то вроде этого (это только пример):

subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
range dynamic-bootp 192.168.0.100 192.168.0.200;
next-server 192.168.0.1;
filename "gpxelinux.0";
}


И, наконец, перезапускаем сервер DHCP:

$ sudo /usr/local/etc/rc.d/isc-dhcpd restart


2) Устанавливаем TFTP сервер.

Для работы PXE сервера понадобится TFTP. Причем не важно - будете ли Вы в дальнейшем раздавать файлы через HTTP (что быстрее в разы), или так-же через TFTP (что проще) - все равно оно нам надо.

Использовать будем tftp-hpa, т.к. в будущем Вам может понадобиться применять правила замен, чего штатный демон не умеет.

$ cd /usr/ports/ftp/tftp-hpa
$ sudo make install clean


Теперь создаем директорию для PXE сервера.

$ cd /usr/local
$ sudo mkdir pxe
$ sudo mkdir pxe/images
$ sudo mkdir pxe/images/utils
$ sudo mkdir pxe/images/os
$ sudo mkdir pxe/images/livecd
$ sudo mkdir pxe/pxelinux.cfg


Последняя директория (да-да, я не ошибся - это не файл) - это папка для файлов конфигурации syslinux. Директории перед последней - созданы для удобства - чтобы разнести файлы утилит, образов LiveCD и установочных образов, дабы не было свалено оно в одну кучу.


Далее, открываем файл /etc/inetd.conf и приводим строчку tftp к такому виду:

tftp dgram udp wait root /usr/local/libexec/in.tftpd in.tftpd -p -s /usr/local/pxe


И перезапускаем inetd:

$ sudo /etc/rc.d/inetd restart


Логи сервера можно глядеть в /etc/xferlog


3) Устанавливаем syslinux.

Не спешите бежать в порты - да, syslinux есть в портах, но оно нам оттуда не надо! Cкачиваем его отдельно по пути: ссылка

$ cd ~
$ mkdir syslinux
$ cd syslinux
$ fetch http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.05.tar.gz


Распаковываем и копируем нужные файлы:

$ tar -xf syslinux-4.05.tar.gz
$ cd syslinux
$ sudo cp gpxe/gpxelinux.0 /usr/local/pxe/
$ sudo cp com32/menu/menu.c32 /usr/local/pxe/
$ sudo cp com32/menu/vesamenu.c32 /usr/local/pxe/
$ sudo cp com32/modules/reboot.c32 /usr/local/pxe/
$ sudo cp com32/modules/chain.c32 /usr/local/pxe/
$ sudo cp memdisk/memdisk /usr/local/pxe/


4) Данный пункт не обязателен, но очень желателен. Дело в том, что передача больших файлов через TFTP - дело долгое. Зато syslinux умеет использовать HTTP протокол для того же самого - что намного быстрее.

Таким образом мы организуем такую схему:

  • Загрузка pxelinux (syslinux) производится через TFTP
  • Загрузка мелких утилит типа MemTest - тоже через TFTP
  • Загрузка больших файлов - ISO от LiveCD и т.п. - через HTTP


Поэтому поднимаем HTTP-сервер (если у Вас еще не поднят он). Описание установки оного я здесь не буду. Пример установки Apache 2.2 - можно почитать здесь.

После установки Apache - добавляем в его файл конфигурации следующую запись:


Order Deny,Allow
Deny from all
Allow from 192.168.0.0/16
Options Indexes

где вместо 192.168.0.0/16 - указывайте свою рабочую подсеть или набор подсетей.

Теперь делаем симлинк на нашу директорию PXE в рабочую директорию сервера Apache:

$ sudo ln -s /usr/local/pxe /usr/local/www/apache22/data/pxe


и перезапускаем Apache:

$ sudo /usr/local/etc/rc.d/apache22 restart


Если же Вы используете не Apache - то, соответственно, настраивайте сервер подобным образом.


5) Создаем файл конфигурации для syslinux. Создадим мы его на примере использования LiveCD от MfsBSD. Это практически самое простое, что можно сделать.

5а) Скачиваем MfsBSD ISO и ложим в нужное место.

$ cd /usr/local/pxe/images/livecd
$ fetch http://mfsbsd.vx.sk/files/iso/mfsbsd-9.0-RELEASE-i386.iso

Обратите внимание - ссылка может быть другой - проект MfsBSD не стоит на месте. Лучше посетить их сайт (ссылка) и скачать последний образ для нужной архитектуры (я рекомендую x86, как универсальную).


5б) Теперь создаем файл конфигурации syslinux.

/usr/local/pxe/pxelinux.cfg/default:

ui menu.c32
menu title PXE Boot Menu

label boothdd
menu label Boot from Hard Drive
localboot 0

label mfsbsd
menu label MfsBSD LiveCD
kernel memdisk
initrd http://192.168.0.1/pxe/images/livecd/mfsbsd-9.0-RELEASE-i386.iso
append iso raw


Здесь мы задали:

  • Первым пунктом будет "Загрузиться с локального HDD"
  • Вторым: загрузить LiveCD MfsBSD (кстати, пароль для root: mfsroot).


Сохраняем файл.

PS. Если HTTP сервер Вы решили таки не использовать - то файл будет выглядеть вот так:

ui menu.c32
menu title PXE Boot Menu

label boothdd
menu label Boot from Hard Drive
localboot 0

label mfsbsd
menu label MfsBSD LiveCD
kernel memdisk
initrd images/livecd/mfsbsd-9.0-RELEASE-i386.iso
append iso raw


6) Теперь попробуйте загрузить машинку через PXE. Если Вы все делали правильно - она загрузится.


7) Далее меню PXE можно расширять. Ниже я приведу пример своего чернового конфига.

Т.к. syslinux позволяет создавать подменю - мой пример конфига содержит несколько файлов.

  • default: собственно, главное меню.
  • utils.menu : меню Utilities (утилиты)
  • livecd.menu : меню LiveCD
  • os.menu : меню сетевой установки ОС


default:

ui menu.c32
menu title PXE NetBoot

label menu_utils
menu label Utilities
kernel menu.c32
append pxelinux.cfg/utils.menu

label menu_livecd
menu label LiveCD
kernel menu.c32
append pxelinux.cfg/livecd.menu

label menu_os
menu label Setup OS
kernel menu.c32
append pxelinux.cfg/os.menu

label boothdd
menu label Boot from Hard Disk
localboot 0


utils.menu:

menu title Utilities - NetBoot

label menu_os
menu label ^Back
kernel menu.c32
append pxelinux.cfg/default

label memtest
menu label MemTest86
kernel images/utils/memtestp

label wmemtest
menu label Windows Memory Diagnostic
kernel memdisk
initrd images/utils/wmemtest.gz

label mhdd
menu label MHDD
kernel memdisk
APPEND initrd=images/utils/mhdd.img floppy

label hdt
menu label Hardware Detection Tool
kernel images/utils/hdt.c32

label winpwdchange
menu label Windows Password Reset
kernel images/utils/chntpw vga=1
initrd images/utils/chntpw.gz

label acronis
menu label Acronis
kernel http://10.0.1.1/pxe/memdisk
initrd http://10.0.1.1/pxe/images/utils/acronis.iso
append iso raw


livecd.menu:

menu title LiveCD - NetBoot

label menu_livecd
menu label ^Back
kernel menu.c32
append pxelinux.cfg/default

label xplive
menu label Windows XP LiveCD
kernel http://10.0.1.1/pxe/memdisk
initrd http://10.0.1.1/pxe/images/livecd/Windows_XP_Live_CD_Mini.iso
append iso raw

label xplivebig
menu label Windows XP LiveCD (BIG)
kernel http://10.0.1.1/pxe/memdisk
initrd http://10.0.1.1/pxe/images/livecd/LiveXP_RAM.iso
append iso raw

label livelinux
menu label Linux LiveCD (Debian)
kernel http://10.0.1.1/pxe/memdisk
initrd http://10.0.1.1/pxe/images/livecd/debian-livecd.iso
append iso raw

label mfsbsd
menu label MfsBSD
kernel http://10.0.1.1/pxe/memdisk
initrd http://10.0.1.1/pxe/images/livecd/mfsbsd-9.0-RELEASE-i386.iso
append iso raw


os.menu:

menu title Install OS - NetBoot

label menu_os
menu label ^Back
kernel menu.c32
append pxelinux.cfg/default

label iwin7
menu label Install Windows 7 Professional SP1 x86 GGWA (KMS)
kernel http://10.0.1.1/pxe/memdisk
initrd http://10.0.1.1/pxe/images/os/win7/winpe_x86.iso
append iso raw


Как видно - файлы конфигурации содержат в себе самые разнообразные виды запуска утилит. Например, если мы хотим просто загрузить в память машины некий ISO и считать его, как будто это компакт-диск, вставленный в привод - то используем ядро memdisk (кстати, не надо пробовать подсунуть ему ISO размером в пару гигов - это не вариант, поверьте).

Сами файлики я выкладывать не буду (по крайней мере пока) - рекомендую расковырять такие диски, как Hiren, Infra и т.п. - на них есть некоторое количество утилит, которые подходят для нас (да те же MemTest и MHDD). Открыв эти диски можно так-же найти примерно - как оно должно запускаться.

LiveCD образы Windows я брал готовыми ISO - и работает. То же самое касается и LiveCD FreeBSD. Linux для LiveCD нужно подбирать - чтобы заработал - запускается не все.



PS. В следующих статьях я расскажу - как разворачивать через сеть Windows 7 и Linux. На самом деле не так оно все очевидно и просто - мне пришлось собирать установку Windows 7 через PXE syslinux, буквально говоря, из ТРЕХ разных статей на разных языках с разных ресурсов.

Актуально для: FreeBSD 8.x+

создано: 2017-05-09
обновлено: 2022-01-31
136156



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Компьютерные сети

Термины: Компьютерные сети