Последнее изменение файла: 2018.07.13
Скопировано с www.bog.pp.ru: 2023.09.23
Bog BOS: kickstart - установка Linux в пакетном режиме
Система установки Linux anaconda (Fedora, RHEL/CentOS) имеет пакетный режим,
когда команды установки берутся из файла. Это позволяет установить сотни серверов в автоматическом
режиме, один раз отредактировав протокол установки.
Осторожно: некоторые версии установщика создают не совсем корректный anaconda-ks.cfg,
например, необходимо добавлять суффиксы архитектуры ".i386" к именам удаляемых из группы пакетов.
До RHEL 7 была возможность обновления системы в пакетном режиме.
ks=http://сервер/kickstart.cgi kssendmac
(послать MAC адрес, чтобы скрипт мог сгенерировать kickstart файл; переименован в inst.ks.sendmac, формат:
X-RHN-Provisioning-MAC-0: eth0 01:23:45:67:89:ab
ks=http://сервер/kickstart.cgi inst.ks.sendsn (послать серийный номер (/sys/class/dmi/id/product_serial),
чтобы скрипт мог сгенерировать kickstart файл, формат:
X-System-Serial-Number: серийный-номер
ksdevice={eth0 | 00:12:34:56:78:9a | link | bootif | ibft} (выбор сетевого интерфейса для использования в kickstart,
в RHEL7 переименован в inst.ks.device;
в RHEL7 рекомендуется использовать bootif=MAC или определение устройства командой ip в dracut;
для использования bootif необходимо указать "IPAPPEND 2" в настройках PXE)
Если указано устройство, но не указано имя файла, то ищется файл ks.cfg в корне.
Если не указано и устройство, то используется NFS сервер с адресом,
указанным в DHCP опции next-server (по умолчанию - адрес DHCP сервера), и файл, указанный в DHCP опции filename (по умолчанию - "/kickstart/").
Если filename завершается на "/", то в конец приписывается строка, состоящая из IP-адреса клиента, тире и "kickstart" (10.0.0.100-kickstart).
Командный файл kickstart является текстовым файлом (ASCII), каждая команда на отдельной строке,
комментарии начинаются с символа '#', при установке создаётся протокол в формате kickstart - /root/anaconda-ks.cfg
(осторожно: некоторые версии установщика создают не совсем корректный anaconda-ks.cfg,
например, необходимо добавлять суффиксы архитектуры ".i686" к именам удаляемых из группы пакетов),
состоит из следующих секций (секция команд первой, секция пакетов обязательно второй),
в конце секции (кроме секции команд) должна быть строка "%end":
секция команд, при отсутствии обязательных параметров установщик запросит их
секция выбора пакетов (%packages)
скрипты, выполняемые после разбора kickstart файла (%pre); необязательная секция
скрипты, выполняемые после создания файловых систем, но до установки (%pre-install); необязательная секция
скрипты, выполняемые после установки (%post); необязательная секция
%onerror; необязательная секция
%traceback; необязательная секция
%anaconda (поведение установщика anaconda); необязательная секция;
pwpolicy - определение политики задания паролей для root, user и luks;
installclass - класс установки (умолчание в /usr/share/anaconda/interactive-defaults.ks)
%addon; необязательная секция
Утилита ksvalidator (пакет pykickstart) позволяет проверить синтаксис командного файла
(не проверяет секции %packages, %pre и %post).
Секция команд, состоит из строк, каждая из которых содержит одну из команд (порядок не имеет значения,
пустые строки игнорируются, при указании блочных устройств можно указывать
кратко - sda (рискованно) - или подробно - /dev/disk/by-id/scsi-SATA_INTEL_SSDSC2BB2BTWL4333048Y240NGN-part1,
допустимы шаблоны в стиле shell, multipath устройства рекомендуется указывать по WWID):
auth[config] - настройка опций аутентификации (man authconfig; "authconfig --help"; /etc/sysconfig/authconfig),
для каждого "--enable" имеется свой "-disable", "--enable" для изменения /etc/nsswitch.conf,
"--enable...auth" для изменения /etc/pam.d/system-auth, опции
--enambesnis --nisdomain=домен-NIS --nisserver=сервер-NIS # управление NIS
--useshadow или --enableshadow --passalgo={descrypt|bigcrypt|md5|sha256|sha512} --enablemd5 # /etc/login.defs
--enableldap --enableldapauth --enableldaptls --enableldapstarttls --enablerfc2307bis
--ldapserver=сервер-LDAP --ldapbasedn=базовое-DN --ldaploadcacert=URL # см. LDAP
домен и прочие настройки придётся задавать вручную (/etc/ldap.conf, /etc/nss_ldap.conf, /etc/pam_ldap.conf,
/etc/nslcd.conf, /etc/openldap/ldap.conf),
ругается на самоподписанный сертификат CA
autopart # автоматическая разбивка дисков на разделы (плохая мысль)
autostep [--autoscreenshot] # пошаговое выполнение без вмешательства оператора (снимки в /tmp/anaconda-screenshots,
затем в /root/anaconda-screenshots); не работает в CentOS 7.4
bootloader # куда и как поместить загрузчик, опции
--append=дополнительные-параметры-ядра # в дополнение к "rhgb quiet"
--boot-drive=блочное-устройство-для-размещения-загрузчика # можно указать только одно, но если /boot на RAID1,
то загрузчик прописывается в MBR и перед разделом на оба диска; раздел biosboot для GPT не дублируется
--leavebootloader # не менять список загружаемых образов для UEFI
--driveorder=список-блочных-устройств # порядок устройств с точки зрения BIOS, при указании правильного серийного номера
выдаётся сообщение "ERR anaconda: bios order specified unknown disk /dev/disk/by-id/ata-INTEL_SSDSC2BB240G4_серийник1"
(исправлено в RHEL 7.4)
--location={mbr|partition|none|boot} # куда размещать загрузчик (mbr: для MBR диска -
stage 1.5 записать между MBR и первым разделом,
для GPT дисков - stage 1.5 записать в раздел загрузки BIOS;
partition - в первый сектор раздела с ядром)
--password=пароль [--iscrypted] # имя пользователя всегда "root", пароль шифруется утилитой grub2-mkpasswd-pbkdf2
--timeout=секунд
--default=?
--nombr # ?
btrfs {точка-монтирования|none} --data=уровень-raid --metadata=уровень-raid --label=метка-тома
[--noformat|--useexisting] [--mkfsoptions=опции] разделы # создать том btrfs
btrfs точка-монтирования --subvol --name=путь-подтома родительский-том # создать подтом btrfs
clearpart # удалить разделы, опции:
--all # удалить все разделы на всех дисках, известных установщику; для автоматического действия используйте команду zerombr
--drives=список-блочных-устройств # ограничивает действие опции --all
--list=список-разделов
--linux # удалить все Linux разделы
--none # по умолчанию
--initlabel --disklabel={msdos|gpt} # создать таблицу разделов
cmdline # полностью автоматическая установка
device имя-модуля-ядра --opts="параметры-через-пробел" # загрузить модуль ядра с указанными параметрами,
не наследуется в /etc/modprobe.d/, а загружается ли?
dmraid --name имя --dev список-устройств # псевдо-RAID, что такое имя?
driverdisk {раздел|--source=URL|--biospart=раздел-с-точки-зрения-BIOS} # пакет с драйверами
(см. команду dd anaconda)
eula --agreed # иначе будет запрашивать даже в полностью автоматическом режиме
--trust=интерфейс # разрешить весь трафик с/на этот интерфейс, можно использовать несколько раз
--ssh
--smtp
--http
--ftp
--port=имя-или-номер-порта:{udp|tcp}
--service=сервис # список сервисов можно получить по команде "firewall-cmd --get-services"
firstboot {--enabled|--disabled} [--reconfig] # регулирует запуск приложения настройки при первой загрузке,
--reconfig позволяет изменить язык, мышь, клавиатуру, пароль, уровень безопасности, часовой пояс, настройки сети;
дополнительно к firstboot появился Initial Setup, который хочет принятия лицензионного
соглашения (см. eula) и заведения пользователей (отключить initial-setup.service?)
group --name=имя-группы [--gid=номер] # создать группу пользователей
graphical # установка в графическом режиме, по умолчанию
halt # остановить все процессы после установки, не работает даже CtrlAltDel, но экран не гаснет
ignoredisk {--drives=список-блочных-устройств | --only-use=список-блочных-устройств | --interactive}
# не использовать указанные диски при установке или использовать только указанные или запрашивать
install [--root-device блочное-устройство] # на следующей строке указывается метод установки (откуда устанавливать):
liveimg --url=ftp-http-https-file-url [--proxy=[протокол://][имя-пользователя[:пароль]@]сервер[:порт]]
[--noverifyssl] [--checksum=контрольная-сумма-SHA256]
# установка с squashfs.img или монтируемого образа или tar архива (tar.gz, tar.bz2, tar.xz)
nfs --server=имя-сервера --dir=каталог [--opts=опции-монтирования] # дерево Packages/ или install.img
url --url=ftp-http-https-file-url [--proxy=[протокол://][имя-пользователя[:пароль]@]сервер[:порт]]
[--noverifyssl] [--mirrorlist=URL-скрипта-выдающего-список-зеркал] # дерево, в списке зеркал подставляются $releasever и $basearch
iscsiname iqn-имя # для инициатора локального узла iscsi, до команды iscsi
iscsi # добавить iSCSI хранилище, рекомендуется использовать iBFT,
из которого anaconda возьмёт параметры автоматически (иначе команда iscsi д.б. до использования разделов), опции
--ipaddr=адрес-исполнителя
--port=3260
--target=iqn-исполнителя
--iface=интерфейс
--user=имя-пользователя
--password=пароль
--reverse-user=имя-пользователя
--reverse-password=пароль
key [--skip] # команда удалёна
keyboard тип-клавиатуры # описание клавиатуры, опции
--vckeymap=us # преобразование кодов клавиш для виртуальной консоли (см. /usr/lib/kbd/keymaps/*.map.gz: ruwin_alt-UTF-8)
--xlayouts='us' # список карт клавиш для X (см. setxkbmap(1), xkeyboard-config.7 (Layout): ru(typewriter))
--switch=список-переключателей # см. setxkbmap.1 и xkeyboard-config.7 (Options): grp:toggle (правый Alt)
lang en_US.UTF-8 --addsupport=ru_RU.UTF-8 # язык установки и язык по умолчанию, дополнительные языки; с установкой на русском вечные проблемы;
список в файле /usr/share/system-config-language/locale-list из пакета system-config-language;
язык для yum-langpacks не устанавливается, но устанавливаются языковые пакеты из раздела langpacks в comps
logging --host=сервер-syslog --port=514 --level={debug|info|warning|error|critical} # настройка syslog,
в RHEL7 ломится на TCP
logvol {точка-монтирования|swap|none} --vgname=имя-группы-томов --name=имя-тома
# создание логического тома LVM и файловой системы,
нельзя использовать символ "-" в имени, опции:
--noformat # использовать существующий том и файловую систему
--useexisting [--resize] # создать файловую систему на существующем томе
mediacheck # выключено по умолчанию, проверка носителя (rd.live.check)
network # настройки сети при установке переносятся на установленную систему, при отсутствии опции ""--device"
используется значение параметра anaconda ksdevice (ks.device, inst.ks.device) или link; опции
--device={интерфейс|MAC-адрес|link|bootif} # какое устройство настраиваем?
новая метода именования интерфейсов см. в dracut;
link - первое активное сетевое устройство;
bootif - взять из устанавливаемой PXE переменной BOOTIF
--bindto mac # привязать к HWADDR в ifcfg вместо DEVICE
--activate | --no-activate # использовать или нет при установке
--onboot={on|off} # включать или нет при загрузке
--bootproto={dhcp|bootp|ibft|static|query} # метод настройки IPv4
--dhcpclass=класс
--ip=адрес-IPv4
--netmask=маска-сети
--nameserver=адрес-DNS-сервера # можно список через запятую
--nodns
--noipv4
--gateway=адрес-шлюза-IPv4
--mtu=байт
--ipv6={адрес-IPv6|auto|dhcp} # метод настройки IPv6
--noipv6 (в RHEL7.1 записывается в /etc/sysconfig/network-scripts/ifcfg-, но не действует;
в /etc/sysctl.d/disableipv6.conf записать net.ipv6.conf.enИМЯ.disable_ipv6 = 1)
--ipv6gateway=адрес-шлюза-IPv6
--nodefroute
--notksdevice # не использовать для kickstart
--hostname=имя-хоста # рекомендуется указывать короткое имя (не FQDN) хоста,
чтобы клиент DHCP смог добавить к нему имя домена, или localhost.localdomain, чтобы клиент DHCP смог установить FQDN имя хоста
--bondslaves=список-подлежащих-устройств --bondopts=опции
# создание и настройка объединения интерфейсов bonding с указанным в --device именем
--vlanid=идентификатор-VLAN [--interfacename=имя]
# создание виртуального интерфейса и настройка VLAN; по умолчанию, имена вида eno1.171
--teamslaves=список-подлежащих-устройств --teamconfig=формат-json # создание и настройка группового устройства team в пространстве пользователя
с указанным в --device именем
--bridgeslaves=список-подлежащих-устройств --bridgeopts=опции # создание и настройка моста с указанным в --device именем,
опции в стиле nm-settings.5
part[ition] {точка-монтирования|swap|raid.идентификатор|pv.идентификатор|btrfs.идентификатор|biosboot} # создание раздела и форматирование
файловой системы или подготовка для swap, программного RAID (raid),
LVM (pv), раздела загрузки BIOS на GPT
("part biosboot --fstype=biosboot --size=1"), раздела загрузки UEFI ESP (efi), опции:
--active # ?
--asprimary # создать раздел MBR типа primary (первые 4)
--size=мибибайт
--grow [--maxsize=мибибайт] # использовать всё доступное место или почти всё
--noformat # использовать существующий том и файловую систему
raid точка-монтирования раздел ... # сборка программного RAID
и форматирование файловой системы, опции:
--device=номер-или-имя # в новых (CentOS 7.3 недостаточно новая, нумерую) версиях нельзя использовать "натуральные" имена вида md0,
рекомендуется использовать конструкцию "--device=LABEL=метка" (?!)
--level=RAIDуровень
--spares=количество-запасных-устройств
--fsprofile=задать-профиль-при-форматировании # для ext4 см. /etc/mke2fs.conf
--mkfsoptions=опции-создания
--fstype={xfs|ext2|ext3|ext4|swap|btrfs|vfat|efi}
--fsoptions=опции-монтирования
--label=метка-тома
--noformat # использовать существующий массив и файловую систему
--useexisting # создать файловую систему на существующем массиве
--encrypted --passphrase=фраза-для-генерации-пароля [--cipher=aes-xts-plain64] [опции шифрования] # используется LUKS
--chunksize КиБиБайт
realm # подключиться к AD или IPA
reboot [--eject] # перезагрузить компьютер после установки; осторожнее с зацикливанием установки
repo --name=идентификатор-репозитория {--baseurl=URL-репозитория|--mirrorlist=URL-скрипта-выдающего-список-зеркал}
# добавление репозитория; пробелы в идентификаторе - это зло; репозиторий установщика имеет идентификатор - anaconda,
также имеется отключённый репозиторий с идентификатором updates, использовать эти идентификаторы нельзя;
производится подстановка переменных $releasever и $basearch; опции:
--cost=приоритет # меньше - лучше, репозиторий установщика - 100
--install # скопировать репозиторий на устанавливаемую систему
reqpart [--add-boot] # создать обязательные разделы (/boot/efi для x86_64 с UEFI,
biosboot для x86_64 с BIOS и GPT);
"--add-boot" - создать ещё и /boot; не дублируются на второй диск для случая с программным RAID
rescue [--nomount|--romount] # режим восстановления вместо установки
rootpw [--iscrypted|--plaintext] пароль # установка пароля пользователя root, ключ "--lock" запрещает пользователю root входить с консоли
selinux {--disabled|--enforcing|--permissive} # режим работы SELinux; по умолчанию - enforcing
service [--disabled=список] [--enabled=список] # изменение активности служб по умолчанию; отсутствует в RHEL7
services [--disabled=список] [--enabled=список] # изменение активности служб по умолчанию в RHEL 7
shutdown # выключить компьютер после установки
skipx # не настраивать X; не действует, если установить хотя бы 1 менеджер дисплея (gdm, xdm)
sshpw --username=имя-пользователя пароль [--iscrypted|--plaintext] [--lock]
# имя и пароль доступа к устанавливаемой системе по ssh (см. inst.sshd); не передаётся в установленную систему;
по умолчанию root без пароля; в т.ч. если anaconda обнаружит ошибки в kickstart файле
text # установка в текстовом режиме
timezone часовой-пояс # установить часовой пояс и прочие параметры времени, опции:
Секция выбора пакетов начинается с команды %packages, завершается командой %end, можно использовать несколько секций.
Необходимые пакеты можно указывать по одному на строке с помощью имени пакета,
имени или идентификатора группы пакетов (перед именем необходимо указать символ "@"),
имени или идентификатора супергруппы (environment) пакетов (перед именем необходимо указать символы "@^").
Группы Core и Base включаются по умолчанию.
В именах пакетов можно использовать шаблоны ('*') - не советую, т.к. результат может удивить особенно после появления новой версии.
Для исключения пакетов и группы пакетов надо указать их имя, предварённое символом "-".
Имена и содержимое групп и супергрупп можно посмотреть в файлах repodata/*-вариант-архитектура-comps.xml.
В описании группы и супергруппы пакеты помечаются как
mandatory (обязательно устанавливаются, если выбран пакет)
default (устанавливаются, если выбран ппакет, но можно отменить)
optional (необходимо упомянуть явно)
Опции команды %packages:
--excludedocs # не устанавливать документацию, содержащуюся в пакета (/usr/share/doc*).
--ignoremissing # игнорировать отсутствующие пакеты (по умолчанию установка прерывается)
--nobase # не устанавливать группу @Base
--nocore # не устанавливать группу @Core, после установки система не загрузится
--multilib # устанавливать 32-битные пакеты (.i686) в дополнение к 64-битным (.x86_64); пакеты, устанавливаемые по зависимостям,
устанавливаются только в 64-битной версии или по необходимости
--instLangs список-языков-через-двоеточие # из пакетов выбираются только указанные файлы с переводами, действие незаметно (RHEL 7.4)
--excludeWeakdeps # не устанавливать пакеты по слабым зависимостям (Recommends и Supplements)
Опции для групп пакетов:
--nodefaults (устанавливать только обязательные пакеты)
--optional (включить в установку все опциональные пакеты)
Секция доустановочных скриптов начинается с команды %pre, завершается командой %end.
Включённые сюда команды выполняются после разбора скрипта kickstart, но до начала установки (обработаны lang, keyboard и url).
В это момент уже работает сеть, но не работает DNS. chroot не установлен.
В примере описывается создание скрипта kickstart, который затем включается командой %include.
Ключи:
--interpeter=/usr/bin/bash
--erroronfail # останавливать установку в случае ошибки
--log=/mnt/sysimage/root/ks-pre.log # откуда возьмётся этот каталог до установки?
Секция предустановочных скриптов начинается с команды %pre-install, завершается командой %end.
Включённые сюда команды выполняются после после создания и монтирования файловых систем в /mnt/sysimage, до chroot.
--interpeter=/usr/bin/python
--erroronfail # останавливать установку в случае ошибки
Секция послеустановочных скриптов в конце файла начинается с команды %post, завершается командой %end.
Включённые сюда команды выполняются после установки перед перезагрузкой. Предварительно
выполняется chroot на /mnt/sysimage (свежеустановленная корневая файловая система),
если не указано обратное. Можно иметь несколько секций %post (с chroot и без).
В это момент уже работает сеть, но не работает DNS (кроме случаев статической настройки сети). Ключи:
--interpeter=/usr/bin/bash
--erroronfail # останавливать установку в случае ошибки, а смысл? система-то уже установлена
--log=/root/ks-post.log
--nochroot # установленная система доступна в /mnt/sysimage
Секция обработки ошибок установщика начинается с команды %traceback, завершается командой %end.
Включённые сюда команды выполняются в случае возникновения ошибок. Может быть несколько секций,
они выполняются последовательно.
Ключи:
--interpeter=/usr/bin/bash
--erroronfail # останавливать установку в случае ошибки
Секция обработки ошибок при установке начинается с команды %onerror, завершается командой %end.
Включённые сюда команды выполняются в случае возникновения ошибок установки (не удалось запустить vnc, не удалось установить
указанный пакет). Может быть несколько секций,
они выполняются последовательно.
Ключи:
--interpeter=/usr/bin/bash
--erroronfail # останавливать установку в случае ошибки