Kickstart – Практические примеры для RHEL 7 | CentOS 7

by itisgood

Установка Linux может выполняться полностью без участия пользователя с помощью файла Kickstart, который содержит конфигурацию, необходимые настройки и задачи после установки, чтобы полностью автоматизировать процесс установки без запроса каких-либо подробностей ввода.

Файл кикстарта может быть помещен в удаленный репозиторий или может быть включен в образ ISO, чтобы его мог прочитать установщик Anaconda во время установки системы.

В этом руководстве представлены некоторые практические решения, которые можно поместить в файл кикстарта для автоматизации задач установки CentOS 7 / Red Hat 7.

В самом начале давайте рассмотрим этот файл кикстарта: ks.cfg, который представляет собой полный и работающий набор команд и функций, которые позволяют выполнять обнаружение оборудования, автоматическое разбиение диска, установку дополнительных RPM, настройку параметров ядра и т. д.

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

Пропустить установку GUI X сервера в файле кикстарта

Чтобы пропустить установку X Window Server, поместите следующее в заголовочный раздел кикстарта:

skipx

Как добавить нового пользователя в файл кикстарта?

Чтобы добавить нового пользователя в установленную систему, используйте следующую опцию в разделе заголовка кикстарта:

user --name=tuxoper --password=$1$qrBNJr0C$8J4stpPzjQZywX33wnMn7. --iscrypted

Установить / добавить пользовательские пакеты RPM в файл кикстарта

Дополнительные RPM-пакеты для установки можно разместить в разделе %packeges прямо под пакетом @base:

%packages
@base
policycoreutils-python
libseccomp
PyYAML-3.10-11.el7
python-jinja2
python-pyasn1
nfs-utils
lksctp-tools
pexpect
screen
nmap-ncat
telnet
lftp
lshw
tmux
cairo
numactl
perf
ltrace
dstat
iotop
iptraf-ng
net-snmp-utils
lldpad
%end

Как обнаружить существующую таблицу разделов (существующие системы) на диске в файле кикстарта?

Если вы хотите избежать случайной переустановки уже установленной операционной системы, вы можете проверить, существует ли какая-либо существующая таблица разделов на диске, используя kpartx или partx:

%pre --erroronfail --log=/tmp/ks-pre.log
part_table=$(kpartx -r /dev/sda)
if [ -n "$part_table" ]; then
 whiptail --fb --title "WARNING" --yesno --defaultno "This system contains partition table. Installation will DELETE EXISTING DATA on this system. Continue?" 12 50 > /dev/console
 if [ $? -ne 0 ]; then
  reboot
 fi
fi

Обнаружение оборудования и проверка емкости жесткого диска в кикстарте

В приведенном ниже примере показано, как определить тип оборудования, проверить емкость жесткого диска и применить другую схему разделения в зависимости от обнаруженного типа оборудования.

Для обнаружения оборудования здесь используется команда virt-what, которая проверяет тип обнаруженного оборудования («голое железо», Virtualbox, VMware). virt-what, в отличие от других подобных команд (например, dmidecode), отображает уже проанализированный вывод, поэтому в таких случаях использования это довольно удобно.

Разбиение на голое железо зависит также от обнаруженного параметра tux_node_type, который читается из параметров командной строки ядра, включенных в пункты меню GRUB 2.

Для обнаруженного виртуального оборудования (VirtualBox, VMware) применяется автоматическое разбиение.

Инструкции по разбиению для каждого случая перенаправляются в файл /tmp/part-include, который включен в раздел заголовка файла кикстарта:

# === include partitioning scheme generated in pre ===
%include /tmp/part-include
# ====================================================

Kickstart также обнаруживает, удовлетворяются ли минимальные требования к емкости жесткого диска, сравнивая параметр емкости жесткого диска с bm_storage_min_size для железа и vm_storage_min_size для обнаруженного виртуального оборудования.

Параметр емкости анализируется из команды fdisk.

При обнаружении оборудования VMware информация open-vm-tools перенаправляется в /tmp/virtual, который может быть включен в раздел %packages для установки RPM-пакета open-vm-tools только для VMware:

# === open-vm-tools installation for vmware only ===
echo "open-vm-tools" > /tmp/virtual

Приведенное выше решение требует размещения фиктивной замены /tmp/virtual файлов на «голое железо» и VirtualBox, чтобы избежать сбоя установки, поскольку open-vm-tools не предполагается устанавливать в этих двух случаях:

# === open-vm-tools dummy replacement for bare metal ===
echo "" > /tmp/virtual
# === open-vm-tools dummy replacement for virtualbox ===
echo "" > /tmp/virtual

Весь код обнаружения оборудования и проверки емкости жесткого диска размещен в разделе %pre файла кикстарта:

# === storage minimum capacity settings ===
bm_storage_min_size=400
vm_storage_min_size=16
# =========================================

sleep 20
hw=$(virt-what | head -1)
sleep 10

# === read tux_node type from grub menuentry parameter ===
tux_node_type=$(cat /proc/cmdline | cut -f 3 -d '=' | cut -f 1 -d ' ')

if [ -z "$hw" ]; then 
 whiptail --infobox --title "HARDWARE DETECTION" "Detected hardware: Bare Metal" 10 40 > /dev/console
 sleep 10
 capacity=$(fdisk -l | grep /dev/sda | cut -f 3 -d " " | cut -f 1 -d ".")
 sleep 1
 if [ "$capacity" -lt "$bm_storage_min_size" ]; then
  whiptail --infobox --title "HARD DISK REQUIREMENTS" "ERROR: Minimum hard disk capacity for Bare Metal installation is $bm_storage_min_size GB. Will reboot now." 10 50 > /dev/console
  sleep 15
  reboot --eject
 else
  # === open-vm-tools dummy replacement for bare metal ===
  echo "" > /tmp/virtual
  if [ "$tux_node_type" == "manager" ]; then
   # =================== generate partitioning scheme for bare metal ==========================
   # partitioning intentionally removed to simplify analysis
   # ===========================================================================================
   elif [ "$tux_node_type" == "collector" ]; then
   # =================== generate partitioning scheme for bare metal ==========================
   # partitioning intentionally removed to simplify analysis
   # ===========================================================================================
  fi
 fi
elif [ "$hw" == "vmware" ]; then
 whiptail --infobox --title "HARDWARE DETECTION" "Detected hardware: VMWare" 10 40 > /dev/console
 sleep 10
 capacity=$(fdisk -l | grep /dev/sda | cut -f 3 -d " " | cut -f 1 -d ".")
 sleep 1
 if [ "$capacity" -lt "$vm_storage_min_size" ]; then
  whiptail --infobox --title "HARD DISK REQUIREMENTS" "ERROR: Minimum hard disk capacity for VMWare installation is $vm_storage_min_size GB. Will reboot now." 10 50 > /dev/console
  sleep 15
  reboot
 else
  # === open-vm-tools installation for vmware only ===
  echo "open-vm-tools" > /tmp/virtual
  # ============== generate partitioning scheme for vmware ====================================
  echo "autopart" > /tmp/part-include
  # ===========================================================================================
 fi
elif [ "$hw" == "virtualbox" ]; then
 whiptail --infobox --title "HARDWARE DETECTION" "Detected hardware: VirtualBox" 10 40 > /dev/console
 sleep 10
 capacity=$(fdisk -l | grep /dev/sda | cut -f 3 -d " " | cut -f 1 -d ".")
 sleep 1
 if [ "$capacity" -lt "$vm_storage_min_size" ]; then
  whiptail --infobox --title "HARD DISK REQUIREMENTS" "ERROR: Minimum hard disk capacity for VirtualBox installation is $vm_storage_min_size GB. Will reboot now." 10 50 > /dev/console
  sleep 15
  reboot
 else
  # === open-vm-tools dummy replacement for virtualbox ===
  echo "" > /tmp/virtual
  # ============== generate partitioning scheme for virtualbox ================================
  echo "autopart" > /tmp/part-include
  # ===========================================================================================
 fi
else
 whiptail --infobox --title "HARDWARE DETECTION" "WARNING: This Operating System is not released for recognized hardware: $hw. Will reboot now." 10 40 > /dev/console
 sleep 10
 reboot
fi

Установить пользовательскую схему разбиения на основе UEFI в файле кикстарта

Приведенная ниже схема разбиения предназначена для серверов на основе загрузки UEFI, поскольку она содержит системный раздел EFI / UEFI. Раздел EFI / UEFI должен быть разделом типа VFAT с минимальной емкостью 200 МБ.

Следующий – основной / загрузочный раздел объемом 512 МБ, этот раздел нельзя включить в группы томов LVM.

Затем создаются физические тома pv.00 и pv.01 для предоставления физических экстентов для соответствующих групп томов vg_root и vg_app.

Емкость pv.00 установлена ​​на фиксированный размер: 150 ГБ, pv.01, с другой стороны, начинается с 1 МБ, но параметр увеличения заставляет его заполнять все оставшееся дисковое пространство.

Группы томов: vg_root и vg_app создаются соответственно на физических томах pv.00 и pv.01.

Логические тома (swap, /var, /home и т. д.) создаются в обеих группах томов с фиксированными размерами и параметрами файловой системы.

Кроме того, емкость точки монтирования /var установлена ​​в 1 МБ и ей назначен параметр растущего значения, то есть каталог /var заполнит все оставшееся пространство группы томов.

Каждая строка нижеприведенного блока помещается в файл / tmp / part-include, который читается в заголовке файла кикстарта:

# === include partitioning scheme generated in pre ===
%include /tmp/part-include
# ====================================================

Если в вашей конфигурации много разделов (как показано ниже), попробуйте также поместить все в блок кода ЗДЕСЬ или EOF.

Вот наш пример схемы разбиения:

# =================== generate partitioning scheme for bare metal ==========================
echo "part /boot/efi --size=200 --ondisk=sda --fstype=vfat --label=EFIBOOT" > /tmp/part-include
echo "part /boot --size=512 --ondisk=sda --asprimary --fstype=ext4 --label=boot --fsoptions=acl,user_xattr,errors=remount-ro,nodev,noexec,nosuid" >> /tmp/part-include
echo "part pv.00 --size=150000 --asprimary --ondisk=sda" >> /tmp/part-include
echo "part pv.01 --size=1 --grow --asprimary --ondisk=sda" >> /tmp/part-include
echo "volgroup vg_root pv.00" >> /tmp/part-include
echo "volgroup vg_app pv.01" >> /tmp/part-include
echo "logvol swap --name=swap --vgname=vg_root --size=32000" >> /tmp/part-include
echo "logvol / --fstype=ext4 --fsoptions=acl,user_xattr,errors=remount-ro --size=30000 --name=root --vgname=vg_root" >> /tmp/part-include
echo "logvol /var --fstype=ext4 --fsoptions=acl,user_xattr,errors=remount-ro --size=1 --grow --vgname=vg_root" >> /tmp/part-include
echo "logvol /var/log --fstype=ext4 --fsoptions=acl,user_xattr,errors=remount-ro --size=20000 --vgname=vg_root" >> /tmp/part-include
echo "logvol /var/log/audit --fstype=ext4 --fsoptions=acl,user_xattr,errors=remount-ro --size=20000 --vgname=vg_root" >> /tmp/part-include
echo "logvol /var/crash --fstype=ext4 --fsoptions=acl,user_xattr,errors=remount-ro --size=24000 --vgname=vg_root" >> /tmp/part-include
echo "logvol /home --fstype=ext4 --fsoptions=acl,user_xattr,errors=remount-ro --size=2000 --vgname=vg_root" >> /tmp/part-include
echo "logvol /var/docker-volumes --fstype=ext4 --fsoptions=acl,user_xattr,errors=remount-ro --size=100000 --vgname=vg_app" >> /tmp/part-include
echo "logvol /var/esdata --fstype=ext4 --fsoptions=acl,user_xattr,errors=remount-ro --size=50000 --vgname=vg_app" >> /tmp/part-include
echo "logvol /var/lib/docker --fstype=ext4 --fsoptions=acl,user_xattr,errors=remount-ro --size=16000 --vgname=vg_app" >> /tmp/part-include
# ===========================================================================================

Установка дополнительных RPM-пакетов в файл кикстарта

Если вам нужно установить дополнительные пакеты, не включенные в стандартный ISO-образ RHEL 7 / CentOS 7, вы можете поместить их в пользовательский каталог на образе ISO, например: mount_iso_main_dir / soft /… и запустить их установку в разделе% post nochroot файла кикстарта. ,

Примечание. Эта часть установки пакета должна выполняться в среде nochroot, поскольку нам необходим доступ к установочному носителю.

cd /run/install/repo/soft/docker
rpm -ivh --root /mnt/sysimage *.rpm
cp docker-compose /mnt/sysimage/usr/local/bin/
chmod 755 /mnt/sysimage/usr/local/bin/docker-compose
cd /run/install/repo/soft/ansible
rpm -ivh --root /mnt/sysimage *.rpm
cd /run/install/repo/soft/utils
rpm -ivh --root /mnt/sysimage python-GnuPGInterface*.rpm
rpm -ivh --root /mnt/sysimage python-lockfile*.rpm
rpm -ivh --root /mnt/sysimage ncftp*.rpm
rpm -ivh --root /mnt/sysimage python2-pyasn1*.rpm
rpm -ivh --root /mnt/sysimage python2-rsa*.rpm
rpm -ivh --root /mnt/sysimage python2-boto*.rpm
rpm -ivh --root /mnt/sysimage ngrep*.rpm
rpm -ivh --root /mnt/sysimage librsync*.rpm
rpm -ivh --root /mnt/sysimage duplicity*.rpm
rpm -ivh --root /mnt/sysimage duply*.rpm
cd /run/install/repo/soft/performance
rpm -ivh --root /mnt/sysimage *.rpm

Включить / отключить сервис после установки в файл кикстарта

Сервисами можно легко управлять в файле кикстарта, чтобы они выполнялись сразу после установки, поместив их в раздел %post chroot, поскольку все упомянутые команды выполняются во вновь установленной системе (вне установочного носителя):

# === enable docker service ===
systemctl enable docker.service
# === disable RHN unit services
systemctl disable rhnsd.service rhsmcertd.service
# === disable postfix unit service ===
systemctl disable postfix.service

Добавить пользователя в sudoers во время установки в файл кикстарта

Обычного пользователя можно добавить в группу wheel для повышенных административных привилегий и стать sudoer, перенаправив соответствующие строки в файл /etc/sudoers:

# === add tuxoper to sudoers ===
echo "# Allow tuxoper to run any commands anywhere" >> /etc/sudoers
echo "tuxoper   ALL=(ALL)   NOPASSWD: ALL" >> /etc/sudoers

Создать ключ SSH (пару ключей) для конкретного пользователя в файле кикстарта

Чтобы сгенерировать ключи SSH через файл кикстарта для пользователя во время установки системы, выполните команду создания ключа SSH от имени конечного пользователя.

Следующая команда представляет создание ключа SSH без пароля для пользователя tuxoper:

# === set ssh keys for tuxoper ===
su - tuxoper -c "ssh-keygen -t rsa -f /home/tuxoper/.ssh/id_rsa -N ''"

Сконфигурировать параметры времени выполнения ядра во время установки в файле кикстарта

Параметры времени выполнения ядра можно настроить в файле кикстарта, чтобы включить его сразу после установки, поместив определенные строки параметров в файл /etc/sysctl.conf:

echo "kernel.exec-shield = 1" >> /etc/sysctl.conf                       
echo "kernel.randomize_va_space = 2" >> /etc/sysctl.conf                        
echo "net.ipv4.ip_forward = 0" >> /etc/sysctl.conf                              
echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 0" >> /etc/sysctl.conf

 

You may also like

Leave a Comment