Загружаем загрузчик linux по сети

Надеюсь со временем эта заметка вырастет во что-то больше. Но хотелось бы описать просто то, что раньше не мог понять и собирал по крупицам на русском языке, а потом нашёл немного времени разобраться что и как. Закончилось всё хорошо. Загрузилось красивое меню, куда можно добавлять разные нужные штуковины для загрузки по сети. Грузить пока ничего не будем, может быть позже :) Всё действо происходит под Gentoo, но пользователи иных дистрибутивов (и даже пользователи BSD) могут воспользоваться своими apt-get, aptitude, rpm, pacman, portmaster и т.д. по вкусу. Возможно, пути не всегда будут совпадать, надеюсь вы разберётесь сами.

Первое, что нужно сделать, это настроить свой DHCP-сервер. Обычно я использую net-misc/dhcp, т.е. isc-dhcpd. Всё, что нам нужно, это указать что мы будем грузить по сети и с какого сервера.

filename="pxelinux.0" # Какой мы файл будем загружать с нашего сервера. Можно указать файл где-то глубже в папке.
next-server="192.168.1.1" # Адрес нашего TFTP-сервера.

Добавляем эти строчки в глобальную секцию dhcpd.conf, если хотим предоставить наши услуги всем нашим сетям или в секцию subnet нужной сети. next-server можно не указывать, если ваш TFTP-сервер расположен на том же хосте, что и DHCP.

Как вы уже наверно поняли, нам понадобится ещё и TFTP-сервер. Можно использовать, например, net-ftp/tftp-hpa или net-ftp/atftp. Оба сервера ставятся без проблем, настройки минимальные. Корень TFTP сервера в обоих случаях размещается в /tftproot/. Запускаем наш TFTP-сервер и начнём заниматься его наполнением.

Третий компонент, необходимый для загрузки по сети, как ни странно, загрузчик linux. Его мы можем найти в пакете sys-boot/syslinux. В нём содержится множество разных загрузчиков, в том числе, необходимый нам pxelinux. После установки пакета заглядываем в /usr/share/syslinux и /usr/share/doc/syslinux-{ВЕРСИЯ}. В первой папке мы можем найти все необходимые нам файлы, а во второй можно узнать подробности о настройке загрузчика. Попробуем загрузить красивое меню для выбора того, что нам загружать в дальнейшем. Для этого нам понадобится загрузчик pxelinux.0 и красочное меню vesamenu.c32 (или текстовое меню menu.c32). Скопируем их в корень нашего TFTP-сервера, папку /tftproot/. Расскажем загрузчику что же мы хотим загружать. Для этого создадим в папке с pxelinux.0 папку с именем pxelinux.cfg. Внутри папки размещаются файлы конфигурации для наших клиентов. Можно задать свой индивидуальный файл для каждого клиента, группы и по умолчанию. Порядок поиска файлов конфигурации можно найти в файлах документации /usr/share/doc/syslinux-{ВЕРСИЯ}/pxelinux.txt.bz2 и menu.txt.bz2. Создадим в папке pxelinux.cfg файл default, который будет использоваться всеми клиентами для которых вы не задали конфигурацию.

UI vesamenu.c32 # Указываем какой интерфейс мы будем использовать

MENU TITLE My PXE boot menu # Заголовок меню
PROMPT 0 # Пункт меню, выбираемый по умолчанию (нумерация с 0)
TIMEOUT 50 # Количество секунд до автоматического выбора пункта меню умноженное на 10

LABEL Boot from first HDD # наименование пункта меню
LOCALBOOT 0x80 # загружаемся с первого HDD

Теперь можно попробовать запустить другой ПК или даже виртуальную машину в VirtualBox и вы должны увидеть красивую меню с единственным пунктом загрузки с HDD.

На этом всё. Следите за обновлениями данного поста! Всем удачной загрузки по сети!!!