Построение инфраструктуры для масштабного развертывания RHEL
Какой самый интуитивный и простой способ установить операционную
систему на компьютер? Разумеется взять DVD-диск, вставить его,
ответить на несколько вопросов, после чего подождать порядка получаса,
и приступить к конфигурации системы.
Это хорошо, когда вся ваша инфраструктура представляет из себя
один-два сервера. При большем количестве систем или в ситуации, когда
типовую установку ОС приходится выполнять достаточно часто, такой
подход становится неудобным. Ниже мы приводим сценарий подготовки
развертывания Red Hat Enterprise Linux по сети. Все примеры будут
приводиться для установки Red Hat Enterprise Linux 5. Операционная
система сервера - RHEL4/5.
PXE-загрузка
Данный этап является наиболее сложным и плохо документированным. А
между тем грамотная настройка PXE-окружения является наиболее важным
компонентом работающей инфраструктуры развертывания.
Необходимые компоненты:
1. DHCP сервер.
2. TFTP сервер.
3. Созданные нами файлы и настройки.
Итак, по-порядку. TFTP-сервер.
Сначала настроим TFTP-сервер. (TFTP - Trivial File Transfer Protocol,
простой протокол передачи файлов, работающий через UDP.)
1. Убедитесь, что в системе, которая будет TFTP-сервером, установлены
пакеты tftp-server и xinetd. Проверяется это так:
$ rpm -qi tftp-server
$ rpm -qi xinetd
Если вы получили информацию по этим пакетам, то они у вас
установлены. В противном случае их необходимо установить.
2. Разрешите в конфигурации xinetd запуск tftp в качестве сервиса по
требованию. Для этого откройте файл /etc/xinet.d/tftp
И исправьте там строчку
disable = yes
на
disable = no
3. В конфигурации по умолчанию корневой директорией для tftp-сервера
является директория /tftpboot/
Туда нам необходимо перенести файлы, необходимые для начала
инсталляции. Установите пакет syslinux и перенесите PXE-загрузчик
в директорию /tftpboot/
4. Далее нам необходимо поместить в /tftpboot/ ядро и initrd для
системы, которую мы желаем устанавливать по сети. Обычно такая
возможность предусмотрена и нужные файлы есть на образах
инсталляционных дисков. Итак, смонтируйте образ диска:
# mount -o loop /[путь к директории с образами]/rhel-5-server-i386-disc1.iso /mnt
# cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /tftpboot/
5. Осталось сделать конфигурацию для загрузчика. Отредактируйте
файл /tftpboot/pxelinux.cfg/default
Содержимое этого файла для рассматриваемого случая будет
следующим:
default linux
prompt 1
timeout 100
label linux
kernel vmlinuz
append initrd=initrd.img ramdisk_size=9216
Для тех, кто сталкивался с конфигурированием lilo, конфигурация,
должно быть, выглядит знакомо. Для тех, кто не имел подобного
опыта, краткое описание:
default- метка записи, загружаемой по умолчанию
prompt - надо ли давать возможность выбора
timeout - время, после которого default запись будет загружена
label - метка, название конфигурации. Может быть произвольной.
kernel - путь к файлу ядра. Путь задается относительно директории /tftpboot/
append - различные опции, передаваемые ядру, в том числе и файл initrd
6. На этом базовая конфигурация TFTP-сервера закончилась. Запустите
сервис xinetd и (опционально) добавьте его в автозагрузку.
# service xinetd start
# chkconfig xinetd on
DHCP-сервер
DHCP-сервер нужен для того чтобы при PXE загрузке сообщить новой
системе параметры сети и передать информацию, необходимую для сетевой
установки. Желательно, чтобы DHCP-сервер и TFTP-сервер находились в
пределах одной сети. Если у вас уже есть работающий вариант
DHCP-сервера, то вам достаточно просто добавить несколько опция для
нужных IP-адресов. Ниже приведем простейшую конфигурацию с
комментариями
Итак, по порядку. Опции routers, subnet-mask, domain-name,
domain-name-servers аналогичны сетевым настройкам Default Gateway,
Network Mask, DNS Domain name и DNS Servers. Адаптируйте их в
соответствии со своими параметрами. Опция time-offset - разница во
времени с Гринвичем в секундах. range dynamic-bootp - диапазон
выдаваемых адресов, default-lease-time и max-lease time - времена в
секундах аренды адреса по умолчанию и максимальное время аренды
соответственно. Наиболее интересующие нас параметры:
next-server - IP-адрес TFTP-сервера
filename - путь к файлу PXE-загрузчика (относительно каталога /tftpboot/)
На данном этапе ваши компьютеры должны уже "уметь" загружаться по
сети и запускать инсталлятор. Для полного процесса установки нам не
хватает только дистрибутива, доступного в сети.
Установочный репозитарий
В процессе установки установочный репозитарий необходим для того,
чтобы предоставить инсталляторам, которые могут работать параллельно,
доступ к дистрибутиву и избавить пользователя от необходимости
создания нескольких копий (например записывать диски). Репозитарий
можно располагать на FTP, HTTP и NFS серверах. Мы рассмотрим одну из
этих конфигураций, остальные выполняются аналогично.
FTP-сервер
Конфигурация проста. Пример ниже приведен для установки RHEL5. Если у
вас другая версия - обратитесь к документации по дистрибутиву.
Предполагается что у вас есть 5 образов, скачанных c RHN. Для
некоторых версий и архитектур количество может отличаться.
1. Создайте директории для монтирования этих образов.
# for i in $(seq 1 5); do mkdir -p /var/ftp/rhel5-server-x68/disk${i}; done
2. Смонтируйте образы в созданные директории. Обратите внимание, что
из-за внутренних ограничений ядра Linux число одновременно
смонтированных образов не может превышать 8. Таким образом, если
вы хотите обеспечить окружения для инсталляции более чем одной
версии, лучшим выбором будет скопировать содержимое образов в эти
директории. В нашем случае монтирование быстрее и не требует
дополнительного дискового пространства.
# for i in $(seq 1 5); do
mount -o loop [путь к директории с образами]/rhel-5-server-i386-disc${i}.iso
/var/ftp/rhel5-server-x68/disk${i}; done
3. Проверьте, что у вас включен анонимный ftp и корневой директорией
для vsftpd является /var/ftp (В RHEL это настроено по умолчанию).
Запустите сервис FTP и (опционально) добавьте его в автозагрузку.
# service vsftpd start
# chkconfig vsftp on
4. Проверьте доступность ресурса, напрмимер с помощью браузера по URL
ftp://[ваш FTP-сервер]/rhel5-server-x86/disk1
Вы должны увидеть содержимое инсталляционного образа CD #1. Если
этого не произошло, проверьте выполнение предыдущих пунктов еще
раз.
Конец
На данном этапе ваша система готова к интерактивной сетевой
инсталляции. Вы уже можете загрузиться по сети и провести инсталляцию
без жонглирования дисками. :) Единственное, что не вошло в данный
обзор - сценарии kickstart, позволяющие проводить установку и
настройку систем в любой заданной конфигурации полностью
неинтерактивно. Об этом мы тоже обязательно расскажем, но это - совсем
другая история.
Раньше мы описали инфраструктуру для развертывания RHEL в условиях
масштабной инфраструктуры. И хотя наша инфраструктура позволяла
устанавливать RHEL сразу на произвольном количестве компьютеров, ей
чего-то не хватало. Не хватало возможности неинтерактивной
инсталляции.
Такая технология давно существует в стенах Red Hat и имя ей KickStart.
Сегодня мы рассмотрим эту технологию и ее применений на примере
сетевой инсталляции RHEL5. Операционная система сервера в примере -
RHEL4, но может быть произвольной.
Итак, создаем kickstart-файл.
Что такое kickstart-файл? Kickstart-файл - это сценарий установки. "У
меня все ходы записаны". То есть сценарий установки подразумевает
заранее записанные в определенном формате ответы на вопросы
инсталлятора. Добавьте возможность выполнять собственные скрипты до и
после установки и вы получите более-менее полное представление о
возможностях kickstart. Приведем простой пример ks-файла
А теперь разберем его. Для удобства строки пронумерованы и я буду
просто ссылаться на номера. В строчках [1-3] мы определяем, что это
будет чистая инсталляция (не обновление) , местоположение дистрибутива
(если быть точным - первого диска дистрибутива) и задаем
инсталляционный номер.
Далее [4-5] мы указываем язык системы и тип клавиатуры. Нотация
стандартная, то есть чтобы установить русский язык системы надо
исправить en_US.UTF-8 на ru_RU.UTF-8.
В [6] мы конфигурируем X.org сервер, задавая рабочий стол по умолчанию
(KDE), разрешение и глубину цвета, а также определяем, что X.org
должен стартовать при загрузке.
В [7] находится простая сетевая конфигурация, определяющая, что у нас
единственная сетевая карта, которая использует DHCP для получения
сетевых настроек. Это рекомендованный вариант, так как в случае, если
вы устанавливаете много систем с одного kickstart-файла, вы не можете
использовать одни и те же сетевые настройки. Кроме того, DHCP-сервер в
любом случае является необходимым для сетевой инсталляции.
В [8] мы устанавливаем административный пароль (он заранее
зашифрован).
В [9] и [11] мы отключаем брандмауэр и мандатный контроль доступа
соответственно (не будем забывать, что мы рассматриваем простой
пример).
В [10] мы конфигурируем стандартную аутентификацию через /etc/passwd и
/etc/shadow с шифрованными паролями. В этой строке возможно заранее
сконфигурировать аутентификацию с использованием Kerberos, LDAP, NIS,
или Windows-домена.
В [12] мы задаем временную зону, а в [13] задаем положение загрузчика,
опции передаваемые ядру и, если у вас более одного жесткого диска -
порядок следования их в BIOS системы.
Строки [13-21] задают разметку диска. В нашем случае создается одна
100Мб ext3-партиция /boot для ядра, initrd и загрузчика, остальное
место размечается на 3 партиции, поверх которых располагается LVM, на
котором выделяется 20Гб том под основную систему (/), 2Гб под место
для подкачки, а остальное место монтируется как /home для данных
пользователей.
Строки [24-25] отключают агент настройки системы при первой загрузке и
указывают, что системы должна перезагрузиться после установки.
Строки [27-31], как это видно, находятся в области %packages, и
определяют пакеты и группы пакетов, которые должны быть установлены.
Синтаксис простой: имя пакета, чтобы установить один пакет (например
dhcp) и @имя_группы, чтобы установить определенную группу пакетов.
Оставшиеся строки (секция %post) - постинсталляционный скрипт. В нашем
случае он просто добавляет пользователя vpupkin. Вообще говоря, это
может быть произвольный скрипт, который обновляет систему, скачивает и
устанавливает конфигурацию или выполняет прочие произвольные действия.
Использование ks-файла
Теперь наш kickstart-файл готов к использованию. Осталось разместить
его на сервере и передавать параметром при установке. Я предполагаю,
что у вас сетевые службы настроены в соответствии с описанием в
предыдущем выпуске рассылки.
Сохраните ваш kickstart-файл куда-нибудь на сервер. Я разместил его в
/var/ftp/rhel-ks.cfg и, соответственно, он стал доступен по сети по
адресу [11]ftp://192.168.0.2/rhel-ks.cfg. Осталось "сообщить" об
этом примечательном факте загружающимся по PXE системам. Для этого
изменим файл '/tftpboot/prelinux.cfg/default' так, чтобы он содержал
следующую информацию:
label linux
kernel vmlinuz
append initrd=initrd.img ramdisk_size=9216 noapic acpi=offo ks=ftp://192.168.0.2/ks.cfg
На этом конфигурация заканчивается. Если вам необходимо установить
1000 типовых рабочих станций за день - это не более трудная задача,
чем нажать кнопку "Power" на 1000 компьютерах.
Удобности и вкусности.
Естественно, механизм kickstart чрезвычайно удобен для проведения
типовых инсталляций. Однако писать сценарий установки не всегда удобно
вручную. Для этого существует инструмент system-config-kickstart
(входит в поставку RHEL), который в окошке, похожем на этапы
инсталляции позволит сформировать костяк конфигурационного файла.
Фактически ручного редактирования требует только секция разметки диска
и постинсталляционные действия.
Инструментарий kickstart очень удобно интегрирован в RHN. Вы можете
сгенерировать сценарий по установленной ранее системе, а также
пользоваться каналами конфигурации для приведения типовых систем в
боевую готовность непосредственно от состояния "голое железо" (Bare
HW).
Полную информацию о синтаксисе kickstart-файлов вы можете почерпнуть
по адресу
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/Installation