Примечание
pkg-groups.tar — архив, содержащий дополнительные к базовой системе группы пакетов;
autoinstall.scm — сценарий автоматической установки на языке Scheme;
vm-profile.scm — сценарий с вариантами автоматической разбивки жёсткого диска на языке Scheme;
install-scripts.tar — архив, содержащий дополнительные скрипты для preinstall.d и postinstall.d в одноимённых каталогах. Скрипты должны быть исполняемыми. Скрипты из архива заменяют одноимённые скрипты инсталлятора.
metadata), доступный по сети по протоколам HTTP или FTP.
vm-profile.scm содержит сценарий на языке Scheme, описывающий профили автоматической разметки жёсткого диска.
vm-profile.scm с одним профилем разметки (kworkstation):
((kworkstation
(title . "Setup for kworkstation")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain))
("/" (size 40960000 . 40960000 ) (fsim . "Ext4") (methods plain))
("/home" (size 20480000 . #t ) (fsim . "Ext4") (methods plain))))
)
В примере задана следующая разметка:
Примечание
vm-profile.scm задаются в 512-байтных блоках. Для перевода значения в байты необходимо умножить его на 512.
Примечание
/boot/efi не требуется — установщик создаст его автоматически.
actiondata описывает отдельный раздел, логический том или файловую систему. Общий формат:
("<точка монтирования>"
(size <минимальный размер> . <максимальный размер>)
(fsim . "<тип файловой системы>")
(methods <метод>))
Таблица 24.1. Описание параметров actiondata
|
Параметр
|
Описание
|
|---|---|
|
"<точка монтирования>"
|
Точка монтирования раздела. Например: /, /home, swap
|
|
(size MIN . MAX)
|
Размер раздела в 512-байтных блоках. MIN — минимальный размер, MAX — максимальный. Значение #t означает использование всего оставшегося пространства
|
|
(fsim . "…")
|
Тип файловой системы
|
|
(methods …)
|
Метод размещения раздела: обычный раздел, LVM, RAID
|
|
(subvols …)
|
Описание подтомов BtrFS (используется только для BtrFS)
|
fsim определяет тип создаваемой файловой системы. Примеры:
methods определяет способ размещения раздела или файловой системы при автоматической разметке диска.
(methods <метод>)или:
(methods (<метод> <параметры>))
(methods (raid (level . 1)) lvm)В этом случае:
vm-profile.scm с несколькими профилями:
((kworkstation
(title . "Setup for kworkstation")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain))
("/" (size 40960000 . 40960000 ) (fsim . "Ext4") (methods plain))
("/home" (size 2048000 . #t ) (fsim . "Ext4") (methods plain))))
(kworkstation_lvm
(title . "Setup for kworkstation LVM")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods lvm))
("/" (size 16384000 . #t ) (fsim . "Ext4") (methods lvm))))
(timeshift
(title . "Timeshift-compatible setup")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain))
("" (size 40960000 . #t) (fsim . "BtrFS") (methods plain) (subvols ("@" . "/") ("@home" . "/home")))))
)
В примере определены следующие профили:
/ и раздел /home;
autoinstall.scm:
("/evms/profiles/kworkstation" action apply commit #f clearall #t exclude ())
Важно
(methods (lvm (vg . "имя группы томов") (lv . "имя тома")))где:
vg — имя группы томов (Volume Group);
lv — имя логического тома (Logical Volume).
((kworkstation_lvm
(title . "Setup for kworkstation LVM")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods (lvm (vg . "vg1") (lv . "lv1"))))
("/" (size 40960000 . 40960000) (fsim . "Ext4") (methods (lvm (vg . "vg1") (lv . "lv2"))))
("/home" (size 2048000 . #t ) (fsim . "Ext4") (methods (lvm (vg . "vg1") (lv . "lv3"))))))
)
Результат разметки:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 511M 0 part /boot/efi
└─sda2 8:2 0 79,5G 0 part
├─vg1-lv1 253:0 0 992M 0 lvm [SWAP]
├─vg1-lv2 253:1 0 19,5G 0 lvm /
└─vg1-lv3 253:2 0 59G 0 lvm /home
sr0 11:0 1 7,2G 0 rom
(lv . "…") не указан, имя логического тома формируется автоматически на основе имени раздела. Например:
((kworkstation_lvm
(title . "Setup for kworkstation LVM")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods (lvm (vg . "vg1"))))
("/" (size 16384000 . #t ) (fsim . "Ext4") (methods (lvm (vg . "vg1"))))))
)
Результат разметки:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 511M 0 part /boot/efi
└─sda2 8:2 0 79,5G 0 part
├─vg1-swap 253:0 0 992M 0 lvm [SWAP]
└─vg1-root 253:1 0 78,5G 0 lvm /
sr0 11:0 1 7,2G 0 rom
((kworkstation_lvm
(title . "Setup for kworkstation LVM")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods (lvm (vg . "vg1"))))
("/" (size 16384000 . #t ) (fsim . "Ext4") (methods (lvm (vg . "vg1")(lv . "lv1"))))))
)
Результат разметки:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 511M 0 part /boot/efi
└─sda2 8:2 0 79,5G 0 part
├─vg1-swap 253:0 0 992M 0 lvm [SWAP]
└─vg1-lv1 253:1 0 78,5G 0 lvm /
sr0 11:0 1 7,2G 0 rom
(vg . "…") не указан, автоматически создаётся группа томов с именем alt. Пример:
((kworkstation_lvm
(title . "Setup for kworkstation LVM")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods lvm))
("/" (size 16384000 . #t) (fsim . "Ext4") (methods lvm))))
)
Результат разметки:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 511M 0 part /boot/efi
└─sda2 8:2 0 79,5G 0 part
├─alt-swap 253:0 0 992M 0 lvm [SWAP]
└─alt-root 253:1 0 78,5G 0 lvm /
sr0 11:0 1 7,2G 0 rom
Важно
vg, его необходимо указывать для всех разделов, размещаемых в LVM. Смешивание разделов с явно заданным vg и разделов с methods lvm без vg может приводить к ошибкам при автоматической разметке диска.
Примечание
(superblock . #t) — использовать суперблок версии 1.2 (по умолчанию);
(superblock . #f) — использовать суперблок версии 1.0.
/boot/efi рекомендуется использовать суперблок версии 1.0, поскольку некоторые прошивки UEFI не поддерживают чтение RAID-массивов с суперблоком 1.2.
(methods (raid (superblock . #t) (level . 1)) plain)где:
level — уровень RAID;
superblock — версия суперблока RAID;
plain — размещение файловой системы непосредственно на RAID-массиве без использования LVM.
/boot/efi) в RAID:
((kworkstation_raid
(title . "Setup for kworkstation RAID")
(action . trivial)
(actiondata
("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods raid plain))
("/boot/efi" (size 1024000 . 1024000 ) (fsim . "FAT32")
(methods (raid (superblock . #f) (level . 1)) plain))
("/home" (size 20971520 . 20971520 ) (fsim . "Ext4")
(methods (raid (superblock . #t) (level . 1)) plain))
("/" (size 41943040 . #t ) (fsim . "Ext4")
(methods (raid (superblock . #t) (level . 1)) plain))))
)
В данном примере:
Примечание
(methods raid plain):
raid определяет размещение раздела в RAID-массиве;
plain указывает на создание файловой системы непосредственно на RAID-устройстве.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 999M 0 part
│ └─md3 9:3 0 999M 0 raid1 [SWAP]
├─sda2 8:2 0 500M 0 part
│ └─md4 9:4 0 500M 0 raid1 /boot/efi
├─sda3 8:3 0 19,5G 0 part
│ └─md5 9:5 0 19,5G 0 raid1 /
└─sda4 8:4 0 59G 0 part
└─md6 9:6 0 59G 0 raid1 /home
sdb 8:16 0 80G 0 disk
├─sdb1 8:17 0 999M 0 part
│ └─md3 9:3 0 999M 0 raid1 [SWAP]
├─sdb2 8:18 0 500M 0 part
│ └─md4 9:4 0 500M 0 raid1 /boot/efi
├─sdb3 8:19 0 19,5G 0 part
│ └─md5 9:5 0 19,5G 0 raid1 /
└─sdb4 8:20 0 59G 0 part
└─md6 9:6 0 59G 0 raid1 /home
sr0 11:0 1 7,2G 0 rom
Версия суперблока RAID раздела /boot/efi:
# mdadm --detail /dev/md4
/dev/md4:
Version : 1.0
Важно
/boot/efi) размещается на RAID-массиве, на этапе установки загрузчика необходимо выбрать режим EFI (для съёмных устройств)>. Для этого в файле autoinstall.scm необходимо указать:
("/grub" action "write" device "efiremovable" passwd #f passwd_1 "*" passwd_2 "*")
pkg-groups.tar представляет собой tar-архив с двумя подкаталогами:
groups — содержит описание групп программного обеспечения в файлах *.directory;
lists — содержит файлы со списками пакетов для каждой группы, а также скрытый файл .base, содержащий список пакетов «базовой системы» (то есть пакетов, которые устанавливаются в любом случае).
pkg-groups.tar проще всего взять из установочного ISO-образа из каталога /Metadata/ и при необходимости доработать.
$ tar xf pkg-groups.tar
lists и добавьте или измените файл группы. Имена пакетов указываются по одному в каждой строке, например, содержимое файла admc:
admc alterator-gpupdate gpupdate local-policy admx-basealt samba-dc-common admx-firefox admx-chromium gpui
$ tar cf pkg-groups.tar groups lists
autoinstall.scm:
("/pkg-install" action "write" lists "group-1 group-2" auto #t)
где group-1 и group-2 — имена файлов со списками пакетов из подкаталога lists.
Важно
autoinstall.scm представляет собой командный скрипт программы установки, написанный на языке Scheme. Каждая строка скрипта — команда для соответствующего модуля программы установки.
Примечание
autoinstall.scm для частного случая установки. Если требуются особые настройки, рекомендуется сначала выполнить установку вручную, изучить лог в /root/.install-log/wizard.log, и на его основе составить собственный скрипт autoinstall.scm.
autoinstall.scm:
; установка языка операционной системы (ru_RU)
("/sysconfig-base/language" action "write" lang ("ru_RU"))
; установка переключателя раскладки клавиатуры на Ctrl+Shift
("/sysconfig-base/kbd" language ("ru_RU") action "write" layout "ctrl_shift_toggle")
; установка часового пояса в Europe/Moscow, время в BIOS будет храниться в UTC
("/datetime-installer" action "write" commit #t name "RU" zone "Europe/Moscow" utc #t)
; настройка сетевого интерфейса на получение адреса по DHCP
("/net-eth" action "write" reset #t)
("/net-eth" action "write" name "enp0s3" ipv "4" controlled "NetworkManager" configuration "dhcp" default "" search "" dns "" computer_name "newhost" ipv_enabled #t)
("/net-eth" action "write" commit #t)
; автоматическая разбивка жёсткого диска в профиле kworkstation_lvm
("/evms/control" action "write" control open installer #t)
("/evms/control" action "write" control update)
("/evms/profiles/kworkstation_lvm" action apply commit #f clearall #t exclude ())
("/evms/control" action "write" control commit)
("/evms/control" action "write" control close)
; установка пакетов операционной системы
("pkg-install-init" action "write")
; установка только базовой системы (дополнительные группы пакетов из pkg-groups.tar указываются по именам через пробел)
("/pkg-install" action "write" lists "" auto #t)
("/preinstall" action "write")
; установка загрузчика GRUB в EFI
("/grub" action "write" device "efi" passwd #f passwd_1 "*" passwd_2 "*")
; установка пароля суперпользователя root '123'
("/root/change_password" passwd_2 "123" passwd_1 "123")
; задание первого пользователя 'user' с паролем '123'
("/users/create_account" new_name "user" real_name "Пользователь" allow_su #t auto #f passwd_1 "123" passwd_2 "123" autologin #f)
;("/postinstall/firsttime" script "ftp://192.168.0.123/metadata/update.sh")
("/sysconfig-base/kbd" language ("ru_RU") action "write" layout "ctrl_shift_toggle")
layout:
alt_sh_toggle — клавиши ALT+Shift;
caps_toggle — клавиша CapsLock;
ctrl_shift_toggle — клавиши Control+Shift;
ctrl_toggle — клавиша Control;
toggle — клавиша Alt.
("/pkg-install" action "write" lists "kworkstation/printing kworkstation/scanning" auto #t)
("/grub" action "write" device "efi" passwd #f passwd_1 "*" passwd_2 "*")
device может принимать следующие значения:
efi — рекомендуемая установка в режиме EFI;
eficlearnvram — установка в режиме EFI с предварительной очисткой NVRAM;
efinonvram — установка в режиме EFI без записи в NVRAM;
efiremovable — установка в режиме EFI для съёмных устройств;
none — не устанавливать загрузчик.
Примечание
("/grub" action "write" device "efi" passwd #t passwd_1 "123" passwd_2 "123")
("/grub" action "write" device "/dev/sda" passwd #f passwd_1 "*" passwd_2 "*")
controlled задаёт используемую сетевую подсистему:
NetworkManager — NetworkManager (etcnet);
etcnet — Etcnet;
NetworkManagerNative — NetworkManager (native);
nothing — не контролируется.
Примечание
("/net-eth" action "write" reset #t)
("/net-eth" action "add_iface_address" name "enp0s3" add-ip "192.168.0.25" add-mask "24" ipv "4")
("/net-eth" action "write" name "enp0s3" ipv "4" controlled "NetworkManager" configuration "static" default "192.168.0.1" search "" dns "8.8.8.8" computer_name "newhost" ipv_enabled #t)
("/net-eth" action "write" commit #t)
где:
add-ip "192.168.0.25" — IP-адрес;
add-mask "24" — маска сети (в формате CIDR);
default "192.168.0.1" — шлюз по умолчанию;
dns "8.8.8.8" — DNS-сервер;
computer_name "newhost" — имя хоста.
("/root/change_password" passwd_1 "123" passwd_2 "123")
где:
passwd_1, passwd_2 — пароль пользователя (значения должны совпадать в обоих параметрах).
("/root/change_password" iscrypted #t passwd_1 "$y$j9T$2LmRqmj4MUrITkwKF8Mx5/$v2CHpMzvsJfs2UuSQCvE2pqqNtfeeE1mny.val9aUs8")
где:
iscrypted #t — использовать хеш пароля (#t — пароль в хешированном виде, #f — пароль в открытом виде);
passwd_1 — yescrypt-хеш пароля.
Примечание
$ perl -e 'print crypt("mypass", "\$y\$j9T\$1234567890123456\$"), "\n";'
где:
$y$ — идентификатор алгоритма yescrypt;
j9T — параметры алгоритма;
mypass — пароль;
1234567890123456 — произвольная строка соли (16 символов);
mkpasswd (пакет mkpasswd):
$ mkpasswd --method=yescrypt
Password:
$y$j9T$2LmRqmj4MUr…
autoinstall.scm необходимо добавить отдельную строку вида:
("/users/create_account" new_name "test" real_name "Test User" allow_su #f auto #f passwd_1 "123" passwd_2 "123" autologin #f)
где:
new_name — имя пользователя (логин);
real_name — отображаемое имя пользователя;
allow_su — добавлять пользователя в группу wheel (#t — да, #f — нет);
auto #f — не генерировать пароль автоматически;
passwd_1, passwd_2 — пароль пользователя (значения должны совпадать в обоих параметрах);
autologin — включить (#t) или отключить (#f) автоматический вход в систему.
("/users/create_account" new_name "user" real_name "Пользователь" allow_su #t auto #f iscrypted #t passwd_1 "$y$j9T$2LmRqmj4MUrITkwKF8Mx5/$v2CHpMzvsJfs2UuSQCvE2pqqNtfeeE1mny.val9aUs8" autologin #f)
где:
iscrypted #t — использовать хеш пароля (#t — пароль в хешированном виде, #f — пароль в открытом виде);
passwd_1 — yescrypt-хеш пароля.
Примечание
$ perl -e 'print crypt("mypass", "\$y\$j9T\$1234567890123456\$"), "\n";'
где:
$y$ — идентификатор алгоритма yescrypt;
j9T — параметры алгоритма;
mypass — пароль;
1234567890123456 — произвольная строка соли (16 символов);
mkpasswd (пакет mkpasswd):
$ mkpasswd --method=yescrypt
Password:
$y$j9T$2LmRqmj4MUr…
autoinstall.scm можно добавить шаг /postinstall, позволяющий выполнить команду или скрипт в конце установки или при первом запуске системы. Например:
("/postinstall/firsttime" script "ftp://192.168.0.123/metadata/update.sh")
laststate — выполняется перед перезагрузкой после установки ОС;
firsttime — выполняется при первом запуске установленной системы.
script — скачивает и выполняет скрипт с удалённого сервера (поддерживаются протоколы http и ftp). Скрипт скачивается во время установки, а запускается в зависимости от уровня запуска;
run — выполняет указанную команду или набор команд напрямую (возможно указание перенаправления).
Важно
laststate или firsttime) метод run должен быть указан не более одного раза. Если их несколько, будет выполнен только последний.
("/postinstall/firsttime" script "http://server/script.sh")
("/postinstall/firsttime" run "curl --silent --insecure http://server/finish")
("/postinstall/laststate" script "http://server/script.sh")
("/postinstall/laststate" run "curl --silent --insecure http://server/gotoreboot")
Примечание
laststate система ещё не запущена, а корневая файловая система смонтирована в каталоге, указанном через переменную $destdir. Поэтому для работы с файлами установленной системы необходимо:
$destdir в путях;
run_chroot.
#!/bin/sh a= . install2-init-functions run_chroot sh -c "date > /root/STAMP_1" date > $destdir/root/STAMP_2
install-scripts.tar представляет собой tar-архив, содержащий дополнительные скрипты:
preinstall.d — скрипты, выполняемые после установки базовой системы. Как правило, это скрипты для дополнительной настройки базовой системы (перед установкой дополнительного набора ПО) и для переноса настроек из среды инсталлятора. Добавлять сюда свои собственные скрипты стоит только тогда, когда вы чётко представляете свои цели;
postinstall.d — скрипты, выполняемые после завершения всей установки, перед перезагрузкой. Как правило, это скрипты, удаляющие служебные пакеты инсталлятора из базовой системы. Подходят для финальной настройки, очистки временных файлов и т.д.
Важно
$destdir или run_chroot (см. пример выше).
preinstall.d, скрипты postinstall.d — в каталог postinstall.d. Упаковать архив можно, выполнив команду:
$ tar cf install-scripts.tar preinstall.d postinstall.d