|
Bog BOS: kickstart - установка Linux в пакетном режиме
|
Последнее изменение файла: 2024.04.04
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: kickstart - установка Linux в пакетном режиме
Система установки Linux anaconda (Fedora, RHEL/CentOS) имеет пакетный режим,
когда команды установки берутся из файла. Это позволяет установить сотни серверов в автоматическом
режиме, один раз отредактировав протокол установки.
До RHEL 7 была возможность обновления системы в пакетном режиме.
Для установки в пакетном режиме необходимо:
- создать текстовый файл с командами kickstart
- выложить его в доступном установщику месте (устройство хранения, флешка, CD/DVD, сетевой сервер)
- обеспечить возможность загрузки установщика, например, PXE для BIOS (используется PXELINUX (вариант ISOLINUX))
или PXE для UEFI (используется GRUB2)
- обеспечить доступность установочных файлов и репозиториев для установщика - копия дерева файлов (устройство хранения, флешка, CD/DVD, сетевой сервер);
RockyLinux уже развёрнут при синхронизации в ftp://имя-сервера/pub/RockyLinux8.9/BaseOS/x86_64/os/;
адрес указан в скрипте kickstart
- загрузить установщик и указать ему местонахождение файла с командами kickstart, если не обеспечен автоматический выбор файла
Опции установщика anaconda (до RHEL7 назывался просто ks; можно указывать несколько раз - до первой удачи):
- inst.ks=ftp://сервер/каталог/файл.cfg
- inst.ks=cdrom:устройство:/каталог/файл.cfg
- inst.ks=hd:устройство:каталог/файл.cfg # устройство - sda1
- inst.ks=bd:BIOS-устройство::каталог/файл.cfg # устройство и раздел - 80p3
- inst.ks=file:устройство/каталог/файл.cfg # файл в inird, монтирования не требуется
- inst.ks=nfs:[опции:]сервер:/каталог/файл.cfg
- inst.ks=http://сервер/каталог/файл.cfg # дополнительные заголовки запроса помогают сгенерировать имя kickstart файла
X-Anaconda-Architecture: x86_64
X-Anaconda-System-Release: имя-продукта
- inst.ks=http://сервер/kickstart.cgi inst.ks.sendmac
(послать MAC адрес, чтобы скрипт мог сгенерировать kickstart файл; назывался kssendmac, формат:
X-RHN-Provisioning-MAC-0: eth0 01:23:45:67:89:ab
- inst.ks=http://сервер/kickstart.cgi inst.ks.sendsn (послать серийный номер (/sys/class/dmi/id/product_serial),
чтобы скрипт мог сгенерировать kickstart файл, формат:
X-System-Serial-Number: серийный-номер
- inst.ks.device={eth0 | 00:12:34:56:78:9a | link | bootif | ibft} (выбор сетевого интерфейса для использования в kickstart,
до RHEL7 назывался ksdevice;
в RHEL7 рекомендуется использовать bootif=MAC или определение устройства командой ip в dracut;
для использования bootif необходимо указать "IPAPPEND 2" в настройках PXE)
- inst.ksstrict (любое предупреждение аварийно завершает установку)
- inst.ks.all (последовательно опробовать все inst.ks типа ftp, http и https)
Если указано устройство, но не указано имя файла, то ищется файл ks.cfg в корне.
Если не указано и устройство, то используется NFS сервер с адресом,
указанным в DHCP опции next-server (по умолчанию - адрес DHCP сервера), и файл, указанный в DHCP опции filename (по умолчанию - "/kickstart/").
Если filename завершается на "/", то в конец приписывается строка, состоящая из IP-адреса клиента, тире и "kickstart" (10.0.0.100-kickstart).
Если установщик грузится по UEFI/PXE с помощью GRUB2,
то параметризовать сервер можно непосредственно в grub.conf-IPадрес
Командный файл kickstart является текстовым файлом (ASCII), каждая команда на отдельной строке,
комментарии начинаются с символа '#', при установке создаётся протокол в формате kickstart - /root/anaconda-ks.cfg
(осторожно: некоторые версии установщика создают не совсем корректный anaconda-ks.cfg,
например, необходимо добавлять суффиксы архитектуры ".i686" к именам удаляемых из группы пакетов),
состоит из следующих секций (секция команд первой, секция пакетов обязательно второй),
в конце секции (кроме секции команд) должна быть строка "%end":
- секция команд, при отсутствии обязательных параметров установщик запросит их
- секция выбора пакетов (%packages)
- скрипты, выполняемые после разбора kickstart файла (%pre); необязательная секция; можно использовать несколько раз
- скрипты, выполняемые после создания файловых систем, но до установки (%pre-install); необязательная секция; можно использовать несколько раз
- скрипты, выполняемые после установки (%post); необязательная секция; можно использовать несколько раз
- %onerror; необязательная секция
- %traceback; необязательная секция
- %anaconda (поведение установщика anaconda); необязательная секция; умолчания в /usr/share/anaconda/interactive-defaults.ks;
pwpolicy - определение политики задания паролей для root, user и luks при интерактивной установке (kickstart их игнорирует);
installclass - класс установки
- %addon; необязательная секция; можно использовать несколько раз
Утилита ksvalidator (пакет pykickstart) позволяет проверить синтаксис командного файла
(не проверяет секции %packages, %pre, %pre-install и %post). Ключи:
- --followincludes
- --listversions
- --version версия # следующую версию проверять не умеет
Секция команд, состоит из строк, каждая из которых содержит одну из команд (порядок не имеет значения,
пустые строки игнорируются, при указании блочных устройств можно указывать
кратко - 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,
устарело в RHEL 8 - предлагается использовать authselect - см. authselect-migration(7),
опции
- --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
- --enablekrb5 --krb5realm=домен --krb5kdc=KDC --enablekrb5kdcdns --enablekrb5realmdns --krb5adminserver=KDC-сервер-с-kadmind
# /etc/krb5.conf
- --enablesmbauth --smbservers=список-серверов --smbworkgroup=имя-рабочей-группы --enablewinbind --enablewinbindauth
--smbsecurity={user|server|domain|ads} --smbrealm=домен --enablewins # и ещё 2 десятка, /etc/samba/smb.conf
- --enablecache # nscd, отключён при использовании SSSD
- --enablesssd --enablesssdauth --enableforcelegacy --enablecachecreds # кеширование средствами SSSD,
домен и прочие настройки придётся задавать вручную
- --enablelocauthorize # для локальных пользователей достаточно локальной авторизации
- --enablesysnetauth # разрешить аутентификацию системных учётных записей (до 500 или 1000) по сети
- --enablesmartcard --enablerequiresmartcard --smartcardmodule=модуль --smartcardaction=Lock|Ignore --enablefingerprint
- --enableecryptfs
- --enableipav2 --ipav2domain=домен --ipav2realm=домен --ipav2server=сервер
- authselect # настройка опций аутентификации; заменяет authconfig в RHEL 8; authselect-migration(7); опции передаются утилите authselect.8;
некоторые советы от вредителей
- "--enableshadow --passalgo=sha512" не нужно, т.к. они по умолчанию
- профиль sssd обеспечивает "--enablecache --enablesssd --enablesssdauth" (минимальная установка не включает пакет кеширования)
- LDAP настраивается вручную (/etc/openldap/ldap.conf) потом при выборе профиля sssd (--enableldap --enableldapauth --enableldaptls --ldaploadcacert --ldapserver
--ldapbasedn); нужен пакет sssd-ldap
- autopart # автоматическая разбивка дисков на разделы (плохая мысль)
- autostep [--autoscreenshot] # пошаговое выполнение без вмешательства оператора (снимки в /tmp/anaconda-screenshots,
затем в /root/anaconda-screenshots); не работает в CentOS 7.4
- bootloader # куда и как поместить загрузчик, опции
- --append=дополнительные-параметры-ядра # в дополнение к "rhgb quiet" (чтобы их не было надо явно отказаться от установки plymouth в %packages)
- --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 # не устанавливать загрузчик в MBR
- --disabled
- --upgrade # устарело (удалено?) в RHEL 8
- btrfs {точка-монтирования|none} --data=уровень-raid --metadata=уровень-raid --label=метка-тома
[--noformat|--useexisting] [--mkfsoptions=опции] разделы # создать том btrfs;
удалено в RHEL 8
- btrfs точка-монтирования --subvol --name=путь-подтома родительский-том # создать подтом btrfs; удалено в RHEL 8
- clearpart # удалить разделы, опции:
- --all # удалить все разделы на всех дисках, известных установщику; для автоматического действия используйте команду zerombr
- --drives=список-блочных-устройств # ограничивает действие опции --all
- --list=список-разделов # перекрывает --all и --linux
- --linux # удалить все Linux разделы
- --none # по умолчанию
- --initlabel --disklabel={msdos|gpt} # создать таблицу разделов не только для очищенных устройств хранения
- cdrom # устанавливать с CD-ROM
- cmdline # полностью автоматическая установка; любой запрос к оператору останавливает установку
- device имя-модуля-ядра --opts="параметры-через-пробел" # загрузить модуль ядра с указанными параметрами,
не наследуется в /etc/modprobe.d/, а загружается ли?;
устарело в RHEL 8 и игнорируется;
- deviceprobe # устарело (удалено?) в RHEL 8
- dmraid --name имя --dev список-устройств # псевдо-RAID, что такое имя? устарело (удалено?) в RHEL 8
- driverdisk {раздел|--source=URL|--biospart=раздел-с-точки-зрения-BIOS} # пакет (.img) с драйверами
(см. параметр inst.dd anaconda)
- eula --agreed # иначе будет запрашивать даже в полностью автоматическом режиме
- fcoe --nic интерфейс [--dcb] [--autovlan] # Fibre Channel
- firewall {--enabled|--disabled} интерфейс # настройка сетевого экрана filrewalld, опции
- --trust=интерфейс # разрешить весь трафик с/на этот интерфейс, можно использовать несколько раз
- --ssh
- --smtp
- --http
- --ftp
- --port=имя-или-номер-порта:{udp|tcp}[,...]
- --service=сервис # список сервисов можно получить по команде "firewall-cmd --get-services"
- --remove-service # блокировать всё
- --use-system-defaults # остальные опции игнорируются
- firstboot {--enabled|--disabled} [--reconfig] # регулирует запуск приложения настройки при первой загрузке,
--reconfig позволяет изменить язык, мышь, клавиатуру, пароль, уровень безопасности, часовой пояс, настройки сети;
дополнительно к firstboot появился Initial Setup, который хочет принятия лицензионного
соглашения (см. eula) и заведения пользователей (отключить initial-setup.service, initial-setup-text,
initial-setup-graphical и initial-setup-reconfiguration); обещано исправление
- group --name=имя-группы [--gid=номер] # создать группу пользователей
- graphical [--non-interactive] # установка в графическом режиме, по умолчанию
- halt # остановить все процессы после установки, не работает даже CtrlAltDel, но экран не гаснет; по умолчанию для kickstart
- harddrive # устанавливать с устройства хранения (файловые системы ext2, ext3, ext4, vfat, xfs; ISO или развёрнутое дерево)
- --biospart=раздел-с-точки-зрения-BIOS # удалено в RHEL 8
- --partition=раздел
- --dir=каталог
- ignoredisk {--drives=список-блочных-устройств | --only-use=список-блочных-устройств | --interactive}
# не использовать указанные диски при установке или использовать только указанные или запрашивать; --interactive устарело в RHEL 8
- install [--root-device блочное-устройство] # устарело (удалено?) в RHEL 8; на следующей строке указывается метод установки (откуда устанавливать):
- cdrom
- harddrive {--biospart=раздел-с-точки-зрения-BIOS|--partition=раздел} --dir=каталог
- 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)); итого: 'us,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;
обязательно ли указывать UTF-8 в современных системах не проверял (localectl list-locales выдаёт ru_RU, ru_RU.iso88595, ru_RU.koi8r, ru_RU.utf8 и никаких UTF-8)
- liveimg --url=ftp-http-https-file-url [--proxy=[протокол://][имя-пользователя[:пароль]@]сервер[:порт]]
[--noverifyssl] [--checksum=контрольная-сумма-SHA256]
# установка с squashfs.img или монтируемого образа или tar архива (tar.gz, tar.bz2, tar.xz)
- logging --host=сервер-syslog --port=514 --level={debug|info|warning|error|critical} # настройка syslog,
с RHEL 7 используется TCP
- logvol {точка-монтирования|swap|none} --vgname=имя-группы-томов --name=имя-тома
# создание логического тома LVM и файловой системы,
нельзя использовать символ "-" в имени, опции:
- --noformat # использовать существующий том и файловую систему
- --useexisting [--resize] # создать новую файловую систему на существующем томе
- --fstype={xfs|ext2|ext3|ext4|btrfs|swap|vfat} [--fsprofile профиль-из-/etc/mke2fs.conf] # btrfs удалено в RHEL 8
- --mkfsoptions=опции-создания
- --fsoptions=опции-монтирования # для /etc/fstab
- --label=метка-файловой-системы
- --grow [--maxsize=мибибайт] # использовать всё доступное место, но не совсем всё
- {--size=мибибайт | --percent=процентов-свободного-места-группы-томов} [--resize]
- --recommended | --hibernation # для swap
- --encrypted --passphrase=фраза-для-генерации-пароля [--cipher={aes-xts-plain64|aes-cbc-essiv:sha256}] [опции шифрования] #
используется LUKS; опции шифрования:
--escrowcert, --luks-version, --backuppassphrase, --pbkdf, --pbkdf-memory, --pbkdf-time, --pbkdf-iterations
- --thinpool --metadatasize=мибибайт --chunksize=кибибайт # создание пула, none вместо точки монтирования
- --thin --poolname=имя-пула # создание динамического тома из пула
- --profile=имя-профиля (см. /etc/lvm/profile, например, default и thin-performance)
- --cachepvs, --cachesize, --cachemode # кешируемые тома
- mediacheck # выключено по умолчанию, проверка носителя (rd.live.check)
- module --name=имя-модуля --stream=имя-потока # разрешить (enable) указанный поток модуля; без этого указанные в секции %packages пакеты не установятся
- mount блочное-устройство {точка-монтирования|none} # использовать готовое блочное устройство; несовместимо с part, logvol и autopart (?!); опции
- --reformat={xfs|ext2|ext3|ext4|swap|vfat} # создать файловую систему заново
- --mkfsoptions=опции-создания
- --mountoptions=опции-монтирования # для /etc/fstab
- multipath # устарело (удалено?) в RHEL 8
- 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; в RHEL 8 нет --query
- --dhcpclass=класс
- --ip=адрес-IPv4
- --netmask=маска-сети
- --nameserver=адрес-DNS-сервера # можно список через запятую
- --ipv4-dns-search # список доменов при поиске
- --ipv4-ignore-auto-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 имя хоста
- --ethtool=настройки-для-передачи-ethtool
- --essid= --wepkey= --wpakey= # настройки Wi-Fi
- --bondslaves=список-подлежащих-устройств --bondopts=опции-через-;
# создание и настройка объединения интерфейсов bonding с указанным в --device именем
- --vlanid=идентификатор-VLAN [--interfacename=имя]
# создание виртуального интерфейса и настройка VLAN; по умолчанию, имена вида eno1.171
- --teamslaves=список-подлежащих-устройств-json --teamconfig=настройка-json # создание и настройка группового устройства team в пространстве пользователя
с указанным в --device именем
- --bridgeslaves=список-подлежащих-устройств --bridgeopts=опции # создание и настройка моста с указанным в --device именем,
опции в стиле nm-settings.5
- nfs --server=имя-сервера --dir=каталог [--opts=опции-монтирования] # устанвливать с NFS; дерево Packages/ или install.img
- part[ition] {точка-монтирования|swap|raid.идентификатор|pv.идентификатор|btrfs.идентификатор|biosboot} # создание раздела и форматирование
файловой системы или подготовка для swap, программного RAID (raid),
LVM (pv), раздела загрузки BIOS на GPT
("part biosboot --fstype=biosboot --size=1"), раздела загрузки UEFI ESP (efi);
btrfs удалено в RHEL 8; опции:
- --active # устарело в RHEL 8
- --asprimary # создать раздел MBR типа primary (первые 4)
- --size=мибибайт
- --grow [--maxsize=мибибайт] # использовать всё доступное место или почти всё
- {--onpart|--usepart}=существующий-раздел-или-устройство [--resize]
- --noformat # использовать существующий том и файловую систему
- {--ondisk|--ondrive}=явно-указанное-блочное-устройство
- --onbiosdisk=явно-указанное-блочное-устройство-по-мнению-BIOS
- --fsprofile=задать-профиль-при-форматировании # для ext4 см. /etc/mke2fs.conf
- --fstype={xfs|ext2|ext3|ext4|swap|vfat|btrfs|biosboot|efi} # btrfs удалено в RHEL 8
- --mkfsoptions=опции-создания
- --fsoptions=опции-монтирования # для /etc/fstab
- --label=метка-тома # файловой системы?
- --recommended # определить размер раздела автоматически
- --encrypted --passphrase=фраза-для-генерации-пароля [--cipher={aes-xts-plain64|aes-cbc-essiv:sha256}] [опции шифрования] #
опции шифрования: --escrowcert, --luks-version, --backuppassphrase, --pbkdf, --pbkdf-memory, --pbkdf-time, --pbkdf-iterations
- nvdimm ...
- poweroff # выключить компьютер после установки
- ostreesetup # способ установки
- raid точка-монтирования раздел ... # сборка программного RAID
и форматирование файловой системы, разделы создаются командой partition и обозначаются вида "raid.идентификатор"; опции:
- --device=номер-или-имя # в новых версиях (CentOS 7.9 недостаточно новая, продолжаю нумеровать) нельзя использовать "натуральные" имена вида md0,
для старых версий метаданных (0.90) рекомендуется использовать конструкцию "--device=LABEL=метка"
- --level=уровень-RAID # /boot м.б. только RAID-1
- --chunksize=КиБиБайт # 512
- --spares=количество-запасных-устройств
- --fstype={xfs|ext2|ext3|ext4|swap|btrfs|vfat|efi} # btrfs удалено в RHEL 8; efi не упоминается в документации
- --fsprofile=задать-профиль-при-форматировании # для ext4 см. /etc/mke2fs.conf
- --mkfsoptions=опции-создания
- --fsoptions=опции-монтирования # в /etc/fstab
- --label=метка-файловой-системы
- --noformat # использовать существующий массив и файловую систему
- --useexisting # создать файловую систему на существующем массиве
- --encrypted --passphrase=фраза-для-генерации-пароля [--cipher={aes-xts-plain64|aes-cbc-essiv:sha256}] [опции шифрования] #
используется LUKS; опции шифрования: --escrowcert, --luks-version, --backuppassphrase, --pbkdf, --pbkdf-memory, --pbkdf-time, --pbkdf-iterations
- realm # подключиться к AD или IPA
- reboot [--eject] [--kexec] # перезагрузить компьютер после установки; осторожнее с зацикливанием установки; --kexec устарело в RHEL 8
- repo --name=идентификатор-репозитория {--baseurl=URL-репозитория|--mirrorlist=URL-скрипта-выдающего-список-зеркал|--metalink=URL-репозитория}
# добавление репозитория; пробелы в идентификаторе - это зло; репозиторий установщика имеет идентификатор - anaconda (в RHEL 8?),
также имеется отключённый репозиторий с идентификатором updates (отсутствует в RHEL 8), использовать эти идентификаторы нельзя;
для металинка производится подстановка переменных $releasever и $basearch; опции:
- --cost=приоритет # меньше - лучше, репозиторий установщика - 100
- --excludepkgs=список-шаблонов-имён-пакетов
- --includepkgs=список-шаблонов-имён-пакетов
- --proxy=[проксируемый-протокол://][имя-пользователя[:пароль]@]хост[:порт]
- --noverifyssl
- --ignoregroups=true # оптимизация времени; отсутствует в RHEL 8
- --install # скопировать репозиторий на устанавливаемую систему (/etc/yum.repos.d/)
- reqpart [--add-boot] # создать обязательные разделы (/boot/efi для x86_64 с UEFI,
biosboot для x86_64 с BIOS и GPT);
"--add-boot" - создать ещё и /boot; не дублируются на второй диск для случая с программным RAID
- rescue [--nomount|--romount] # режим восстановления вместо установки; отличается от режимов rescue и emergency системы systemd;
выполняется секция %pre; выполняются команды updates, sshpw, logging, lang, network;
настраивается система хранения: fcoe, iscsi, iscsiname, nvdimm, zfcp; файловые системы монтируются в /mnt/sysimage;
выполняется секция %post
- rootpw [--iscrypted|--plaintext] пароль # установка пароля пользователя root, ключ "--lock" запрещает пользователю root входить с консоли
- selinux {--disabled|--enforcing|--permissive} # режим работы SELinux; по умолчанию - enforcing
- service [--disabled=список] [--enabled=список] # изменение активности служб по умолчанию; отсутствует в RHEL 7
- services [--disabled=список] [--enabled=список] # изменение активности служб по умолчанию в RHEL 7 и 8;
сначала обрабатывается спсиок запрещений, потом - разрешений
- shutdown # выключить компьютер после установки
- skipx # не настраивать X; не действует, если установить хотя бы 1 менеджер дисплея (gdm, xdm)
- snapshot имя-группы-томов/имя-тома --name=имя-снимка --when={pre-install|post-install} # сделать снимок тома LVM
- sshkey --username=имя-пользователя "публичный-ключ" # добавляет ключ в ~имя-пользователя/.ssh/authorized_keys
- sshpw --username=имя-пользователя пароль
# имя и пароль доступа к устанавливаемой системе по ssh (требуется inst.sshd); не передаётся в установленную систему;
можно использовать несколько раз;
если сконфигурирован пользователь не root, то добавляется root без пароля;
в т.ч. если anaconda обнаружит ошибки в kickstart файле;
ключи:
- --plaintext # пароль в открытом виде
- --iscrypted # вместо пароля хеш
- --lock # этот пользователь не войдёт
- --sshkey # вместо пароля использован публичный ключ; ssh-dss не предлагать; кладётся во временный /home/имя-пользователя/.ssh/authorized_keys,
update-crypto-policies установлен DEFAULT вместо LEGACY (нет SHA1 и т.д.)
- syspurpose # оформление подписки
- text [--non-interactive] # установка в текстовом режиме; в новых версиях по умолчанию в графическом режиме
- timezone часовой-пояс # установить часовой пояс (Europe/Moscow) и прочие параметры времени, опции:
- --utc # аппаратные часы установлены в UTC
- --nontp # не использовать NTP для синхронизации времени
- --ntpservers=список-серверов-NTP
- unsupported_hardware # не останавливаться при обнаружении неподдерживаемого оборудования; удалено в RHEL 8 - не останавливаться?
- updates url-updates.img # локальные настройки для anaconda
- upgrade # удалено в RHEL 8
- url --url=ftp-http-https-file-url [--proxy=[проксируемый-протокол://][имя-пользователя[:пароль]@]сервер[:порт]]
[--noverifyssl] [--mirrorlist=URL-скрипта-выдающего-список-зеркал] [--metalink=URL] # устанавливать с сетевого ресурса;
дерево, в списке зеркал (металинке?) подставляются $releasever и $basearch;
в отличие от inst.repo можно указать только 1 раз
- user --name=имя-пользователя # создать пользователя, опции:
- --gecos=строка
- --groups=список-дополнительных-групп
- --homedir=домашний-каталог
- --lock # запрещает пользователю входить с консоли
- [--iscrypted|--plaintext] --password # пользователь без пароля не сможет работать
- --shell=оболочка # /bin/bash (/etc/default/useradd)
- --uid=идентификатор-пользователя # нижняя граница в RHEL 7 - 1000, в RHEL 8 - 5000
- --gid=идентификатор-группы # не работает в RHEL7, каждому пользователю свою группу?
- vnc # обеспечивает возможность подключения к установщику по VNC (или установщика к клиенту), опции
- --password=пароль # по умолчанию сервер запускается без пароля
- --connect имя-хоста-клиента[:порт] # подключаться к прислушивающемуся клиенту; удалён?
- --host имя-хоста-клиента # подключаться к прислушивающемуся клиенту
- --port=порт-клиента
- volgroup имя [раздел ...] # создание группы томов LVM, не используйте "-" в именах, опции:
- --noformat # использовать существующую группу томов
- --useexisting # использовать существующую группу томов, но переформатировать её (не нужно указывать разделы)
- --pesize=кибибайт # размер физического экстента; по умолчанию - 4MiB; не менее 1MiB
- --reserved-space=неприкасаемых-мибибайт
- --reserved-percent=неприкасаемых-процентов
- xconfig [--defaultdesktop={GNOME|KDE}] [--startxonboot] # настройка X; в RHEL 8 нет --defaultdesktop; --startxonboot перебивается multi-user.target в %post
- zerombr # зачистка неправильных таблиц разделов
- zfcp # определение FC устройств на IBM Z
- %include путь | URL # вставка текста (имеется в RHEL 6.9); производится после выполнения секции %pre; в RHEL 8 убрали URL?
- %ksappend URL # вставка текста до обработки секции %pre
Секция выбора пакетов начинается с команды %packages, завершается командой %end, можно использовать несколько секций.
Необходимые пакеты можно указывать по одному на строке с помощью имени пакета,
имени или идентификатора группы пакетов (перед именем необходимо указать символ "@"),
имени или идентификатора супергруппы (environment) пакетов (перед именем необходимо указать символы "@^"; только 1 супергруппа),
потоки модулей (@имя-модуля[:поток[/профиль]]; только 1 поток модуля; можно несколько профилей потока).
Команда module позволяет явно указать пакеты потока модуля.
Рекомендуется супергруппа "Minimal Install" (начальная настройка требует Gnome и X Window System, которые сюда не включены).
Группы Core и Base включаются по умолчанию.
В именах пакетов можно использовать шаблоны ('*') - не советую, т.к. результат может удивить особенно после появления новой версии.
Для исключения пакетов и группы пакетов надо указать их имя, предварённое символом "-".
Имена и содержимое групп (<group>) и супергрупп (<environment>)
можно посмотреть в файлах repodata/*-вариант-архитектура-comps.xml (repodata/*-comps-репозиторий-архитектура.xml),
имена модулей по команде "yum module list" (после установки ;).
В описании группы и супергруппы пакеты помечаются как
- mandatory (обязательно устанавливаются, если выбрана группа)
- default (устанавливаются, если выбрана группа, но можно отменить)
- optional (необходимо упомянуть явно)
Опции команды %packages:
- --default # установить стандартный набор пакетов (мне повезёт ;)
- --excludedocs # не устанавливать документацию, содержащуюся в пакета (/usr/share/doc*)
- --ignoremissing # игнорировать отсутствующие пакеты (по умолчанию установка прерывается)
- --nobase # не устанавливать группу @Base; удалено в RHEL 8
- --nocore # не устанавливать группу @Core, только для контейнеров; после установки система не загрузится
- --multilib # устанавливать 32-битные пакеты (.i686) в дополнение к 64-битным (.x86_64); пакеты, устанавливаемые по зависимостям,
устанавливаются только в 64-битной версии или по необходимости
- --instLangs список-языков-через-двоеточие # из пакетов выбираются только указанные файлы с переводами, действие незаметно (RHEL 7.4)
- --excludeWeakdeps # не устанавливать пакеты по слабым зависимостям (Recommends и Supplements)
- --retries=10
- --timeout=30
Опции для групп пакетов:
- --nodefaults (устанавливать только обязательные пакеты)
- --optional (включить в установку все опциональные пакеты; некоторые группы нне содержат обязательных пакетов совсем)
Секция доустановочных скриптов начинается с команды %pre, завершается командой %end.
Включённые сюда команды выполняются после разбора скрипта kickstart, но до начала установки (обработаны lang, keyboard и url).
В это момент уже работает сеть, но не работает DNS. chroot не установлен.
В примере описывается создание скрипта kickstart, который затем включается командой %include.
Ключи:
- --interpeter=/usr/bin/bash # имеется /usr/libexec/platform-python (3.6 в RHEL 8)
- --erroronfail # останавливать установку в случае ошибки; рекомендуется в сочетании с inst.nokill
- --log=/mnt/sysimage/root/ks-pre.log # откуда возьмётся этот каталог до установки?
Пример из учебника - ввод параметров с терминала (старая anaconda):
%pre
#!/bin/sh
exec < /dev/tty6 > /dev/tty6
chvt 6
clear
echo "################################"
echo "# Running Pre Configuration #"
echo "################################"
echo -n "Give hostname: "
read hostname
hostname $hostname
echo $hostname > /home/hostname
exec < /dev/tty1 > /dev/tty1
chvt 1
%end
Пример из учебника - передача параметров в секцию команд из строки загрузки (awk отсутствует в /bin:/usr/bin, имя параметра не может содержать '.')
boot: ... ESXIP=10.0.0.20 ...
%pre (and %post if needed)
#ESXIP=`awk -F "ESXIP=" '{print $2}' /proc/cmdline | cut -d " " -f 1`
#ESXIP=`cat /proc/cmdline |perl -e 'if (<> =~ /\sESXIP=(.*?)\s/) {print $1}'`
ESXIP=`perl -ne '/ESXIP=(\S+)/ && print $1' /proc/cmdline`
# set -- `cat /proc/cmdline`
# for I in $*; do case "$I" in *=*) eval $I;; esac; done
Секция предустановочных скриптов начинается с команды %pre-install, завершается командой %end.
Включённые сюда команды выполняются после создания и монтирования файловых систем в /mnt/sysimage, до chroot, сеть сконфигурирована (из командной строки).
Можно иметь несколько секций с различными интерпретаторами.
- --interpeter=/usr/bin/python # /usr/libexec/platform-python
- --erroronfail # останавливать установку в случае ошибки; рекомендуется в сочетании с inst.nokill
- --log=/mnt/sysimage/root/ks-pre.log #
Секция послеустановочных скриптов в конце файла начинается с команды %post, завершается командой %end.
Включённые сюда команды выполняются после установки перед перезагрузкой. Предварительно
выполняется chroot на /mnt/sysimage (свежеустановленная корневая файловая система),
если не указано обратное. Можно иметь несколько секций %post (с chroot и без).
В это момент уже работает сеть, но не работает DNS (кроме случаев статической настройки сети). Ключи:
- --interpeter=/usr/bin/bash # /usr/libexec/platform-python
- --erroronfail # останавливать установку в случае ошибки, а смысл? система-то уже установлена; рекомендуется в сочетании с inst.nokill
- --log=/root/ks-post.log
- --nochroot # установленная система доступна в /mnt/sysimage
Секция обработки ошибок установщика начинается с команды %traceback, завершается командой %end.
Включённые сюда команды выполняются в случае возникновения ошибок. Может быть несколько секций,
они выполняются последовательно.
Ключи:
- --interpeter=/usr/bin/bash
- --erroronfail # останавливать установку в случае ошибки
- --log=журнал
Секция обработки ошибок при установке начинается с команды %onerror, завершается командой %end.
Включённые сюда команды выполняются в случае возникновения ошибок установки (не удалось запустить vnc, не удалось установить
указанный пакет). Может быть несколько секций,
они выполняются последовательно.
Ключи:
- --interpeter=/usr/bin/bash # /usr/libexec/platform-python
- --erroronfail # останавливать установку в случае ошибки; рекомендуется в сочетании с inst.nokill
- --log=журнал
Секция %addon содержит дополнительные команды от Red Hat,
начинается с команды %addon, завершается командой %end:
- %addon com_redhat_kdump {--enable|--disable} [--reserve-mb={auto|размер}] [--enablefadump] # настройка kdump
- %addon org_fedora_oscap # настройка OpenSCAP; вместо опций используются пары "ключ = значение" до %end по одной паре на строку
- %end
|
Bog BOS: kickstart - установка Linux в пакетном режиме
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru