Autoinstall: различия между версиями
(не показано 50 промежуточных версий 15 участников) | |||
Строка 1: | Строка 1: | ||
Дистрибутив ALT Linux можно установить в автоматическом режиме. Для этого нужно иметь установочный диск и доступный по сети каталог с несколькими файлами. | Дистрибутив ALT Linux можно установить в автоматическом режиме. Для этого нужно иметь установочный диск и доступный по сети каталог с несколькими файлами. | ||
Данное руководство проверено на установке [[Альт | Данное руководство проверено на установке [[Альт Сервер 9|Альт Сервер 9.1]] (FalcoRusticolus). | ||
== Требования к дистрибутиву == | |||
Для работы автоустановки в образ установщика необходимо включить пакет {{pkg|curl}} — в случае [[m-p|mkimage-profiles]] это цель <tt>use/install2/net</tt> или непосредственно: | |||
@$(call add,INSTALL2_PACKAGES,curl) | |||
Если используется постустановочная доводка, включите в базовые пакеты {{pkg|alterator-postinstall}}<ref>https://github.com/sergelogvinov/alterator-postinstall</ref>: | |||
@$(call add,BASE_PACKAGES,alterator-postinstall) | |||
== Запуск установки == | == Запуск установки == | ||
Для включения режима автоматической установки ядру инсталятора операционной системы необходимо передать параметр загрузки '''ai''' (без значения). Сделать это можно в меню загрузки диска или в приглашении '''boot:''' при загрузке по сети. Автоустановка поддерживается в следующих режимах установки: http, ftp, cdrom, disk, nfs. | Для включения режима автоматической установки ядру инсталятора операционной системы необходимо передать параметр загрузки '''ai''' (без значения). Сделать это можно в [[Первая_помощь#Изменение_параметров_загрузки|меню загрузки диска]] или в приглашении '''boot:''' при загрузке по сети. Автоустановка поддерживается в следующих режимах установки: http, ftp, cdrom, disk, nfs. | ||
Для автоустановки требуется диск с дистрибутивом (в приводе или с сетевого ресурса) и набор из четырёх файлов, описывающих процесс установки. Все четыре файла нужно поместить в каталог, доступный по сети по протоколам HTTP или FTP, и указать путь к нему в параметрах загрузки '''curl'''. | Для автоустановки требуется диск с дистрибутивом (в приводе или с сетевого ресурса) и набор из четырёх файлов, описывающих процесс установки. Все четыре файла нужно поместить в каталог, доступный по сети по протоколам HTTP или FTP, и указать путь к нему в параметрах загрузки '''curl'''. | ||
Строка 13: | Строка 20: | ||
<pre>ai curl=ftp://192.168.0.1/metadata/</pre> | <pre>ai curl=ftp://192.168.0.1/metadata/</pre> | ||
{{Note|Для этого достаточно создать на сервере каталог {{path| | {{Note|Для этого достаточно создать на сервере каталог {{path|/srv/public/metadata}} и положить туда файлы. Параметры загрузки образа можно прописать в файле конфигурации {{path|/var/lib/tftpboot/pxelinux.cfg/default}}.}} | ||
{{Attention|По умолчанию сервер отдаёт по протоколу https:// с самоподписанным сертификатом, поэтому лучше использовать протокол ftp://}} | {{Attention|По умолчанию сервер отдаёт по протоколу https:// с самоподписанным сертификатом, поэтому лучше использовать протокол ftp://}} | ||
Строка 20: | Строка 27: | ||
# на диске в каталоге '''/Metadata/''' | # на диске в каталоге '''/Metadata/''' | ||
# в образе установщика в каталоге '''/usr/share/install2/metadata/''' | # в образе установщика в каталоге '''/usr/share/install2/metadata/''' | ||
== Содержимое каталога metadata == | == Содержимое каталога metadata == | ||
Строка 29: | Строка 34: | ||
* '''vm-profile.scm''' — схема разбивки жёсткого диска на языке Scheme. [[Файл:Vm-profile.scm|Пример файла vm-profile.scm]] | * '''vm-profile.scm''' — схема разбивки жёсткого диска на языке Scheme. [[Файл:Vm-profile.scm|Пример файла vm-profile.scm]] | ||
* '''pkg-groups.tar''' — архив, содержащий дополнительные к базовой системе группы пакетов (можно просто взять с диска из подкаталога Metadata/ <source lang="Bash">cp /srv/public/netinst/mnt/Metadata/pkg-groups.tar /srv/public/metadata/</source> | * '''pkg-groups.tar''' — архив, содержащий дополнительные к базовой системе группы пакетов (можно просто взять с диска из подкаталога Metadata/ <source lang="Bash">cp /srv/public/netinst/mnt/Metadata/pkg-groups.tar /srv/public/metadata/</source> | ||
* '''install-scripts.tar''' — архив, содержащий дополнительные preinstall.d и postinstall.d скрипты. Скрипты нужно помещать внутрь архива в эти подкаталоги. '''Скрипты должны быть исполняемыми'''. Поддержка этого архива появилась в installer 1.11.3-alt1 (дистрибутивы версии 10.1). | |||
== Делаем «собственный» дистрибутив == | == Делаем «собственный» дистрибутив == | ||
Строка 40: | Строка 46: | ||
== Формат файла autoinstall.scm == | == Формат файла autoinstall.scm == | ||
Файл autoinstall.scm представляет из себя командный скрипт для программы установки, написанный с использованием языка программирования scheme. Каждая строка | Файл autoinstall.scm представляет из себя командный скрипт для программы установки, написанный с использованием языка программирования scheme. Каждая строка скрипта — команда для модуля программы установки. Рассмотрим в качестве примера стандартный скрипт автоматической установки операционной системы: | ||
{{Attention|Не нужно без оглядки применять этот рецепт на любом дистрибутиве. Рекомендуем сначала установить дистрибутив, потом посмотреть лог выполняемых команд в {{path|/root/.install-log/wizard.log}}}} | |||
{{Attention|В образах, собранных на p10 после 10 мая 2023 года (дистрибутивы 10.2) после строки: | |||
<source lang="lisp"> | |||
("/evms/control" action "write" control close) | |||
</source> | |||
нужно добавлять строку: | |||
<source lang="lisp"> | |||
("/remount-destination" action "write") | |||
</source> | |||
}} | |||
<source lang="lisp">; установка языка операционной системы (ru_RU) | <source lang="lisp">; установка языка операционной системы (ru_RU) | ||
("/sysconfig-base/language" action "write" lang ("ru_RU")) | ("/sysconfig-base/language" action "write" lang ("ru_RU")) | ||
; установка переключателя | ; установка переключателя раскладки клавиатуры на Ctrl+Shift | ||
("/sysconfig-base/kbd" action "write" layout "ctrl_shift_toggle") | ("/sysconfig-base/kbd" action "write" layout "ctrl_shift_toggle") | ||
; установка часового пояса в Europe/Moscow, время в BIOS будет храниться в UTC | ; установка часового пояса в Europe/Moscow, время в BIOS будет храниться в UTC | ||
Строка 51: | Строка 69: | ||
("/evms/control" action "write" control open installer #t) | ("/evms/control" action "write" control open installer #t) | ||
("/evms/control" action "write" control update) | ("/evms/control" action "write" control update) | ||
("/evms/profiles/ | ("/evms/profiles/workstation" action apply commit #f clearall #t exclude ()) | ||
("/evms/control" action "write" control commit) | ("/evms/control" action "write" control commit) | ||
("/evms/control" action "write" control close) | ("/evms/control" action "write" control close) | ||
; | ; монтирование файловой системы и создание базовых директорий | ||
("pkg-init" action "write") | ; для p10 и ниже скрипт нужно переименовать в pkg-init | ||
; установка | ("pkg-install-init" action "write") | ||
; установка базовой системы и дополнительных групп пакетов из pkg-groups.tar, | |||
; которые указываются по именам через пробел в параметре lists | |||
("/pkg-install" action "write" lists "" auto #t) | ("/pkg-install" action "write" lists "" auto #t) | ||
("/preinstall" action "write") | ("/preinstall" action "write") | ||
; установка загрузчика GRUB в MBR на первый жёсткий диск | ; установка загрузчика GRUB в MBR на первый жёсткий диск без пароля | ||
("/grub" action "write" | ("/grub" action "write" device "/dev/sda" passwd #f passwd_1 "*" passwd_2 "*") | ||
; настройка сетевого интерфейса на получение адреса по DHCP | ; настройка сетевого интерфейса на получение адреса по DHCP | ||
("/net-eth" action "write" reset #t) | ("/net-eth" action "write" reset #t) | ||
("/net-eth" action "write" name "eth0" configuration "dhcp" default "" search "" dns "" computer_name "c245") | ("/net-eth" action "write" name "eth0" configuration "dhcp" default "" search "" dns "" computer_name "c245") | ||
; настройка сетевого интерфейса на статический IPv4 | |||
; ("/net-eth" action "write" name "eth0" configuration "static" default "192.168.1.1" search "localhost.com" dns "192.168.1.1" computer_name "c245" ipv "4" ipv_enabled #t) | |||
; ("/net-eth" action "add_iface_address" name "eth0" addip "192.168.1.2" addmask "24" ipv "4") | |||
("/net-eth" action "write" commit #t) | ("/net-eth" action "write" commit #t) | ||
; установка пароля суперпользователя root '123' | ; установка пароля суперпользователя root '123' | ||
Строка 73: | Строка 96: | ||
'''Внимание!''' | '''Внимание!''' | ||
При установке пакета alterator-net-domain | При установке пакета {{pkg|alterator-net-domain}} имя узла (''computer_name'') не должно содержать точку, иначе это может вызвать сбой установки. Подробности: {{altbug|27017}} | ||
<div id="vm-profile"></div> | <div id="vm-profile"></div> | ||
== Формат файла vm-profile.scm == | == Формат файла vm-profile.scm == | ||
Файл {{path|/var/cache/alterator/vm-profile.scm}} содержит сценарий на языке scheme, описывающий формат автоматической разбивки жёсткого диска. Рассмотрим его на примере: | Файл {{path|/var/cache/alterator/vm-profile.scm}} содержит сценарий на языке scheme, описывающий формат автоматической разбивки жёсткого диска. Рассмотрим его на примере: | ||
<source lang="lisp">( | <source lang="lisp">((workstation | ||
(title . "Setup for workstation") | (title . "Setup for workstation") | ||
(action . trivial) | (action . trivial) | ||
(actiondata ("swap" (size . | (actiondata ("swap" (size 1024000 . 1024000) (fsim . "SWAPFS") (methods plain)) | ||
("/" (size | ("/" (size 20971520 . 20971520 ) (fsim . "Ext2/3") (methods plain)) | ||
("/home" (size | ("/home" (size 1024000 . #t) (fsim . "Ext2/3") (methods plain)))) | ||
)</source> | |||
Обратите внимание: числовые константы ''не'' закавычиваются! Типичным следствием такой ошибки является оценка "требуется 0 MB". | Обратите внимание: числовые константы ''не'' закавычиваются! Типичным следствием такой ошибки является оценка "требуется 0 MB". | ||
Вы можете не указывать этот профиль вообще, возложив автоматическую разметку на профиль в составе дистрибутива. | Все числа указаны в виде 512-байтных блоков, поэтому чтобы получить размер в байтах, нужно умножить значения на 512. | ||
В примере указана разбивка: | |||
* подкачка (swap) — 512 МБ; | |||
* корневой раздел (/) — 10 ГБ; | |||
* /home - всё остальное, но не меньше 500 МБ. | |||
Вы можете не указывать этот профиль вообще, возложив автоматическую разметку на профиль в составе дистрибутива (куда он может попасть из сборочного профиля либо в результате выполнения скрипта из пакета вроде {{pkg|volumes-profile-*}} или {{pkg|installer-distro-*}}; вариант по умолчанию содержится в {{pkg|alterator-vm}}). | |||
См. тж. [http://lists.altlinux.org/pipermail/devel/2007-April/057886.html | Имя профиля (workstation) указывается в autoinstall.scm: | ||
<source lang="lisp">("/evms/profiles/workstation" action apply commit #f clearall #t exclude ())</source> | |||
См. тж.: | |||
* [http://lists.altlinux.org/pipermail/devel/2007-April/057886.html письмо, про <code>size</code>]; | |||
* <strike>[http://lists.altlinux.org/pipermail/devel/2007-April/138788.html письмо, про <code>methods</code>]</strike> -- судя по [http://git.altlinux.org/gears/a/alterator-vm.git alterator-vm.git], начиная от {{pkg|alterator-vm-0.4.1-alt8}}, помимо <code>(methods plain)</code> есть поддержка и <code>(methods raid plain)</code>. | |||
== Формат файла pkg-groups.tar == | == Формат файла pkg-groups.tar == | ||
Файл pkg-groups.tar представляет собой tar-архив с двумя подкаталогами: ''groups'' (содержащий описание групп программного обеспечения в файлах . | Файл pkg-groups.tar представляет собой tar-архив с двумя подкаталогами: ''groups'' (содержащий описание групп программного обеспечения в файлах .directory) и ''lists'' (содержащий файлы со списками пакетов для каждой группы). В подкаталоге lists находится скрытый файл ''.base'', содержащий список пакетов «базовой системы» (то есть те пакеты, которые устанавливаются в любом случае). Описание форматов указания групп описано в [[Alterator-pkg]]. | ||
Файл pkg-groups.tar проще всего взять с диска из каталога '''/Metadata/''' и доработать, если необходимо. | Файл pkg-groups.tar проще всего взять с диска из каталога '''/Metadata/''' и доработать, если необходимо. | ||
Строка 121: | Строка 149: | ||
tar cf pkg-groups.tar groups lists | tar cf pkg-groups.tar groups lists | ||
{{Attention|Учтите, что в качестве источника пакетов при установке выступает сам диск, поэтому указание не лежащих на нём пакетов приведёт к сбою установки. Если хотите добавить новые пакеты, пересоберите диск дистрибутива или используйте скрипты, выполняющиеся после установки.}} | |||
== Автоустановка в UEFI == | |||
В файле '''autoinstall.scm''' поменять установку загрузчика с ''/dev/vda'' на ''efi'': | |||
<source lang="lisp">("/grub" action "write" language ("ru_RU") device "efi" passwd "#t" passwd_1 "*" passwd_2 "*")</source> | |||
В файле '''vm-profile.scm''' добавить разбивку диска для ''/boot/efi'': | |||
<source lang="lisp">("/boot/efi" (size 1024000 . 1024000 ) (fsim . "FAT32") (methods plain))</source> | |||
{{Attention|Добавление записи для /boot/efi больше не требуется начиная с {{pkg|alterator-vm-0.4.2-alt1}} - установщик добавит её сам!}} | |||
=== Настройка установки по ipxe === | |||
Перейти в каталог {{path|/var/lib/tftpboot}}. | |||
Создать файл '''grub.cfg''' со следующим содержимым: | |||
<source lang="lisp"> | |||
set timeout=5 | |||
menuentry "Start autoinstall" { | |||
linuxefi /vmlinuz fastboot live lowmem ramdisk_size=871661 showopts ai curl=ftp://192.168.1.100/metadata/ automatic=method:cdrom quiet splash stagename=altinst automatic=method:nfs,network:dhcp,server:192.168.1.100,directory:/srv/public/netinst/mnt/ | |||
initrdefi /full.cz | |||
} | |||
</source> | |||
Скопировать файлы '''full.cz''' и '''vmlinuz''' из {{path|/srv/public/netinst/mnt/syslinux/alt0/}} в {{path|/var/lib/tftpboot/}}: | |||
<source lang="lisp"> | |||
# cp /srv/public/netinst/mnt/syslinux/alt0/{full.cz,vmlinuz} /var/lib/tftpboot/ | |||
</source> | |||
Извлечь файлы из rpm-пакета '''shim-signed-*.rpm''' и скопировать '''shimx64.efi''' в папку {{path|/var/lib/tftpboot}}: | |||
<source lang="lisp"> | |||
# rpm2cpio /srv/public/netinst/mnt/ALTLinux/RPMS.main/shim-signed-15-alt1.x86_64.rpm | cpio -idmv | |||
# cp usr/lib64/efi/shimx64.efi /var/lib/tftpboot/ | |||
</source> | |||
Перейти в папку {{path|/var/lib/tftpboot}} и скачать файл ''grubx64.efi'': | |||
<source lang="lisp"> | |||
# rpm2cpio /srv/public/netinst/mnt/ALTLinux/RPMS.main/grub-efi-2.02-alt29.x86_64 | cpio -idmv | |||
# cp usr/lib64/efi/grubx64.efi /var/lib/tftpboot/ | |||
</source> | |||
Для nfs-установки добавить в файл {{path|/etc/exports}} следующую строчку: | |||
<source lang="lisp">/srv/public/netinst/mnt -ro,insecure,no_subtree_check,fsid=1 *</source> | |||
Применить изменения: | |||
<source lang="lisp"># exportfs -r</source> | |||
В файле {{path|/etc/dhcp/dhcpd.conf}} строчку ''filename'' изменить на: | |||
<source lang="lisp">filename "shimx64.efi"</source> | |||
Перезапустить сервис ''dhcpd'': | |||
<source lang="lisp"># systemctl restart dhcpd</source> | |||
== alterator-postinstall == | |||
С апреля 2015 года появился пакет {{pkg|alterator-postinstall}}[https://github.com/sergelogvinov/alterator-postinstall.git], который позволяет выполнить в конце установки или при первом запуске команду или скрипт, скачиваемый по сети. Этот пакет должен устанавливаться вместе с другими пакетами, так как запускается во второй стадии установки. | |||
Пример использования: | |||
<source lang="Lisp">("/postinstall/firsttime" script "http://server/post.sh")</source> | |||
Уровни запуска (указываются после префикса {{cmd|/postinstall/}}: | |||
;laststate | |||
:Скрипт запускается при завершении Alterator (перед перезагрузкой после установки) | |||
;firsttime | |||
:Скрипт запускается во время первого запуска ОС | |||
Типы команд: | |||
<source lang="Lisp">("/postinstall/laststate" script "http://server/script.sh")</source> | |||
Скрипт скачивается с сервера и выполняется | |||
<source lang="Lisp">("/postinstall/laststate" run "command arg1 arg2")</source> | |||
Запуск команды и аргументов. Возможно указание перенаправления. | |||
=== Примечание по chroot === | |||
На уровне {{cmd|laststate}} для работы с установленной системой требуется указывать пути с {{path|$destdir}} или выполнять команды через {{cmd|run_chroot}}: | |||
post.sh | |||
<source lang="Bash">#!/bin/sh | |||
a= . install2-init-functions | |||
run_chroot sh -c "date > /root/STAMP_1" | |||
date > $destdir/root/STAMP_2</source> | |||
=== Описание работы === | |||
{{Note|Данный скрипт скачивается в первую стадию, (до перезагрузки)!}} | |||
{{Note|Скрипт срабатывает ТОЛЬКО после перезагрузки и ТОЛЬКО ОДИН РАЗ.}} | |||
{{Note|Если необходимо получить скрипт из сети, то в системе должна работать маршрутизация до того места, откуда он скачивается. | |||
*DNS-имя -> resolver | |||
}} | |||
При автоматической установке на шаге запуска скриптов во время первого запуска ОС, должен выполняться скрипт, расположенный на удаленном сервере. (Например, тот же {{path|<nowiki>("/postinstall/firsttime" script "http://server/post.sh")</nowiki>}}) | |||
Скрипт должен скопироваться с сервера во время установки в {{path|/etc/firsttime.d}}, выполняться он будет после перезагрузки, сеть ему (для скачивания скрипта) уже не нужна. | |||
Если сеть нужна и самому скрипту, он может её подождать, так как {{path|firsttime.service}} выполняется асинхронно с запуском других служб. | |||
Если необходимо скачивание и выполнение скрипта с удаленного сервера, то стоит попробовать сначала взглянуть на полную диагностику: | |||
*логи в {{path|/tmp}} инсталлятора | |||
*логи в {{path|/root/.intstall-log}} | |||
*содержимое каталога {{path|/etc/firsttime.d}} | |||
*наличие файла {{path|/etc/firsttime.flag}} до перезагрузки. | |||
----- | |||
По информации из {{altbug|37640}} | |||
== Профили == | |||
=== Альт Образование 9.2 === | |||
Все группы, диск разбивается на два раздела: 1 ГиБ — подкачка (swap), от 30 ГиБ и до конца диска — /.<br /> | |||
Часовой пояс: Europe/Moscow, пароли — 123 для ''root'' и для пользователя ''user''.<br /> | |||
Имя хоста: ''host-229''.<br /> | |||
{{path|autoinstall.scm}} | |||
<source lang="lisp">("/sysconfig-base/language" action "write" lang ("ru_RU")) | |||
("/sysconfig-base/kbd" action "write" layout "alt_sh_toggle") | |||
("/datetime-installer" action "write" commit #t name "RU" zone "Europe/Moscow" utc #t ctime "") | |||
("/evms/control" action "write" control open installer #t) | |||
("/evms/control" action "write" control update) | |||
("/evms/profiles/workstation" action apply commit #f clearall #t exclude ()) | |||
("/evms/control" action "write" control commit) | |||
("/evms/control" action "write" control close) | |||
("pkg-init" action "write") | |||
;;; Установить все группы, но требуется около 21 ГиБ | |||
;;; ("/pkg-install" action "write" lists "education/base education/preschool education/gradeschool education/highschool education/secondary_vocational education/university education/kde5 education/teacher education/server-apps-edu education/video-conferencing" auto #t) | |||
;;; Минимальная установка с графической средой (6,6 ГиБ) | |||
("/pkg-install" action "write" lists "" auto #t) | |||
("/preinstall" action "write") | |||
("/grub" action "write" device "/dev/sda" passwd #f passwd_1 "*" passwd_2 "*") | |||
("/net-eth" action "write" name "" ipv "4" configuration "dhcp" default "" search "" dns "" computer_name "host-229" ipv_enabled #t) | |||
("/net-eth" action "write" commit #t) | |||
("/root/change_password" passwd_auto "*" passwd_2 "123" passwd_1 "123") | |||
("/users/create_account" new_name "user" gecos "" allow_su #t auto #f passwd_auto "*" passwd_1 "123" passwd_2 "123" autologin #f)</source> | |||
{{path|vm-profile.scm}} | |||
<source lang="lisp">((workstation | |||
(title . "Setup for workstation") | |||
(action . trivial) | |||
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain)) | |||
("/" (size 62914560 . #t ) (fsim . "Ext2/3") (methods plain)) | |||
)))</source> | |||
== Советы и секреты == | |||
* Для отладки укажите в параметрах загрузки ядра {{term|instdebug}} | |||
* При установке пакетов могут возникать ошибки. Отследить их можно командой: <pre>grep E: /tmp/pkg-install.log</pre> | |||
== Ссылки == | |||
* [[vncinstall]] | |||
== Примечания == | |||
<references/> | |||
{{Category navigation|title=Программное обеспечение|category=Программное_обеспечение|sortkey={{SUBPAGENAME}}}} | |||
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 16:32, 27 ноября 2024
Дистрибутив ALT Linux можно установить в автоматическом режиме. Для этого нужно иметь установочный диск и доступный по сети каталог с несколькими файлами.
Данное руководство проверено на установке Альт Сервер 9.1 (FalcoRusticolus).
Требования к дистрибутиву
Для работы автоустановки в образ установщика необходимо включить пакет curl — в случае mkimage-profiles это цель use/install2/net или непосредственно:
@$(call add,INSTALL2_PACKAGES,curl)
Если используется постустановочная доводка, включите в базовые пакеты alterator-postinstall[1]:
@$(call add,BASE_PACKAGES,alterator-postinstall)
Запуск установки
Для включения режима автоматической установки ядру инсталятора операционной системы необходимо передать параметр загрузки ai (без значения). Сделать это можно в меню загрузки диска или в приглашении boot: при загрузке по сети. Автоустановка поддерживается в следующих режимах установки: http, ftp, cdrom, disk, nfs.
Для автоустановки требуется диск с дистрибутивом (в приводе или с сетевого ресурса) и набор из четырёх файлов, описывающих процесс установки. Все четыре файла нужно поместить в каталог, доступный по сети по протоколам HTTP или FTP, и указать путь к нему в параметрах загрузки curl.
Формат адреса в curl должен быть представлен в виде URL. Пример параметров загрузки:
ai curl=ftp://192.168.0.1/metadata/
При невозможности получения из указанного источника по сети, программа установки будет смотреть в следующих местах:
- на диске в каталоге /Metadata/
- в образе установщика в каталоге /usr/share/install2/metadata/
Содержимое каталога metadata
В каталоге metadata могут быть следующие файлы:
- autoinstall.scm — сценарий установки на языке scheme. Файл:Autoinstall.scm
- vm-profile.scm — схема разбивки жёсткого диска на языке Scheme. Файл:Vm-profile.scm
- pkg-groups.tar — архив, содержащий дополнительные к базовой системе группы пакетов (можно просто взять с диска из подкаталога Metadata/
cp /srv/public/netinst/mnt/Metadata/pkg-groups.tar /srv/public/metadata/
- install-scripts.tar — архив, содержащий дополнительные preinstall.d и postinstall.d скрипты. Скрипты нужно помещать внутрь архива в эти подкаталоги. Скрипты должны быть исполняемыми. Поддержка этого архива появилась в installer 1.11.3-alt1 (дистрибутивы версии 10.1).
Делаем «собственный» дистрибутив
При автоустановке по сети (например, через alterator-netinst) есть возможность править состав и скрипты автоустановки «вживую».
- Распакуйте содержимое установочного диска в /srv/public/netinst/mnt.
- Добавьте autoinstall.scm в каталог в /srv/public/netinst/mnt/Metadata.
- Можете добавить свои пакеты в состав пакетов в подкаталоге ALTLinux/RPMS.main. После этого запустите
genbasedir --topdir=/srv/public ALTLinux main
Формат файла autoinstall.scm
Файл autoinstall.scm представляет из себя командный скрипт для программы установки, написанный с использованием языка программирования scheme. Каждая строка скрипта — команда для модуля программы установки. Рассмотрим в качестве примера стандартный скрипт автоматической установки операционной системы:
("/evms/control" action "write" control close)
нужно добавлять строку:
("/remount-destination" action "write")
; установка языка операционной системы (ru_RU)
("/sysconfig-base/language" action "write" lang ("ru_RU"))
; установка переключателя раскладки клавиатуры на Ctrl+Shift
("/sysconfig-base/kbd" action "write" layout "ctrl_shift_toggle")
; установка часового пояса в Europe/Moscow, время в BIOS будет храниться в UTC
("/datetime-installer" action "write" commit #t name "RU" zone "Europe/Moscow" utc #t)
; автоматическая разбивка жёсткого диска
("/evms/control" action "write" control open installer #t)
("/evms/control" action "write" control update)
("/evms/profiles/workstation" action apply commit #f clearall #t exclude ())
("/evms/control" action "write" control commit)
("/evms/control" action "write" control close)
; монтирование файловой системы и создание базовых директорий
; для p10 и ниже скрипт нужно переименовать в pkg-init
("pkg-install-init" action "write")
; установка базовой системы и дополнительных групп пакетов из pkg-groups.tar,
; которые указываются по именам через пробел в параметре lists
("/pkg-install" action "write" lists "" auto #t)
("/preinstall" action "write")
; установка загрузчика GRUB в MBR на первый жёсткий диск без пароля
("/grub" action "write" device "/dev/sda" passwd #f passwd_1 "*" passwd_2 "*")
; настройка сетевого интерфейса на получение адреса по DHCP
("/net-eth" action "write" reset #t)
("/net-eth" action "write" name "eth0" configuration "dhcp" default "" search "" dns "" computer_name "c245")
; настройка сетевого интерфейса на статический IPv4
; ("/net-eth" action "write" name "eth0" configuration "static" default "192.168.1.1" search "localhost.com" dns "192.168.1.1" computer_name "c245" ipv "4" ipv_enabled #t)
; ("/net-eth" action "add_iface_address" name "eth0" addip "192.168.1.2" addmask "24" ipv "4")
("/net-eth" action "write" commit #t)
; установка пароля суперпользователя root '123'
("/root/change_password" language ("ru_RU") passwd_2 "123" passwd_1 "123")
; задание первого пользователя 'test' с паролем '123'
("/users/create_account" new_name "test" gecos "" allow_su #t auto #f passwd_1 "123" passwd_2 "123")
Внимание!
При установке пакета alterator-net-domain имя узла (computer_name) не должно содержать точку, иначе это может вызвать сбой установки. Подробности: altbug #27017
Формат файла vm-profile.scm
Файл /var/cache/alterator/vm-profile.scm содержит сценарий на языке scheme, описывающий формат автоматической разбивки жёсткого диска. Рассмотрим его на примере:
((workstation
(title . "Setup for workstation")
(action . trivial)
(actiondata ("swap" (size 1024000 . 1024000) (fsim . "SWAPFS") (methods plain))
("/" (size 20971520 . 20971520 ) (fsim . "Ext2/3") (methods plain))
("/home" (size 1024000 . #t) (fsim . "Ext2/3") (methods plain))))
)
Обратите внимание: числовые константы не закавычиваются! Типичным следствием такой ошибки является оценка "требуется 0 MB".
Все числа указаны в виде 512-байтных блоков, поэтому чтобы получить размер в байтах, нужно умножить значения на 512.
В примере указана разбивка:
- подкачка (swap) — 512 МБ;
- корневой раздел (/) — 10 ГБ;
- /home - всё остальное, но не меньше 500 МБ.
Вы можете не указывать этот профиль вообще, возложив автоматическую разметку на профиль в составе дистрибутива (куда он может попасть из сборочного профиля либо в результате выполнения скрипта из пакета вроде volumes-profile-* или installer-distro-*; вариант по умолчанию содержится в alterator-vm).
Имя профиля (workstation) указывается в autoinstall.scm:
("/evms/profiles/workstation" action apply commit #f clearall #t exclude ())
См. тж.:
- письмо, про
size
; письмо, про-- судя по alterator-vm.git, начиная от alterator-vm-0.4.1-alt8, помимоmethods
(methods plain)
есть поддержка и(methods raid plain)
.
Формат файла pkg-groups.tar
Файл pkg-groups.tar представляет собой tar-архив с двумя подкаталогами: groups (содержащий описание групп программного обеспечения в файлах .directory) и lists (содержащий файлы со списками пакетов для каждой группы). В подкаталоге lists находится скрытый файл .base, содержащий список пакетов «базовой системы» (то есть те пакеты, которые устанавливаются в любом случае). Описание форматов указания групп описано в Alterator-pkg.
Файл pkg-groups.tar проще всего взять с диска из каталога /Metadata/ и доработать, если необходимо.
Для изменения списка пакетов распакуйте архив командой
tar xf pkg-groups.tar
После этого перейдите в подкаталог lists и добавьте или измените файл группы. Имена пакетов указываются по одному в каждой строке. Имя файла используемой группы затем указывается через пробел в autoinstall.scm:
(("pkg-install") action "write" lists "group-1 group-2" auto #t)
где group-1 и group-2 — имена файлов со списками пакетов из подкаталога lists.
После исправлений упакуйте снова в архив командой:
tar cf pkg-groups.tar groups lists
Автоустановка в UEFI
В файле autoinstall.scm поменять установку загрузчика с /dev/vda на efi:
("/grub" action "write" language ("ru_RU") device "efi" passwd "#t" passwd_1 "*" passwd_2 "*")
В файле vm-profile.scm добавить разбивку диска для /boot/efi:
("/boot/efi" (size 1024000 . 1024000 ) (fsim . "FAT32") (methods plain))
Настройка установки по ipxe
Перейти в каталог /var/lib/tftpboot.
Создать файл grub.cfg со следующим содержимым:
set timeout=5
menuentry "Start autoinstall" {
linuxefi /vmlinuz fastboot live lowmem ramdisk_size=871661 showopts ai curl=ftp://192.168.1.100/metadata/ automatic=method:cdrom quiet splash stagename=altinst automatic=method:nfs,network:dhcp,server:192.168.1.100,directory:/srv/public/netinst/mnt/
initrdefi /full.cz
}
Скопировать файлы full.cz и vmlinuz из /srv/public/netinst/mnt/syslinux/alt0/ в /var/lib/tftpboot/:
# cp /srv/public/netinst/mnt/syslinux/alt0/{full.cz,vmlinuz} /var/lib/tftpboot/
Извлечь файлы из rpm-пакета shim-signed-*.rpm и скопировать shimx64.efi в папку /var/lib/tftpboot:
# rpm2cpio /srv/public/netinst/mnt/ALTLinux/RPMS.main/shim-signed-15-alt1.x86_64.rpm | cpio -idmv
# cp usr/lib64/efi/shimx64.efi /var/lib/tftpboot/
Перейти в папку /var/lib/tftpboot и скачать файл grubx64.efi:
# rpm2cpio /srv/public/netinst/mnt/ALTLinux/RPMS.main/grub-efi-2.02-alt29.x86_64 | cpio -idmv
# cp usr/lib64/efi/grubx64.efi /var/lib/tftpboot/
Для nfs-установки добавить в файл /etc/exports следующую строчку:
/srv/public/netinst/mnt -ro,insecure,no_subtree_check,fsid=1 *
Применить изменения:
# exportfs -r
В файле /etc/dhcp/dhcpd.conf строчку filename изменить на:
filename "shimx64.efi"
Перезапустить сервис dhcpd:
# systemctl restart dhcpd
alterator-postinstall
С апреля 2015 года появился пакет alterator-postinstall[1], который позволяет выполнить в конце установки или при первом запуске команду или скрипт, скачиваемый по сети. Этот пакет должен устанавливаться вместе с другими пакетами, так как запускается во второй стадии установки.
Пример использования:
("/postinstall/firsttime" script "http://server/post.sh")
Уровни запуска (указываются после префикса /postinstall/:
- laststate
- Скрипт запускается при завершении Alterator (перед перезагрузкой после установки)
- firsttime
- Скрипт запускается во время первого запуска ОС
Типы команд:
("/postinstall/laststate" script "http://server/script.sh")
Скрипт скачивается с сервера и выполняется
("/postinstall/laststate" run "command arg1 arg2")
Запуск команды и аргументов. Возможно указание перенаправления.
Примечание по chroot
На уровне laststate для работы с установленной системой требуется указывать пути с $destdir или выполнять команды через run_chroot: post.sh
#!/bin/sh
a= . install2-init-functions
run_chroot sh -c "date > /root/STAMP_1"
date > $destdir/root/STAMP_2
Описание работы
- DNS-имя -> resolver
При автоматической установке на шаге запуска скриптов во время первого запуска ОС, должен выполняться скрипт, расположенный на удаленном сервере. (Например, тот же ("/postinstall/firsttime" script "http://server/post.sh"))
Скрипт должен скопироваться с сервера во время установки в /etc/firsttime.d, выполняться он будет после перезагрузки, сеть ему (для скачивания скрипта) уже не нужна.
Если сеть нужна и самому скрипту, он может её подождать, так как firsttime.service выполняется асинхронно с запуском других служб.
Если необходимо скачивание и выполнение скрипта с удаленного сервера, то стоит попробовать сначала взглянуть на полную диагностику:
- логи в /tmp инсталлятора
- логи в /root/.intstall-log
- содержимое каталога /etc/firsttime.d
- наличие файла /etc/firsttime.flag до перезагрузки.
По информации из altbug #37640
Профили
Альт Образование 9.2
Все группы, диск разбивается на два раздела: 1 ГиБ — подкачка (swap), от 30 ГиБ и до конца диска — /.
Часовой пояс: Europe/Moscow, пароли — 123 для root и для пользователя user.
Имя хоста: host-229.
autoinstall.scm
("/sysconfig-base/language" action "write" lang ("ru_RU"))
("/sysconfig-base/kbd" action "write" layout "alt_sh_toggle")
("/datetime-installer" action "write" commit #t name "RU" zone "Europe/Moscow" utc #t ctime "")
("/evms/control" action "write" control open installer #t)
("/evms/control" action "write" control update)
("/evms/profiles/workstation" action apply commit #f clearall #t exclude ())
("/evms/control" action "write" control commit)
("/evms/control" action "write" control close)
("pkg-init" action "write")
;;; Установить все группы, но требуется около 21 ГиБ
;;; ("/pkg-install" action "write" lists "education/base education/preschool education/gradeschool education/highschool education/secondary_vocational education/university education/kde5 education/teacher education/server-apps-edu education/video-conferencing" auto #t)
;;; Минимальная установка с графической средой (6,6 ГиБ)
("/pkg-install" action "write" lists "" auto #t)
("/preinstall" action "write")
("/grub" action "write" device "/dev/sda" passwd #f passwd_1 "*" passwd_2 "*")
("/net-eth" action "write" name "" ipv "4" configuration "dhcp" default "" search "" dns "" computer_name "host-229" ipv_enabled #t)
("/net-eth" action "write" commit #t)
("/root/change_password" passwd_auto "*" passwd_2 "123" passwd_1 "123")
("/users/create_account" new_name "user" gecos "" allow_su #t auto #f passwd_auto "*" passwd_1 "123" passwd_2 "123" autologin #f)
vm-profile.scm
((workstation
(title . "Setup for workstation")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain))
("/" (size 62914560 . #t ) (fsim . "Ext2/3") (methods plain))
)))
Советы и секреты
- Для отладки укажите в параметрах загрузки ядра instdebug
- При установке пакетов могут возникать ошибки. Отследить их можно командой:
grep E: /tmp/pkg-install.log