01.06.2007

Построение инфраструктуры для масштабного развертывания 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
    Если вы получили информацию по этим пакетам, то они у вас установлены. В противном случае их необходимо установить.
    # yum -y install xinetd tftp-server (RHEL5)
    # up2date install xinetd tftp-server (RHEL4)
  2. Разрешите в конфигурации xinetd запуск tftp в качестве сервиса по требованию. Для этого откройте файл /etc/xinet.d/tftp
    И исправьте там строчку
    disable = yes
    на
    disable = no
  3. В конфигурации по умолчанию корневой директорией для tftp-сервера является директория /tftpboot/
    Туда нам необходимо перенести файлы, необходимые для начала инсталляции. Установите пакет syslinux и перенесите PXE-загрузчик в директорию /tftpboot/
    # yum install syslinux
    # cp /usr/lib/syslinux/pxelinux.0 /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-адресов. Ниже приведем простейшую конфигурацию с комментариями

ddns-update-style interim;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option domain-name "example.com";
option domain-name-servers 192.168.0.2;
option time-offset 10800; # GMT+3
range dynamic-bootp 192.168.0.4 192.168.2.254;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.0.2;
filename "pxelinux.0";
}

Итак, по порядку. Опции 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, позволяющие проводить установку и настройку систем в любой заданной конфигурации полностью неинтерактивно. Об этом мы тоже обязательно расскажем, но это - совсем другая история.

4 комментария:

GByte комментирует...

Спасибо!

Оч познавательно.

lynz комментирует...

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

Евгений комментирует...

Смешно =) У RedHat есть обалденная документация на сайте по всем основным фитчам дистибутива. Рябята просто не ленитесь и прочтите его всего и поробуйте всё что там описано. Потратьте пару недель и оцените возможности. В этом сила комерческих дистрибутивов - окромя стабильности, обширная документация. Удачи в постигании Enterprise Level Linux

Anganar комментирует...

Евгений, доброго времени суток.

Как показывает наш опыт, к сожалению, люди редко находят время читать документацию целиком. В итоге многие очень интересные и полезные технологии остаются просто неизвестными широкой публике.

Поэтому основная идея технических постов этого блога - сделать подборку готовых законченных практических рецептов. Мы надеемся, что это подтолкнет людей к более глубокому изучению технологии и приведет к пониманию того самого Enterprise Level Linux.

С уважением, Anganar и Lynz.

P.S. Мы искренне рады, что находятся люди, понимающие "Enterprise Linux way" И особенно мы рады, если эти люди не только понимают его сами, но и так или иначе помогают в его популяризации. ;-)