Рубрика:
Администрирование /
Продукты и решения
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
АЛЕКСЕЙ КОРОБКИН
Slack – автоматизируем настройку сервисов
Творческая работа по настройке сервера превращается в рутину, если этих серверов сотня. С помощью slack этот процесс можно автоматизировать быстро и без лишних затрат.
Несколько дней назад я настраивал один из вспомогательных серверов, на котором должна работать реплика LDAP, вспомогательный контроллер Kerberos и запасной IRC-сервер. После того как завершилась установка Linux, я запустил такую команду:
# slack ldapslave kdcslave ircserver
Когда эта команда закончила работу, настройка сервера была полностью завершена. Другими словами, всю работу за меня сделал slack [1] – простой, но мощный инструмент управления настройками. Slack экономит бесценное время системного администратора, позволяя автоматизировать установку и настройку сервисов и сосредоточиться на более творческой работе.
Принцип действия
В большинстве случаев настройка сервиса под Linux состоит из установки всех необходимых пакетов, ручной корректировки установленных файлов и написания файлов конфигурации. Если вам приходится настраивать один и тот же сервис хотя бы дважды, эту работу стоит автоматизировать. И slack, наверное, самое простое средство автоматизации.
Настройку программного обеспечения slack производит в три шага:
- Шаг 1. Скрипт preinstall выполняет всю подготовительную работу. Например, устанавливает необходимые пакеты из дистрибутива Linux, создает локальную учётную запись, корректирует настройки других сервисов.
- Шаг 2. Slack берет из своего репозитория и раскладывает по нужным местам заранее подготовленные администратором файлы. Скажем, заполненный файл конфигурации веб-сервера помещается в /etc/apache2, а логотип фирмы – в /var/www/images.
- Шаг 3. Скрипт postinstall выполняет завершающую настройку. Например, накладывает патчи на установленные файлы, определяет IP-адрес сервера и вписывает его в конфигурационный файл, открывает нужные порты на брандмауэре или настраивает crontab.
Как видите, алгоритм работы slack очень прост. Скрипты могут быть написаны на любом языке и представлять собой любой исполняемый файл, от bash-сценария до бинарного файла C++, slack в этом никак вас не ограничивает. Файлы с сервера копируются при помощи rsync. Какой именно транспорт будет использовать rsync, также зависит только от ваших предпочтений.
Почему именно slack?
Скептически настроенный читатель спросит, зачем изобретать велосипед, если почти так же работает любой менеджер пакетов – достаточно создать свой пакет и устанавливать на серверы именно его.
Ответ: потому что создание собственного пакета – слишком трудоёмкий процесс. В большинстве случаев удобнее установить стандартный пакет и чуть-чуть модифицировать его под свои нужды, нежели тратить время на написание манифеста пакета, создание правил установки, цифровую подпись и прочую «бюрократию».
Кроме того, просмотр и изменение вручную созданного пакета затруднительны. Если ваш коллега захочет исправить одну строчку настроек или просто разобраться в том, что же именно делает ваш пакет – ему придётся потратить куда больше времени, чем на чтение двух скриптов и просмотр каталога с файлами.
Безусловно, slack не может конкурировать с профессиональными пакетами наподобие IBM Tivoli Automation, но его простоту наверняка оценят администраторы ферм веб-серверов и Linux-кластеров, которым нужна максимально простая и надёжная автоматизация.
Название slack происходит от «Sysadmins" Lazy Auto-Configuration Kit» и не имеет отношения к дистрибутиву Linux Slackware.
Установка
Выберите сервер, который будет хранить файлы конфигураций – в терминологии slack он называется slack-мастер. Удобно завести для него псевдоним slack-master в DNS.
На slack-мастер установите rsync. Выделите отдельный каталог, например /var/slack, в котором будут храниться настройки каждого сервиса. Эти настройки slack называет ролями. К примеру, в начале статьи я установил на сервер три роли: ldapslave, kdcslave и ircserver. Подумайте, каким образом вы хотели бы получать файлы из этого каталога: по ssh, rsh или непосредственно по протоколу rsync. Если вы предпочитаете последний вариант, настройте модуль slack в /etc/rsyncd.conf.
[slack]
path = /var/slack
comment = my slack repo
На клиентах нужно установить slack. Почти во всех дистрибутивах есть соответствующий пакет, но и собрать из исходных кодов его совсем несложно. Архив с исходными кодами можно скачать на страничке проекта [1].
В файле конфигурации /etc/slack.conf достаточно отредактировать только переменную SOURCE, которая указывает, где находится репозиторий slack. Она заполняется согласно стандартному синтаксису rsync [2].
Например, если вы настроили модуль slack в rsyncd.conf, как описано выше, то правильная строка может выглядеть так:
SOURCE=slack-master::slack
или так:
SOURCE=slack-master:/var/slack
Остальные переменные можно оставить со значениями по умолчанию.
Slack-роль
В качестве примера сделаем slack-роль, которая будет устанавливать IRC-клиент irssi, добавлять пользователя ircbot и копировать стандартный файл конфигурации клиента irssi в домашний каталог этого пользователя. Роль безыскусно назовём ircbot.
Шаг 1. Строим иерархию файлов на сервере. Наш сервер называется slack-master, файлы находятся в /var/slack. Внутри /var/slack есть каталог roles, в нём каталог роли ircbot. Иными словами, на сервере у нас все файлы роли ircbot хранятся в папке /var/slack/roles/ircbot (см. рис. 1).
Рисунок 1. Иерархия файлов на slack-мастере
Структура этого каталога такова:
- подкаталог files с файлами, которые будут скопированы на целевую машину.
Внутри каталога files в будущем домашнем каталоге пользователя ircbot сделаем подкаталог .irssi, а в нём создадим файл config.
# cd /var/slack/roles/ircbot/files
# mkdir -p home/ircbot/.irssi
# touch home/ircbot/.irssi/config
В этот файл поместим обычные настройки IRC-клиента irssi. Содержимое файла не имеет значения, это просто пример:
# cd /var/slack/roles/ircbot/files
# cat home/ircbot/.irssi/config
settings = {
core = {
real_name = "IRC Bot";
user_name = "ircbot";
nick = "+ircbot+";
};
};
Вообще в каталоге files файлы располагаются так, как бы они располагались на целевой файловой системе, начиная с корневого каталога / и с учётом всех подкаталогов. Например, у роли веб-сервера содержимое каталога files может быть таким:
- etc/apache2/apache2.conf;
- etc/apache2/conf.d/security;
- etc/init.d/apache2;
- etc/cron.daily/apache2;
- usr/share/doc/apache2/README.patched.
Шаг 2. Создаем скрипт preinstall, запускаемый перед копированием файлов. Поскольку мы будем устанавливать новые пакеты и создавать учётные записи, скрипт будет выполняться с правами root.
#!/bin/sh
# Обновить список пакетов
apt-get update
# Установить irssi
apt-get install irssi
# Создать свою группу для учётной записи ircbot
groupadd ircbot
# Создать учётную запись ircbot, домашний каталог для неё, добавить в группу ircbot
useradd -g ircbot -c "IRC Bot" -m -d /home/ircbot ircbot
Этот скрипт slack выполнит перед началом копирования файлов.
Шаг 3. Создаем скрипт postinstall, который будет запущен после копирования файлов. Этот скрипт выполняет финальные шаги установки и настройки роли ircbot.
#!/bin/sh
# Исправить права на каталог .irssi
chown -R ircbot:ircbot /home/ircbot/.irssi
# Отчитаться о завершении установки
echo "IRC Bot installation has been done."
Обратите внимание: именно скрипты preinstall и postinstall – основной инструмент slack. Поскольку они выполняются на целевой машине, у вас есть уникальная возможность прочитать её локальные параметры, настроить установленное ПО индивидуально для данной машины и данного сетевого окружения.
Примените свою фантазию и напишите сценарии установки так, чтобы от вас не требовалось ни нажатия клавиши, ни ввода каких-то аргументов вручную, тем более что из командной строки slack может принимать только названия ролей и свои встроенные параметры. Пишите на том языке сценариев или программирования, который лучше всего знаете, – slack просто запускает файлы preinstall и postinstall с помощью вызова exec(), так что ограничений никаких нет.
Проверка
На целевой машине запускаем:
# slack ircbot
В зависимости от транспорта, которым пользуется rsync, slack может запросить пароль для соединения со slack-мастером. В документации к slack можно прочитать, как настроить беспарольную аутентификацию для rsync и ssh при помощи сертификатов.
После ввода пароля slack скопирует со slack-мастера все файлы роли ircbot во временный каталог, запустит скрипт preinstall, потом перенесёт файлы из временного каталога на их постоянные места и следом запустит postinstall. Полный алгоритм работы slack при установке роли показан на рис. 2.
Рисунок 2. Алгоритм работы slack
Всё, пакет установлен, учётная запись создана, и в домашнем каталоге ircbot лежит заранее настроенный файл конфигурации с правильными правами доступа к нему. Просто, не правда ли?
Простота slack – его сильная и в то же время слабая сторона. Slack делает только то, что вы сами напишете в скриптах preinstall и postinstall. Контроль зависимостей, ошибок, повторных установок, неожиданных сред окружения – это всё вы должны реализовать сами, если чувствуете в этом необходимость. В любом случае не забывайте тщательно тестировать роль перед использованием. При установке роли slack сохраняет резервные копии файлов, которые он сам перезаписывает, но ваши скрипты никак не проверяет и возможность отката роли сам по себе не предоставляет.
Применение
Как именно использовать slack, каждый администратор решает сам. Если в вашей сети много рабочих станций с ОС Linux, или вам приходится настраивать однотипные сервисы на серверах или даже просто постоянно восстанавливать один и тот же сервер, slack поможет вам сэкономить время и усилия.
В какой-то момент вы даже можете решить включить slack в процедуру автоматической установки операционной системы, чтобы вообще не подходить к серверу после запуска установки ОС. Запущенный без списка ролей, slack прочитает подготовленный вами файл conf/roles.conf в своём репозитории и по имени компьютера определит, какие роли следует установить.
Slack никак не привязан ни к платформе, ни к дистрибутиву, и одна и та же роль вполне может сначала проверять, на каком дистрибутиве она запустилась, а потом устанавливать rpm, deb или любые другие пакеты. Slack написан на языке Perl и может с успехом применяться в смешанной среде FreeBSD, Linux и Solaris.
Настройка репозитория на slack-мастере – тоже творческая задача. Применяя контроль версий файлов и резервное копирование, вы сделаете создание slack-ролей удобным и приятным для ваших коллег из IT-отдела.
Простота slack легко завоёвывает сердца администраторов и помогает снизить усилия по документированию, сосредоточив их вместо этого на автоматизации. А кроме того, как вы ещё продемонстрируете коллегам-администраторам свой талант написания скриптов на любимом языке?
- Страница проекта slack – http://code.google.com/p/slack.
- Документация проекта rsync – http://samba.org/rsync/documentation.html.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|