Installer/common/altboot: различия между версиями

Материал из ALT Linux Wiki
(fixed)
(не показано 68 промежуточных версий этого же участника)
Строка 1: Строка 1:
{{stub}}
=bootchain+altboot=
=bootchain+altboot=


'''bootchain+altboot''' пришли на смену '''propagator''''у в [[P11|p11]], сделав возможным использовать run-time и все фичи [[Make-initrd|make-initrd]] не только в установленной ОС Альт, но теперь и во всех установочных и «живых» носителях (ISO-образах с универсальной загрузкой), содержащих сквоши второй стадии '''altinst''', '''live''' или '''rescue'''.
'''bootchain+altboot''' пришли на смену '''propagator''''у в [[P11|p11]], сделав возможным использовать run-time и фичи [[Make-initrd|make-initrd]] в установочных и «живых» носителях (в ISO-образах с универсальной загрузкой).


'''bootchain''' — форк и дальнейшее развитие [https://github.com/osboot/make-initrd/tree/master/features/pipeline pipeline], фичи [[Make-initrd|make-initrd]], предлагающей «пошаговый» принцип загрузки.
'''bootchain''' — форк и дальнейшее развитие [https://github.com/osboot/make-initrd/tree/master/features/pipeline pipeline], фичи [[Make-initrd|make-initrd]], предлагающей «пошаговый» принцип загрузки.


'''altboot''' (альтернативная загрузка) — дистронезависимая система загрузки, построенная поверх bootchain, работающая как часть run-time [[Make-initrd|make-initrd]], альтернатива [[Installer/common/propagator|propagator]] с [[Make-initrd-propagator|make-initrd-propagator]] в дистрибутивах ОС Альт на «одиннадцатой платформе», обеспечивающая дополнительный функционал, слой совместимости с установщиком, [[Alterator-netinst|alterator-netinst]] и более гибкие возможности дальнейшего расширения.
'''altboot''' (альтернативная загрузка) — дистронезависимая система загрузки, построенная поверх bootchain, работающая как часть run-time [[Make-initrd|make-initrd]], альтернатива [[Installer/common/propagator|propagator]] с [[Make-initrd-propagator|make-initrd-propagator]] в дистрибутивах ОС Альт на «[[P11|одиннадцатой платформе]]», обеспечивающая дополнительный функционал, слой совместимости с установщиком, [[Alterator-netinst|alterator-netinst]] и более гибкие возможности дальнейшего расширения.
 
{{Note|Здесь приведено краткое описание '''bootchain+altboot'''. Скачать полное руководство к версии '''0.1.5-alt23''' можно тут — [[Файл:От пропагатора к altboot.pdf]].}}
Важно понимать, что основная концепция [[Make-initrd|make-initrd]] — event-driven, т.е. событийно ориентированная модель: обнаружился диск — выполнился обработчик, тогда как в [[Installer/common/propagator|пропагаторе]] было принято сканировать и ждать жёстко закодированное время. Две концепции противоположны, но '''altboot''' позволяет их совместить так, что теперь в установочных и «живых» дисках загрузка выполняется run-time'ом [[Make-initrd|make-initrd]], а не пропагатором.
 
=Быстрое знакомство=
 
Теперь для загрузки достаточно подключить [[#Модули bootchain+altboot|необходимые модули]] '''bootchain''' вместо '''propagator''' + '''make-initrd-propagator''' и добавить к привычным всего пару опций в /proc/cmdline:


{{Attention|Здесь можно скачать полное руководство к версии '''0.1.5-alt23''': [[Файл:От пропагатора к altboot.pdf]]. Ниже приведено только краткое описание для тех, кто уже знаком с загрузкой через [[Installer/common/propagator|propagator]] и [[Make-initrd-propagator|init-bottom]].}}
'''root=bootchain bootchain=fg,altboot''' automatic=… [ramdisk_size=…] [lowmem] [stagename={altinst|live|rescue}]


=Модули bootchain+altboot=
Для [[#Параметры сетевой загрузки|сетевой загрузки]] необходимо также добавлять параметр '''ip=…''' (рекомендуется '''ip=dhcp4''').


Разделение на модули (подпакеты) позволяет добиться оптимального наполнения initramfs только необходимым для загрузки содержимым. Так, для загрузки по протоколу NFS достаточно установить пакет '''make-initrd-bootchain-nfs''' и задействовать фичу '''bootchain-nfs''', всё остальное попадёт в initramfs по зависимостям. Для создания универсального образа stage1 достаточно установки одного мета-пакета '''make-initrd-bootchain'''. Пример:
{{Attention|В '''altboot''' нет собственных диалогов для настройки сети, они есть в прошивках iPXE. Сеть [https://github.com/osboot/make-initrd/tree/master/features/network конфигурируется] только через /proc/cmdline фичей make-initrd «[https://github.com/osboot/make-initrd/tree/master/features/network network]». Скрипты и диалоги '''altboot''' пока не рассчитаны на работу с IPv6, как и установщика ОС Альт, хотя фича make-initrd «[https://github.com/osboot/make-initrd/tree/master/features/network network]» понимает IPv6. '''Propagator''' умел конфигурировать ADSL-соединение, фича make-initrd «[https://github.com/osboot/make-initrd/tree/master/features/network network]» не предназначена для настройки ADSL/PPPoE.}}
[[#Конфигурация|Конфигурирование]] '''bootchain''' и '''altboot''' выполняется через файл '''/etc/sysconfig/bootchain''', используемые фичи перечисляются в '''/etc/initrd.mk''' перед созданием образа stage1 командой '''make-initrd'''. [[#Модули bootchain+altboot|Разделение на модули]] (подпакеты) позволяет добиться оптимального наполнения initramfs только необходимым для загрузки содержимым. Так, для загрузки по протоколу NFS достаточно установить пакет '''make-initrd-bootchain-nfs''' и задействовать фичу '''bootchain-nfs''', всё остальное попадёт в initramfs по зависимостям. Например:


<pre>
<pre>
Строка 19: Строка 25:
echo "FEATURES += bootchain-nfs" >>/etc/initrd.mk
echo "FEATURES += bootchain-nfs" >>/etc/initrd.mk
make-initrd
make-initrd
</pre>Список модулей:
</pre> Для создания универсального образа stage1 достаточно установки одного мета-пакета '''make-initrd-bootchain'''. См. детали в разделе [[#Модули bootchain+altboot|Модули bootchain+altboot]].


* '''make-initrd-bootchain''' — мета-пакет, собирающий воедино все существующие модули bootchain, он же исходный SRPM;
Параметр '''automatic''' обрёл несколько новых аргументов, утратив при этом аргументы, связанные с настройкой сети, типа «'''network''':...» (они игнорируются, т.к. сеть теперь настраивает сам make-initrd). Например, можно задавать пользовательский таймаут или дополнительные опции монтирования. См. детали в разделе [[#Аргументы параметра automatic|Аргументы параметра automatic]]. Немного поменялась и логика работы со спецификациями дисков: теперь спецификация загрузочного диска должна однозначно указывать только на один диск. Если спецификации соответствует больше или меньше носителей, '''altboot''' выведет диалог выбора накопителя, тогда как '''propagator''' мог загрузиться с первого попавшегося.
* '''make-initrd-bootchain-core''' — базовый функционал, включая шаги debug, fg, mountfs, noop, noretry, overlayfs, retry и rootfs;
 
* '''make-initrd-bootchain-getimage''' — обеспечивает метод загрузки образов по сети утилитой wget по протоколам HTTP и FTP;
=Методы загрузки altboot=
* '''make-initrd-bootchain-waitdev''' — обеспечивает метод ожидания локального носителя по заданной спецификации;
* '''make-initrd-bootchain-interactive''' — обеспечивает интерактивное взаимодействие, предоставляет диалоговые виджеты;
* '''make-initrd-bootchain-waitnet''' — обеспечивает ожидание сети и экспорт сетевых настроек в stage2, используется всеми сетевыми методами загрузки (ftp, http, nfs, cifs) и является временным кодом;
* '''make-initrd-bootchain-altboot''' — весь общий функционал пропагатора и шаг, транслирующий его аргументы;
* '''make-initrd-bootchain-localdev''' — обеспечивает методы загрузки disk/cdrom, установку дополнительных модулей ядра;
* '''make-initrd-bootchain-liverw''' — обеспечивает дополнительный функционал для работы с R/W-сеансами LiveCD и Rescue;
* '''make-initrd-bootchain-nfs''' — обеспечивает метод загрузки с сервера NFS и поддержку read-only слоёв LiveCD (сквошей);
* '''make-initrd-bootchain-cifs''' — обеспечивает метод загрузки с сервера SAMBA и поддержку read-only слоёв LiveCD (сквошей);
* '''make-initrd-bootchain-doc''' — документация и набор тестов.


=Быстрое знакомство=
В '''altboot''' практически все параметры любого метода загрузки имеют свои значения по умолчанию, т.е. для загрузки достаточно указать через /proc/cmdline ('''automatic=method:…''') или выбрать средствами диалога только нужный метод загрузки. При загрузке с обычной Linux rootfs, а не с универсального загрузочного носителя, напротив, метод не указывается (method="").


Теперь для загрузки достаточно добавить к привычным всего пару опций в /proc/cmdline:
[[Файл:Altboot main menu.png|обрамить|справа|альт=Выбор метода загрузки|Главное меню altboot]]


'''root=bootchain bootchain=fg,altboot''' automatic=… [ramdisk_size=…] [lowmem] [stagename={altinst|live|rescue}]
* '''nfs''' — указанный ISO-образ либо каталог монтируется с сервера NFS;
* '''ftp''' — образ скачивается целиком с сервера по протоколу FTP;
* '''http''' — образ скачивается целиком с сервера по протоколу HTTP;
* '''cifs''' — указанный ISO-образ либо каталог монтируется с сервера SAMBA;
* '''cdrom''' — загрузка непосредственно с локального носителя в формате ISO-9660 Hybrid с возможностью [[#Постоянное хранилище сеансов LiveCD|работы с R/W-слоем]];
* '''disk''' — загрузка с локального диска, раздела либо лежащего на нём ISO-образа.


Параметр '''automatic''' обрёл несколько новых аргументов, утратив при этом аргументы, связанные с настройкой сети, типа «'''network''':...» (они игнорируются). Например, можно задавать пользовательский таймаут: «'''timeout:120'''» или указывать тип загружаемого диска для методов http/ftp: «'''type:iso'''».
Методы загрузки '''http'''/'''ftp''' пока что не предназначены для [[#Read-only слои LiveCD|работы с read-only слоями LiveCD]], но если кому-то это нужно, добавить их поддержку не очень сложно. Существует два режима работы с этими методами — старый вариант, когда путь на сервере рассматривается как каталог, из которого загружается файл со сквошом второй стадии, и новый вариант, когда путь на сервере рассматривается как нераспакованный ISO-образ, загружаемый целиком вместо сквоша. Для работы с нераспакованным ISO-образом необходимо убрать из /proc/cmdline параметр загрузки '''ramdisk_size=…''' и добавить к параметру '''automatic=…,type:iso,…'''


Конфигурирование '''bootchain''' и '''altboot''' выполняется через файл '''/etc/sysconfig/bootchain''', используемые фичи перечисляются в '''/etc/initrd.mk''' перед созданием образа stage1 командой '''make-initrd'''.
При использовании «локальных» методов загрузки ('''disk''' или '''cdrom'''), становится доступной возможность обновлять «на лету» образ initramfs с дополнительного внешнего носителя, что в частности позволяет догружать недостающие модули ядра и правила udev. За это отвечает параметр '''updatemodules''' (см. детали в полном руководстве).


=Параметры сетевой загрузки=
Оба метода имеют небольшие отличия от исходной реализации в пропагаторе. Если гибридный ISO-образ записан на R/W-носитель (USB-флешь, MMC-карту, итд), то метод загрузки '''cdrom''' выполняет загрузку не с диска, а с первого раздела, что позволяет, при необходимости, создать нужный [[#Постоянное хранилище сеансов LiveCD|R/W-раздел для работы с сеансами LiveCD]]. Метод '''disk''' позволяет организовать загрузку не только с диска или раздела, но и с лежащего на нём ISO-образа, а это можно использовать для загрузки разных дистрибутивов, размещённых на одном носителе.


{{Attention|В '''altboot''' нет диалогов для настройки сети, она [https://github.com/osboot/make-initrd/tree/master/features/network конфигурируется] только через /proc/cmdline фичей make-initrd «[https://github.com/osboot/make-initrd/tree/master/features/network network]». Скрипты и диалоги '''altboot''' пока не рассчитаны на работу с IPv6, как и установщика ОС Альт, хотя фича make-initrd «[https://github.com/osboot/make-initrd/tree/master/features/network network]» понимает IPv6. '''Propagator''' умел конфигурировать ADSL-соединение, фича make-initrd «[https://github.com/osboot/make-initrd/tree/master/features/network network]» не предназначена для настройки ADSL/PPPoE.}}
=Параметры загрузки=


Для работы сетевой загрузки необходимо добавлять параметр '''ip=…''', он нужен make-initrd для настройки сети: '''altboot''' полагается на то, что сеть будет настроена кем-то и ожидает появления сети при использовании сетевых методов загрузки, таких, как '''nfs''' или '''http'''. Например, '''ip=dhcp''' заставит make-initrd поднять сеть и автоматически её настроить на всех имеющихся сетевых интерфейсах по протоколам DHCPv4 и DHCPv6.
==Параметры сетевой загрузки==


Для дистрибутивов ОС Альт лучше задавать через /proc/cmdline параметр '''ip=dhcp4''', поскольку установщик не работает с IPv6, а отсутсвие в сети двух типов DHCP-серверов увеличивают время настройки секунд на 20 для каждого интерфейса.
Для работы сетевой загрузки необходимо добавлять параметр '''ip=''' — он нужен make-initrd для настройки сети: '''altboot''' полагается на то, что сеть будет настроена кем-то и ожидает появления сети при использовании сетевых [[#Методы загрузки altboot|методов загрузки]], таких, как '''nfs''' или '''http'''. Например, '''ip=dhcp''' заставит make-initrd поднять сеть и автоматически её настроить на всех имеющихся сетевых интерфейсах по протоколам DHCPv4 и DHCPv6.


В конфигурациях с несколькими сетевыми интерфейсами можно задавать сразу две опции: '''ifname=bootif0:<macaddr> ip=bootif0:dhcp4''' — это заставит фичу make-initrd «[https://github.com/osboot/make-initrd/tree/master/features/network network]» переименовать интерфейс с указанным MAC-адресом в «bootif0» и поднять сеть только на нём и только по протоколу DHCPv4. В сценариях сетевой загрузки по iPXE с несколькими сетевыми картами прошивка уже выбрала ту, на которой есть несущая, и которая настроилась по DHCP, именно её MAC-адрес передаётся такой записью в iPXE-скрипте: '''ifname=bootif0:${net/mac}'''.
Для дистрибутивов ОС Альт лучше задавать через /proc/cmdline параметр '''ip=dhcp4''', поскольку установщик не работает с IPv6, а отсутсвие в сети двух типов DHCP-серверов увеличивает время настройки секунд на 20 для каждого интерфейса.


=ramdisk_size, automatic=type:iso и lowmem=
В конфигурациях с несколькими сетевыми интерфейсами можно задавать сразу два параметра: '''ifname=bootif0:<macaddr> ip=bootif0:dhcp4''' — это заставит фичу make-initrd «[https://github.com/osboot/make-initrd/tree/master/features/network network]» переименовать интерфейс с указанным MAC-адресом в «bootif0» и поднять сеть только на нём и только по протоколу DHCPv4. В сценариях сетевой загрузки по iPXE с несколькими сетевыми картами прошивка уже выбрала ту, на которой есть несущая, и которая получила настройки через DHCP, именно её MAC-адрес передаётся такой записью в iPXE-скрипте: '''ifname=bootif0:${net/mac}'''.
 
==ramdisk_size, automatic=type:iso и lowmem==


Ядерный параметр '''ramdisk_size=…''' стал необязательным: начиная с версии 0.1.5-alt17 образы загружаются в TMPFS, если параметр не указан. Новая логика работы некоторых параметров для методов '''http''' и '''ftp''':
Ядерный параметр '''ramdisk_size=…''' стал необязательным: начиная с версии 0.1.5-alt17 образы загружаются в TMPFS, если параметр не указан. Новая логика работы некоторых параметров для методов '''http''' и '''ftp''':


* Если указан '''ramdisk_size=…''', сквош грузится в RAM-диск;
* Если указан '''ramdisk_size=…''', на сервере ожидается каталог, из которого сквош грузится в RAM-диск;
* При наличии '''automatic=type:iso,...''', ISO-образ грузится в TMPFS;
* При наличии '''automatic=type:iso,...''', нераспакованный ISO-образ грузится в TMPFS;
* Если '''ramdisk_size=...''' не указан, сквош грузится в TMPFS.
* Иначе сквош грузится в TMPFS.


При этом параметр '''lowmem''' не имеет значения. Для других методов:
При этом параметр '''lowmem''' не имеет значения. Для других методов:


* Если указан '''lowmem''', ничего не грузится, монтируется сквош;
* Если указаны '''lowmem''' или '''live''', ничего в ОЗУ не грузится, монтируется сквош;
* Если указан '''ramdisk_size=...''', сквош грузится в RAM-диск;
* Если указан '''ramdisk_size=...''', сквош грузится в RAM-диск;
* Если '''ramdisk_size=...''' не указан, сквош грузится в TMPFS.
* Иначе сквош грузится в TMPFS.
 
=Методы загрузки altboot=
 
В '''altboot''' практически все параметры любого метода загрузки имеют свои значения по умолчанию, т.е. для загрузки достаточно указать в /proc/cmdline или выбрать средствами диалога только нужный метод загрузки. При загрузке с обычной Linux rootfs, а не с универсального загрузочного носителя, напротив, метод не указывается (method="").
 
* '''nfs''' — указанный ISO-образ либо каталог монтируется с сервера NFS;
* '''ftp''' — образ скачивается целиком с сервера по протоколу FTP;
* '''http''' — образ скачивается целиком с сервера по протоколу HTTP;
* '''cifs''' — указанный ISO-образ либо каталог монтируется с сервера SAMBA;
* '''cdrom''' — загрузка непосредственно с локального носителя в формате ISO-9660 Hybrid с возможностью работы с R/W-слоем;
* '''disk''' — загрузка с локального диска, раздела либо лежащего на нём ISO-образа.


Методы загрузки '''http'''/'''ftp''' пока что не предназначены для работы с read-only слоями LiveCD, но если кому-то это нужно, добавить их поддержку не очень сложно. Существует два режима работы с этими методами — старый вариант, когда путь на сервере рассматривается как каталог, из которого загружается файл со сквошом второй стадии, и новый вариант, когда путь на сервере рассматривается как ISO-образ, загружаемый целиком вместо сквоша. Для работы с новыми методами необходимо убрать из /proc/cmdline параметр загрузки '''ramdisk_size=…''' и добавить к параметру '''automatic=…,type:iso,…'''
'''altboot''' ориентируется не столько на наличие парметра '''ramdisk_size=…''', сколько на наличие созданного ядром по этому параметру RAM-диска, при этом сравнивая его фактический размер с необходимым для загрузки сквоша. Даже при наличии данного параметра ядро не всегда создаёт RAM-диски. Например, некоторые [[Realtime]]-ядра не создают.
 
При использовании «локальных» методов загрузки ('''disk''' или '''cdrom'''), становится доступной возможность обновлять «на лету» образ initramfs с дополнительного внешнего носителя, что в частности позволяет догружать недостающие модули ядра и правила udev. За это отвечает параметр '''updatemodules''' (детали есть в полном руководстве).
 
Оба метода имеют небольшие отличия от исходной реализации в пропагаторе. Если гибридный ISO-образ записан на R/W-носитель (USB-флешь, MMC-карту, итд), то метод загрузки '''cdrom''' выполняет загрузку не с диска, а с первого раздела, что позволяет, при необходимости, создать нужный R/W-раздел для работы с сеансами LiveCD. Метод '''disk''' позволяет организовать загрузку не только с диска или раздела, но и с лежащего на нём ISO-образа, а это можно использовать для загрузки разных дистрибутивов, размещённых на одном носителе.
 
=Параметры загрузки=


==Поддерживаемые altboot и пропагатором==
==Поддерживаемые altboot и пропагатором==


* '''automatic''' — основной накопитель аргументов пропагатора и altboot;
* '''automatic''' — основной накопитель [[#Аргументы параметра automatic|аргументов пропагатора и altboot]];
* '''hash''' — хэш-сумма сквоша второй стадии загрузки, посчитанная по алгоритму SHA-256 (в altboot можно использовать и другие варианты хэша с некоторыми синтаксическими добавками);
* '''hash''' — хэш-сумма сквоша второй стадии загрузки, посчитанная по алгоритму SHA-256 (в altboot можно использовать и другие варианты хэша с некоторыми синтаксическими добавками);
* '''live''' — (флаг) помечает ISO-образ как LiveCD, что предписывает всегда использовать режим экономии памяти;
* '''live''' — (флаг) помечает ISO-образ как LiveCD, что предписывает всегда использовать режим экономии памяти;
* '''live_rw''' — (флаг) предписывает использовать R/W-раздел для сеансов LiveCD/Rescue;
* '''live_rw''' — (флаг) предписывает использовать [[#Постоянное хранилище сеансов LiveCD|R/W-раздел для сеансов LiveCD/Rescue]];
* '''lowmem''' — (флаг) включает режим экономии памяти, монтируя образ непосредственно с носителя без предварительной загрузки в ОЗУ;
* '''lowmem''' — (флаг) включает режим экономии памяти, монтируя образ непосредственно с носителя без предварительной загрузки в ОЗУ;
* '''profile''' — профиль сетевой загрузки с поддержкой слоёв LiveCD (в altboot по умолчанию profile=default);
* '''profile''' — профиль сетевой загрузки с поддержкой [[#Read-only слои LiveCD|Read-only слоёв LiveCD]] (в altboot по умолчанию profile=default);
* '''ramdisk_size''' — (целое, ядерный) число килобайт, выделяемых ядром для устройств /dev/ram<N>, в который будет загружаться сквош второй стадии (в altboot он стал необязательным);
* '''ramdisk_size''' — (целое, ядерный) число килобайт, выделяемых ядром для устройств /dev/ram<N>, в один из которых будет загружаться сквош второй стадии (в altboot этот параметр стал необязательным);
* '''rescue''' — (флаг) помечает ISO-образ как Rescue LiveCD, что влияет только на вывод финальных сообщений;
* '''rescue''' — (флаг) помечает ISO-образ как Rescue LiveCD, что влияет только на вывод финальных сообщений;
* '''stagename''' — название файла сквоша с rootfs второй стадии загрузки, по факту только: altinst, rescue, live;
* '''stagename''' — название файла сквоша с rootfs второй стадии загрузки, по факту только: «altinst», «rescue» и «live»;
* '''updatemodules''' — в пропагаторе ранее использовался совместно с дискетами, в altboot используется для обновления «на лету» файловой системы в stage1, что в частности позволяет подгрузить недостающие модули ядра и правила udev.
* '''updatemodules''' — в пропагаторе ранее использовался совместно с дискетами, пока они не перестали поддерживаться, в altboot используется для обновления «на лету» файловой системы в stage1, что в частности позволяет подгрузить недостающие модули ядра и правила udev.


==Не реализованные в altboot==
==Нереализованные в altboot==


* '''propagator-debug''' — давал промежуточный shell перед переходом из stage1 в stage2;
* '''propagator-debug''' — давал промежуточный shell перед переходом из stage1 в stage2, в make-initd есть свои аналоги, реализующие данный функционал;
* '''testing''' — «мёртвый» параметр, реально ни на что не влиял;
* '''testing''' — «мёртвый» параметр, реально ни на что не влиял, в последних версиях пропагатора перенаправлял диагностику на /dev/ttyprintk;


==Новые параметры в altboot==
==Новые параметры в altboot==


* '''bc_debug''' — (флаг) включает режим расширенной диагностики и копирует журнал в stage2;
* '''bc_debug''' — (флаг) включает режим расширенной диагностики и копирует журнал в stage2;
* '''bc_test''' — название выполняемого тесткейса, копирует его с журналом в stage2;
* '''bc_test''' — название выполняемого тест-кейса, копирует его вместе с журналом в stage2;
* '''bootchain''' — список шагов bootchain через запятую (для совместимости с пропагатором д.б. «fg,altboot»);
* '''bootchain''' — список «шагов» bootchain через запятую (для совместимости с пропагатором д.б. «fg,altboot»);
* '''cifsopts''' — дополнительные опции монтирования SMB-ресурсов, используется «шагами» cifs;
* '''cifsopts''' — дополнительные опции монтирования SMB-ресурсов, используемые всеми «шагами» cifs;
* '''console''' — (ядерный) определяет консоль для вывода сообщений, влияет на настройку диалогов;
* '''console''' — (ядерный) определяет консоль для вывода сообщений, в altboot влияет на настройку диалогов;
* '''curlopts''' — (внешний) дополнительные опции curl, используемые «шагом» download;
* '''curlopts''' — (внешний) дополнительные опции curl, используемые всеми «шагами» download;
* '''noaskuser''' — отключает диалоги ввода, как и некоторые значения console;
* '''noaskuser''' — (флаг, как и некоторые значения параметра console) отключает диалоги ввода;
* '''nolines''' — отключает вывод символов псевдографики при выводе диалогов;
* '''nolines''' — (флаг) запрещает вывод символов псевдографики в диалогах ввода/вывода;
* '''nfsopts''' — дополнительные опции монтирования NFS-каталогов, используется «шагами» nfs;
* '''nfsopts''' — дополнительные опции монтирования NFS-каталогов, используемые всеми «шагами» nfs;
* '''overlayroot''' — обеспечивает простой синтаксис для закрытия на запись имеющейся rootfs.
* '''overlayroot''' — обеспечивает простой синтаксис для закрытия на запись имеющейся rootfs.


==Параметры bootchain, используемы внутренне altboot==
==Параметры bootchain, используемы внутренне «шагами» altboot==


* '''altboot_checksum'''[] — параметры «шагов» checksum;
Не используются в явном виде в режиме совместимости с [[Installer/common/propagator|пропагатором]], возможно вам это конфигурировать не придётся:
* '''altboot_cifs'''[] — параметры «шагов» cifs;
 
* '''altboot_copyfile'''[] — параметры «шагов» copyfile;
* '''altboot_checksum'''[] — параметры всех «шагов» checksum: "[<hashprog>:]<hash>[:<filename>]";
* '''altboot_download'''[] — параметры «шагов» download;
* '''altboot_cifs'''[] — параметры всех «шагов» cifs: server, directory, domain, user, pass, timeout, options, overlays;
* '''altboot_liveboot'''[] — параметры «шагов» liveboot;
* '''altboot_copyfile'''[] — параметры всех «шагов» copyfile: src, dst, size;
* '''altboot_localdev'''[] — параметры «шагов» localdev;
* '''altboot_download'''[] — параметры всех «шагов» download: method, to, url, server, directory, user, pass, imgsize, timeout;
* '''altboot_nfs'''[] — параметры «шагов» nfs;
* '''altboot_liveboot'''[] — параметры всех «шагов» liveboot: method, stagename, overlayroot={disabled|tmpfs|UUID=…|LABEL=…|/dev/…}, directory, profile, overlays={local_profile|<LABEL>}, flags={live_ro|live_rw|rescue}, timeout;
* '''altboot_squashfs'''[] — параметры «шагов» squashfs.
* '''altboot_localdev'''[] — параметры всех «шагов» localdev: method, disk, part, uuid, label, directory, overlays={local_profile|<LABEL>}, timeout, options;
* '''altboot_nfs'''[] — параметры всех «шагов» nfs: server, directory, timeout, options, overlays;
* '''altboot_squashfs'''[] — параметры всех «шагов» squashfs: {"/$stagename" | "*"}.


==Параметры pipeline и bootchain==
==Параметры pipeline и bootchain==
Строка 133: Строка 122:
Обычно не используются совместно с '''altboot''':
Обычно не используются совместно с '''altboot''':


* '''pipeline''' — список шагов [https://github.com/osboot/make-initrd/tree/master/features/pipeline pipeline] через запятую;
* '''pipeline''' — список всех «шагов» [https://github.com/osboot/make-initrd/tree/master/features/pipeline pipeline] через запятую;
* '''getimage'''[] — параметры «шагов» getimage;
* '''getimage'''[] — параметры всех «шагов» getimage;
* '''ping'''[] — параметры «шагов» ping;
* '''ping'''[] — параметры всех «шагов» ping;
* '''pipe_retry''' — (целое) позволяет ограничить число повторов после неудачной попытки выполнения «шага»;
* '''pipe_retry''' — (целое) позволяет ограничить число повторов после неудачной попытки выполнения «шага»;
* '''overlayfs'''[] — параметры «шагов» overlayfs;
* '''overlayfs'''[] — параметры всех «шагов» overlayfs;
* '''mountfs'''[] — параметры «шагов» mountfs;
* '''mountfs'''[] — параметры всех «шагов» mountfs;
* '''waitedev'''[] — параметры «шагов» waitedev;
* '''waitedev'''[] — параметры всех «шагов» waitedev;
* '''waitdev_timeout''' — суммарный таймаут для выполнения всех «шагов» waitedev (расширение bootchain).
* '''waitdev_timeout''' — суммарный таймаут для выполнения всех «шагов» waitedev (расширение bootchain).


=Аргументы параметра automatic=
=Аргументы параметра automatic=


...
Аргументы параметра '''automatic=…''' используются различными [[#Методы загрузки altboot|методами загрузки]]. Аргументы перечисляются в формате «параметр1:значение1,параметр2:значение2,…». Запись '''automatic=0''' заставит '''altboot''' вывести [[#Методы загрузки altboot|диалог выбора метода загрузки]] и эквивалентна «automatic=method:auto». Приведённый ниже список изначально не исчерпывающий, и он может расширяться по мере создания новых модулей:
 
* '''directory''' — обычно монтируемый каталог или путь к ISO-образу;
* '''disk''' — имя диска с образом, например, nvme0n1;
* '''domain''' — название SMB-домена ''(новое в altboot)'';
* '''fuid''' — название проверочного файла в корне загрузочного раздела ''(новое в altboot и в propagator, но в altboot используется ещё и для других целей внутренне)'';
* '''imgsize''' — (целое) размер загружаемого образа в байтах ''(новое в altboot)'';
* '''label''' — метка тома файловой системы раздела с образом;
* '''method''' — название [[#Методы загрузки altboot|метода загрузки]] altboot (см. выше);
* '''options''' — дополнительные опции монтирования ''(новое в altboot)'';
* '''overlays''' — разное, в зависимости от выбранного [[#Методы загрузки altboot|метода загрузки]];
* '''partition''' — раздел диска с образом, например, nvme0n1p2;
* '''pass''' — пароль авторизованного пользователя (FTP, SAMBA);
* '''server''' — имя или IP-адрес сервера (SAMBA, FTP, HTTP, NFS);
* '''timeout''' — (целое) таймаут в секундах для поиска носителя или ожидания отклика сервера ''(новое в altboot)'';
* '''type''' — тип загружаемого образа ''(новое в altboot)'';
* '''url''' — полный сетевой или локальный путь ''(новое в altboot)'';
* '''user''' — имя авторизованного пользователя (FTP, SAMBA);
* '''uuid''' — UUID файловой системы раздела с образом.
 
Исчерпывающий список поддерживаемых аргументов для каждого [[#Методы загрузки altboot|метода загрузки]] приведён в полном руководстве.


=Постоянное хранилище сеансов LiveCD=
=Постоянное хранилище сеансов LiveCD=


...
Поддержка данного режима требует «локального» [[#Методы загрузки altboot|метода загрузки]] '''disk''' или '''cdrom''', а также [[#Модули bootchain+altboot|пакета]] '''make-initrd-bootchain-liverw'''. К параметрам загрузки должен быть добавлен пропагаторный параметр «'''live_rw'''», если загрузка выполняется в режиме совместимости с пропагатором. Гибридный ISO-образ дистрибутива записывается на USB-флешь, MMC-карту или иной носитель, на котором должно оставаться не менее 1Гб свободного места.
 
При первой загрузке с параметром «'''live_rw'''» методом '''cdrom''' весь оставшийся диск будет использован под раздел с меткой тома, определяемый [[#Конфигурация|конфигурационной переменной]] '''$OEM_LIVE_STORAGE''', в случае ОС Альт это «'''alt-live-storage'''». Все изменения будут записываться в созданный R/W-раздел и сохраняться между перезагрузками. При последующих загрузках данный раздел будет подключаться как верхний слой R/W автоматически. Для метода '''disk''' поведение аналогично, с той лишь разницей, что используется свободное место на том диске, где находится загрузочный раздел (в пропагаторе этого не было).
 
Следует иметь ввиду, что постоянное хранилище сеансов с технической точки зрения является компромиссом между скоростью и надёжностью. Опции форматирования и монтирования носителя ориентированы на средне-скоростные USB-носители. Данные могут потеряться при сбоях питания или «зависании». Постоянная запись на относительно медленные USB-носители не является эффективной, ей следует предпочесть другой вариант работы, описанный в следующем разделе.


=Read-only слои LiveCD=
=Read-only слои LiveCD=


...
При сетевой загрузке с сервера '''NFS''' или с сервера '''SAMBA''', а также при локальной загрузке методами '''disk''' или '''cdrom''' с универсальных образов LiveCD или Rescue допускается работа со слоями LiveCD, доступными только на чтение. При этом самым нижним слоем для чтения становится сквош второй стадии (корневой системы) на исходном ISO-образе, поверх него накладываются образы, создаваемые системным администратором. Самый верхний R/W-слой создаётся для записи на tmpfs или выделенный раздел (только при локальной загрузке при использовании параметра '''live_rw''', см. [[#Постоянное хранилище сеансов LiveCD|предыдущий раздел]]).
 
Из полученного «слоёного пирога» формируется rootfs, в которую происходит загрузка, что даёт возможность администраторам вносить необходимые изменения в настройки исходного диска и предоставлять это пользователям сетевых бездисковых классов с доступом только на чтение, причём такой способ централизованного управления настройками и загрузки с использованием read-only сквошей значительно эффективнее механизма работы с R/W-сеансами, описанного в [[#Постоянное хранилище сеансов LiveCD|предыдущем разделе]], тем более, если говорить о локальной загрузке с USB-флешь и подобных относительно медленных накопителей.
 
Ниже представлена таблица с принятыми умолчаниями в ОС Альт:
 
{| class="wikitable"
|-
! Метод !! Имя переменной !! Путь к профилям с образами !! Относительно чего
|-
| '''cdrom''' || - || / || См. параметр overlays
|-
| '''disk''' || - || / || См. параметр overlays
|-
| '''cifs''' || $OEM_CIFS_NETINST || /netinst/overlays-live || На том же сервере SAMBA
|-
| '''nfs''' || $OEM_NFS_NETINST || /srv/public/netinst/overlays-live || На том же сервере NFS
|}
Имя профиля — это относительный путь к каталогу, задаваемый пропагаторным параметром '''profile''', например, «rescue/overlays». При загрузке с использованием слоёв (оверлеев) LiveCD, все файлы с окончаниями '''*.squashfs''' и '''*.iso''' в каталоге профиля рассматриваются как оверлеи и монтируются слоями друг над другом в алфавитном порядке. Так что в каталоге на сервере (и в соответствующем локальном каталоге) можно разместить не один, а несколько разных профилей загрузки, а в каждом из них собственный набор LiveCD-оверлеев. Путь к каталогу с профилями для сетевых [[#Методы загрузки altboot|методов загрузки]] определяется параметром '''overlays''', но его можно опустить, и тогда используются дефолты из таблицы. Для локальных [[#Методы загрузки altboot|методов загрузки]] '''overlays''' указывает на раздел с оверлеями.
 
Вплоть до выхода продуктов на «одинадцатой платформе» в ОС Альт возможность работы с read-only слоями LiveCD обеспечивалась только для [[#Методы загрузки altboot|метода загрузки]] '''nfs'''. При загрузке средствами '''propagator''' c '''init-bottom''', если имя профиля не указывалось, то соответствующий уровень каталога не использовался. При переходе на '''altboot''' следует учитывать, что если '''profile''' не указан в /proc/cmdline, его значение по умолчанию — «default», соответствующий подкаталог должен быть создан на сервере.
 
Другие детали и особенности реализации смотрите в полном руководстве.
 
=Модули bootchain+altboot=
 
* '''make-initrd-bootchain''' — мета-пакет, собирающий воедино все существующие модули bootchain, он же исходный SRPM;
* '''make-initrd-bootchain-core''' — базовый функционал, включая «шаги» debug, fg, mountfs, noop, noretry, overlayfs, retry и rootfs, т.е. это расширение исходной фичи [https://github.com/osboot/make-initrd/tree/master/features/pipeline pipeline];
* '''make-initrd-bootchain-getimage''' — обеспечивает метод загрузки образов по сети утилитой wget по протоколам HTTP и FTP, отделён в подпакет из исходной фичи [https://github.com/osboot/make-initrd/tree/master/features/pipeline pipeline];
* '''make-initrd-bootchain-waitdev''' — обеспечивает метод ожидания локального носителя по заданной спецификации, отделён в подпакет из исходной фичи [https://github.com/osboot/make-initrd/tree/master/features/pipeline pipeline];
* '''make-initrd-bootchain-interactive''' — обеспечивает интерактивное взаимодействие, предоставляет диалоговые виджеты;
* '''make-initrd-bootchain-waitnet''' — обеспечивает ожидание сети и экспорт сетевых настроек в stage2, используется всеми сетевыми [[#Методы загрузки altboot|методами загрузки altboot]] (ftp, http, nfs, cifs) и является временным кодом;
* '''make-initrd-bootchain-altboot''' — весь общий функционал пропагатора и «шаг», транслирующий его аргументы;
* '''make-initrd-bootchain-localdev''' — обеспечивает [[#Методы загрузки altboot|методы загрузки]] disk/cdrom, установку дополнительных модулей ядра;
* '''make-initrd-bootchain-liverw''' — обеспечивает дополнительный функционал для работы с [[#Постоянное хранилище сеансов LiveCD|R/W-сеансами LiveCD и Rescue]];
* '''make-initrd-bootchain-nfs''' — обеспечивает [[#Методы загрузки altboot|метод загрузки]] с сервера NFS и поддержку [[#Read-only слои LiveCD|read-only слоёв LiveCD]] (сквошей);
* '''make-initrd-bootchain-cifs''' — обеспечивает [[#Методы загрузки altboot|метод загрузки]] с сервера SAMBA и поддержку [[#Read-only слои LiveCD|read-only слоёв LiveCD]] (сквошей);
* '''make-initrd-bootchain-doc''' — документация и набор тестов.
 
=Конфигурация=
 
Конфигурирование '''bootchain''' и '''altboot''' выполняется через файл '''/etc/sysconfig/bootchain'''.
 
==Модуль make-initrd-bootchain-core==
 
* '''BC_DEBUG''' — непустое значение, если включена расширенная отладка;
* '''BC_LOG_VT''' — если непустое значение, то порядковый номер TTY для вывода журнала;
* '''BC_LOGFILE''' — путь к файлу журнала или устройство для вывода в него сообщений отладки;
* '''BC_DEVICE_TIMEOUT''' — глобальный дефолтный таймаут для любых «шагов» altboot;
* '''BC_FGVT_ACTIVATE''' — если непустое значение, то через сколько секунд активировать интерактивный терминал.
 
==Модуль make-initrd-bootchain-waitdev==
 
* '''WAITDEV_TIMEOUT''' — глобальный дефолтный суммарный таймаут для всех «шагов» waitdev;
 
==Модуль make-initrd-bootchain-altboot==
 
* '''OEM_WELCOME_TEXT''' — используется в качестве заголовка верхнего уровня в диалогах altboot;
* '''OEM_DISTRIBUTION''' — используется в качестве названия дистрибутива в диалогах altboot;
* '''OEM_CDROOT''' — необязательный путь к корню ISO-образа внутри initramfs, в ОС Альт это /image;
* '''OEM_LIVE_STORAGE''' — метка тома live_rw раздела, если указана;
* '''OEM_BAD_STORAGE''' — метка тома, чтобы не использовать live_rw раздел на плохом или слишком медленном устройстве;
* '''OEM_SETUP_STORAGE''' — метка тома раздела для обновления initramfs «на лету»;
* '''OEM_IMAGES_BASE''' — куда в stage2 монтировать каталог с образами слоёв LiveCD;
* '''OEM_OVERLAYS_DIR''' — куда в stage2 монтировать сами слои LiveCD;
* '''OEM_URL_NETINST''' — значение по умолчанию компоненты directory для загрузки методами http и ftp;
* '''OEM_NFS_NETINST''' — значение по умолчанию компоненты directory для загрузки методом nfs;
* '''OEM_CIFS_NETINST''' — значение по умолчанию компоненты directory для загрузки методом cifs.
 
==Модуль make-initrd-bootchain-waitnet==
 
* '''OEM_SRV_NETINST''' — значение по умолчанию компоненты server для загрузки методами http и ftp, определяет IP-адрес или имя сервера сетевой загрузки.


=Примеры использования=
=Примеры использования=


...
==В режиме совместимости с пропагатором==
 
Т.е. в каждом примере добавляются параметры: '''root=bootchain bootchain=fg,altboot'''
 
<pre>
# NFS-загрузка с использованием статической IP-адресации
automatic=method:nfs,server:192.168.1.7,directory:/Compact \
  ip=192.168.1.24:192.168.1.1:255.255.255.0:client1:eth0:off
 
# HTTP-загрузка с нераспакованного ISO-образа (всё в одну строку)
automatic=method:http,type:iso,server:ftp.altlinux.org,directory:/pub/distributions/ALTLinux/p11/images/workstation/x86_64/alt-workstation-11.0-x86_64.iso ip=dhcp4
 
# FTP-загрузка с локального сервера с использованием логина и пароля
automatic=method:ftp,server:companyserver,directory:/altlinux,user:igor,pass:Pa$$word1 ip=dhcp4
 
# Интерфейс с указанным MAC-адресом нужно назвать eth1 и поднять на нём сеть по протоколу DHCPv4
automatic=method:ftp,... ifname=eth1:123456789ABC ip=eth1:dhcp4
 
# Как пропагатор altboot тоже умеет, но это неинтересно
automatic=method:cdrom lowmem
 
# А так пропагатор не умел: файлы с оверлеями находятся на отдельном
# разделе с меткой тома «SLICES» в подкаталоге «/rescue/overlays/»
#
automatic=method:cdrom,uuid:2024-05-30-18-28-59-00,overlays:SLICES \
  stagename=rescue ramdisk_size=497773 profile=rescue/overlays lowmem
 
# Или так
automatic=method:cdrom,label:ALT_regular-rescue/x86_64
 
# Таких спецификаций лучше избегать, по крайне мере, здесь disk будет излишним
automatic=method:disk,disk:nvme0n1,partition:nvme0n1p1,uuid:48B3-5935
</pre>
 
==Пошаговая загрузка в стиле pipeline==
 
<pre>
root=bootchain bootchain=getimage,mountfs,overlayfs,rootfs ip=dhcp \
  getimage=http://ftp.altlinux.org/pub/people/mike/iso/misc/vi-20140918-i586.iso \
  mountfs=rescue
 
root=bootchain bootchain=waitdev,mountfs,mountfs,overlayfs,rootfs \
  waitdev=CDROM:LABEL=ALT_regular-rescue/x86_64 \
  mountfs=dev \
  mountfs=rescue
</pre>
 
==Пристраивание «шагов» bootchain слева от alboot==
 
<pre>
# Ждём появление раздела «alt-live-storage» и устройство CDROM, затем грузим altboot, как обычно
root=bootchain bootchain=waitdev,waitdev,fg,altboot \
  waitdev=LABEL=alt-live-storage \
  waitdev=CDROM: \
  automatic=method:cdrom
 
# Образ диска загружается прямо в указанное устройство (когда make-initd devscpec будет понимать MODEL=...)
root=bootchain bootchain=waitdev,fg,download,... ip=dhcp4 \
  waitdev=MODEL=SAMSUNG_SSD_960_EVO_250GB \
  altboot_download=method=url;url=http://192.168.15.1/images/alt-ws11.img
</pre>Больше примеров в полном руководстве, ещё [https://git.altlinux.org/gears/m/make-initrd-bootchain.git?p=make-initrd-bootchain.git;a=blob;f=bootchain-doc/testing/mksrvdata.sh примеры проверки сетевой загрузки] в пакете '''make-initrd-bootchain-doc'''.


=Журналирование и отладка=
=Журналирование и отладка=


Демон '''chaind''' ведёт журнал '''/var/log/chaind.log''', доступный в stage1 на tty3 (по нажатию '''Alt-F3'''), что определяется дефолтными значениями '''BC_LOG_VT''' и '''BC_LOGFILE''' в файле конфигурации, а также перебивается параметром make-initrd '''rdlog=console''' или '''rdlog=printk''' в рантайме.
Демон '''chaind''' ведёт журнал '''/var/log/chaind.log''', доступный в stage1 на tty3 (по нажатию '''Alt-F3'''), что определяется дефолтными значениями '''BC_LOG_VT''' и '''BC_LOGFILE''' в [[#Конфигурация|файле конфигурации]], а также перебивается параметром [[Make-initrd|make-initrd]] '''rdlog=console''' или '''rdlog=printk''' в рантайме, что предписывает выводить журнал на '''/dev/console''' или на '''/dev/ttyprintk'''.


Расширенная диагностика включается через /proc/cmdline параметром '''bc_debug'''. В этом случае журнал копируется по тому же пути в stage2 после отработки последнего «шага», а если в новой rootfs нет '''/var/log''', то копируется в '''/dev/bootchain/'''. Аналогом '''propagator-debug''' в самом make-initrd является параметр '''rdshell''' либо '''stop=runinit''', для их использования образ initramfs должен быть собран с соответствующей фичей «rdshell».
Расширенная диагностика включается через /proc/cmdline параметром '''bc_debug'''. В этом случае журнал копируется по тому же пути в stage2 после отработки последнего «шага», а если в новой rootfs нет '''/var/log''', то копируется в '''/dev/bootchain/'''. Аналогами '''propagator-debug''' в самом [[Make-initrd|make-initrd]] можно считать параметр '''rdshell''' либо '''stop=runinit''', для их использования образ initramfs должен быть собран с соответствующей фичей «[https://github.com/osboot/make-initrd/tree/master/features/rdshell rdshell]».


=Полезные ссылки=
=Полезные ссылки=

Версия от 03:24, 27 июля 2024

bootchain+altboot

bootchain+altboot пришли на смену propagator'у в p11, сделав возможным использовать run-time и фичи make-initrd в установочных и «живых» носителях (в ISO-образах с универсальной загрузкой).

bootchain — форк и дальнейшее развитие pipeline, фичи make-initrd, предлагающей «пошаговый» принцип загрузки.

altboot (альтернативная загрузка) — дистронезависимая система загрузки, построенная поверх bootchain, работающая как часть run-time make-initrd, альтернатива propagator с make-initrd-propagator в дистрибутивах ОС Альт на «одиннадцатой платформе», обеспечивающая дополнительный функционал, слой совместимости с установщиком, alterator-netinst и более гибкие возможности дальнейшего расширения.

Примечание: Здесь приведено краткое описание bootchain+altboot. Скачать полное руководство к версии 0.1.5-alt23 можно тут — Файл:От пропагатора к altboot.pdf.

Важно понимать, что основная концепция make-initrd — event-driven, т.е. событийно ориентированная модель: обнаружился диск — выполнился обработчик, тогда как в пропагаторе было принято сканировать и ждать жёстко закодированное время. Две концепции противоположны, но altboot позволяет их совместить так, что теперь в установочных и «живых» дисках загрузка выполняется run-time'ом make-initrd, а не пропагатором.

Быстрое знакомство

Теперь для загрузки достаточно подключить необходимые модули bootchain вместо propagator + make-initrd-propagator и добавить к привычным всего пару опций в /proc/cmdline:

root=bootchain bootchain=fg,altboot automatic=… [ramdisk_size=…] [lowmem] [stagename={altinst|live|rescue}]

Для сетевой загрузки необходимо также добавлять параметр ip=… (рекомендуется ip=dhcp4).

Внимание! В altboot нет собственных диалогов для настройки сети, они есть в прошивках iPXE. Сеть конфигурируется только через /proc/cmdline фичей make-initrd «network». Скрипты и диалоги altboot пока не рассчитаны на работу с IPv6, как и установщика ОС Альт, хотя фича make-initrd «network» понимает IPv6. Propagator умел конфигурировать ADSL-соединение, фича make-initrd «network» не предназначена для настройки ADSL/PPPoE.

Конфигурирование bootchain и altboot выполняется через файл /etc/sysconfig/bootchain, используемые фичи перечисляются в /etc/initrd.mk перед созданием образа stage1 командой make-initrd. Разделение на модули (подпакеты) позволяет добиться оптимального наполнения initramfs только необходимым для загрузки содержимым. Так, для загрузки по протоколу NFS достаточно установить пакет make-initrd-bootchain-nfs и задействовать фичу bootchain-nfs, всё остальное попадёт в initramfs по зависимостям. Например:

apt-get install make-initrd-bootchain-nfs
echo "FEATURES += bootchain-nfs" >>/etc/initrd.mk
make-initrd

Для создания универсального образа stage1 достаточно установки одного мета-пакета make-initrd-bootchain. См. детали в разделе Модули bootchain+altboot.

Параметр automatic обрёл несколько новых аргументов, утратив при этом аргументы, связанные с настройкой сети, типа «network:...» (они игнорируются, т.к. сеть теперь настраивает сам make-initrd). Например, можно задавать пользовательский таймаут или дополнительные опции монтирования. См. детали в разделе Аргументы параметра automatic. Немного поменялась и логика работы со спецификациями дисков: теперь спецификация загрузочного диска должна однозначно указывать только на один диск. Если спецификации соответствует больше или меньше носителей, altboot выведет диалог выбора накопителя, тогда как propagator мог загрузиться с первого попавшегося.

Методы загрузки altboot

В altboot практически все параметры любого метода загрузки имеют свои значения по умолчанию, т.е. для загрузки достаточно указать через /proc/cmdline (automatic=method:…) или выбрать средствами диалога только нужный метод загрузки. При загрузке с обычной Linux rootfs, а не с универсального загрузочного носителя, напротив, метод не указывается (method="").

Выбор метода загрузки
Главное меню altboot
  • nfs — указанный ISO-образ либо каталог монтируется с сервера NFS;
  • ftp — образ скачивается целиком с сервера по протоколу FTP;
  • http — образ скачивается целиком с сервера по протоколу HTTP;
  • cifs — указанный ISO-образ либо каталог монтируется с сервера SAMBA;
  • cdrom — загрузка непосредственно с локального носителя в формате ISO-9660 Hybrid с возможностью работы с R/W-слоем;
  • disk — загрузка с локального диска, раздела либо лежащего на нём ISO-образа.

Методы загрузки http/ftp пока что не предназначены для работы с read-only слоями LiveCD, но если кому-то это нужно, добавить их поддержку не очень сложно. Существует два режима работы с этими методами — старый вариант, когда путь на сервере рассматривается как каталог, из которого загружается файл со сквошом второй стадии, и новый вариант, когда путь на сервере рассматривается как нераспакованный ISO-образ, загружаемый целиком вместо сквоша. Для работы с нераспакованным ISO-образом необходимо убрать из /proc/cmdline параметр загрузки ramdisk_size=… и добавить к параметру automatic=…,type:iso,…

При использовании «локальных» методов загрузки (disk или cdrom), становится доступной возможность обновлять «на лету» образ initramfs с дополнительного внешнего носителя, что в частности позволяет догружать недостающие модули ядра и правила udev. За это отвечает параметр updatemodules (см. детали в полном руководстве).

Оба метода имеют небольшие отличия от исходной реализации в пропагаторе. Если гибридный ISO-образ записан на R/W-носитель (USB-флешь, MMC-карту, итд), то метод загрузки cdrom выполняет загрузку не с диска, а с первого раздела, что позволяет, при необходимости, создать нужный R/W-раздел для работы с сеансами LiveCD. Метод disk позволяет организовать загрузку не только с диска или раздела, но и с лежащего на нём ISO-образа, а это можно использовать для загрузки разных дистрибутивов, размещённых на одном носителе.

Параметры загрузки

Параметры сетевой загрузки

Для работы сетевой загрузки необходимо добавлять параметр ip=… — он нужен make-initrd для настройки сети: altboot полагается на то, что сеть будет настроена кем-то и ожидает появления сети при использовании сетевых методов загрузки, таких, как nfs или http. Например, ip=dhcp заставит make-initrd поднять сеть и автоматически её настроить на всех имеющихся сетевых интерфейсах по протоколам DHCPv4 и DHCPv6.

Для дистрибутивов ОС Альт лучше задавать через /proc/cmdline параметр ip=dhcp4, поскольку установщик не работает с IPv6, а отсутсвие в сети двух типов DHCP-серверов увеличивает время настройки секунд на 20 для каждого интерфейса.

В конфигурациях с несколькими сетевыми интерфейсами можно задавать сразу два параметра: ifname=bootif0:<macaddr> ip=bootif0:dhcp4 — это заставит фичу make-initrd «network» переименовать интерфейс с указанным MAC-адресом в «bootif0» и поднять сеть только на нём и только по протоколу DHCPv4. В сценариях сетевой загрузки по iPXE с несколькими сетевыми картами прошивка уже выбрала ту, на которой есть несущая, и которая получила настройки через DHCP, именно её MAC-адрес передаётся такой записью в iPXE-скрипте: ifname=bootif0:${net/mac}.

ramdisk_size, automatic=type:iso и lowmem

Ядерный параметр ramdisk_size=… стал необязательным: начиная с версии 0.1.5-alt17 образы загружаются в TMPFS, если параметр не указан. Новая логика работы некоторых параметров для методов http и ftp:

  • Если указан ramdisk_size=…, на сервере ожидается каталог, из которого сквош грузится в RAM-диск;
  • При наличии automatic=type:iso,..., нераспакованный ISO-образ грузится в TMPFS;
  • Иначе сквош грузится в TMPFS.

При этом параметр lowmem не имеет значения. Для других методов:

  • Если указаны lowmem или live, ничего в ОЗУ не грузится, монтируется сквош;
  • Если указан ramdisk_size=..., сквош грузится в RAM-диск;
  • Иначе сквош грузится в TMPFS.

altboot ориентируется не столько на наличие парметра ramdisk_size=…, сколько на наличие созданного ядром по этому параметру RAM-диска, при этом сравнивая его фактический размер с необходимым для загрузки сквоша. Даже при наличии данного параметра ядро не всегда создаёт RAM-диски. Например, некоторые Realtime-ядра не создают.

Поддерживаемые altboot и пропагатором

  • automatic — основной накопитель аргументов пропагатора и altboot;
  • hash — хэш-сумма сквоша второй стадии загрузки, посчитанная по алгоритму SHA-256 (в altboot можно использовать и другие варианты хэша с некоторыми синтаксическими добавками);
  • live — (флаг) помечает ISO-образ как LiveCD, что предписывает всегда использовать режим экономии памяти;
  • live_rw — (флаг) предписывает использовать R/W-раздел для сеансов LiveCD/Rescue;
  • lowmem — (флаг) включает режим экономии памяти, монтируя образ непосредственно с носителя без предварительной загрузки в ОЗУ;
  • profile — профиль сетевой загрузки с поддержкой Read-only слоёв LiveCD (в altboot по умолчанию profile=default);
  • ramdisk_size — (целое, ядерный) число килобайт, выделяемых ядром для устройств /dev/ram<N>, в один из которых будет загружаться сквош второй стадии (в altboot этот параметр стал необязательным);
  • rescue — (флаг) помечает ISO-образ как Rescue LiveCD, что влияет только на вывод финальных сообщений;
  • stagename — название файла сквоша с rootfs второй стадии загрузки, по факту только: «altinst», «rescue» и «live»;
  • updatemodules — в пропагаторе ранее использовался совместно с дискетами, пока они не перестали поддерживаться, в altboot используется для обновления «на лету» файловой системы в stage1, что в частности позволяет подгрузить недостающие модули ядра и правила udev.

Нереализованные в altboot

  • propagator-debug — давал промежуточный shell перед переходом из stage1 в stage2, в make-initd есть свои аналоги, реализующие данный функционал;
  • testing — «мёртвый» параметр, реально ни на что не влиял, в последних версиях пропагатора перенаправлял диагностику на /dev/ttyprintk;

Новые параметры в altboot

  • bc_debug — (флаг) включает режим расширенной диагностики и копирует журнал в stage2;
  • bc_test — название выполняемого тест-кейса, копирует его вместе с журналом в stage2;
  • bootchain — список «шагов» bootchain через запятую (для совместимости с пропагатором д.б. «fg,altboot»);
  • cifsopts — дополнительные опции монтирования SMB-ресурсов, используемые всеми «шагами» cifs;
  • console — (ядерный) определяет консоль для вывода сообщений, в altboot влияет на настройку диалогов;
  • curlopts — (внешний) дополнительные опции curl, используемые всеми «шагами» download;
  • noaskuser — (флаг, как и некоторые значения параметра console) отключает диалоги ввода;
  • nolines — (флаг) запрещает вывод символов псевдографики в диалогах ввода/вывода;
  • nfsopts — дополнительные опции монтирования NFS-каталогов, используемые всеми «шагами» nfs;
  • overlayroot — обеспечивает простой синтаксис для закрытия на запись имеющейся rootfs.

Параметры bootchain, используемы внутренне «шагами» altboot

Не используются в явном виде в режиме совместимости с пропагатором, возможно вам это конфигурировать не придётся:

  • altboot_checksum[] — параметры всех «шагов» checksum: "[<hashprog>:]<hash>[:<filename>]";
  • altboot_cifs[] — параметры всех «шагов» cifs: server, directory, domain, user, pass, timeout, options, overlays;
  • altboot_copyfile[] — параметры всех «шагов» copyfile: src, dst, size;
  • altboot_download[] — параметры всех «шагов» download: method, to, url, server, directory, user, pass, imgsize, timeout;
  • altboot_liveboot[] — параметры всех «шагов» liveboot: method, stagename, overlayroot={disabled|tmpfs|UUID=…|LABEL=…|/dev/…}, directory, profile, overlays={local_profile|<LABEL>}, flags={live_ro|live_rw|rescue}, timeout;
  • altboot_localdev[] — параметры всех «шагов» localdev: method, disk, part, uuid, label, directory, overlays={local_profile|<LABEL>}, timeout, options;
  • altboot_nfs[] — параметры всех «шагов» nfs: server, directory, timeout, options, overlays;
  • altboot_squashfs[] — параметры всех «шагов» squashfs: {"/$stagename" | "*"}.

Параметры pipeline и bootchain

Обычно не используются совместно с altboot:

  • pipeline — список всех «шагов» pipeline через запятую;
  • getimage[] — параметры всех «шагов» getimage;
  • ping[] — параметры всех «шагов» ping;
  • pipe_retry — (целое) позволяет ограничить число повторов после неудачной попытки выполнения «шага»;
  • overlayfs[] — параметры всех «шагов» overlayfs;
  • mountfs[] — параметры всех «шагов» mountfs;
  • waitedev[] — параметры всех «шагов» waitedev;
  • waitdev_timeout — суммарный таймаут для выполнения всех «шагов» waitedev (расширение bootchain).

Аргументы параметра automatic

Аргументы параметра automatic=… используются различными методами загрузки. Аргументы перечисляются в формате «параметр1:значение1,параметр2:значение2,…». Запись automatic=0 заставит altboot вывести диалог выбора метода загрузки и эквивалентна «automatic=method:auto». Приведённый ниже список изначально не исчерпывающий, и он может расширяться по мере создания новых модулей:

  • directory — обычно монтируемый каталог или путь к ISO-образу;
  • disk — имя диска с образом, например, nvme0n1;
  • domain — название SMB-домена (новое в altboot);
  • fuid — название проверочного файла в корне загрузочного раздела (новое в altboot и в propagator, но в altboot используется ещё и для других целей внутренне);
  • imgsize — (целое) размер загружаемого образа в байтах (новое в altboot);
  • label — метка тома файловой системы раздела с образом;
  • method — название метода загрузки altboot (см. выше);
  • options — дополнительные опции монтирования (новое в altboot);
  • overlays — разное, в зависимости от выбранного метода загрузки;
  • partition — раздел диска с образом, например, nvme0n1p2;
  • pass — пароль авторизованного пользователя (FTP, SAMBA);
  • server — имя или IP-адрес сервера (SAMBA, FTP, HTTP, NFS);
  • timeout — (целое) таймаут в секундах для поиска носителя или ожидания отклика сервера (новое в altboot);
  • type — тип загружаемого образа (новое в altboot);
  • url — полный сетевой или локальный путь (новое в altboot);
  • user — имя авторизованного пользователя (FTP, SAMBA);
  • uuid — UUID файловой системы раздела с образом.

Исчерпывающий список поддерживаемых аргументов для каждого метода загрузки приведён в полном руководстве.

Постоянное хранилище сеансов LiveCD

Поддержка данного режима требует «локального» метода загрузки disk или cdrom, а также пакета make-initrd-bootchain-liverw. К параметрам загрузки должен быть добавлен пропагаторный параметр «live_rw», если загрузка выполняется в режиме совместимости с пропагатором. Гибридный ISO-образ дистрибутива записывается на USB-флешь, MMC-карту или иной носитель, на котором должно оставаться не менее 1Гб свободного места.

При первой загрузке с параметром «live_rw» методом cdrom весь оставшийся диск будет использован под раздел с меткой тома, определяемый конфигурационной переменной $OEM_LIVE_STORAGE, в случае ОС Альт это «alt-live-storage». Все изменения будут записываться в созданный R/W-раздел и сохраняться между перезагрузками. При последующих загрузках данный раздел будет подключаться как верхний слой R/W автоматически. Для метода disk поведение аналогично, с той лишь разницей, что используется свободное место на том диске, где находится загрузочный раздел (в пропагаторе этого не было).

Следует иметь ввиду, что постоянное хранилище сеансов с технической точки зрения является компромиссом между скоростью и надёжностью. Опции форматирования и монтирования носителя ориентированы на средне-скоростные USB-носители. Данные могут потеряться при сбоях питания или «зависании». Постоянная запись на относительно медленные USB-носители не является эффективной, ей следует предпочесть другой вариант работы, описанный в следующем разделе.

Read-only слои LiveCD

При сетевой загрузке с сервера NFS или с сервера SAMBA, а также при локальной загрузке методами disk или cdrom с универсальных образов LiveCD или Rescue допускается работа со слоями LiveCD, доступными только на чтение. При этом самым нижним слоем для чтения становится сквош второй стадии (корневой системы) на исходном ISO-образе, поверх него накладываются образы, создаваемые системным администратором. Самый верхний R/W-слой создаётся для записи на tmpfs или выделенный раздел (только при локальной загрузке при использовании параметра live_rw, см. предыдущий раздел).

Из полученного «слоёного пирога» формируется rootfs, в которую происходит загрузка, что даёт возможность администраторам вносить необходимые изменения в настройки исходного диска и предоставлять это пользователям сетевых бездисковых классов с доступом только на чтение, причём такой способ централизованного управления настройками и загрузки с использованием read-only сквошей значительно эффективнее механизма работы с R/W-сеансами, описанного в предыдущем разделе, тем более, если говорить о локальной загрузке с USB-флешь и подобных относительно медленных накопителей.

Ниже представлена таблица с принятыми умолчаниями в ОС Альт:

Метод Имя переменной Путь к профилям с образами Относительно чего
cdrom - / См. параметр overlays
disk - / См. параметр overlays
cifs $OEM_CIFS_NETINST /netinst/overlays-live На том же сервере SAMBA
nfs $OEM_NFS_NETINST /srv/public/netinst/overlays-live На том же сервере NFS

Имя профиля — это относительный путь к каталогу, задаваемый пропагаторным параметром profile, например, «rescue/overlays». При загрузке с использованием слоёв (оверлеев) LiveCD, все файлы с окончаниями *.squashfs и *.iso в каталоге профиля рассматриваются как оверлеи и монтируются слоями друг над другом в алфавитном порядке. Так что в каталоге на сервере (и в соответствующем локальном каталоге) можно разместить не один, а несколько разных профилей загрузки, а в каждом из них собственный набор LiveCD-оверлеев. Путь к каталогу с профилями для сетевых методов загрузки определяется параметром overlays, но его можно опустить, и тогда используются дефолты из таблицы. Для локальных методов загрузки overlays указывает на раздел с оверлеями.

Вплоть до выхода продуктов на «одинадцатой платформе» в ОС Альт возможность работы с read-only слоями LiveCD обеспечивалась только для метода загрузки nfs. При загрузке средствами propagator c init-bottom, если имя профиля не указывалось, то соответствующий уровень каталога не использовался. При переходе на altboot следует учитывать, что если profile не указан в /proc/cmdline, его значение по умолчанию — «default», соответствующий подкаталог должен быть создан на сервере.

Другие детали и особенности реализации смотрите в полном руководстве.

Модули bootchain+altboot

  • make-initrd-bootchain — мета-пакет, собирающий воедино все существующие модули bootchain, он же исходный SRPM;
  • make-initrd-bootchain-core — базовый функционал, включая «шаги» debug, fg, mountfs, noop, noretry, overlayfs, retry и rootfs, т.е. это расширение исходной фичи pipeline;
  • make-initrd-bootchain-getimage — обеспечивает метод загрузки образов по сети утилитой wget по протоколам HTTP и FTP, отделён в подпакет из исходной фичи pipeline;
  • make-initrd-bootchain-waitdev — обеспечивает метод ожидания локального носителя по заданной спецификации, отделён в подпакет из исходной фичи pipeline;
  • make-initrd-bootchain-interactive — обеспечивает интерактивное взаимодействие, предоставляет диалоговые виджеты;
  • make-initrd-bootchain-waitnet — обеспечивает ожидание сети и экспорт сетевых настроек в stage2, используется всеми сетевыми методами загрузки altboot (ftp, http, nfs, cifs) и является временным кодом;
  • make-initrd-bootchain-altboot — весь общий функционал пропагатора и «шаг», транслирующий его аргументы;
  • make-initrd-bootchain-localdev — обеспечивает методы загрузки disk/cdrom, установку дополнительных модулей ядра;
  • make-initrd-bootchain-liverw — обеспечивает дополнительный функционал для работы с R/W-сеансами LiveCD и Rescue;
  • make-initrd-bootchain-nfs — обеспечивает метод загрузки с сервера NFS и поддержку read-only слоёв LiveCD (сквошей);
  • make-initrd-bootchain-cifs — обеспечивает метод загрузки с сервера SAMBA и поддержку read-only слоёв LiveCD (сквошей);
  • make-initrd-bootchain-doc — документация и набор тестов.

Конфигурация

Конфигурирование bootchain и altboot выполняется через файл /etc/sysconfig/bootchain.

Модуль make-initrd-bootchain-core

  • BC_DEBUG — непустое значение, если включена расширенная отладка;
  • BC_LOG_VT — если непустое значение, то порядковый номер TTY для вывода журнала;
  • BC_LOGFILE — путь к файлу журнала или устройство для вывода в него сообщений отладки;
  • BC_DEVICE_TIMEOUT — глобальный дефолтный таймаут для любых «шагов» altboot;
  • BC_FGVT_ACTIVATE — если непустое значение, то через сколько секунд активировать интерактивный терминал.

Модуль make-initrd-bootchain-waitdev

  • WAITDEV_TIMEOUT — глобальный дефолтный суммарный таймаут для всех «шагов» waitdev;

Модуль make-initrd-bootchain-altboot

  • OEM_WELCOME_TEXT — используется в качестве заголовка верхнего уровня в диалогах altboot;
  • OEM_DISTRIBUTION — используется в качестве названия дистрибутива в диалогах altboot;
  • OEM_CDROOT — необязательный путь к корню ISO-образа внутри initramfs, в ОС Альт это /image;
  • OEM_LIVE_STORAGE — метка тома live_rw раздела, если указана;
  • OEM_BAD_STORAGE — метка тома, чтобы не использовать live_rw раздел на плохом или слишком медленном устройстве;
  • OEM_SETUP_STORAGE — метка тома раздела для обновления initramfs «на лету»;
  • OEM_IMAGES_BASE — куда в stage2 монтировать каталог с образами слоёв LiveCD;
  • OEM_OVERLAYS_DIR — куда в stage2 монтировать сами слои LiveCD;
  • OEM_URL_NETINST — значение по умолчанию компоненты directory для загрузки методами http и ftp;
  • OEM_NFS_NETINST — значение по умолчанию компоненты directory для загрузки методом nfs;
  • OEM_CIFS_NETINST — значение по умолчанию компоненты directory для загрузки методом cifs.

Модуль make-initrd-bootchain-waitnet

  • OEM_SRV_NETINST — значение по умолчанию компоненты server для загрузки методами http и ftp, определяет IP-адрес или имя сервера сетевой загрузки.

Примеры использования

В режиме совместимости с пропагатором

Т.е. в каждом примере добавляются параметры: root=bootchain bootchain=fg,altboot

# NFS-загрузка с использованием статической IP-адресации
automatic=method:nfs,server:192.168.1.7,directory:/Compact \
  ip=192.168.1.24:192.168.1.1:255.255.255.0:client1:eth0:off

# HTTP-загрузка с нераспакованного ISO-образа (всё в одну строку)
automatic=method:http,type:iso,server:ftp.altlinux.org,directory:/pub/distributions/ALTLinux/p11/images/workstation/x86_64/alt-workstation-11.0-x86_64.iso ip=dhcp4

# FTP-загрузка с локального сервера с использованием логина и пароля
automatic=method:ftp,server:companyserver,directory:/altlinux,user:igor,pass:Pa$$word1 ip=dhcp4

# Интерфейс с указанным MAC-адресом нужно назвать eth1 и поднять на нём сеть по протоколу DHCPv4
automatic=method:ftp,... ifname=eth1:123456789ABC ip=eth1:dhcp4

# Как пропагатор altboot тоже умеет, но это неинтересно
automatic=method:cdrom lowmem

# А так пропагатор не умел: файлы с оверлеями находятся на отдельном
# разделе с меткой тома «SLICES» в подкаталоге «/rescue/overlays/»
#
automatic=method:cdrom,uuid:2024-05-30-18-28-59-00,overlays:SLICES \
  stagename=rescue ramdisk_size=497773 profile=rescue/overlays lowmem

# Или так
automatic=method:cdrom,label:ALT_regular-rescue/x86_64

# Таких спецификаций лучше избегать, по крайне мере, здесь disk будет излишним
automatic=method:disk,disk:nvme0n1,partition:nvme0n1p1,uuid:48B3-5935

Пошаговая загрузка в стиле pipeline

root=bootchain bootchain=getimage,mountfs,overlayfs,rootfs ip=dhcp \
  getimage=http://ftp.altlinux.org/pub/people/mike/iso/misc/vi-20140918-i586.iso \
  mountfs=rescue

root=bootchain bootchain=waitdev,mountfs,mountfs,overlayfs,rootfs \
  waitdev=CDROM:LABEL=ALT_regular-rescue/x86_64 \
  mountfs=dev \
  mountfs=rescue

Пристраивание «шагов» bootchain слева от alboot

# Ждём появление раздела «alt-live-storage» и устройство CDROM, затем грузим altboot, как обычно
root=bootchain bootchain=waitdev,waitdev,fg,altboot \
  waitdev=LABEL=alt-live-storage \
  waitdev=CDROM: \
  automatic=method:cdrom

# Образ диска загружается прямо в указанное устройство (когда make-initd devscpec будет понимать MODEL=...)
root=bootchain bootchain=waitdev,fg,download,... ip=dhcp4 \
  waitdev=MODEL=SAMSUNG_SSD_960_EVO_250GB \
  altboot_download=method=url;url=http://192.168.15.1/images/alt-ws11.img

Больше примеров в полном руководстве, ещё примеры проверки сетевой загрузки в пакете make-initrd-bootchain-doc.

Журналирование и отладка

Демон chaind ведёт журнал /var/log/chaind.log, доступный в stage1 на tty3 (по нажатию Alt-F3), что определяется дефолтными значениями BC_LOG_VT и BC_LOGFILE в файле конфигурации, а также перебивается параметром make-initrd rdlog=console или rdlog=printk в рантайме, что предписывает выводить журнал на /dev/console или на /dev/ttyprintk.

Расширенная диагностика включается через /proc/cmdline параметром bc_debug. В этом случае журнал копируется по тому же пути в stage2 после отработки последнего «шага», а если в новой rootfs нет /var/log, то копируется в /dev/bootchain/. Аналогами propagator-debug в самом make-initrd можно считать параметр rdshell либо stop=runinit, для их использования образ initramfs должен быть собран с соответствующей фичей «rdshell».

Полезные ссылки

Enjoy! ;-)