Установка 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
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, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.