Загружаем загрузчик 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.
Обратите внимание, что заметки могут обновляться со временем. Это может быть как исправление найденных ошибок, так и доработка содержания с целью более полного раскрытия темы. Информация об изменениях доступна в репозитории на github. Там же вы можете оставить в Issue ваши замечания по данной заметке.
Если данная заметка оказалась вам полезной, можете поблагодарить автора финансово.