Дистрибутив Fedora использует для установки весьма мощную и многофункциональную программу Anaconda, поддерживающую различные режимы работы и сценарии инсталляции. Вместе с рядом других технологий, в частности Spacewalk-сервером, вы можете значительно облегчить процесс развертывания и обслуживания вашей Linux-инфраструктуры.
Однако сегодня мы оставим Spacewalk-сервер в стороне и рассмотрим, как можно автоматизировать самую начальную стадию жизненного цикла серверов/рабочих станций – их развертывание. При этом в процессе установки мы постараемся обойтись без вмешательства оператора при помощи так называемого сервера сетевой установки. Для организации такого сервера мы используем следующие технологии:
- PXE (Pre-Boot Execution Environment). Минимальное вмешательство человека подразумевает загрузку первой стадии инсталлятора по сети. Большинство выпущенных за последние два-три года сетевых карт и BIOS материнских плат поддерживают эту функцию. Как правило, загрузка по сети начинается, если на жестком диске отсутствует загрузчик, при старте нажата клавиша
или в BIOS выбран соответствующий пункт меню. Первый вариант – отсутствие загрузчика на жестком диске – нас вполне устраивает.
- DHCP-сервер. Предоставляет клиентам сетевые настройки и указывает место, где будут располагаться файлы, необходимые для загрузки с использованием Pre-Boot Execution Environment.
- TFTP-сервер. Там мы и расположим все необходимые для начала инсталляции файлы. Нужно заметить, что мы можем одновременно поддерживать несколько вариантов дистрибутива, например, Fedora 9 и Red Hat Enterprise Linux 5.
- Kickstart-файлы. Для каждого из дистрибутивов можно предусмотреть несколько вариантов установки, которые и будут задаваться при помощи kickstart-файлов. Kickstart-файл должен быть доступен по сети при помощи одного из протоколов: http/https, NFS, FTP. Необходимый kickstart-файл можно указывать и вручную, но, поскольку мы хотим максимально автоматизировать развертывание операционной системы, то нужно предусмотреть возможность автоматического выбора. Реализовать это можно следующими способами:
- При помощи DHCP-сервера в зависимости от MAC-адреса клиента.
- При помощи настроек PXE (конфигурационных файлов первой стадии загрузчика – pxelinux.0) в зависимости от MAC- или IP-адреса, полученного с DHCP-сервера. В последнем случае может понадобиться резервирование IP-адресов на DHCP-сервере.
- При помощи Spacewalk-сервера. Мы не будем рассматривать данный вариант, но заметьте, что в зависимости от того, в какой из диапазонов IP-адресов попадает клиент, Spacewalk-сервер может выдавать свой kickstart-файл. При этом его содержимое будет создаваться «на лету» из базы данных, а на DHCP-сервере или при помощи настроек pxelinux.0 можно будет всегда задавать одно и то же месторасположение этого «динамического» kickstart-файла.
- Сетевой репозиторий. Файлы дистрибутива, доступные по http, NFS, FTP или по всем трем протоколам. Быстрее всего установка будет производиться при выборе метода установки по NFS. Медленнее всего – по http.
Теперь попробуем собрать все компоненты вместе. Не буду подробно объяснять ключи командной строки или подробности работы протоколов – ответы на эти вопросы можно найти в обширной документации, включая официальную от Red Hat. Приведу рецепт решения конкретной задачи. Также обратите внимание на утилиту system-config-netboot, которая может упростить некоторые шаги. Однако в учебных целях не будем пользоваться GUI. Подробно использование system-config-netboot описано в руководстве системного администратора из комплекта официальной документации Red Hat Enterprise Linux.
Для начала установим и настроим автоматический запуск tftp-сервера:
# yum -y install tftp-server
# chkconfig tftp on
# service xinetd start
По умолчанию корневой директорией tftp-сервера в RHEL5 выступает /tftpboot, а в Fedora 9 – /var/lib/tftpboot. Если вы решите использовать директорию, отличную от установленной по умолчанию, не забудьте прописать соответствующие правила в своем модуле SELinux.
Скопируйте в избранный каталог необходимые файлы. Для начала нам необходима первая стадия загрузчика – файл pxelinux.0. Документация на загрузчик и сам файл привносятся в систему пакетом syslinux:
# yum -y install syslinux
Далее копируем загрузчик в корневую директорию tftp-сервера:
# cp $(rpm -ql syslinux | grep pxelinux.0) /var/lib/tftpboot/
Создадим сервер инсталляции для двух дистрибутивов. В качестве примера возьмем Fedora 9 и Red Hat Enterprise Linux 5.1, но пойдет и любой другой дистрибутив, использующий Anaconda. Скопируем в /tftpboot ядро и initrd-образы обоих дистрибутивов, которые расположены в директории /images/pxeboot/ установочного диска. Предположим, оба ISO-образа дистрибутивов смонтированы в /mnt/loop/:
# mkdir /var/lib/tftpboot/{fedora9,rhel51}
# cp /mnt/loop/RHEL_5.1/images/pxeboot/* /var/lib/tftpboot/rhel51/
# cp /mnt/loop/Fedora9/images/pxeboot/* /var/lib/tftpboot/fedora9/
Поскольку у нас два варианта дистрибутивов, предоставим оператору возможность выбора. Пусть в качестве информации наш загрузчик выводит на экран возможные варианты. Создадим текстовый файл /var/lib/tftpboot/boot.msg примерно следующего содержания:
--------------------------
MY SETUP MENU FOR PXE BOOT
--------------------------
f - install Fedora 9
r - install RHEL 5.1
q - boot normally
Кстати, в файле /usr/share/doc/syslinux-*/syslinux.doc (помимо опций, использующихся в конфигурационном файле загрузчика) описано, как сделать информационное сообщение более «веселым», добавив цвета, страницы, переключаемые при помощи функциональных клавиш, и различные управляющие символы. Теперь пришло время создать конфигурационный файл загрузчика, пользуясь все тем же руководством /usr/share/doc/syslinux-*/syslinux.doc:
# mkdir /var/lib/tftpboot/pxelinux.cfg
# vi /var/lib/tftpboot/pxelinux.cfg/default
Наш конфигурационный файл, используемый PXE по умолчанию, будет содержать следующие строки:
default q
display boot.msg
prompt 1
timeout 100
label q
localboot 0
label f
kernel fedora9/vmlinuz
append initrd=fedora9/initrd.img ks=http://192.168.0.100/f9.cfg
label r
kernel rhel51/vmlinuz
append initrd=rhel51/initrd.img ks=http://192.168.0.100/rhel51.cfg
Вариант загрузки с меткой q описывает загрузку с локального диска. Данный вариант используется по умолчанию. Для загрузки ядра Fedora или RHEL необходимо выбрать f или r. Заметьте, мы воспользовались самым простым способом предоставления информации о kikstart-файле через параметры ядра, передаваемые опцией append. В случае использования Spacewalk-сервера можно было бы обойтись одним «динамическим» путем к kikstart-файлу. Без него, если необходимо, можно добавить еще несколько меток, указывающих на другие файлы, например:
label f2
kernel fedora9/vmlinuz
append initrd=fedora9/initrd.img ks=http://192.168.0.100/f9_2.cfg
Следующий компонент нашего сервера – служба DHCP. Устанавливаем его:
# yum -y install dhcp
# cp /usr/share/doc/dhcp-*/dhcpd.conf.sample /etc/dhcpd.conf
С учетом того, что имя kikstart-файла передается без помощи DHCP, а также упростив конфигурацию и не используя классы вендоров, отредактируем нашу область, добавив два параметра:
filename "pxelinux.0";
next-server 192.168.0.100;
Остальные настройки используются в соответствии с вашими пожеланиями. Конфигурирование DHCP-сервера, как и написание kickstart-файла, выходит за рамки этой статьи. Предполагается, что читатель может самостоятельно скопировать содержимое дистрибутива на сервер и сделать его доступным по NFS, FTP или http. В случае необходимости смотрите соответствующую документацию по настройке этих служб.
Создание kickstart-файла также не должно представлять сложностей. Его формат подробно описан в документации Red Hat. Проще всего создать его при помощи GUI-утилиты system-config-kickstart или взяв за основу /root/anaconda-ks.cfg.
# yum -y install tftp-server
# chkconfig tftp on
# service xinetd start
По умолчанию корневой директорией tftp-сервера в RHEL5 выступает /tftpboot, а в Fedora 9 – /var/lib/tftpboot. Если вы решите использовать директорию, отличную от установленной по умолчанию, не забудьте прописать соответствующие правила в своем модуле SELinux.
Скопируйте в избранный каталог необходимые файлы. Для начала нам необходима первая стадия загрузчика – файл pxelinux.0. Документация на загрузчик и сам файл привносятся в систему пакетом syslinux:
# yum -y install syslinux
Далее копируем загрузчик в корневую директорию tftp-сервера:
# cp $(rpm -ql syslinux | grep pxelinux.0) /var/lib/tftpboot/
Создадим сервер инсталляции для двух дистрибутивов. В качестве примера возьмем Fedora 9 и Red Hat Enterprise Linux 5.1, но пойдет и любой другой дистрибутив, использующий Anaconda. Скопируем в /tftpboot ядро и initrd-образы обоих дистрибутивов, которые расположены в директории /images/pxeboot/ установочного диска. Предположим, оба ISO-образа дистрибутивов смонтированы в /mnt/loop/:
# mkdir /var/lib/tftpboot/{fedora9,rhel51}
# cp /mnt/loop/RHEL_5.1/images/pxeboot/* /var/lib/tftpboot/rhel51/
# cp /mnt/loop/Fedora9/images/pxeboot/* /var/lib/tftpboot/fedora9/
Поскольку у нас два варианта дистрибутивов, предоставим оператору возможность выбора. Пусть в качестве информации наш загрузчик выводит на экран возможные варианты. Создадим текстовый файл /var/lib/tftpboot/boot.msg примерно следующего содержания:
--------------------------
MY SETUP MENU FOR PXE BOOT
--------------------------
f - install Fedora 9
r - install RHEL 5.1
q - boot normally
Кстати, в файле /usr/share/doc/syslinux-*/syslinux.doc (помимо опций, использующихся в конфигурационном файле загрузчика) описано, как сделать информационное сообщение более «веселым», добавив цвета, страницы, переключаемые при помощи функциональных клавиш, и различные управляющие символы. Теперь пришло время создать конфигурационный файл загрузчика, пользуясь все тем же руководством /usr/share/doc/syslinux-*/syslinux.doc:
# mkdir /var/lib/tftpboot/pxelinux.cfg
# vi /var/lib/tftpboot/pxelinux.cfg/default
Наш конфигурационный файл, используемый PXE по умолчанию, будет содержать следующие строки:
default q
display boot.msg
prompt 1
timeout 100
label q
localboot 0
label f
kernel fedora9/vmlinuz
append initrd=fedora9/initrd.img ks=http://192.168.0.100/f9.cfg
label r
kernel rhel51/vmlinuz
append initrd=rhel51/initrd.img ks=http://192.168.0.100/rhel51.cfg
Вариант загрузки с меткой q описывает загрузку с локального диска. Данный вариант используется по умолчанию. Для загрузки ядра Fedora или RHEL необходимо выбрать f или r. Заметьте, мы воспользовались самым простым способом предоставления информации о kikstart-файле через параметры ядра, передаваемые опцией append. В случае использования Spacewalk-сервера можно было бы обойтись одним «динамическим» путем к kikstart-файлу. Без него, если необходимо, можно добавить еще несколько меток, указывающих на другие файлы, например:
label f2
kernel fedora9/vmlinuz
append initrd=fedora9/initrd.img ks=http://192.168.0.100/f9_2.cfg
Следующий компонент нашего сервера – служба DHCP. Устанавливаем его:
# yum -y install dhcp
# cp /usr/share/doc/dhcp-*/dhcpd.conf.sample /etc/dhcpd.conf
С учетом того, что имя kikstart-файла передается без помощи DHCP, а также упростив конфигурацию и не используя классы вендоров, отредактируем нашу область, добавив два параметра:
filename "pxelinux.0";
next-server 192.168.0.100;
Остальные настройки используются в соответствии с вашими пожеланиями. Конфигурирование DHCP-сервера, как и написание kickstart-файла, выходит за рамки этой статьи. Предполагается, что читатель может самостоятельно скопировать содержимое дистрибутива на сервер и сделать его доступным по NFS, FTP или http. В случае необходимости смотрите соответствующую документацию по настройке этих служб.
Создание kickstart-файла также не должно представлять сложностей. Его формат подробно описан в документации Red Hat. Проще всего создать его при помощи GUI-утилиты system-config-kickstart или взяв за основу /root/anaconda-ks.cfg.
Итак, все готово для начала сетевой установки. Включаем тестовую рабочую станцию или запускаем виртуальную машину и наблюдаем следующую картину:
Вводом имени соответствующего пункта меню запускаем инсталляцию соответствующего варианта дистрибутива.
Как вы видите на рис. 3, до использования конфигурационного файла default загрузчик ищет конфигурационные файлы, соответствующие вашему MAC-адресу, IP-адресу и подсетям. Этим можно воспользоваться для создания конкретных комбинаций «дистрибутив/kickstart-файл» для определенных серверов или рабочих станций. Управлять привязкой IP-адресов к конкретным машинам можно в конфигурационном файле DHCP-сервера, используя резервирование IP-адресов и классы вендоров.
Приведенное решение является лишь «заготовкой», на основе которой вы можете самостоятельно собрать нужную вам конфигурациию сервера инсталляции. Следующим шагом я бы порекомендовал попробовать посмотреть в сторону Spacewalk-сервера, являющегося Open Source-решением для управления Linux-инфраструктурой и помимо прочих задач также служащего для развертывания серверов и рабочих станций.
Как вы видите на рис. 3, до использования конфигурационного файла default загрузчик ищет конфигурационные файлы, соответствующие вашему MAC-адресу, IP-адресу и подсетям. Этим можно воспользоваться для создания конкретных комбинаций «дистрибутив/kickstart-файл» для определенных серверов или рабочих станций. Управлять привязкой IP-адресов к конкретным машинам можно в конфигурационном файле DHCP-сервера, используя резервирование IP-адресов и классы вендоров.
Приведенное решение является лишь «заготовкой», на основе которой вы можете самостоятельно собрать нужную вам конфигурациию сервера инсталляции. Следующим шагом я бы порекомендовал попробовать посмотреть в сторону Spacewalk-сервера, являющегося Open Source-решением для управления Linux-инфраструктурой и помимо прочих задач также служащего для развертывания серверов и рабочих станций.
4 комментария:
Спасибо за статью! На мой взгляд статья не законченная. Для автоматизированной настройки сети машин необходимо корректно сконфигурированные .ks файлы для автоматической установки системы на кластере машин!
Ну, в одной статье все охватить не возможно. Думаю упоминания об официальной документации и GUI для создания ks вполне достаточно. Про KS можно почитать в переводе документации по RHEL4 на rhd.ru. Плюс еще перевод на моем сайте http://www.markelov.net/articles.php?lng=ru&pg=330
Статья мне поравилась (нашёл в журнале Системный администратор)
только вопрос
---------------------
вступление
в статье указано что установка идёт через http протокол, а у меня через фтп
DHCP сервер стоит на одной машине(CentOS 5.2) и там прописал необходимы строки, там же стоит и tftp-server, а непосредственно сам установочный сервер находится на другой машине (Fedora 8)
у меня на машинах Realtek 8139 (Realtek boot agent)
он при загрузке пишет
PXE-E51:: No DHCP or proxyDHCP offers were received
а в логе dhcpd сервера пишет
DHCPDISCOVER from 00:16:ec:4b:dd:1a via eth1
Dec 17 15:43:58 localhost dhcpd: Abandoning IP address 192.168.2.53: pinged before offer
и так 4 раза (только IP разные)
----------------------
вопрос это проблема непосредственно самого бут агента риалтека или это у меня неправильно настроено?
Какой протокол использовать для установки вы сами указываете вручную или при помощи ks-файла.
Что касается ваших ошибок, то там же четко сказанно что, загрузчик не получил предложения адреса, а на DHCP-сервере о том что он пытается раздавать адреса, которые уже используются в вашей сети.
Верояно проблема в неправильном планировани распределения IP-адресов.
Отправить комментарий