Автоматизированное развертывание
Введение в kickstart-сценарии
Автоматизированная установка позволяет выполнить полностью автоматическую установку в соответствии с преднастройками, может применяться для автоматического развертывания множества компьютеров одинаковой конфигурации.
Для автоматизированной установки создается файл с настройками – kickstart-сценарий – сценарий быстрого развертывания. Затем в параметры cmdline ядра записывается путь к этому файлу, по DHCP автоматически настраивается сеть, а модуль anaconda-dracut в initramfs (образ файловой системы, загружаемый в оперативную память вместе с ядром) загружает этот kickstart-сценарий и сохраняет в файле /run/install/ks.cfg.
При установке в любом из режимов, в том числе в интерактивном графическом, в установленной Системе по адресу /root/anaconda-ks.cfg сохраняется kickstart-сценарий, описывающий произведенную установку, который можно взять за основу для пользовательского сценария в дальнейшем.
Типовой сценарий автоматизированной установки
Для реализации типового сценария автоматизированной установки нужно создать файл, например с именем a.ks, со следующим содержимым:
cmdline
https://bugzilla.redhat.com/show_bug.cgi?id=1874434
liveimg --url=file:///dev/mapper/live-base
Автоматически принять лицензионное соглашение
eula --agreed
System language
lang ru_RU.UTF-8
Keyboard layouts
keyboard --xlayouts=us,ru --switch=grp:alt_shift_toggle
Network information
network --hostname=localhost.localdomain
SELinux configuration
#selinux --disabled
System services
services --enabled="chronyd"
autopart
Partition clearing information
clearpart --all --initlabel
System timezone
timezone Europe/Moscow --utc
Passwords
rootpw 123456
user --groups=wheel,users --name=rosa --password=123456
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
reboot --eject
Примечание – С документацией по kickstart-сценариям можно ознакомиться по адресу
https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html.
Код приведенного выше сценария состоит из следующих командных строк:
- Выполняется полностью автоматизированная установка; запускается X-сервер, автоматически запускается установка, настройка не требуется (возможны варианты без X-сервера и установка по VNC):
cmdline
- Копируется на накопитель Система из LiveCD (также возможна установка из сетевого репозитория):
liveimg --url=file:///dev/mapper/live-base
- Устанавливается язык ОС ru_RU.UTF-8 (в файле
/etc/locale.conf):
lang ru_RU.UTF-8
- Добавляются в ОС две раскладки клавиатуры: us и ru, а переключение раскладок настраивается на комбинацию клавиш Alt+Shift:
keyboard --xlayouts=us,ru --switch=grp:alt_shift_toggle
- Включается службa systemd chronyd (можно перечислить несколько служб через запятые без пробелов):
services --enabled="chronyd"
Пример отключения sshd:
services --disabled="sshd"
- Выполняется полностью автоматизированная разметка диска с удалением всех данных (возможно прописать детализированные инструкции по разметке диска):
clearpart --all --initlabel
- Устанавливается часовой пояс "Европа/Москва", а аппаратные часы (BIOS) будут выставлены по Гринвичу (рекомендуется):
timezone Europe/Moscow --utc
- Устанавливается последовательность символов, например "123456", в качестве root-пароля:
rootpw 123456
- Создается пользователь с именем, например "rosa", добавляется в группы wheel и users; устанавливается пароль пользователя, например "123456":
user --groups=wheel,users --name=rosa --password=123456
Примечание – Группа wheel – специальная группа пользователей, используемая в некоторых системах UNIX для контроля доступа к команде
su, которая позволяет пользователю маскироваться под другого пользователя (обычно суперпользователя).
Пароли можно записать в зашифрованном виде, например, установить пароль пользователю root:
rootpw --iscrypted $6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/
Хеш, приведенный выше, является результатом выполнения команды:
python3 -c "import crypt; print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"
Данная команда позволяет получить хеш введенного с клавиатуры пароля. Таким образом можно избежать хранения пароля в открытом виде. Например, хеш пароля "123456" выглядит следующим образом:
user --groups=wheel,users --name=rosa --password=$6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/ --iscrypted
- По завершении установки необходимо перезагрузить ПК (в процессе перезагрузки необходим установочный носитель):
reboot --eject
Примечание – При установке на ВМ рекомендуется использовать установку с ISO-образа, подключенного как DVD-диск, т.к. гипервизор умеет отключать виртуальный привод по команде извлечения диска из гостевой Системы: тогда после перезагрузки Система загрузится не с образа, а с диска с установленной ОС.
Параметры в cmline ядра и в kickstart-сценарии дополняют друг друга и могут использоваться в различных комбинациях.
Дополнительные действия в kickstart-сценариях
В kickstart-сценарий могут быть добавлены произвольные действия, выполняемые в интерпретаторе shell после завершения основной установки. Это позволяет настраивать Систему сразу после инсталляции.
Для выполнения действий в установленной Системе (в chroot) используется секция %post.
Пример: запись даты и времени установки в файл /var/log/installtime.
%post
LC_ALL=C date > /var/log/installtime
%end
Если необходимо выполнить действия вне установленной Системы (в окружении LiveCD), в секцию %post добавляется параметр --nochroot:
%post –nochroot
LC_ALL=C date > "${INSTALL_ROOT}/var/log/installtime"
%end
Дополнительно возможно загрузить внешние файлы с помощью утилит curl, wget и других средств сетевого доступа, при наличии доступа к локальному или внешнему веб-серверу.
Удаление и установка пакетов могут быть выполнены также внутри секции %post:
- Удаление ненужных пакетов:
%post
sudo dnf -q -y remove firefox-esr52
%end
- Установка дополнительных пакетов:
%post
dnf -q -y install sconfigs-detailed-audit
%end
Прямая установка пакетов через секцию %packages в данной конфигурации не поддерживается. Рекомендуется использовать утилиту dnf с ключом -q для подавления лишнего вывода, что повышает стабильность автоматизированной установки.
Для тестирования сценария автоматизированной установки можно воспользоваться встроенным HTTP-сервером на машине оператора:
- Определить IP-адрес оператора:
ip a
- Перейти в директорию с файлом сценария (например, a.ks) и запустить сервер:
python3 -m http.server
В качестве альтернативы возможно использование других веб-серверов, например nginx или Apache httpd.
- На целевой машине при загрузке LiveCD в командную строку ядра необходимо добавить:
systemd.unit=anaconda.target inst.ks=http://192.168.1.173:8000/a.ks
где:
192.168.1.173— IP-адрес машины оператора,8000— порт запущенного HTTP-сервера.
Также рекомендуется добавить параметр inst.text.
Данный параметр позволит запустить консольный режим установщика вместо графического. Установка будет произведена автоматически без участия оператора.