Быстрый запуск TFTP-сервера (BOOTP) в CentOS 6

Для чего нужен BOOTP? Это средство, которое позволяет организовать загрузку операционной системы по сети, если ваша сетевая карта и BIOS поддерживают протокол загрузки PXE. Наиболее частый случай, когда это может потребоваться - установка операционной системы без использования CD, DVD или флешки. Другой частый случай - использование бездисковых рабочих станций для загрузки операционной системы и развёртывания на них тонкого клиента с одного сервера. Но также загрузка по BOOTP подходит и для функций аварийного восстановления (rescue). Наконец, этой функциональностью могут воспользоваться хостинговые операторы, предоставляющие услуги аренды выделенных серверов, для гибкого и самостоятельного доступа клиентов к целому списку операционных систем по их выбору.

В данной статье я расскажу каким образом быстро установить и настроить предоставляющий BOOTP TFTP-сервер в CentOS 6, а также дам пару примеров настройки загрузочного меню.

Требования

Итак, как уже говорилось, для настройки TFTP-сервера необходимо, чтобы ваша сетевая карта поддерживала загрузку по сети, так называемый PXE-протокол (Preboot eXecution Environment, произносится пикси). Разумеется это же самое должен уметь BIOS. В принципе, в своей практике, не припомню случая, когда бы BIOS не позволял использовать возможности PXE, которые имеет сетевая карта, но всё-таки нелишне будет убедиться. Есть ещё серьёзное замечения касательно сетевых карт на некоторых чипах RealTek. Некоторые из них содержат баги прошивки, делающие использование PXE невозможным, хотя заявляется обратное.

Ещё нам потребуется компьютер, на котором установлен CentOS 6.x и ещё один компьютер, для которого и будет настраиваться загрузка по BOOTP. Разумеется таких компьютеров может быть не один. И заметьте, что поддержка загрузки по PXE нужна будет именно для последнего, а не для сервера!

Устанавливаем пакеты

yum install dhcp tftp syslinux

Сперва DHCP-сервер

BOOTP-сервер не работает сам по себе. Для его работы необходим настроенный DHCP-сервер. Как его установить и настроить можно прочитать в предыдущей статье. Обратите внимание на то, что я писал про секцию кофигурационного файла для DHCP-сервера, выделенную синим:

allow booting;
allow bootp;
option option-128 code 128 = string;
option option-129 code 129 = text;
next-server 192.168.0.1;
filename "/pxelinux.0";

О файле pxelinux.0 я расскажу ниже, а пока лишь заостряю ваше внимание на строке "next-server 192.168.0.1;" В ней указан IP-адрес TFTP-сервера. Т.е. если вы хотите установить DHCP-сервер на другой компьютер, то в его настройках надо будет указать не IP-адрес DHCP-сервера, а IP-адрес TFTP-сервера.

Не забудьте снять с сетевой карты компьютера, который планируется загружать по BOOTP, MAC-адрес с вашей сетевой карты и добавить в dhcp.conf соответствующую запись, как показано в статье. Итак, DHCP-сервер настроен и запущен, поехали дальше.

Настройка TFTP-сервера

Сам TFTP-сервер работает через суперсервер xinetd, но по умолчанию, после установки, возможность его запуска закомментирована. Так что редактируем файл: /etc/xinetd.d/tftp, где заменяем строчку "disable = yes" на "disable = no". Также для целей отладки рекомендую в строке: "server_args = -s /var/lib/tftpboot" добавить в конец ключ "-v", чтобы TFTP-сервер выводил в системный лог больше информации. После внесения этих правок, перезапускаем xinetd:

service xinetd restart

Теперь собственно подготавливаем всё, что нужно для загрузки. Для этого переходим в каталог /var/lib/tftpboot, который после установки пуст и копируем туда файлы из набора syslinux:

cp /usr/share/syslinux/{pxelinux.0,menu.c32,memdisk,mboot.c32,chain.c32} /var/lib/tftpboot

Теперь вам наверное стало понятно, откуда берётся файл pxelinux.0, который мы указываем в конфигурационном файле dhcp.conf

Теперь самое интересное. Создаём в /var/lib/tftpboot два подкаталога: images и pxelinux.cfg. К подкаталогу images мы вернёмся позднее, а теперь нас интересует подкаталог pxelinux.cfg, в котором мы должны создать файл default. В этом файле мы будем описывать загрузочное меню. Скажу сразу, меню можно делать большие, которые разделены на несколько файлов, но в этой статье я подробно на этом останавливаться не буду, рассмотрев лишь самое простое одноуровневое меню.

Итак, вот как может выглядеть ваше меню:

default menu.c32
prompt 0
timeout 300
ONTIMEOUT local
 
MENU TITLE PXE Menu
 
LABEL Centos
        MENU LABEL Centos
        kernel images/vmlinuz
        append initrd=images/initrd.img root=/dev/ram0 init=/linuxrc ramdisk_size=100000

В нём нет никаких изысков. В принципе, если вы когда-либо сами настраивали загрузчик grub или syslinux, вам это должно быть очень знакомо. По сути мы лишь говорим какая метка будет соответствовать данной загрузке в меню (т.е. "CentOS", которое появится на экране, а также где мы будем брать ядро и образ initrd к нему.

Вот тут мы и возвращаемся к каталогу images, куда вы можете положить ядро и initrd.img. Взять эти файлы вы можете с первого загрузочного DVD-диска дистрибутива CentOS из каталога images/pxeboot.

Разумеется вы можете добавить в меню ещё и другие загрузки с другими вариантами операционных систем, ядер и образов initrd. Другие записи тоже начнутся с LABEL. Вы также можете в строке append прописать дополнительные параметры к вашему ядру, такие как noapic, nodmraid и прочее и прочее - полная свобода творчества. Расписывать всё это здесь долго и бессмыслено - экспериментируйте сами.

Межсетевой экран (firewall)

Не забудьте открыть порты на межсетевом экране для DHCP и TFTP-серверов.

Финал

Ну что же. Пришла пора делать испытания. Перезагрузите компьютер, который должен грузиться по сети. Войдите в BIOS и установите в последовательности загрузки первым PXE (или PXE-boot или Network boot - называется по-разному). Сохранитесь и снова отправьте компютер в перезагрузку. Если всё сделали правильно, вы увидите сообщение PXE-загрузчика о том, что он обратился к DHCP-серверу и получил от него IP адрес, а затем появивится сделанное вами меню с вариантом выбора и таймаутом. Таймаут задаётся в строке "timeout 300" файла меню, возможно вам захочется его уменьшить. Вы должны либо выбрать один из пунктов меню, либо подождать его окончания. Если вы правильно указали местоположение ядра и образа initrd, начнётся загрузка, которая закончится приглашением на установку операционной системы точно таким же которое вы получаете при загрузке с CD или DVD.

Что дальше?

Замечу, что если вы сделали всё вышеописанное без вариаций, вы прошли только первую стадию установки. Т.е. далее вам понадобятся и другие файлы с установочного CD/DVD. Установщик их запросит и предложит варианты, откуда он их может взять: HTTP или NFS, так что будьте к этому готовы и если вы планируете проводить установку с ваших серверов, подготовьте нужные файлы для доступа через HTTP или NFS.


Автор: Виктор Вислобоков, 23.11.2013