Установка Kickstart - это автоматизированный метод установки дистрибутивов Linux, таких как Red Hat Enterprise Linux (RHEL), Rocky, AlmaLinux, CentOS, Fedora или их производные. Он позволяет предварительно определить параметры установки в файле конфигурации, что делает его идеальным для развертывания систем быстро и последовательно без ручного вмешательства.

Как работает Kickstart

  • Kickstart файл:

    • Простой текстовый файл, который содержит ответы на все вопросы, обычно задаваемые программой установки, такие как:
    • Разделение диска
    • Программные программы для установки
    • Конфигурация сети для сервера
    • Временная зона
    • Пароль пользователя root
    • Имя файла: ks.cfg
  • Процесс установки:

    • Во время установки система читает файл Kickstart и выполняет все шаги, указанные в нем, не заставляя пользователя для ввода.
  • Развертывание:

    • Файл Kickstart может быть доставлен в целевую систему через:
    • локальное хранилище (например, USB, CD/DVD или жесткий диск).
    • сетевой сервер (например, HTTP, FTP или NFS).

Автоматическая установка VM с использованием Virt-install и kickstart

Рассматриваем пример:

  • Установка операционной Linux OS из ISO
  • Использовать kickstart для автоматизации установки ОС

Шаг 1. Скачать OS ISO изображение (DVD)

Скачать Enterprise Linux DVD iso. Это может быть RHEL, CentOS Stream, Rocky Linux, AlmaLinux, Oracle Linux, etc.

В этом примере мы загружаем Rocky Linux DVD iso.

1
wget https://download.rockylinux.org/pub/rocky/10/isos/x86_64/Rocky-10.0-x86_64-dvd1.iso

Переместить файл ISO в каталог хранилища по умолчанию.

1
sudo mv Rocky-10.0-x86_64-dvd1.iso /var/lib/libvirt/images/Rocky-10.0-x86_64-dvd1.iso

Шаг 2. Создание сценария установки kickstart

Мы начнем с создания нового файла под названием ks.cfg:

1
vim ks.cfg

Содержание в файле:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# System language
lang ru_RU.UTF-8

# Keyboard layout
keyboard us

# Network configuration
network --bootproto=dhcp

# Timezone
timezone Europe/Moscow --utc

# Root password (plain text)
rootpw --plaintext StrongRootPassw0rd

# Skip the GUI installation (remove for desktop installs)
skipx

# Run installer in text mode
text

# Clear the Master Boot Record
zerombr

# Partitioning information
bootloader --timeout=1 --location=mbr --append="net.ifnames=0 biosdevname=0"
clearpart --all --initlabel
part /boot --fstype=ext4 --size=512
part swap --size=1024
part / --fstype=xfs --grow --size=1

# Packages
%packages
@core
@base
openssh-server
openssh-clients
vim
bash-completion
sudo
selinux-policy-devel
net-tools
tar
bzip2
bind-utils
policycoreutils-python-utils
python3
python3-libselinux
tar
yum-utils
firewalld
%end

# Automatically reboot after installation and eject media
reboot --eject

# Post-installation script
%post
echo "Installation complete!" > /root/installation-log.txt
%end

Дополнительные варианты, которые вы можете использовать в Kickstart:

Использовать зашифрованный пароль пользователя

1
2
3
4
5
# Generate encrypted passsword
## Python3
python3 -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
## Python2
python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

Для root пользователя:

1
rootpw --iscrypted <encrypted-password-generated>

Добавление стандартной учетной записи пользователя

1
2
3
4
5
# plain text password
user --groups=wheel --name=Rocky --plaintext --password=StrongUserPassword --gecos="Rocky User"

# Encrypted password
user --groups=wheel --name=Rocky --iscrypted --password=<encrypted-password-generated> --gecos="Rocky User"

Установка статического IP-адреса

1
network --bootproto=static --ip=192.168.122.100 --gateway=192.168.122.1  --netmask=255.255.255.0  --noipv6 --device=eth0 --nameserver=192.168.122.1,8.8.8.8 --activate

Настройка пользовательских разделов с различными размерами

1
2
3
part / --fstype=ext4 --size=10240
part /var --fstype=ext4 --size=20480
part swap --size=2048

Использование LVM (Logical Volume Manager)

1
2
3
zerombr
clearpart --all --initlabel
autopart --type=lvm

Использование LVM (Logical Volume Manager) с пользовательскими разделами

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# Clear existing partitions and create a new layout
clearpart --all --initlabel

# Create a standard partition for /boot
part /boot --fstype=ext4 --size=1024

# Create PV for LVM that uses the entire remaining disk space
part pv.01 --grow
## Create a new physical volume of  50GB
#part pv.01 --size=50000

# Create a volume group named "vg_root"
volgroup vg_root --pesize=4096 pv.01

# Create logical volumes within the "vg_root" volume group
logvol / --vgname=vg_root --name=lv_root --size=20000 --fstype=ext4
logvol /home --vgname=vg_root --name=lv_home --size=10000 --fstype=ext4
logvol swap --vgname=vg_root --name=lv_swap --size=4096 --fstype=swap

Конфигурации загрузки, такие как консоль и изменение интерфейсов сетевых карт.

1
bootloader --timeout 1 --append "console=tty0 console=ttyS0,115200 net.ifnames.prefix=net quiet"

Установлено состояние SELinux на установленной системе

1
2
3
4
5
6
7
8
# Enforcing
selinux --enforcing

# Permissive
selinux --permissive

# Disabled
selinux --disabled

Включить/Отключить услуги

1
2
3
# Comma separated list
services --disabled=auditd,cups,smartd,nfslock
services --enabled=sshd,firewalld,tuned

Настройка серверов NTP

1
timezone Europe/Moscow --ntpservers=time.google.com,time.windows.com

Установка VNC

Чтобы можно было удаленно просматривать графическую установку через VNC. Этот метод, как правило, предпочтителен по сравнению с текстовым режимом, поскольку в текстовых инсталляциях есть некоторые размеры и языковые ограничения

1
vnc --host=0.0.0.0 --port=5900 --password=Password01

Отключить IPv6 (Добавить в %post и до его %end)

1
2
3
4
5
6
7
8
echo "net.ipv6.conf.all.disable_ipv6 = 1" > /etc/sysctl.d/50-ipv6.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/50-ipv6.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.d/50-ipv6.conf
sed -i -e '/^::1/d' /etc/hosts
sed -i -e 's,^OPTIONS=",OPTIONS="-4 ,g' -e 's, ",",' /etc/sysconfig/chronyd
sed -Ei -e 's,^(#|)AddressFamily .*,AddressFamily inet,' /etc/ssh/sshd_config
sed -i -e 's,^IPv6_rpfilter=yes,IPv6_rpfilter=no,' /etc/firewalld/firewalld.conf
sed -i -e '/dhcpv6-client/d' /etc/firewalld/zones/public.xml

Шаг 3. Создание экземпляра VM с помощью kickstart и virt-install

Определение переменных, используемых в установке:

1
2
3
4
5
6
7
8
VM_NAME=rocky10.0   # Name of VM to create
DISK_SIZE=50        # Create 50GB disk size
MEM_SIZE=2048       # Memory setting in MiB
VCPUS=2             # CPU Cores count
BR_NAME=virbr0      # Bridge network name
OS_VARIANT="rhel10.0" # List using osinfo-query  os
INST_GRAPHICS=none  # Install graphics: none, vnc, spice
ISO_FILE=/var/lib/libvirt/images/Rocky-10.0-x86_64-dvd1.iso # Path to ISO file

Создайте экземпляр VM с помощью файла конфигурации virt-install и kickstart.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
sudo virt-install \
  --name $VM_NAME \
  --memory=$MEM_SIZE \
  --vcpus=$VCPUS \
  --location $ISO_FILE \
  --disk size=${DISK_SIZE}  \
  --network bridge=$BR_NAME \
  --graphics=$INST_GRAPHICS \
  --os-variant=$OS_VARIANT \
  --console pty,target_type=serial \
  --initrd-inject ks.cfg --extra-args "inst.ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"

Процесс инсталляции должен начинаться и развиваться автоматически.

После установки вы должны получить страницу входа:

1
2
3
4
5
6
Rocky Linux 10.0 (Red Quartz)
Kernel 6.12.0-55.12.1.el10_0.x86_64 on an x86_64

Activate the web console with: systemctl enable --now cockpit.socket

localhost login:

Войти как root пользователь с паролем в файле ks.cfg.

1
2
3
4
5
localhost login: root
Password:

[root@localhost ~]# cat /etc/redhat-release
Rocky Linux release 10.0 (Red Quartz)

Мы можем проверить схему присвоения IP-адреса и раздела диска после завершения установки ОС.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:fa:af:7e brd ff:ff:ff:ff:ff:ff
    altname enp1s0
    inet 192.168.122.226/24 brd 192.168.122.255 scope global dynamic noprefixroute eth0
       valid_lft 2765sec preferred_lft 2765sec
    inet6 fe80::2a46:dfc0:3ef6:b826/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

[root@localhost ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs          tmpfs     888M     0  888M   0% /dev/shm
tmpfs          tmpfs     355M  5.1M  350M   2% /run
/dev/vda3      xfs        49G  1.9G   47G   4% /
/dev/vda1      ext4      488M  260M  192M  58% /boot
tmpfs          tmpfs     178M     0  178M   0% /run/user/0

Завершение

Собственно на этом всё.

Если вам понравился этот пост о том, как установить virt-install и kickstart на Rocky Linux 10, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.