Развертывание большого количества систем и приложений — задача непростая и многоэтапная. За долгое время было разработано большое количество технологий и инструментов, их реализующих, поэтому с ходу разобраться не всегда просто. Сobbler сводит разные решения в один проект, а единый интерфейс позволяет не отвлекаться на особенности работы с каждым из них.

 

Проект Cobbler

Cobbler — это сервер сетевой установки и обновления Linux- и Windows-систем, позволяющий создать среду бездисковой загрузки, включающую образы и репозитории пакетов, сконфигурировать и развернуть ОС. Поддерживаются как реальные ПК, так и виртуальные машины. По факту Сobbler — это удобная надстройка над привычными инструментами PXE, TFTP, DHCP и DNS, обеспечивающими сетевую загрузку систем, и утилитами работы с образами и репозиториями. От администратора скрыты особенности и настройки всех компонентов, после установки доступны шаблоны конфигурационных файлов, которые находятся в одном каталоге, необходимо лишь изменить их под свои условия. Управление всеми связанными демонами (перезагрузка и обновление конфигурации) осуществляется всего одной командой.

Также Cobbler интегрирован в среду управления Spacewalk (систему автоматизации управления конфигурацией Puppet и Func), позволяющую отдавать команды одновременно на множество систем. Причем можно, например, как вызывать Puppet после развертывания ОС средствами Cobbler, так и наоборот — использовать Cobbler в манифестах Puppet. Поддерживается интеграция с LDAP. Все это обеспечивает полный цикл управления IT-инфраструктурой.

Изначально Cobbler был рассчитан на установку и использование в дистрибутивах, производных от Red Hat, — RHEL, CentOS, Fedora и так далее. Со временем он был адаптирован для Ubuntu, Debian, SUSE, а в репозиториях этих дистрибутивов появились пакеты. При развертывании с помощью Cobbler OC Windows всю первоначальную подготовку образов необходимо будет делать самостоятельно при помощи Windows AIK / Windows ADK.

Написан Сobbler на Python, распространяется по лицензии GNU GPLv2. Управление осуществляется при помощи консольной утилиты cobbler или веб-интерфейса. Для интеграции со сторонними приложениями предлагается XML-RPC-интерфейс.

 

Установка Сobbler

Сobbler, несмотря на внешнюю простоту, достаточно сложная система, прежде всего из-за большого спектра различных технологий, но он обеспечивает основную функциональность из коробки практически без дополнительной подстройки. Хотя представление о сетевой загрузке, знание PXE и методики автоматизации установки дистрибутива очень приветствуются.

На момент написания статьи текущая версия 2.6.11. В репозитории EPEL находится именно она, в репозитории Ubuntu релиз ощутимо запаздывает (на момент написания статьи — 2.4.1). При необходимости установить самый свежий релиз всегда можно, используя исходные тексты Git. В принципе, алгоритм развертывания Сobbler не меняется уже несколько лет, поэтому все сказанное актуально и для других версий. Работе Cobbler будет мешать firewall и SELinux, в тестовой среде их можно отключить. В брандмауэре должны быть открыты порты 69, 80, 443 и 25151 (в установке по умолчанию). В Red Hat дистрибутивах понадобится подключить репозиторий EPEL, в Ubuntu нужный пакет уже есть в основном репозитории.

$ sudo apt install cobbler cobbler-web

В принципе, cobbler-web — необязательный компонент и необходим только в том случае, если планируется использовать веб-интерфейс. Все настройки можно делать в командной строке.

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

В Ubuntu, например, все пакеты, необходимые для сетевой загрузки и работы с образами, представлены в качестве рекомендуемых и по умолчанию не ставятся: DNS (BIND9), DHCP-сервер, TFPTD-утилиты создания метаданных createrepo, debmirror, genisoimage, pxelinux и другие. Сobbler поддерживает dhcp3-server и dnsmasq (обеспечивает как DNS, так и DHCP). В зависимостях пакетов указано имя dhcp3-server, но в новых версиях Ubuntu пакет переименован в isc-dhcp-server. Сам Cobbler имеет встроенный TFTP-сервер, но рекомендуется использовать внешний.

В Red Hat список, конечно, будет чуть другой.

# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -Uvh epel-release-latest-7.noarch.rpm
# yum install cobbler cobbler-web dhcp debmirror pykickstart system-config-kickstart dhcp mod_python tftp cman -y

После установки запускаем:

$ sudo service cobbler start

В Red Hat демон называется cobblerd. Все установлено, теперь можно переходить к настройкам.

 

Настройки Cobbler

После установки в каталоге /etc/cobbler появится несколько подкаталогов, в которых находятся шаблоны сервисов, параметры аутентификации, выбора модулей и другие. Назначение некоторых и настройки внутри, в принципе, должны быть понятны. Кроме этого, в /var/lib/cobbler будут размещены шаблоны, касающиеся настройки ОС и работы PXE. Например, в kickstarts найдем несколько готовых шаблонов для работы Anaconda kickstart, в loaders — загрузчики и так далее. При наличии своих готовых файлов просто копируем сюда. В Red Hat дистрибутивах нужный файл после установки ОС находится в домашнем каталоге root:

# cp /root/anaconda-ks.cfg /var/lib/cobbler/kickstarts/centos7.ks

В Ubuntu шаблоны kickstart в установочном образе находятся в каталоге pressed:

$ sudo cp -v preseed/*seed /var/lib/cobbler/kickstarts/
«/mnt/preseed/sample.seed» -> «/var/lib/cobbler/kickstarts/sample.seed»

Демон cobblerd берет установки в файле /etc/cobbler/settings. Здесь находятся параметры использования других сервисов (TFTP, DHCP, Puppet, Func, LDAP и так далее), отправка отчетов на SMTP, виртуальные интерфейсы, рабочие каталоги и прочее. Файл в YAML-стандарте, хорошо комментирован, поэтому разобраться можно.

Управление настройками и функциями Cobbler производится при помощи веб-интерфейса и консольной утилиты cobbler. Все параметры можно посмотреть в man-странице или запустив с ключом --help.

Веб-интерфейс доступен по адресу https://server/cobbler_web, также через веб можно получить доступ к XML-RPC http://server/cobbler_api. В вебе четыре секции: Configuration, Resources, Actions и Cobbler. Пользоваться в общем просто: нажимаем ссылку или заполняем параметры. В веб-консоли в большинстве пунктов доступны основные параметры, более тонкую настройку можно сделать только в консоли. Хотя, например, настройка системы через веб устроена очень наглядно и удобно.

После установки для проверки готовности компонентов сервера и анализа файла settings необходимо запустить утилиту cobbler с параметром check:

$ sudo cobbler check

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

Проверка готовности при помощи cobbler check
Проверка готовности при помощи cobbler check

На этом этапе можно получить ошибку. Наиболее распространены две. Первая, «httpd does not appear to be running and proxying cobbler», появляется в том случае, если веб-сервер Apache или cobblerd не запущен (например, стартовал и отвалился из-за ошибки), отключен модуль веб-сервера mod_proxy, занят другим приложением или блокирован брандмауэром 80-й или 25151-й порт. Следует проверить статусы сервисов и просмотреть логи. В Ubuntu, например, модуль mod_python установлен в виде зависимостей, но конфликтовал с mod_wsgi, поэтому пришлось его отключить.

$ sudo a2dismod python

Изменить порты можно в файле setting в параметрах:

http_port: 80
xmlrpc_port: 25151

Вторая ошибка связана с невозможностью провести аутентификацию в XML-RPC.

xmlrpclib.Fault: <Fault 1: "<class 'cobbler.cexceptions.CX'>:'login failed'">

Необязательно это проблема учетных данных, скорее неправильно настроен определенный параметр или сервис. Но разберемся с управлением учетными записями.

 

Учетные данные

Во время установки автоматически ставится логин/пароль cobbler/cobbler для доступа через веб-интерфейс или XML-RPC. Аутентификация возможна разными способами: логин/пароль, PAM, Kerberos, LDAP, Spacewalk, есть тестовый (testing/testing) и свой модуль. Настраиваются они в /etc/cobbler/modules.conf. По умолчанию:

[authentication]
module = authn_configfile

В данном случае используется файл /etc/cobbler/users.digest, логин и пароль для которого генерируется как при работе с веб-сервером:

$ htdigest /etc/cobbler/users.digest "Cobbler" user

Ввести по запросу пароль. Если указан способ authn_denyall, это значит, что вход заблокирован, и нужно изменить метод.

Строка, отвечающая за авторизацию, показывает, что все пользователи будут иметь права администратора.

[authorization]
module = authz_allowall

Это удобно, если доступ будет у небольшого количества пользователей. Заменив значение на authz_ownership, мы получаем возможность использования групп, то есть определенные пользователи могут управлять установкой своих систем. Группы описываются в файле users.conf. Все, кто входит в группу admin или в секцию [admins], могут управлять любыми объектами. Группа для всех объектов по умолчанию (то есть тех, для которых не указан владелец параметром --owner в командной строке) устанавливается параметром default_ownership в файле settings:

default_ownership:
- "admin"

При установке новых ОС для root используется пароль, указанный в параметре (в зашифрованном виде):

default_password_crypted: ""

По умолчанию пароль — cobbler, но следует его изменить, вставив между кавычками сгенерированный при помощи команды openssl passwd -1 MD5-хеш.

Еще два параметра в файле требуют внимания, иначе работать не будет: server и next_server, в которых следует прописать IP-адрес или имя сервера. Они используются для поиска сервера клиентами и при PXE-загрузке.

server: 192.168.1.1
next_server: 192.168.1.1

В Ubuntu нужный IP ставится во время установки, в Red Hat обычно стоит 127.0.0.1. Также можно разрешать локальные запросы отправлять на localhost, а не использовать внешний IP:

client_use_localhost=1

Далее просматриваем все параметры и включаем нужные. Прописываем в bind_master и default_name_servers серверы, которые будут использоваться, и включаем управление нужными функциями. После установки DNS и DHCP по умолчанию отключены — просто меняем 0 на 1 там, где нам нужно:

manage_dhcp: 1
manage_dns: 1
manage_tftpd: 1

Еще важный момент. До версии Cobbler 2.4.0, чтобы вступили в силу все изменения в /etc/cobbler/settings, требовалась обязательная перезагрузка демона. Теперь все параметры можно настраивать на лету при помощи команды cobbler setting. По умолчанию такая возможность отключена, чтобы ее активировать, следует установить в 1 параметр allow_dynamic_settings и перезапустить демон.

Смотрим все настройки:

$ sudo cobbler setting report
Вывод установок Cobbler
Вывод установок Cobbler

И меняем нужную:

$ sudo cobbler setting edit --name=manage_dhcp --value=1

После этого значение вступит в силу и будет сохранено в файле. Если ошибиться с названием параметра, будет выдана ошибка, но неправильное значение будет молча проигнорировано.

 

Настройки служб

Для настроек служб DNS, DHCP, TFTPD, rsync используются шаблоны (файлы с расширением .template), расположенные в /etc/cobbler. При этом DNS и DHCP по умолчанию отключены, так как в сети уже может быть настроен такой сервис, и они могут конфликтовать. Для BIND шаблон называется named.template, для DHCP — dhcp.template, TFPTD — tftpd.template и так далее. Шаблон, выводимый при PXE-загрузке, находится в /etc/cobbler/pxe/pxedefault.template. Необходимо выбрать шаблоны, которые будут применяться, и отредактировать параметры внутри под свои сетевые настройки. В шаблонах используются переменные, на это место при копировании будет подставлено значение параметра.

Файлы шаблонов Cobbler
Файлы шаблонов Cobbler

Далее в /etc/cobbler/modules.conf указываем в трех секциях модули, которые будут обеспечивать требуемые сервисы.

$ sudo nano /etc/cobbler/modules.conf
[dns]
module = manage_bind

[dhcp]
module = manage_isc

[tftpd]
module = manage_in_tftpd

Разрешаем запуск TFTP в конфигурационном файле xinetd, для чего в /etc/xinetd.d/tftp устанавливаем параметр disable в no. Обеспечиваем автозапуск всех сервисов, как это принято в дистрибутиве, при помощи chkconfig или update-rc.d.

После внесения всех изменений в шаблоны и конфигурационные файлы выполняется команда

$ sudo cobbler sync

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

 

Подготавливаем среду для развертывания ОС

Теперь нам нужно скачать загрузчики, импортировать установочные образы, добавить репозитории, файлы kickstart и связать это все в профили и системы. Команда cobbler report покажет все используемые ОС, образы, файлы, репозитории (у нас тут пока пусто).

Под distro Cobbler подразумевается набор файлов для загрузки: ядро и initrd (обязательные), kickstart-файл, дополнительные параметры ядра и системы. Обновляем список загрузчиков:

$ sudo cobbler get-loaders

Добавить дистрибутив можно двумя способами. При доступном зеркале rsync, DVD, NFS или файлах на диске используется ключ import (в веб-интерфейсе пункт «Import DVD»).

В консоли процесс очень прост. Вначале обязательно обновляем список сигнатур, чтобы не было проблем с добавлением новых версий дистрибутивов (файл /var/lib/cobbler/distro_signatures.json можно просто скопировать вручную с cobbler.github.io/signatures/2.6.x/latest.json):

$ sudo cobbler signature update

Монтируем образ и запускаем:

$ sudo mount ./ubuntu-desktop-amd64.iso /media/iso -t auto -o loop
$ sudo cobbler import --name=Ubuntu16_04 --arch=x86_64 --path=/media/iso

Плюс такого способа в том, что импортируется абсолютно вся связанная информация, в том числе и данные о пакетах.

Импортируем дистрибутив
Импортируем дистрибутив

Кроме указанных, есть еще множество разных параметров, подробнее о них в документации. По окончании будет выполнено еще три шага: добавление дистрибутива, в процессе которого создаются профили, создание ассоциации с репозиторием и kickstart-файлом. После добавления дистрибутива он будет показан в веб-консоли или в списке команды cobbler:

$ sudo cobbler distro list
$ sudo cobbler profile list
$ sudo cobbler report --name=Ubuntu16_04

Если список пустой, выполните cobbler sync. Удалить так же просто:

$ sudo cobbler distro remove --name=Ubuntu16_04

Второй вариант создания дистрибутива — использование команды cobbler distro. Обычно в ней необходимости нет, но только таким способом добавляются Windows-системы. В этом случае указывается путь к ядру и initrd:

$ sudo cobbler distro add --name=string --kernel=path --initrd=path [--kopts=string] [--kopts-post=string] [--ksmeta=string] [--arch=x86|x86_64|ia64] [--breed=redhat|debian|suse] [--template-files=string]

В kopts задаем параметры (например, --kopts="priority=critical locale=ru_RU"), ksmeta позволяет менять установки в kickstart-файле, breed указывает на тип дистрибутива.

 

Установка репозиториев

При импорте ISO Cobbler не создает репозиторий, поэтому все пакеты, которые на нем имеются, будут доступны при установке только этого дистрибутива. Репозитории, образованные при импорте с DVD, можно просмотреть и через веб: https://cobbler_ip/cobbler/ks_mirror, но они не подключены. Поэтому следующий обязательный шаг — это подключение репозитория:

$ sudo cobbler repo add --name=local-xenial \
--mirror=http://archive.ubuntu.com/ubuntu/ \
--breed=apt --arch=x86_64 --apt-components=main,restricted,universe,multiverse \
--apt-dists=xenial,xenial-updates,xenial-security

Смотрим список репозиториев:

$ sudo cobbler repo list

Добавим файлы с DVD, только отключим зеркалирование, чтобы не дублировать данные:

$ sudo cobbler repo add --name=Ubuntu16_04_DVD_base \
--mirror=https://cobbler_ip/cobbler/ks_mirror/Ubuntu16_04/ \
--keep-updated=N \
--mirror-locally=0 \
--arch=x86_64

Если планируется обновление большого количества систем, следует создать локальную копию репозиториев:

$ sudo cobbler sync
$ sudo cobbler reposync

Подобные команды необходимо запускать перед каждой установкой систем или поручить это cron. Файлы будут копироваться в /var/www/cobbler/repo_mirror, дисковый раздел должен иметь достаточно места.

 

Настраиваем профиль и создаем систему

В профиле описываются все параметры, используемые во время развертывания системы, и выделение ресурсов. Посмотреть список и параметры можно, введя команды

$ sudo cobbler profile list
$ sudo cobbler profile report --name=Ubuntu16_04
Настройка профиля
Настройка профиля

Профили можно копировать, переименовывать и редактировать:

$ sudo cobbler profile copy --name=Ubuntu16_04 --newname=Ubuntu-server

Теперь достаточно указать отличия для нового профиля — например, свой kickstart-файл:

$ sudo cobbler profile edit --name=Ubuntu-server --kickstart=/var/lib/cobbler/kickstarts/sample.seed --repos="local-xenial"

Eсли в settings параметр yum_post_install_mirror установлен в 1 (по умолчанию), репозитории будут доступны в системе и после ее установки.

На данный момент уже можно запускать клиентскую машину. В процессе PXE-загрузки будет выведено меню, по ходу установки ОС могут быть запрошены некоторые настройки.

Еще один вариант — сразу «создать» систему, в которой указать профиль и требуемые параметры, в этом случае установка производится автоматически. Параметров можно задать много, не все они обязательны:

$ sudo cobbler system add --name=SRV01 --profile=Ubuntu16_04 \
--kopts="interface=eth0" --hostname=example.com --interface=eth0 \
--ip=192.168.1.2 --subnet=255.255.255.0 --gateway=192.168.1.1 \
--name-servers=8.8.8.8 8.8.4.4 --mac=11.22.33.44.55

Параметры --ip= и --hostname= перенастраивают DHCP-сервер, управляемый Cobbler, который после cobbler sync выдаст клиенту его IP-адрес. Для новой системы также будет создан отдельный конфигурационный файл (имя соответствует МАС-адресу) в каталоге /var/lib/tftpboot/pxelinux.cfg, он выводит меню для этого компьютера. Все, кто не описан как система, будут получать файл default.

Отредактировать параметры системы можно при помощи команды cobbler system edit. Другие ключи позволят просмотреть список и получить отчет:

$ sudo cobbler system list
$ sudo cobbler system report --name=SRV01
Добавляем систему через веб-интерфейс
Добавляем систему через веб-интерфейс

Иногда какой-то компьютер не может быть развернут по сети, например BIOS не поддерживает такую функцию. В этом случае Cobbler предлагает возможность создания ISO-образа, который обеспечивает загрузку и/или установку систем. За создание образа отвечает команда cobbler buildiso. Без дополнительных параметров в него будут занесены все ядра и initrd-файлы, известные Cobbler, и сгенерировано меню. После загрузки компьютера все файлы затем получаются с сервера Cobbler. Также можно сгенерировать образ конкретной системы, дистрибутива или профиля, а если добавить параметр --standalone, будут добавлены и все файлы, необходимые для развертывания без доступа к Cobbler:

$ sudo cobbler distro list
$ sudo cobbler buildiso --distro=Ubuntu16_04 --standalone
 

Вывод

Это только основные возможности Cobbler, но достаточные, чтобы начать работу. Интеграция с Puppet и Func даст в руки еще более гибкий инструмент по развертыванию ОС.

Оставить мнение