Автоматическая установка «Astra Linux Special Edition» (часть 2)
Как я уже упоминал в первой части статьи, поняв объем необходимых операций для разворачивания сервера автоматической установки ОС, мы решили данный процесс автоматизировать(«заскриптовать»). Поскольку нами активно используется ПО Ansible решили использовать его, с его помощью можно производить операции как локально, так и на удаленной машине. Ansible представляет собой интерпретатор YAML скриптов, подробности работы выходят за рамки данной статьи их можно при желании почитать здесь.
Итак цели, которые мы хотели достичь в ходе разработки:
- возможность локального разворачивания и разворачивания по сети на удаленной машине;
- автоматически на основе файла конфигурации устанавливать необходимые пакеты и конфигурировать их;
- поддержка возможности отдавать пакеты как через http так и через ftp;
- возможность создавать назначать по MAC-адресу компьютера — специальную конфигурацию (preseed файл), статический IP и имя узла.
Весь код лежит в репозитории astra_preseed_install у нас на Гитхабе.
Немного о настройке и внутреннем устройстве проекта astra_preseed_install
Проект состоит из файлов с доработанным netinst образом Astra Linux Special Edition, YAML скриптов с командами и шаблонами конфигурационных файлов.
[symple_toggle title=»Как развернуть astra_preseed_install»]
- aptitude install ansible
- git clone https://github.com/laboratory50/astra_preseed_install.git
- правим под свои задачи конфигурационный файл groups_vars/all
- правим файл stage в котором указываем имя узла или IP-адрес компьютера, где будем настраивать сервер;
- запускаем ansible-playbook site.yml
При разворачивании сервера автоматической установки на узле будут настроены и сконфигурированы Dnsmasq с tftp, Apache (если при конфигурации выбран http) или vsftpd (если выбран ftp). Если выбран тип ftp, то будет выполнено копирование репозитория с указанного cd в каталог ftp сервера. Если вы не хотите создавать репозиторий при настройки конфигурации с ftp, можно вызвать команду разворачивания с тэгом —tags=no_make_rep.
Для разворачивания на локальной машине снимаем в файл site.yml комментарий со строки connection: local, если необходимо выполнить операции по разворачиванию из под sudo, тогда раскомментируйте строку sudo: True в файле.
astra_preseed_install содержит готовые шаблоны preseed файлов:
- preseed.cfg.j2 — для персональных компьютеров и с автоматической разметкой диска с LVM;
- preseed.raid.cfg.j2 — для серверов с аппаратным RAID и объемом диска меньше 2 TB;
- preseed.raid_gpt.cfg.j2 — для серверов с аппаратным RAID и объемом диска больше 2 TB;
- preseed.softraid.cfg.j2 — для серверов с программным RAID (soft, serial ata).
Естественно, раздел preseed файла с параметрами разбиения диска (опции partman), вы должны корректировать под параметры вашего аппаратного обеспечения. Свои шаблоны можно добавлять в подкаталог roles/common/templates.
Конфигурационный файл all располагается в каталоге groups_vars и содержит исчерпывающие комментарии для каждой настройки. Остановимся лишь некоторых важных моментах:
- server_type: ‘значение’ — тут выбирается как будем отдавать пакеты и preseed, возможные значения http или ftp.
- default_preseed: ‘имя файла’ — тут выбирается стандартный preseed, если вы в переменной machines_by_mac не указали какому компьютеру какой preseed отдавать, то будет отдан этот.
- machines_by_mac — массив записей следующего вида, где:
- mac: ‘xx-xx-xx-xx-xx-xx’— MAC-адрес целевого компьютера, на который будет ставиться ОС;
- hostname: ‘имя’ — имя узла, которое будет назначено на данный компьютер;
- preseed: ‘имя файла’ — preseed файл, который будет использоваться в ходе установки на данный компьютер, необязательный параметр по-умолчанию будет использоваться default_preseed;
- ip: ‘ip-адрес’ — который будет назначен данному компьютеру, необязательный параметр по-умолчанию будет настроен на dhcp.
Проект astra_preseed_install позволяет быстро развернуть сервер для установки ОС Astra Linux Special Edition, но сделав небольшие изменения его можно использовать и для других Дебьян-подобных дистрибутивов.