Создание kickstart файла

Материал из Wiki AlterOS
Перейти к: навигация, поиск

Что такое технология 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 Опции загрузки задаются в процессе установки. Например:

140754.jpg

Нажатие Tab вызывает интерфейс ввода boot options:

141032.jpg

Для использования в качестве сценария возможно использовать файл расположенный:

- На накопителе, подключённом локально. Это может быть 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