Создание kickstart файла
Содержание
Что такое технология Kickstart
ОС может быть установлена при помощи т.н. технологии kickstart. Основой технологии можно считать определённым образом сформированный kickstart файл, служащий набором «ответов» для инсталлятора anaconda. Подобные технологии позволяют автоматизировать процесс установки множества экземпляров ОС.
В общем случае последовательность действий при автоматизации процесса установки может выглядеть следующим образом:
Формирование kickstart-файла Обеспечение доступа к kickstart-файлу. Либо сетевой доступ (FTP, NFS, HTTP.. etc), либо локальный доступ (USB-флэшка, накопитель HDD/SSD.. etc) Обеспечение загрузки и доступа к ksfile и, собственно, источнику установочных данных (локальный накопитель, сетевая установка.. etc)
Формирование kickstart-файла
1. Самый простой, но не всегда удовлетворительный способ, получение kickstart-файла в процессе ручной установки целевого дистрибутива AlterOS. После установки kickstart-файл будет находиться в директории /root
/root/anaconda-ks.cfg На основе этого файла можно будет продолжить разработку.
2. GUI Утилиты, аналогичные например system-config-kickstart, предоставляемой пакетом system-config-kickstart-2.9.7-1.el7.alteros.noarch
Kickstart-файл содержит большое количество возможных опций.
Рассмотрим используемые в приведённом примере опции:
- Обозначаем используемые опции аутентификации. Используем «стандартные» для современных Linux shadow-passwords и алгоритм хэширования пароля SHA-512
auth --enableshadow --passalgo=sha512
- Используем исчточник установки CDROM (так как рассматриваемая установка локальная). Возможны различные варианты - cdrom, harddrive, nfs, liveimg, url (FTP, HTTP, HTTPS)
cdrom
- Выбираем режим установки. Возможные варианты: graphical, text, cmdline
graphical
- Запускаем первоначальную настройку системы при запуске
firstboot --enable
- Определяем диски для установки
ignoredisk --only-use=sda
- Определяем параметры раскладок и клавиатуры
keyboard --vckeymap=us --xlayouts='ru','us' --switch='grp:alt_shift_toggle' lang ru_RU.UTF-8
- Определяем сетевые настройки (получение адреса от DHCP, используемый сетевой интерфейс, настройки сетевого интефейса, настройка имени хоста)
network --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate network --hostname=localhost.localdomain
- Настройка доступа для пользователя root (SHA-512 хэш от пароля пользователя root)
rootpw --iscrypted $6$VHVmVB.........J5/cQsjU.
- Запуск на установленной ОС демона chronyd для синхронизации времени и устанока временной зоны Europe/Moscow
services --enabled="chronyd" Europe/Moscow --isUtc
- Добавление пользователя "user" в группу "wheel" с паролем "password" (используется хэш пароля)
user --groups=wheel --name=user --password=$6$VuUNGnamqdtsWYSw$neBhmByYlGgNB4pOYsaINddvitAXFT6wfeGYmwn9.S/qLEzEEMjaEBHog8dqcTe9QhfAvRrqSXZHVNSYFqWad/ --iscrypted --gecos="user"
- Определяем каким образом и куда будет установлен загрузчик и разбиение дисков
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda autopart --type=lvm clearpart --none --initlabel
- Секция определения устанавливаемых групп пакетов (@^server, @base, @core, chrony, kexec-tools)
- Определяем политики паролей для установщика anaconda
%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
- Добавляем post-script, в данном примере обеспечивающий установку ключа для root
%post ..... %end
Проверка сформированного kickstart-файла может быть осуществлена при помощи команды:
ksvalidator /path/to/Kickstart.ks
Команда предоставляется пакетом:
pykickstart-1.99.66.18-1.el7.alteros.noarch в текущей версии AlterOS
Обеспечение доступа к kickstart-файлу.
Для указания kickstart-файла в процессе установки служит опция загрузки inst.ks Опции загрузки задаются в процессе установки. Например:
Нажатие Tab вызывает интерфейс ввода boot options:
Для использования в качестве сценария возможно использовать файл расположенный:
- На накопителе, подключённом локально. Это может быть CD, USB-флэш диск, дискета, HDD/SDD
- В сети (NFS, FTP, HTTP, TFTP)
Например, при использовании NFS для доступа к kickstart-файлу процедура локальной установки OS будет выглядеть так:
1. Общая конфигурация стенда: ◦ В сети работает DHCP сервер, выдающий адреса из диапазона 192.168.254.0/24 ◦ Есть «образец» системы на AlterOS, установленный вручную Поставим задачу: ◦ Требуется в автоматическом режиме установить еще один экземпляр AlterOS ◦ Авторизация пользователя «root» по паролю «password» ◦ Требуется добавить пользователя «user» с паролем «password» и включить его в группу «wheel» (доступ к su, sudo) ◦ Требуется добавить авторизацию для пользователя «root» по ключу. 2. Создание хэша пароля: ◦ В ОС AlterOS можно воспользоваться подобным скриптом на python: python3 -c 'import crypt; print(crypt.crypt("password", crypt.mksalt(crypt.METHOD_SHA512)))' 3. Создание ключа SSH: ◦ В ОС AlterOS можно воспользоваться командой: ssh-keygen -t rsa 4. Создание kickstart-файла: Воспользуемся /root/anaconda-ks.cfg из "ручной" установки AlterOS В файл нужно добавить открытый ключ и обеспечить его использование на установленной ОС (блок %post %end в приведённом примере) Потом копируем /root/anaconda-ks.cfg в предварительно созданную директорию /var/nfs/ksfiles/ cp /root/anaconda-ks.cfg /var/nfs/ksfiles/ks.cfg 5. Настройка NFS. ◦ Создание файла /etc/exports. В результате: [root@localhost ksfiles]# cat /etc/exports /var/nfs/ksfiles 192.168.254.0/24(rw,sync,insecure,no_root_squash,no_all_squash) Тут необходимо обратить внимание на опцию экспорта "insecure". Сервис установки anaconda осуществляет запрос по порту ниже 1024. ◦ Открываем firewall: [root@localhost ksfiles]# firewall-cmd --permanent --add-service=nfs [root@localhost ksfiles]# firewall-cmd --permanent --add-service=mountd [root@localhost ksfiles]# firewall-cmd --permanent --add-service=rpc-bind [root@localhost ksfiles]# firewall-cmd --reload ◦ Проверка экспорта: [root@localhost ksfiles]# showmount -e 192.168.254.139 Export list for 192.168.254.139: /var/nfs/ksfiles 192.168.254.0/24 6. Настройка boot options: Используем опцию: inst.ks=nfs:192.168.254.139:/var/nfs/ksfiles/ks.cfg 7. Далее запускаем установку. Установщик anaconda сам выполнит все ходы, записанные в kickstart-файле.
Пример kickstart-файла:
#version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable ignoredisk --only-use=sda # Keyboard layouts keyboard --vckeymap=us --xlayouts='ru','us' --switch='grp:alt_shift_toggle' # System language lang ru_RU.UTF-8 # Network information network --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate network --hostname=localhost.localdomain # Root password rootpw --iscrypted $6$VHVmVBq8pPqtsWRA$dfD3bDLMrvwH3M.S7Mpm402oTq0YdLb8e6BVtJfHwMzlgSf3FqgEOkliefAT1woDobenTka2edlDaJ5/cQsjU. # System services services --enabled="chronyd" # System timezone timezone Europe/Moscow --isUtc user --groups=wheel --name=user --password=$6$VuUNGnamqdtsWYSw$neBhmByYlGgNB4pOYsaINddvitAXFT6wfeGYmwn9.S/qLEzEEMjaEBHog8dqcTe9QhfAvRrqSXZHVNSYFqWad/ --iscrypted --gecos="user" # System bootloader configuration bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda autopart --type=lvm # Partition clearing information clearpart --none --initlabel %packages @^server @base @core chrony kexec-tools %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end %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 %post # Add public SSH-key mkdir -m0700 /root/.ssh cat <<EOF >/root/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCexNsEr6wHMYctYgWNYb7g0wrINgRekL6x/EDTe9yaskob0GjnGp7bwSRBGmCWxFI0MxAwpyobA3rEJadRzyHke9yOHjkdmqN87lUozi+z9FIGQJzMsBqNdBVC1GmikviVNYgs0mRTntW6Zcd6gA6N3GKd9alm1ruvEF7En5S5rrcm02Y+m73 FM7jvtT/QPp3A3za2h0vw/KpvSLtYGPdeqNRL0xq68dwsXpR38Mz4D7B5nyUm4Y+z4iJsAEup6h9mH3EsmNd3kNiw2EiHZU1CT+WnN5+laLp8+Ksp7yp6vBTtb+RIPErVAqK7Ju3ayUu6nC/UPKIN8Z3rzfRFc8Wt pub_key@test.local EOF chmod 0600 /root/.ssh/authorized_keys %end