Thank you for reading this post, don't forget to subscribe!
Оригинал статьи:
Автоматическая установка Centos 7 с помощью kickstart
kickstart — метод быстрой установки операционных систем, основанных на Red Hat Linux
Установка Linux может выполняться полностью без участия пользователя с помощью файла Kickstart, который содержит конфигурацию, необходимые настройки и задачи после установки, чтобы полностью автоматизировать процесс установки без запроса каких-либо подробностей ввода.
Файл кикстарта может быть помещен в удаленный репозиторий или может быть включен в образ ISO, чтобы его мог прочитать установщик Anaconda во время установки системы.
В этом руководстве представлены некоторые практические решения, которые можно поместить в файл кикстарта для автоматизации задач установки CentOS 7 / Red Hat 7.
В самом начале давайте рассмотрим этот файл кикстарта: ks.cfg, который представляет собой полный и работающий набор команд и функций, которые позволяют выполнять обнаружение оборудования, автоматическое разбиение диска, установку дополнительных RPM, настройку параметров ядра и т. д.
Этот файл можно использовать как есть, без каких-либо изменений, и он будет выполнять всю работу по автоматической установке, но давайте разберем его на части для описания конкретных случаев использования:
Каждый раз, когда вы устанавливаете Centos, в домашней директории пользователя root создается файл,содержащий параметры установки
1 2 |
$ cat /root anaconda-ks.cfg |
Пример файла kickstart
[codesyntax lang="php"]
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
#version=Centos7 # System authorization information auth --enableshadow --passalgo=sha512 # Install OS instead of upgrade install # Reboot after installation reboot --eject # License agreement eula --agreed # Use CDROM installation media cdrom # Use network installation #url --url="https://mirror.yandex.ru/centos/7/os/x86_64" # Use graphical install #graphical # Use text mode install text # 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 en_US.UTF-8 --addsupport=ru_RU.UTF-8 # Network information #network --bootproto=static --device=eth0 --gateway=192.168.77.1 --ip=192.168.77.222 --nameserver=8.8.8.8 --netmask=255.255.255.0 --ipv6=auto --activate #network --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate network --bootproto=dhcp --ipv6=auto --activate network --hostname=localhost.localdomain # Root password #rootpw --lock rootpw --iscrypted $6$0eoSvBXMw0y0mftg$.NfjecMdfgdfgdfgdfgIOa/RFS7wUD5tjS8lh9iuaqkcK6rp/iay72E9yr0L0IJd7kg.zv742n0yklSQ.W7F3Uk9Lh/ # Add user user --name=admin --groups=wheel --iscrypted --password=$6$R9QSOFvUWKc816UF$cyXMFXtadfger55806/Y4tDAOqsaF8miQdaWTwVj1hV8nlFEXK2HrVg2C3kLTw38xPoGcy5193lhGxS7aJT/ # Add ssh user key sshkey --username=admin "ssh-ed25519 AAAAC3NzadfgdfgdE5AAAAIGv4Pt+Ocj3WEW3u/p8RMlH6r4TqW7qCiTofqnmKGiEe ed25519-admin" sshkey --username=root "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AASSDrrfz11YRaT3/C7QUVOJC5klAunWtFRhHJ9k/+e94dYb ed25519-root" # System services # убрать лишние сервисы и добавить нужные #services --disabled=autofs,alsa-state,avahi-daemon,bluetooth,pcscd,cachefilesd,colord,fancontrol,fcoe,firewalld,firstboot-graphical,gdm,httpd,initial-setup,initial-setup-text,initial-setup-graphical,initial-setup-reconfiguration,kdump,libstoragemgmt,ModemManager,tog-pegasus,tmp.mount,tuned \ # --enabled=bacula-fd,chronyd,edac,gpm,numad,rsyslog,sendmail,smartd,sm-client,sssd,zabbix-agent services --disabled=NetworkManager services --enabled=chronyd # System timezone #timezone Europe/Moscow --isUtc --nontp timezone Europe/Moscow --isUtc --ntpservers=192.168.1.2,192.168.1.3 # Firewall rule #firewall --enabled --port=22822:tcp #firewall --disabled --service=ssh # System bootloader configuration bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda # Partition clearing information # Указывает, что мы будем повторно инициализировать наш диск. (Рекомендуется при автоматической установке) zerombr #clearpart --none --initlabel # Указывает, что все разделы будут очищены на диске sda clearpart --all --initlabel --drives=sda # Disk partitioning information #part pv.157 --fstype="lvmpv" --ondisk=sda --size=7167 # grow - Эта команда указывает установщику anaconda создать максимально большой раздел. # pv.01 - не используется после установки part pv.01 --fstype="lvmpv" --ondisk=sda --size=1024 --grow part /boot --fstype="xfs" --ondisk=sda --size=512 volgroup centos --pesize=4096 pv.01 logvol swap --fstype="swap" --size=4096 --name=swap --vgname=centos #logvol / --fstype="xfs" --maxsize=16384 --size=4096 --name=root --vgname=centos logvol / --fstype="xfs" --maxsize=16384 --size=16384 --name=root --vgname=centos logvol /var --fstype="xfs" --size=1024 --grow --name=var --vgname=centos ##### 3. Package installation #url --url="https://mirror.yandex.ru/centos/7/os/x86_64/" #repo --install --name="CentOS" --baseurl="http://mirror.centos.org/centos/7/os/x86_64/" #repo --name="CentOS" --baseurl="https://mirror.yandex.ru/centos/7/os/x86_64/" #repo --name="EPEL" --baseurl="https://dl.fedoraproject.org/pub/epel/7/x86_64/" #repo -–name=EPEL -–baseurl=http://download.fedoraproject.org/pub/epel/7/x86_64/ %packages @^minimal @core kexec-tools chrony sudo #policycoreutils-python # remove from Core: -aic94xx-firmware -alsa-firmware -bfa-firmware #-dracut-config-rescue -ivtv-firmware -iwl1000-firmware -iwl100-firmware -iwl105-firmware -iwl135-firmware -iwl2000-firmware -iwl2030-firmware -iwl3160-firmware -iwl3945-firmware -iwl4965-firmware -iwl5000-firmware -iwl5150-firmware -iwl6000-firmware -iwl6000g2a-firmware -iwl6000g2b-firmware -iwl6050-firmware -iwl7260-firmware #-kernel-tools -libertas-sd8686-firmware -libertas-sd8787-firmware -libertas-usb8388-firmware #-microcode_ctl #-NetworkManager #-NetworkManager-tui -ql2100-firmware -ql2200-firmware -ql23xx-firmware %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 #yum install -y policycoreutils-python echo "admin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/admin # Change ssh port #/usr/bin/sed -i "s%#Port 22%Port 43389%g" "/etc/ssh/sshd_config" #/usr/bin/sed -i "s%#PermitRootLogin yes%PermitRootLogin no%g" "/etc/ssh/sshd_config" #/sbin/semanage port -a -t ssh_port_t -p tcp 22822 #/usr/bin/firewall-cmd --permanent --zone=public --remove-service=ssh %end |
[/codesyntax]
Разбор содержимого файла
Указывается источник cdrom, либо можно использовать установку по сети
1 2 3 4 |
# Use CDROM installation media cdrom # Use network installation #url --url="https://mirror.yandex.ru/centos/7/os/x86_64" |
Указывается раскладка, языковая поддержка, клавиши переключения раскладки
1 2 3 4 5 |
# Keyboard layouts keyboard --vckeymap=us --xlayouts='ru','us' --switch='grp:alt_shift_toggle' # System language lang en_US.UTF-8 --addsupport=ru_RU.UTF-8 |
Далее идет опция сетевого подключения, hostname. Можно выбрать получение сетевых параметров через DHCP, либо Static IP
1 2 3 4 5 |
# Network information #network --bootproto=static --device=eth0 --gateway=192.168.77.1 --ip=192.168.77.222 --nameserver=8.8.8.8 --netmask=255.255.255.0 --ipv6=auto --activate #network --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate network --bootproto=dhcp --ipv6=auto --activate network --hostname=localhost.localdomain |
Затем идут параметры пользователей
rootpw —lock — запрет подключения к серверу root-ом
1 2 3 4 5 6 7 8 9 10 |
# Root password #rootpw --lock rootpw --iscrypted $6$0eoSvBXMw0y0mftg$.NfjecMdfgdfgdfgdfgIOa/RFS7wUD5tjS8lh9iuaqkcK6rp/iay72E9yr0L0IJd7kg.zv742n0yklSQ.W7F3Uk9Lh/ # Add user user --name=admin --groups=wheel --iscrypted --password=$6$R9QSOFvUWKc816UF$cyXMFXtadfger55806/Y4tDAOqsaF8miQdaWTwVj1hV8nlFEXK2HrVg2C3kLTw38xPoGcy5193lhGxS7aJT/ # Add ssh user key sshkey --username=admin "ssh-ed25519 AAAAC3NzadfgdfgdE5AAAAIGv4Pt+Ocj3WEW3u/p8RMlH6r4TqW7qCiTofqnmKGiEe ed25519-admin" sshkey --username=root "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AASSDrrfz11YRaT3/C7QUVOJC5klAunWtFRhHJ9k/+e94dYb ed25519-root" |
Пароль пользователя root и админ можно сгенерировать заранее
1 |
$ python -c "import crypt,random,string; print crypt.crypt(\"my_password\", '\$6\$' + ''.join([random.choice(string.ascii_letters + string.digits) for _ in range(16)]))" |
Сертификаты так же генерируются заранее
Дальше идет разбивка диска:
1 2 3 4 5 6 7 8 9 10 11 |
# Disk partitioning information #part pv.157 --fstype="lvmpv" --ondisk=sda --size=7167 # grow - Эта команда указывает установщику anaconda создать максимально большой раздел. # pv.01 - не используется после установки part pv.01 --fstype="lvmpv" --ondisk=sda --size=1024 --grow part /boot --fstype="xfs" --ondisk=sda --size=512 volgroup centos --pesize=4096 pv.01 logvol swap --fstype="swap" --size=4096 --name=swap --vgname=centos #logvol / --fstype="xfs" --maxsize=16384 --size=4096 --name=root --vgname=centos logvol / --fstype="xfs" --maxsize=16384 --size=16384 --name=root --vgname=centos logvol /var --fstype="xfs" --size=1024 --grow --name=var --vgname=centos |
- Использовать диск sda полностью (grow)
- Метод распределения пространства жёсткого диска — LVM
- /boor — 512 Mb, xfs
- Volume Group — centos
- SWAP — 4 Gb
- / — 16 Gb, xfs
- /var — все остальное, xfs
Следующий блок — установленные / удаленные (-) пакеты
1 2 3 4 5 6 7 8 9 10 11 12 |
%packages @^minimal @core kexec-tools chrony sudo #policycoreutils-python # remove from Core: -aic94xx-firmware -alsa-firmware -bfa-firmware ... |
И последний блок — bash скрипт
1 2 3 4 5 6 7 8 9 |
%post #yum install -y policycoreutils-python echo "admin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/admin # Change ssh port #/usr/bin/sed -i "s%#Port 22%Port 43389%g" "/etc/ssh/sshd_config" #/usr/bin/sed -i "s%#PermitRootLogin yes%PermitRootLogin no%g" "/etc/ssh/sshd_config" #/sbin/semanage port -a -t ssh_port_t -p tcp 22822 #/usr/bin/firewall-cmd --permanent --zone=public --remove-service=ssh %end |
- отключаем ввод пароля sudo для пользователя admin
- закомментированный блок для смены стандартного ssh-порта
- закомментированна опция, которая запрещаем коннект root-ом
Как пользоваться данным файлом?
Можно выложить файл на http/ftp сервер и при установки Centos с диска жмем ESC и прописываем:
linux ks=http://192.168.1.10/ks.cfg
или
1 |
$ vmlinuz initrd=initrd.img inst.ks=http://192.168.1.10/ks.cfg |
А можно создать свой образ диска, где будет прописана данная опция. Для этого
Создаем точку монтирования, монтируем образ диска
1 2 |
$ mkdir /mnt/iso $ mount /home/CentOS-7-x86_64-Minimal-1908.iso /mnt/iso/ |
Создаем еще один каталог, копируем в него содержимое /mnt/iso
1 2 |
$ mkdir /home/centos $ cp -rp /mnt/iso/* /home/centos/ |
Добавляем наш kickstart в образ
Копируем наш kickstart файл в /home/centos/, редактируем isolinux/isolinux.cfg
Пункт меню для автоустановки можно вставить например после секции label linux
1 2 3 4 |
label linux menu label ^Install CentOS Linux 7 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet |
1 2 3 4 |
label auto menu label ^Auto install CentOS Linux 7 kernel vmlinuz append initrd=initrd.img inst.ks=cdrom:/dev/cdrom:/ks.cfg |
В последней строчке указано расположение kickstart файла в образе диска.
Если планируется дальнейшее редактирование ks.cfg, можно указать расположение на http/ftp — сервере
1 2 3 4 |
label auto menu label ^Auto install CentOS Linux 7 kernel vmlinuz append initrd=initrd.img inst.ks=http://192.168.1.10/ks.cfg |
Создаем сам образ:
1 2 |
$ cd /home/centos/ $ mkisofs -o /home/centos-cust.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -V 'CentOS 7 x86_64' -boot-load-size 4 -boot-info-table -R -J -v -T . |
================================================
Пропустить установку GUI X сервера в файле кикстарта
Чтобы пропустить установку X Window Server, поместите следующее в заголовочный раздел кикстарта:
1 |
skipx |
Как добавить нового пользователя в файл кикстарта?
Чтобы добавить нового пользователя в установленную систему, используйте следующую опцию в разделе заголовка кикстарта:
1 |
user --name=tuxoper --password=$1$qrBNJr0C$8J4stpPzjQZywX33wnMn7. --iscrypted |
Установить / добавить пользовательские пакеты RPM в файл кикстарта
Дополнительные RPM-пакеты для установки можно разместить в разделе %packeges прямо под пакетом @base:
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 |
%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:
1 2 3 4 5 6 7 8 |
%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, который включен в раздел заголовка файла кикстарта:
1 2 3 |
# === 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:
1 2 |
# === open-vm-tools installation for vmware only === echo "open-vm-tools" > /tmp/virtual |
Приведенное выше решение требует размещения фиктивной замены /tmp/virtual файлов на «голое железо» и VirtualBox, чтобы избежать сбоя установки, поскольку open-vm-tools не предполагается устанавливать в этих двух случаях:
1 2 |
# === open-vm-tools dummy replacement for bare metal === echo "" > /tmp/virtual |
1 2 |
# === open-vm-tools dummy replacement for virtualbox === echo "" > /tmp/virtual |
Весь код обнаружения оборудования и проверки емкости жесткого диска размещен в разделе %pre файла кикстарта:
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 61 62 63 64 65 66 67 68 69 70 71 |
# === 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, который читается в заголовке файла кикстарта:
1 2 3 |
# === include partitioning scheme generated in pre === %include /tmp/part-include # ==================================================== |
Если в вашей конфигурации много разделов (как показано ниже), попробуйте также поместить все в блок кода ЗДЕСЬ или EOF.
Вот наш пример схемы разбиения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# =================== 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, поскольку нам необходим доступ к установочному носителю.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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, поскольку все упомянутые команды выполняются во вновь установленной системе (вне установочного носителя):
1 2 3 4 5 6 |
# === 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:
1 2 3 |
# === 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:
1 2 |
# === set ssh keys for tuxoper === su - tuxoper -c "ssh-keygen -t rsa -f /home/tuxoper/.ssh/id_rsa -N ''" |
Сконфигурировать параметры времени выполнения ядра во время установки в файле кикстарта
Параметры времени выполнения ядра можно настроить в файле кикстарта, чтобы включить его сразу после установки, поместив определенные строки параметров в файл /etc/sysctl.conf:
1 2 3 4 5 |
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 |