Уважаемые гости и пользователи форума!
Если Вы были зарегистрированы на старом форуме, а здесь не можете зайти под своей учётной записью, пожалуйста, сообщите свой ник мне через контактную форму "Связаться с администрацией"

[How To] Поднимаем сервер PXE-Boot на Debian 7

В этом Вы найдёте самые разнообразные пошаговые инструкции по установке и обслуживанию системы.

Модераторы: rewuxiin, kulia

Правила форума
Условием использования нашего форума, является соблюдение настоящих Правил форума.

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам, а вы рискуете получить предупреждение.
Аватара пользователя
SinglWolf
Контактная информация:
Откуда: Башкирия
Сообщения: 1652
Зарегистрирован: 23 янв 2012, 22:11

[How To] Поднимаем сервер PXE-Boot на Debian 7

16 ноя 2013, 09:47

Поднимаем сервер PXE-Boot на Debian 7
Что можно сделать с этим Для просмотра ссылок Вы должны быть авторизованы на форуме.-boot'ом? Зачем он нужен? *SCRATCH* Ну... Рассуждать можно долго и нудно. Достоинства там расписывать, возможности в теории... :-) Я поступлю проще. Расскажу с из-за чего у меня возникла идея поднять сервер PXE-Boot на Debian 7 и во что это вылилось на данный момент.

Вот во что это вылилось на данный момент: Сервер Сетевой Установки ОС по локальной сети Ultimate Deployment Appliance RUS [Релизы].
Как включить на компьютере, который надо загрузить по сети, опцию загрузки в BIOS смотрите здесь.
А началось это с того, что возникла нужда установить на старенький ноутбук у которого CD-привод приказал долго жить ОС Windows XP. Единственное решение, которое заработало - PXE-boot. Потом на очереди подошла Windows 7, Debian, Ubuntu и т.д. Ну, ладно, ОС устанавливаются, что можно ещё организовать? Да много чего. Например, тест памяти Memtest86+, Acronis, Clonezilla, Paragon Hard Disk Manager и т.д. и т.п. В итоге у меня получился реанимационный комплекс. В интернете полно всяких описаний как сварганить себе флешку-реаниматор. А у меня получился сервер-реаниматор. Да и поднять его оказалось не так сложно. Муторно, да. Но если всё делать постепенно, по мере необходимости, то и не возникнет никаких трудностей. Убедил? Тогда вперёд! :-)
Описание служб
Для организации полноценного сервера PXE-boot на Debian 7 нам нужно установить несколько служб. Я их перечислю в порядке установки и кратко поясню для чего они нужны.
  • Устанавливаемые службы:
  • Служба DHCP - раздаёт настройки сети и информацию о том, где искать загрузочные файлы и какой из них запускать первым (dhcp3-server).
  • Служба TFTP - раздаёт загрузочные файлы на начальном этапе (tftpd-hpa).
  • Служба Syslinux предоставит нам меню для выбора ОС и опций её загрузки.
  • Служба доступа к файлам - будет раздавать файлы на поздних этапах по протоколам SMB, NBD, HTTP, NFS и т.д.
  • Служба кэширующий прокси - будет хранить копии устанавливаемых пакетов разных дистрибутивов Linux (Apt-Cacher-Ng)
Приступим к установке служб. Исходные данные сервера:
Доменное имя: debmirror.lan
IP-адрес: 192.168.1.111
Шлюз: 192.168.1.1
Маска: 255.255.255.0

Установка службы DHCP


Устанавливаем isc-dhcp-server: популярный DHCP сервер, ставший стандартом де-факто для большинства UNIX систем.

Код: Выделить всё

aptitude install isc-dhcp-server
Приступаем к настройке. Для начала изменим настройки по-умолчанию:

Код: Выделить всё

nano /etc/default/isc-dhcp-server
Нужные нам строки поясню в комментариях:

Код: Выделить всё

# Defaults for isc-dhcp-server initscript
# sourced by /etc/init.d/isc-dhcp-server
# installed at /etc/default/isc-dhcp-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
# Путь к файлу конфигурации сервера. Изменим, т.к. будем писать свой конфиг
DHCPD_CONF=/etc/dhcp/pxeboot.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPD_PID=/var/run/dhcpd.pid

# Additional options to start dhcpd with.
#Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#Separate multiple interfaces with spaces, e.g. "eth0 eth1".
# Имена сетевых интерфейсов, которые будет обслуживать сервер. Если на
# вашем сервере их несколько, разделяйте пробелами, например, так "eth0 eth1".
INTERFACES="eth0"
Теперь напишем свой конфигурационный файл:

Код: Выделить всё

nano /etc/dhcp/pxeboot.conf
Содержание такое:

Код: Выделить всё

  default-lease-time 600;
  max-lease-time 7200;
  ddns-update-style none; ddns-updates off;
  allow booting;
# Прописываем что как назвывается и где находится
  option domain-name "debmirror.lan";
  option domain-name-servers 192.168.1.1;
  option routers 192.168.1.1;

  # Правила идентификации DHCP запросов от PXE и Etherboot клиентов.
  class "pxe" {
      match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
  }
  class "etherboot" {
      match if substring (option vendor-class-identifier, 0, 9) = "Etherboot";
  }
  # Выделяем ппул адресов для клиентов pxe и etherboot
  subnet 192.168.1.0 netmask 255.255.255.0 {
      option broadcast-address 192.168.1.255;
      pool {
           default-lease-time 180; # выдавать аренду дольше нет смысла
           max-lease-time 360;     # максимальное время аренды
           server-name "debmirror.lan"; # имя pxe-севера
           next-server 192.168.1.111; # в мануалах пишут, что можно прописывать
                                      # доменное имя, но здесь лучше так
           filename "pxelinux.0";     # имя загрузочного файла
           option root-path "192.168.1.111:/mirror/tftp"; # указываем путь к
                                                          # каталогу явно
           allow members of "pxe"; # разрешаем pxe
           allow members of "etherboot"; # разрешаем etherboot
           range 192.168.1.50 192.168.1.59; # количество возможных клиентов
           }
  }

Замечание: dhcp-server настроен раздавать адреса только для pxe- и etherboot-клиентам.

Перезапустим isc-dhcp-server для применения новых настроек:

Код: Выделить всё

/etc/init.d/isc-dhcp-server restart
Пока с этой службой закончим. В дальнейшем мы с Вами к ней ещё вернёмся добавить пару-тройку строк в конфиг, не более. :-)


Установка Службы TFTP

Устанавливаем tftpd-hpa: TFTP-сервер с поддержкой специфичных требований к PXE. Единственный, по-крайней мере известный мне, сервер, который "умеет" переименовывать файлы "на лету" (зачем это нам надо, спросите Вы? Мы с этим столкнёмся при установке ОС Windows. Там я опишу эту проблему подробнее).

Код: Выделить всё

aptitude install tftpd-hpa
Во время установки нас может быть попросят указать путь к корневому каталогу с загрузочными файлами.

Код: Выделить всё

/mirror/tftp
Запускаем более подробную настройку сервера:

Код: Выделить всё

dpkg-reconfigure tftpd-hpa
► Показать
Или отредактировать конфигурационный файл,

Код: Выделить всё

nano /etc/default/tftpd-hpa
вручную изменить настройки

Код: Выделить всё

TFTP_USERNAME="tftp"
 TFTP_DIRECTORY="/mirror/tftp"
 TFTP_ADDRESS="0.0.0.0:69"
 TFTP_OPTIONS="--secure"
и перезапустить TFTP-сервер

Код: Выделить всё

/etc/init.d/tftpd-hpa restart
Важно: TFTP сервер раздаёт содержимое только указанного корневого каталога.
Так, TFTP у нас установлен и настроен, идём дальше.


Установка Syslinux

Устанавливаем Для просмотра ссылок Вы должны быть авторизованы на форуме. (вернее не сам Syslinux, а только его часть, где находятся нужные нам файлы). Актуальная версия Для просмотра ссылок Вы должны быть авторизованы на форуме.

Код: Выделить всё

cd /mirror/tftp/
mkdir syslinyx
cd syslinyx
wget https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.xz
tar -xpJf syslinux-6.03.tar.xz 
Теперь приступим, пожалуй, к самому главному - научим наш сервер сервер видеть в локальной сети "клиентов", жаждущих загрузки и выдавать им такое вот меню (забегу не много вперёд :-[ ):
► Показать
Переходим в корень каталога TFTP:

Код: Выделить всё

cd /mirror/tftp
и создаём каталог для конфигурационного файла нашего будущего меню:

Код: Выделить всё

mkdir pxelinux.cfg
также создадим каталог boot (имя не критично) для хранения служебных файлов меню:

Код: Выделить всё

mkdir boot
скопируем в каталог boot необходимые файлы из распакованного нами ранее архива:

Код: Выделить всё

cd boot/
find /mirror/tftp/syslinux/syslinux-6.03/ -name "memdisk" -exec cp '{}'  . \;
find /mirror/tftp/syslinux/syslinux-6.03/bios/com32 -name "chain.c32" -exec cp '{}'  . \;
find /mirror/tftp/syslinux/syslinux-6.03/bios/com32 -name "vesamenu.c32" -exec cp '{}'  . \;
find /mirror/tftp/syslinux/syslinux-6.03/bios/com32 -name "menu.c32" -exec cp '{}'  . \;

далее в корень каталога TFTP скопируем главный загрузочный файл pxelinux.0 и библиотеки:

Код: Выделить всё

cd ..
find /mirror/tftp/syslinux/syslinux-6.03/* -name "pxelinux.0" -exec cp '{}'  . \;
find /mirror/tftp/syslinux/syslinux-6.03/* -name "ldlinux.c32" -exec cp '{}'  . \;
find /mirror/tftp/syslinux/syslinux-6.03/bios/com32 -name "libutil.c32" -exec cp '{}'  . \;
На картинке, которая выше, видно, что текст на русском языке. Будем делать поддержку кириллицы, ибо "из коробки" это не работает. :(
Не знаю, чем руководствуются разработчики syslinux, но до сих пор кодировка шрифтов должна быть только CP866.

Красивости и локализацию сделаем позднее, сейчас нам надо создать простенькое меню, чтобы поверить работу pxe-сервера.
Важно: имя файла должно быть именно default.

Код: Выделить всё

nano pxelinux.cfg/default
Содержимое такое:

Код: Выделить всё

default boot/menu.c32
menu title Boot menu

label bootHDD
        menu label Boot from HDD
        #menu default
        localboot 0x0
Если всё правильно настроено, при запуске клиента должно появиться такое меню:
► Показать
Загрузка ОС
Если обычно мануалы пишут по принципу "от простого к сложному", то здесь будут ссылки на установку той или иной ОС или утилиты по мере поступления задачи. Первой была задача установить ОС Windows XP.
[How To] Установка Windows XP по сети

Все вопросы сюда.
Мануал в разработке
Rafael
Сообщения: 1
Зарегистрирован: 28 сен 2020, 13:58

Re: [How To] Поднимаем сервер PXE-Boot на Debian 7

28 сен 2020, 14:00

Насколько все описанное актуально для Debian 10?
Аватара пользователя
SinglWolf
Контактная информация:
Откуда: Башкирия
Сообщения: 1652
Зарегистрирован: 23 янв 2012, 22:11

Re: [How To] Поднимаем сервер PXE-Boot на Debian 7

30 сен 2020, 01:38

Rafael писал(а):
28 сен 2020, 14:00
Насколько все описанное актуально для Debian 10?
Пробуйте. Если будут сложности, пишите. Логи обязательно.

Вернуться в «Инструкции и учебники»