avatar Ubuntu Настройка PXE Boot меню с мемтестом и паролями

У PXE есть одна очень полезная особенность, все что в нем настроено довольно трудно потерять т.к. все это хранится на сервере, а не на съемном носителе, которые имеют обыкновение теряться, вороваться, забываться в приводах DVD/дома, даваться попользоваться и «с концами», так что, вероятность что у вас возьмут попользоваться и «заиграют» стремится к нулю, ну разве что вместе с сервером… Подключив устройство имеющее возможность загрузки PXE, можно делать довольно много полезных вещей, а именно: производить диагностику оборудования, развертывать операционные системы, загрузить Live систему и т.п. на что хватит знаний и фантазии.
Для этого нам понадобится настроить DHCP сервер и TFTP сервер.
Ранее я уже писал о том как настроить сервер для установки Ubuntu по локальной сети, крайне рекомендую для ознакомления, основные моменты перекочевали из нее.
Что мы получим на выходе?!
А получим меню загрузки с возможностью выбора приложения которое мы будем загружать на клиентскую машину, а также действия, по умолчанию, которые будут произведены системой-если не поступит команд от пользователей.

Для работы нам понадобится:
1) Установленный Ubuntu server
2) Настроенный DHCP сервер, пример настройки можно взять в статье: Настройка DHCP сервера под управлением Ubuntu
3) Диск или ISO-образ, установочного дистрибутива Ubuntu — разрядность значения не имеет, а вот версию лучше брать посвежее.

Все остальное мы установим по ходу дела… Я не буду останавливаться на настройках DHCP, предполагая что он у вас настроен, согласно статье, ссылка на которую представлена в требованиях к системе.

Установка tftp сервера
Установим необходимый пакет:
Поднимаем права до root:
sudo su


Установим необходимый пакет
aptitude install tftpd-hpa


Теперь все файлы которые относятся к нашему tfpt серверу, должны находиться в директории /var/lib/tftpboot/, все пути указываются относительно нее.

Переходим к созданию меню загрузки
Первым делом, нам нужно добыть зам загрузчик, как это сделать?! Его можно найти на любом диске с ubuntu, в остальных дистрибутивах Linux, расположение почти всегда такое же. Нам потребуется установочный ISO образ или диск вставленный в привод DVD, в котором мы идем в следующею директорию:
Если установочный диск х86 архитектуры:
/install/netboot/ubuntu-installer/i386

Нас интересует файл pxelinux.0 это и есть загрузчик, забираем его и копируем в директорию:
/var/lib/tftpboot/

Тогда путь к нему выглядит:
/var/lib/tftpboot/pxelinux.0

Также, нам понадобится, само boot-меню, которое можно взять на том же диске, в директории boot-sccreens нас интересует файл с именем vesamenu.c32

Копируем его в туже директорию что и загрузчик чтобы путь выглядел:
/var/lib/tftpboot/vesamenu.c32


Настраиваем содержимое PXE меню

В качестве примера, мы сделаем меню загрузки, состоящее из 2х пунктов.
Пункт первый: Загрузка с локального жесткого диска. Этот пункт будет пунктом по умолчанию, если пользователь загрузил ПК по PXE и в течении 15 сек. не выполнил никаких действий, то система автоматически загрузится с локального диска.
Пункт второй: назовем его Testing Внутри данного меню будет находиться, пункт с возможностью загрузки Memtest x86+. Данная программа всегда будет полезна в диагностике проблем рабочих станций и серверов, в общем, вещь нужная, в хозяйстве пригодится всем…

Для начала, нам нужно создать директорию для конфигурационных файлов с именем pxelinux.cfgимя критично для работы!
mkdir /var/lib/tftpboot/pxelinux.cfg


Теперь создадим конфигурационный файл с параметрами пунктов меню, с именем default
nano /var/lib/tftpboot/pxelinux.cfg/default


Со следующим содержимым:

default vesamenu.c32
    prompt 0
    menu title PXE Boot Menu
    MENU AUTOBOOT Starting Local System in # seconds
    

    label Boot from local drive
      menu label ^Boot from local drive
      menu default
      localboot 0
      timeout 150
      TOTALTIMEOUT 9000

    LABEL Testing
      MENU LABEL ^Testing
      KERNEL vesamenu.c32
      APPEND pxelinux.cfg/testing.menu


Наиболее наблюдательные, заметили что в предыдущем файле у нас появилась запись которая касается другого файла testing.menu, в нем у нас будут находиться параметры настройки пункта Testing
Создадим данный файл:
nano /var/lib/tftpboot/pxelinux.cfg/testing.menu


Со следующим содержимым:

MENU TITLE Testing

    LABEL Test software
      MENU LABEL ^Return to Main Menu
      KERNEL vesamenu.c32
      APPEND pxelinux.cfg/default

    label Memory Test
      menu label ^Memory Test: Memtest86+ v4.20
      kernel memtest/mt86plus


Первый пункт меню, будет отвечать за возврат в предыдущее меню, а второй за загрузку Memtest86+ v4.20

Все ничего, но мы не создали директорию где хранится файл Memtest, это мы сейчас исправим, давайте создадим соответствующую директорию.
Сделаем это:
mkdir /var/lib/tftpboot/memtest

Нам осталось добавить исполняемый файл самого Memtest86+, его можно найти на установочном диске, в директории /install/ нас интересует файл mt86plus нам него необходимо скопировать в директорию memtest, чтобы путь к нему выглядел:
/var/lib/tftpboot/memtest/mt86plus


На этом мы закончили с tftp сервером, нам осталось немного допилить DHCP сервер.

Настриваем DHCP сервер

Этот пункт, настройкой можно назвать только с натяжкой, если вы настроили DHCP сервер по статье, то вам необходимо добавить только одну запись в:
nano /etc/dhcp/dhcpd.conf


Находим пункт с настройками пула IP адресов, который имеет вид:
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.10 192.168.10.254;
option domain-name-servers 192.168.10.1;
option domain-name "example.org";
option routers 192.168.10.1;
option broadcast-address 192.168.10.255;
default-lease-time 604800;
max-lease-time 604800;
}


И в него добавляем запись указывающую на наш PXE загрузчик:
ping-check = 1;
filename = "pxelinux.0";

Путь к файлу указан относительно директории /var/lib/tftpboot/ т.е. она считается корневой директорией, о чем я писал ранее…

Вся запись имеет вид:

ping-check = 1;
filename = "pxelinux.0";
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.10 192.168.10.254;
option domain-name-servers 192.168.10.1;
option domain-name "example.org";
option routers 192.168.10.1;
option broadcast-address 192.168.10.255;
default-lease-time 604800;
max-lease-time 604800;
}


Сохраняем изменения и перезагружаем DHCP сервер:
/etc/init.d/isc-dhcp-server restart


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

Если вы все сделали правильно, то меню будет иметь следующий вид:
PXE boot menu

А если зайти в меню Testing:
PXE boot menu
Если выбрать пункт с Memtest то запустится тест памяти.
Другие пункты меню добавляются соответствующим образом.

Представим ситуацию, что вам требуется предоставить доступ к одному из меню, ограниченному кругу лиц, например там у вас лежит дистрибутив, который стоит кучу денег. С этой целью на пункт меню можно установить пароль, как это сделать?!
Представим ситуацию, вам нужно установить пароль (например: password) на Memory Test, делается это просто

nano /var/lib/tftpboot/pxelinux.cfg/testing.menu


Нам необходимо добавить запись:
MENU PASSWD password

Тогда файл принимает вид:

MENU TITLE Testing

    LABEL Test software
      MENU LABEL ^Return to Main Menu
      KERNEL vesamenu.c32
      APPEND pxelinux.cfg/default

    label memtest
      MENU PASSWD password
      menu label ^Memory Test: Memtest86+ v4.20
      kernel memtest/mt86plus


Защита конечно, так себе, но от обычных пользователей может помочь.

Тогда при попытке запуска выйдет окно:
PXE boot menu+password
если ввести правильный пароль, то запустится Memtest.
Таким способом можно скрывать целые меню или блокировать доступ к отдельным его пунктам.
В случае внесения изменения в эти конфигурационные файлы, DHCP сервер перезапускать нет необходимости, достаточно перезагрузить клиентский ПК если он загрузился по PXE.
По поводу скорости работы tftp, скорость работы не высока, и если вы решите перекачивать большие объемы информации, сторайтесь использовать для этого WEB или FTP сервер, готовьтесь затратить на это некоторое количество времени. Если есть необходимость загрузить какой-то дистрибутив, то лучше загрузить ОС небольшого размера, примером может служить Windows PE, ну или миниатюрный дистрибутив Linux.
На этом я пожалуй и закончу…

54 комментария

avatar
Cпасибо все работает! буду собирать свою реанимационную сборку)
avatar
рад, что статья оказалась полезной.
avatar
Все сделал как тут написано, но на обоих тестовых машинах выдает PXE-E32: TFTP open timeout
Что может быть не так?
DHCP сервер работает как часы
avatar
а TFTP сервер запущен?
avatar
Предполагаю что нет, как это проверить?
Новичок я в этом всем
avatar
ps aux | grep tftp

должны показать процессы
ну или выполнить
/etc/init.d/tftpd-hpa start

Если служба запущена то выдаст ошибку, ели не запущена, то запустится.
avatar
Не чего не выдало на команду
/etc/init.d/tftpd-hpa start
avatar
на команду ps aux | grep tftp
выдало root 3934 0.0 0.0 5928 2124 pts/8 S+ 12:57 0:00 grep --color=auto tftp
avatar
так установите
avatar
aptitude install tftpd-hpa
avatar
На эту команду тоже реакции не какой
root@nirian-HP-655-Notebook-PC:/home/nirian# aptitude install tftpd-hpa
Ни одного пакета не будет установлено, обновлено или удалено.
0 пакетов обновлено, 0 установлено новых, 0 пакетов отмечено для удаления, и 0 пакетов не обновлено.
Необходимо получить 0 Б архивов. После распаковки 0 Б будет занято.

Я вот так пробовал пишет что все есть
root@nirian-HP-655-Notebook-PC:/home/nirian# apt-get install tftpd-hpaЧтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Уже установлена самая новая версия tftpd-hpa.
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
avatar
Пишет что пакет установлен, осталось запустить службу
avatar
Спасайте как это сделать???
А то все до статьи Установка Ubuntu по сети (DHCP, PXE, boot-menu) / На примере Ubuntu 14.04 не дойду не как, а очень надо
avatar
Изначально ставилось командой sudo aptitude -R install apache2 atftpd tftpd-hpa dhcp3-server
avatar
/etc/init.d/tftpd-hpa start

Других вариантов я не знаю, посмотрите что лежит в директории /etc/init.d/ там должен быть скрипт запуска, с похожим названием ( в имени должно быть tftp)
avatar
Скрип есть, может имеет смыл удалить и заново поставить aptitude и tftp? Только как их для начала удалить?
avatar
apt-get purge tftpd-hpa
avatar
переустановил выдало tftp error access violation
avatar
Не чего не пойму
avatar
А точнее вот так
pxe-t02 only absolute filenames allowed
pxe-e3c tftp error — access violation
avatar
проверьте перава на файлы загрузчика PXE.
нужно смотреть логи ftpd, логи лежат в /var/log ответ будет там 100%
avatar
Не поверите но нет логов на ftpd
avatar
тогда system.log
avatar
Права чтение
avatar
Может у меня путь просто куда то не туда?
avatar
это вам виднее…
avatar
а вообще, поставьте серверный дистрибутив и на нем делайте, а то на десктопе у многих ничего не заработало, такие проблемы тут уже встречались.
avatar
Сейчас попробую серверный поставить надеюсь поможет)
avatar
Огромное вам спасибо!!!
Проблема решилась переустановкой дистрибьютива (хотя выявить корень зла не удалось)
avatar
отлично!
avatar
Может вы знаете можно ли по мимо теста памяти засунуть сюда Plop Boot Manager или что то подомное что бы заставить стартовать машину с usb. И кстати у меня тест памяти не запустился по чему то.
avatar
Можно засунуть много чего, c Plop Boot Manager не сталкивался но Infra грузиться отлично. Зачем вам стартовать машину с USB если у вас уже идет загрузка по сети, для чего плодить кучу сущностей?!
На счёт теста памяти, не знаю, самое простое что приходит на ум, проверьте путь к бинарному файлу ну и его наличие.
avatar
Смыс просто, принесли мне ноут ну как ноут Armada e500 (1000Мгц проц и 256 оператива). Задача казалась бы простая поставить Windows XP но дело все том что на нем нет не привода не флопа, USB через биос не поддерживает. Поставил Lubuntu по сети тормозит жутко, перечитал толмуды, нынешние релизы Lubuntu для него тяжелые. Я засунул в на нем в grub (чудом) Plop Boot Manager теперь могу стартовать с USB но поле первого этапа ноут уйдет в перезагрузку и я не смогу еще раз стартовать с USB.
avatar
И где ее взять? За ранее спасибо.
avatar
infra это LiveCD дистрибутив, для восстановления систем и их тестирования, искать можно через поисковики или по торретам, что-то на подобии reanimator CD, но мне нравилось больше, так ее можно было заставить грузиться с DVD или по PXE. Ей я давно уже не пользовался, у меня нет таких задач…
avatar
Везет, а я вот попал)
avatar
и как это счастье заставит грузится с PXE или как бы мне запустить USB через PXE. Я уже устал искать( на русском ноль, а английский я настолько хорошо не знаю.
avatar
Мне, для вас, перевести интернет на русский? ;)
avatar
А ответить просто не знаю как помочь религия не позволяет? Просто тема про PXE довольно скудна и сводится к установке Linux или Windows, а вот что еще туда засунуть можно ноль. А блин не могу найти гребаный бот менеджер.
avatar
Подскажите где взять файлы pxelinux.0 и vesamenu.c32? В ISO образе ubuntu скаченного с сайта их нет
avatar
Не правда!
на диске ubuntu сервер все это есть, включая 16.04, путь к файлам в начале статьи
avatar
спасибо, я в десктоп версии смотрел
avatar
Делал по вашей статье, но с оглядкой на свои нужды — не получается, не работает. Переделал все чтобы было 1 в 1, результат тот же:


avatar
avatar
Ну судя по тому то вы приложили, у вас не находит файл pxelinux.0 на tftp сервере.
Проверьте путь куда вы положили файлы pxe, приложите путь где они лежат у вас!
avatar
/var/lib/tftpboot/pxelinux.0
в файле конфигурации tftp сервера тоже проверил, указана эта папка
avatar
что в лоагах по этому поводу в syslog или tfpd сервера (если они есть, я не помню)
avatar
Мне надо с вами почаще общаться)
Я либо нахожу свои ошибки, как в прошлый раз, когда шлюз на автомате прописал, либо срабатывает аура присутствия. Ничего не менял, просто заново запустил клиент, чтобы по всему логу не искать, и получилось.
Спасибо вам за статью и присутствие)
avatar
Вы решительный, но не внимательный… :)))
avatar
не подскажете что делать, если у меня в сети уже есть 1 дхсп сервер который на микротике крутится? как выставлять настройки PXE?
avatar
В микротике все это делается довльно просто, сам загрузчик нужно положить или на диск самого маршрутизатора или на флешку
Переходите в раздел IP — > DHCP-Server, вкладка Network и в настройках пула в пункте Boot File Name указываем файл для загрузки
Вот пример настройки!
Есть что добавить? Регистрируйся и оставляй комментарии!