Slack – автоматизуємо налаштування сервісів
Архів номерів / 2009 / Випуск №2 (75) / Slack – автоматизуємо налаштування сервісів
| Рубрика: Адміністрація / Продукти та рішення |
ОЛЕКСІЙ КОРОБКІН
Slack – автоматизуємо налаштування сервісів
Творча робота з налаштування сервера перетворюється на рутину, якщо цих серверів сотня. За допомогою slack цей процес можна автоматизувати швидко та без зайвих витрат.
Кілька днів тому я налаштовував один із допоміжних серверів, на якому має працювати репліка LDAP, допоміжний контролер Kerberos та запасний IRC-сервер. Після того, як завершилася установка Linux, я запустив таку команду:
# slack ldapslave kdcslave ircserver
Коли ця команда закінчила роботу, налаштування сервера було повністю завершено. Іншими словами, всю роботу за мене зробив slack [1] - простий, але потужний інструмент керування налаштуваннями. Slack економить безцінний час системного адміністратора, дозволяючи автоматизувати встановлення та налаштування сервісів та зосередитись на більш творчій роботі.
Найчастіше налаштування сервісу під Linux складається з установки всіх необхідних пакетів, ручного коригування встановлених файлів і написання файлів конфігурації. Якщо вам доводиться налаштовувати той самий сервіс хоча б двічі, цю роботу варто автоматизувати. І slack, мабуть, найпростіший засіб автоматизації.
Налаштування програмного забезпечення slack здійснює в три кроки:
Як бачите, алгоритм роботи 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.
comment = my slack repo
На клієнтах необхідно встановити slack. Майже у всіх дистрибутивах є відповідний пакет, але й зібрати з вихідних кодів його нескладно. Архів з вихідними кодами можна завантажити на сторінці проекту [1].
У конфігураційному файлі /etc/slack.conf достатньо відредагувати лише змінну SOURCE, яка вказує, де знаходиться репозиторій slack. Вона заповнюється згідно з стандартним синтаксисом rsync [2].
Наприклад, якщо ви налаштували модуль slack в rsyncd.conf, як описано вище, то правильний рядок можевиглядати так:
Інші змінні можна залишити зі значеннями за промовчанням.
Як приклад зробимо slack-роль, яка буде встановлювати IRC-клієнт irssi, додавати користувача ircbot та копіювати стандартний файл конфігурації клієнта irssi у домашній каталог цього користувача. Роль невигадливо назвемо ircbot.
Крок 1. Будуємо ієрархію файлів на сервері. Наш сервер називається slack-master, файли знаходяться у /var/slack. Усередині /var/slack є каталог roles, у ньому каталог ролі ircbot. Іншими словами, на сервері у нас усі файли ролі ircbot зберігаються у папці /var/slack/roles/ircbot (див. рис. 1).

Малюнок 1. Ієрархія файлів на slack-майстрі
Структура цього каталогу така:
- підкаталог файлів з файлами, які будуть скопійовані на цільову машину.
Усередині каталогу files у майбутньому домашньому каталозі користувача ircbot зробимо підкаталог .irssi, а в ньому створимо файл config.
# mkdir -p home/ircbot/.irssi
У цей файл розмістимо звичайні налаштування IRC-клієнта irssi. Вміст файлу не має значення, це просто приклад:
real_name = "IRC Bot";
Взагалі в каталозі 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.
# Оновити список пакетів
apt-get install irssi
# Створити свою групу для облікового запису ircbot
# Створити обліковий запис ircbot, домашній каталог дляїї, додати до групи ircbot
useradd -g ircbot -c "IRC Bot" -m -d /home/ircbot ircbot
Цей скрипт slack виконає перед початком копіювання файлів.
Крок 3. Створюємо скрипт postinstall, який буде запущено після копіювання файлів. Цей скрипт виконує фінальні кроки встановлення та налаштування ролі ircbot.
# Виправити права на каталог .irssi
chown -R ircbot:ircbot /home/ircbot/.irssi
# Звітувати про завершення встановлення
echo "IRC Bot installation has been done."
Зверніть увагу: саме скрипти preinstall та postinstall – основний інструмент slack. Оскільки вони виконуються на цільовій машині, ви маєте унікальну можливість прочитати її локальні параметри, налаштувати встановлене ПЗ індивідуально для даної машини і даного мережевого оточення.
Застосуйте свою фантазію та напишіть сценарії установки так, щоб від вас не вимагалося ні натискання клавіші, ні введення якихось аргументів вручну, тим більше, що з командного рядка slack може приймати лише назви ролей та свої вбудовані параметри. Пишіть мовою сценаріїв або програмування, яку найкраще знаєте, – slack просто запускає файли preinstall і postinstall за допомогою виклику exec(), так що обмежень ніяких немає.
На цільовій машині запускаємо:
Залежно від транспорту, яким користується 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 легко завойовує серця адміністраторів і допомагає знизити зусилля з документування, зосередивши їх натомість на автоматизації. А крім того, як ви ще продемонструєте колегам-адміністраторам свій талант написання скриптів улюбленою мовою?