Installer/common/altboot: различия между версиями
Klark (обсуждение | вклад) |
Klark (обсуждение | вклад) |
||
(не показаны 44 промежуточные версии 2 участников) | |||
Строка 7: | Строка 7: | ||
'''altboot''' (альтернативная загрузка) — дистронезависимая система загрузки, построенная поверх bootchain, работающая как часть run-time [[Make-initrd|make-initrd]], альтернатива [[Installer/common/propagator|propagator]] с [[Make-initrd-propagator|make-initrd-propagator]] в дистрибутивах ОС Альт на «[[P11|одиннадцатой платформе]]», обеспечивающая дополнительный функционал, слой совместимости с установщиком, [[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- | {{Note|Здесь приведено краткое описание '''bootchain+altboot'''. Скачать полное руководство к версии '''0.1.5-alt24''' можно тут — [[Файл:От пропагатора к altboot.pdf]].}} | ||
Важно понимать, что основная концепция [[Make-initrd|make-initrd]] — event-driven, т.е. событийно ориентированная модель: обнаружился диск — выполнился обработчик, тогда как в [[Installer/common/propagator|пропагаторе]] было принято сканировать и ждать жёстко закодированное время. Две концепции противоположны, но '''altboot''' позволяет их совместить так, что теперь в установочных и «живых» дисках загрузка выполняется run-time'ом [[Make-initrd|make-initrd]], а не пропагатором. | Важно понимать, что основная концепция [[Make-initrd|make-initrd]] — event-driven, т.е. событийно ориентированная модель: обнаружился диск — выполнился обработчик, тогда как в [[Installer/common/propagator|пропагаторе]] было принято сканировать и ждать жёстко закодированное время. Две концепции противоположны, но '''altboot''' позволяет их совместить так, что теперь в установочных и «живых» дисках загрузка выполняется run-time'ом [[Make-initrd|make-initrd]], а не пропагатором. | ||
Строка 14: | Строка 14: | ||
Теперь для загрузки достаточно подключить [[#Модули bootchain+altboot|необходимые модули]] '''bootchain''' вместо '''propagator''' + '''make-initrd-propagator''' и добавить к привычным всего пару опций в /proc/cmdline: | Теперь для загрузки достаточно подключить [[#Модули bootchain+altboot|необходимые модули]] '''bootchain''' вместо '''propagator''' + '''make-initrd-propagator''' и добавить к привычным всего пару опций в /proc/cmdline: | ||
'''root=bootchain bootchain=fg,altboot''' automatic=… [ramdisk_size=…] [lowmem] [stagename={altinst|live|rescue}] | '''root=bootchain bootchain=fg,altboot''' automatic=… [ip=…] \ | ||
[ramdisk_size=…] [lowmem] [stagename={altinst|live|rescue}] | |||
Для [[#Параметры сетевой загрузки|сетевой загрузки]] необходимо также добавлять параметр '''ip=…''' (рекомендуется '''ip=dhcp4'''). | Для [[#Параметры сетевой загрузки|сетевой загрузки]] необходимо также добавлять параметр '''ip=…''' (рекомендуется '''ip=dhcp4'''). | ||
{{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 | {{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 по зависимостям. Например: | [[#Конфигурация|Конфигурирование]] '''bootchain''' и '''altboot''' выполняется через файл '''/etc/sysconfig/bootchain''', используемые фичи перечисляются в '''/etc/initrd.mk''' перед созданием образа stage1 командой '''make-initrd'''. [[#Модули bootchain+altboot|Разделение на модули]] (подпакеты) позволяет добиться оптимального наполнения initramfs только необходимым для загрузки содержимым. Так, для загрузки по протоколу NFS достаточно установить пакет '''make-initrd-bootchain-nfs''' и задействовать фичу '''bootchain-nfs''', всё остальное попадёт в initramfs по зависимостям. Например: | ||
Строка 27: | Строка 28: | ||
</pre> | </pre> | ||
Детали про сборку универсального '''initrd.img''' см. в разделе [[#Создание своего initrd.img c bootchain|Создание своего initrd.img c bootchain]]. | |||
Параметр '''automatic''' обрёл несколько новых аргументов, утратив при этом аргументы, связанные с настройкой сети, типа «'''network''':...» (они игнорируются, т.к. сеть теперь настраивает сам make-initrd). Например, можно задавать пользовательский таймаут или дополнительные опции монтирования. См. детали в разделе [[#Аргументы параметра automatic|Аргументы параметра automatic]]. Немного поменялась и логика работы со спецификациями дисков: теперь спецификация загрузочного диска должна однозначно указывать только на один диск. Если спецификации соответствует больше или меньше носителей, '''altboot''' выведет диалог выбора накопителя, тогда как '''propagator''' мог загрузиться с первого попавшегося. | Параметр '''automatic''' обрёл несколько новых аргументов, утратив при этом аргументы, связанные с настройкой сети, типа «'''network''':...» (они игнорируются, т.к. сеть теперь настраивает сам make-initrd). Например, можно задавать пользовательский таймаут или дополнительные опции монтирования. См. детали в разделе [[#Аргументы параметра automatic|Аргументы параметра automatic]]. Немного поменялась и логика работы со спецификациями дисков: теперь спецификация загрузочного диска должна однозначно указывать только на один диск. Если спецификации соответствует больше или меньше носителей, '''altboot''' выведет диалог выбора накопителя, тогда как '''propagator''' мог загрузиться с первого попавшегося. | ||
Строка 33: | Строка 34: | ||
=Методы загрузки altboot= | =Методы загрузки altboot= | ||
В '''altboot''' практически все параметры любого метода загрузки имеют свои значения по умолчанию, т.е. для загрузки достаточно указать через /proc/cmdline ('''automatic=method:…''') или выбрать средствами диалога только нужный метод загрузки. При загрузке с обычной Linux rootfs, а не с универсального загрузочного носителя, напротив, метод не указывается (method=""). | В '''altboot''' практически все параметры любого '''метода загрузки''' имеют свои значения по умолчанию, т.е. для загрузки достаточно указать через /proc/cmdline ('''automatic=method:…''') или выбрать средствами диалога только нужный '''метод загрузки'''. При загрузке с обычной Linux rootfs, а не с универсального загрузочного носителя, напротив, метод не указывается (method=""). | ||
[[Файл:Altboot main menu.png|обрамить|справа|альт=Выбор метода загрузки|Главное меню altboot]] | [[Файл:Altboot main menu.png|обрамить|справа|альт=Выбор метода загрузки|Главное меню altboot]] | ||
* '''nfs''' — указанный ISO-образ либо каталог монтируется с сервера NFS; | * '''nfs''' — указанный ISO-образ (либо каталог с распакованным ISO-образом) монтируется с сервера NFS; | ||
* '''ftp''' — образ скачивается целиком с сервера по протоколу FTP; | * '''ftp''' — сквош stage2 (или ISO-образ) скачивается целиком с сервера по протоколу FTP; | ||
* '''http''' — образ скачивается целиком с сервера по протоколу HTTP; | * '''http''' — сквош stage2 (или ISO-образ) скачивается целиком с сервера по протоколу HTTP; | ||
* '''cifs''' — указанный ISO-образ либо каталог монтируется с сервера SAMBA; | * '''cifs''' — указанный ISO-образ (либо каталог с распакованным ISO-образом) монтируется с сервера SAMBA; | ||
* '''cdrom''' — загрузка | * '''cdrom''' — загрузка с локального носителя CD/DVD-ROM Drive, в том числе, c по-байтно скопированного на перезаписываемый диск образа ISO-9660 Hybrid, и опциональной возможностью работы с [[#Постоянное хранилище сеансов LiveCD|постоянным хранилищем сеансов LiveCD]]; | ||
* '''disk''' — загрузка с локального | * '''disk''' — загрузка с локального носителя, в том числе, записанного в формате ISO-9660 Hybrid на перезаписываемый диск, с раздела диска либо лежащего на нём ISO-образа, и опциональной возможностью работы с [[#Постоянное хранилище сеансов LiveCD|постоянным хранилищем сеансов LiveCD]]; | ||
Методы загрузки '''http'''/'''ftp''' пока что не предназначены для [[#Read-only слои LiveCD|работы с read-only слоями LiveCD]], но если кому-то это нужно, добавить их поддержку не очень сложно. | Методы загрузки '''http'''/'''ftp''' пока что не предназначены для [[#Read-only слои LiveCD|работы с read-only слоями LiveCD]], но если кому-то это будет очень нужно, добавить их поддержку не очень сложно. То же касается и указания номера порта. Пропагатор не поддерживал добавление номера порта и явно подразумевал использование стандартых портов для протокола (80, 21). В этой части '''altboot''' унаследовал данное поведение. | ||
Существует два режима работы с этими '''методами загрузки''' — старый вариант, когда путь на сервере рассматривается как каталог, из которого загружается файл со сквошом второй стадии, и новый вариант, когда путь на сервере рассматривается как нераспакованный ISO-образ, загружаемый целиком вместо сквоша. Для работы с новым режимом достаточно убрать параметр загрузки '''ramdisk_size=…''' и добавить параметр '''automatic=…,type:iso,…''' | |||
Оба метода имеют небольшие отличия от исходной реализации в пропагаторе. Если гибридный ISO-образ записан на | При использовании «локальных» '''методов загрузки''' ('''disk''' или '''cdrom'''), становится доступной возможность обновлять «на лету» образ initramfs с дополнительного внешнего носителя, что в частности позволяет догружать недостающие модули ядра или правила udev. За это отвечает параметр '''updatemodules''' (см. детали в полном руководстве). Совместно с модулем '''make-initrd-bootchain-liverw''' оба метода поддерживают возможность работы с [[#Постоянное хранилище сеансов LiveCD|постоянным хранилищем сеансов LiveCD]]. | ||
Оба метода имеют небольшие отличия от исходной реализации в пропагаторе. Если гибридный ISO-образ записан на перезаписываемый носитель (USB-флеш, MMC-карту, и т.д.), то метод загрузки '''cdrom''' выполняет загрузку не с диска, а с первого раздела, что позволяет, при первой необходимости, создать [[#Постоянное хранилище сеансов LiveCD|дополнительный раздел для работы с сеансами LiveCD]]. Метод '''disk''' позволяет организовать загрузку не только с диска или раздела, но и с лежащего на нём ISO-образа, а это можно использовать для загрузки разных дистрибутивов, размещённых на одном носителе. | |||
=Параметры загрузки= | =Параметры загрузки= | ||
Строка 56: | Строка 59: | ||
Для работы сетевой загрузки необходимо добавлять параметр '''ip=…''' — он нужен make-initrd для настройки сети: '''altboot''' полагается на то, что сеть будет настроена кем-то и ожидает появления сети при использовании сетевых [[#Методы загрузки altboot|методов загрузки]], таких, как '''nfs''' или '''http'''. Например, '''ip=dhcp''' заставит make-initrd поднять сеть и автоматически её настроить на всех имеющихся сетевых интерфейсах по протоколам DHCPv4 и DHCPv6. | Для работы сетевой загрузки необходимо добавлять параметр '''ip=…''' — он нужен make-initrd для настройки сети: '''altboot''' полагается на то, что сеть будет настроена кем-то и ожидает появления сети при использовании сетевых [[#Методы загрузки altboot|методов загрузки]], таких, как '''nfs''' или '''http'''. Например, '''ip=dhcp''' заставит make-initrd поднять сеть и автоматически её настроить на всех имеющихся сетевых интерфейсах по протоколам DHCPv4 и DHCPv6. | ||
Для дистрибутивов ОС Альт лучше задавать через /proc/cmdline параметр '''ip=dhcp4''', поскольку установщик не работает с IPv6, а | Для дистрибутивов ОС Альт лучше задавать через /proc/cmdline параметр '''ip=dhcp4''', поскольку установщик не работает с IPv6, а отсутствие в сети двух разных типов DHCP-серверов увеличивает время настройки секунд на 20 для каждого интерфейса. | ||
В конфигурациях с несколькими сетевыми интерфейсами можно задавать сразу два параметра: '''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}'''. | В конфигурациях с несколькими сетевыми интерфейсами можно задавать сразу два параметра: '''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}'''. | ||
Строка 66: | Строка 69: | ||
* Если указан '''ramdisk_size=…''', на сервере ожидается каталог, из которого сквош скачивается в RAM-диск; | * Если указан '''ramdisk_size=…''', на сервере ожидается каталог, из которого сквош скачивается в RAM-диск; | ||
* При наличии '''automatic=type:iso,...''', нераспакованный ISO-образ скачивается в TMPFS; | * При наличии '''automatic=type:iso,...''', нераспакованный ISO-образ скачивается в TMPFS; | ||
* Иначе ожидается каталог, из которого сквош скачивается в TMPFS. | * Иначе на сервере ожидается каталог, из которого сквош скачивается в TMPFS. | ||
При этом параметры '''lowmem''' и '''live''' не | При этом параметры '''lowmem''' и '''live''' не оказывают влияния на использование памяти. Для всех остальных методов: | ||
* Если указаны '''lowmem''' или '''live''', в ОЗУ ничего не загружается, просто монтируется сквош; | * Если указаны '''lowmem''' или '''live''', в ОЗУ ничего не загружается, просто монтируется сквош; | ||
Строка 81: | Строка 84: | ||
* '''hash''' — хэш-сумма сквоша второй стадии загрузки, посчитанная по алгоритму SHA-256 (в altboot можно использовать и другие варианты хэша с некоторыми синтаксическими добавками); | * '''hash''' — хэш-сумма сквоша второй стадии загрузки, посчитанная по алгоритму SHA-256 (в altboot можно использовать и другие варианты хэша с некоторыми синтаксическими добавками); | ||
* '''live''' — (флаг) помечает ISO-образ как LiveCD, что предписывает всегда использовать режим экономии памяти; | * '''live''' — (флаг) помечает ISO-образ как LiveCD, что предписывает всегда использовать режим экономии памяти; | ||
* '''live_rw''' — (флаг) предписывает использовать [[#Постоянное хранилище сеансов LiveCD| | * '''live_rw''' — (флаг) предписывает использовать [[#Постоянное хранилище сеансов LiveCD|раздел для сеансов LiveCD/Rescue]]; | ||
* '''lowmem''' — (флаг) включает режим экономии памяти, монтируя образ непосредственно с носителя без предварительной загрузки в ОЗУ; | * '''lowmem''' — (флаг) включает режим экономии памяти, монтируя образ непосредственно с носителя без предварительной загрузки в ОЗУ; | ||
* '''profile''' — профиль сетевой загрузки с поддержкой [[#Read-only слои LiveCD| | * '''profile''' — профиль сетевой загрузки с поддержкой [[#Read-only слои LiveCD|read-only слоёв LiveCD]] (в altboot по умолчанию profile=default и может работать не только с NFS); | ||
* '''ramdisk_size''' — (целое, ядерный) число килобайт, выделяемых ядром для устройств /dev/ram<N>, в один из которых будет загружаться сквош второй стадии (в altboot этот параметр стал необязательным); | * '''ramdisk_size''' — (целое, ядерный) число килобайт, выделяемых ядром для устройств /dev/ram<N>, в один из которых будет загружаться сквош второй стадии (в altboot этот параметр стал необязательным); | ||
* '''rescue''' — (флаг) помечает ISO-образ как Rescue LiveCD, что влияет только на вывод финальных сообщений; | * '''rescue''' — (флаг) помечает ISO-образ как Rescue LiveCD, что влияет только на вывод финальных сообщений; | ||
Строка 94: | Строка 97: | ||
* '''testing''' — «мёртвый» параметр, реально ни на что не влиял, в последних версиях пропагатора перенаправлял диагностику на /dev/ttyprintk; | * '''testing''' — «мёртвый» параметр, реально ни на что не влиял, в последних версиях пропагатора перенаправлял диагностику на /dev/ttyprintk; | ||
==Новые параметры | ==Новые параметры bootchain и altboot== | ||
* '''bc_debug''' — (флаг) включает режим расширенной диагностики и копирует журнал в stage2; | * '''bc_debug''' — (флаг) включает режим расширенной диагностики и копирует журнал в stage2; | ||
Строка 100: | Строка 103: | ||
* '''bootchain''' — список «шагов» bootchain через запятую (для совместимости с пропагатором д.б. «fg,altboot»); | * '''bootchain''' — список «шагов» bootchain через запятую (для совместимости с пропагатором д.б. «fg,altboot»); | ||
* '''cifsopts''' — дополнительные опции монтирования SMB-ресурсов, используемые всеми «шагами» cifs; | * '''cifsopts''' — дополнительные опции монтирования SMB-ресурсов, используемые всеми «шагами» cifs; | ||
* '''console''' — (ядерный) определяет консоль для вывода сообщений, в altboot влияет на настройку диалогов; | * '''console''' — (ядерный) определяет консоль для вывода сообщений, в altboot влияет на настройку диалогов и вывод журнала; | ||
* '''curlopts''' — (внешний) дополнительные опции curl, используемые всеми «шагами» download; | * '''curlopts''' — (внешний) дополнительные опции curl, используемые всеми «шагами» download; | ||
* '''noaskuser''' — (флаг, как и некоторые значения параметра console | * '''noaskuser''' — (флаг) отключает диалоги ввода, как и некоторые значения параметра console; | ||
* '''nolines''' — (флаг) запрещает вывод символов псевдографики в диалогах ввода/вывода; | * '''nolines''' — (флаг) запрещает вывод символов псевдографики в диалогах ввода/вывода; | ||
* '''nfsopts''' — дополнительные опции монтирования NFS-каталогов, используемые всеми «шагами» nfs; | * '''nfsopts''' — дополнительные опции монтирования NFS-каталогов, используемые всеми «шагами» nfs; | ||
Строка 111: | Строка 114: | ||
Не используются в явном виде в режиме совместимости с [[Installer/common/propagator|пропагатором]], вероятно вам это конфигурировать не придётся: | Не используются в явном виде в режиме совместимости с [[Installer/common/propagator|пропагатором]], вероятно вам это конфигурировать не придётся: | ||
* '''altboot_checksum'''[] — параметры всех «шагов» checksum: "[<hashprog>:]< | * '''altboot_checksum'''[] — параметры всех «шагов» checksum: "[<hashprog>:]<hashsum>[:<filename>]"; | ||
* '''altboot_cifs'''[] — параметры всех «шагов» cifs: server, directory, domain, user, pass, timeout, options, overlays; | * '''altboot_cifs'''[] — параметры всех «шагов» cifs: server, directory, domain, user, pass, timeout, options, overlays; | ||
* '''altboot_copyfile'''[] — параметры всех «шагов» copyfile: src, dst, size; | * '''altboot_copyfile'''[] — параметры всех «шагов» copyfile: src, dst, size; | ||
Строка 118: | Строка 121: | ||
* '''altboot_localdev'''[] — параметры всех «шагов» localdev: method, disk, part, uuid, label, directory, overlays={local_profile|<LABEL>}, timeout, options; | * '''altboot_localdev'''[] — параметры всех «шагов» localdev: method, disk, part, uuid, label, directory, overlays={local_profile|<LABEL>}, timeout, options; | ||
* '''altboot_nfs'''[] — параметры всех «шагов» nfs: server, directory, timeout, options, overlays; | * '''altboot_nfs'''[] — параметры всех «шагов» nfs: server, directory, timeout, options, overlays; | ||
* '''altboot_squashfs'''[] — параметры всех «шагов» squashfs: {"/$stagename" | " | * '''altboot_squashfs'''[] — параметры всех «шагов» squashfs: {"/$stagename" | "-"}. | ||
==Параметры pipeline и bootchain== | ==Параметры pipeline и bootchain== | ||
Строка 131: | Строка 134: | ||
* '''mountfs'''[] — параметры всех «шагов» mountfs; | * '''mountfs'''[] — параметры всех «шагов» mountfs; | ||
* '''waitedev'''[] — параметры всех «шагов» waitedev; | * '''waitedev'''[] — параметры всех «шагов» waitedev; | ||
* '''waitdev_timeout''' — суммарный таймаут для выполнения всех «шагов» waitedev (расширение bootchain). | * '''waitdev_timeout''' — (целое) суммарный таймаут для выполнения всех «шагов» waitedev (расширение bootchain). | ||
=Аргументы параметра automatic= | =Аргументы параметра automatic= | ||
Аргументы параметра '''automatic=…''' используются различными [[#Методы загрузки altboot|методами загрузки]] | Аргументы параметра '''automatic=…''' используются различными [[#Методы загрузки altboot|методами загрузки]], они перечисляются в формате «параметр1:значение1,параметр2:значение2,…». Запись '''automatic=0''' заставит '''altboot''' вывести [[#Методы загрузки altboot|диалог выбора метода загрузки]] и эквивалентна «automatic=method:auto». Приведённый ниже список изначально не исчерпывающий, и он может расширяться по мере создания новых [[#Модули bootchain+altboot|модулей]]: | ||
* '''directory''' — обычно монтируемый каталог или путь к ISO-образу; | * '''directory''' — обычно монтируемый каталог или путь к ISO-образу; | ||
Строка 167: | Строка 170: | ||
=Read-only слои LiveCD= | =Read-only слои LiveCD= | ||
При сетевой загрузке с сервера '''NFS''' или с сервера '''SAMBA''', а также при локальной загрузке методами '''disk''' или '''cdrom''' с универсальных образов LiveCD или Rescue допускается работа со слоями LiveCD, доступными только на чтение. При этом самым нижним слоем для чтения становится сквош второй стадии (корневой системы) на исходном ISO-образе, поверх него накладываются образы, создаваемые системным администратором. Самый верхний R/W-слой создаётся для записи на tmpfs или выделенный раздел (только при локальной загрузке при использовании параметра '''live_rw''', см. [[#Постоянное хранилище сеансов LiveCD|предыдущий раздел]]). | При сетевой загрузке с сервера '''NFS''' или с сервера '''SAMBA''', а также при локальной загрузке методами '''disk''' или '''cdrom''' с универсальных образов '''LiveCD''' или '''Rescue''' допускается работа со слоями LiveCD, доступными только на чтение. При этом самым нижним слоем для чтения становится сквош второй стадии (корневой системы) на исходном ISO-образе, поверх него накладываются образы, создаваемые системным администратором. Самый верхний R/W-слой создаётся для записи на tmpfs или выделенный раздел (только при локальной загрузке при использовании параметра '''live_rw''', см. [[#Постоянное хранилище сеансов LiveCD|предыдущий раздел]]). | ||
Из полученного «слоёного пирога» формируется rootfs, в которую происходит загрузка. Это даёт возможность администраторам вносить необходимые изменения в настройки исходного диска и предоставлять это пользователям сетевых бездисковых классов с доступом только на чтение. Такой способ централизованного управления настройками и загрузки с использованием read-only сквошей значительно эффективнее механизма работы с | Из полученного «слоёного пирога» формируется rootfs, в которую происходит загрузка. Это даёт возможность администраторам вносить необходимые изменения в настройки исходного диска и предоставлять это пользователям сетевых бездисковых классов с доступом только на чтение. Такой способ централизованного управления настройками и загрузки с использованием read-only сквошей значительно эффективнее механизма работы с [[#Постоянное хранилище сеансов LiveCD|постоянным хранилищем сеансов]], тем более, если говорить о локальной загрузке с USB-флеш и подобных относительно медленных накопителей. | ||
Ниже представлена таблица с принятыми умолчаниями в ОС Альт: | Ниже представлена таблица с принятыми умолчаниями в ОС Альт: | ||
Строка 185: | Строка 188: | ||
| '''nfs''' || $OEM_NFS_NETINST || /srv/public/netinst/overlays-live || На том же сервере NFS | | '''nfs''' || $OEM_NFS_NETINST || /srv/public/netinst/overlays-live || На том же сервере NFS | ||
|} | |} | ||
Имя профиля — это относительный путь к каталогу, задаваемому пропагаторным параметром '''profile''', например, «rescue/overlays». При загрузке с использованием слоёв (оверлеев) LiveCD, все файлы с окончаниями ''' | Имя профиля — это относительный путь к каталогу, задаваемому пропагаторным параметром '''profile''', например, «rescue/overlays». При загрузке с использованием слоёв (оверлеев) LiveCD, все файлы с окончаниями '''.squashfs''' и '''.iso''' в каталоге профиля рассматриваются как оверлеи и монтируются слоями друг над другом в алфавитном порядке. Так что в каталоге на сервере (и в соответствующем локальном каталоге) можно разместить не один, а несколько разных профилей загрузки, а в каждом из них собственный набор LiveCD-оверлеев. Путь к каталогу с профилями для сетевых [[#Методы загрузки altboot|методов загрузки]] определяется параметром '''overlays''', но его можно опустить, и тогда используются дефолты из таблицы. Для локальных [[#Методы загрузки altboot|методов загрузки]] '''overlays''' указывает на раздел с оверлеями. | ||
Вплоть до выхода продуктов на | Вплоть до выхода продуктов на «[[P11|одиннадцатой платформе]]» в ОС Альт возможность работы с read-only слоями LiveCD обеспечивалась только для [[#Методы загрузки altboot|метода загрузки]] '''nfs'''. При загрузке средствами '''propagator''' c '''init-bottom''', если имя профиля не указывалось, то соответствующий уровень каталога не использовался. При переходе на '''altboot''' следует учитывать, что если '''profile''' не указан в /proc/cmdline, его значение по умолчанию — «default», соответствующий подкаталог должен быть создан на сервере. | ||
Другие детали и особенности реализации смотрите в полном руководстве. | Другие детали и особенности реализации смотрите в полном руководстве. | ||
Строка 194: | Строка 197: | ||
* '''make-initrd-bootchain''' — мета-пакет, собирающий воедино все существующие модули bootchain, он же исходный SRPM; | * '''make-initrd-bootchain''' — мета-пакет, собирающий воедино все существующие модули bootchain, он же исходный SRPM; | ||
* '''make-initrd-bootchain-core''' — базовый функционал, включая «шаги» debug, fg, mountfs, noop, noretry, overlayfs, retry и | * '''make-initrd-bootchain-core''' — базовый функционал, включая «шаги» debug, fg, mountfs, noop, noretry, overlayfs, retry, rootfs и wait-resume, т.е. это расширение исходной фичи [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-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-waitdev''' — обеспечивает метод ожидания локального носителя по заданной спецификации, немного расширен и отделён в подпакет из исходной фичи [https://github.com/osboot/make-initrd/tree/master/features/pipeline pipeline]; | ||
* '''make-initrd-bootchain-interactive''' — обеспечивает интерактивное взаимодействие, предоставляет диалоговые виджеты; | * '''make-initrd-bootchain-interactive''' — обеспечивает интерактивное взаимодействие, предоставляет диалоговые виджеты; | ||
* '''make-initrd-bootchain-waitnet''' — обеспечивает ожидание сети и экспорт сетевых настроек в stage2, используется всеми сетевыми [[#Методы загрузки altboot|методами загрузки altboot]] (ftp, http, nfs, cifs) и является временным кодом; | * '''make-initrd-bootchain-waitnet''' — обеспечивает ожидание сети и экспорт сетевых настроек в stage2, используется всеми сетевыми [[#Методы загрузки altboot|методами загрузки altboot]] (ftp, http, nfs, cifs) и является временным кодом; | ||
* '''make-initrd-bootchain-altboot''' — весь общий функционал пропагатора и «шаг», транслирующий его аргументы; | * '''make-initrd-bootchain-altboot''' — весь общий функционал пропагатора и «шаг», транслирующий его аргументы; | ||
* '''make-initrd-bootchain-localdev''' — обеспечивает [[#Методы загрузки altboot|методы загрузки]] disk/cdrom, | * '''make-initrd-bootchain-localdev''' — обеспечивает [[#Методы загрузки altboot|методы загрузки]] disk/cdrom, попадание в stage1 на этапе загрузки дополнительных модулей ядра и правил udev; | ||
* '''make-initrd-bootchain-liverw''' — обеспечивает дополнительный функционал для работы с [[#Постоянное хранилище сеансов LiveCD|R/W | * '''make-initrd-bootchain-liverw''' — обеспечивает дополнительный функционал для работы с [[#Постоянное хранилище сеансов LiveCD|постоянным R/W хранилищем]]; | ||
* '''make-initrd-bootchain-nfs''' — обеспечивает [[#Методы загрузки altboot|метод загрузки]] с сервера NFS и поддержку [[#Read-only слои LiveCD|read-only слоёв LiveCD]] | * '''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-cifs''' — обеспечивает [[#Методы загрузки altboot|метод загрузки]] с сервера SAMBA и поддержку [[#Read-only слои LiveCD|read-only слоёв LiveCD]]; | ||
* '''make-initrd-bootchain-doc''' — документация и набор тестов. | * '''make-initrd-bootchain-doc''' — документация и набор тестов. | ||
Строка 209: | Строка 212: | ||
Конфигурирование '''bootchain''' и '''altboot''' выполняется через файл '''/etc/sysconfig/bootchain'''. | Конфигурирование '''bootchain''' и '''altboot''' выполняется через файл '''/etc/sysconfig/bootchain'''. | ||
Про кофигурирование в [[Mkimage-profiles|mkimage-profiles]] смотрите [https://nightly.altlinux.org/docs/mkimage-profiles.html#_features_in_initrd_bootchain features.in/initrd-bootchain/README]. | |||
==Модуль make-initrd-bootchain-core== | ==Модуль make-initrd-bootchain-core== | ||
Строка 220: | Строка 225: | ||
==Модуль make-initrd-bootchain-waitdev== | ==Модуль make-initrd-bootchain-waitdev== | ||
* '''WAITDEV_TIMEOUT''' — глобальный дефолтный суммарный таймаут для всех «шагов» waitdev | * '''WAITDEV_TIMEOUT''' — глобальный дефолтный суммарный таймаут для всех «шагов» waitdev. | ||
==Модуль make-initrd-bootchain-altboot== | ==Модуль make-initrd-bootchain-altboot== | ||
Строка 227: | Строка 232: | ||
* '''OEM_DISTRIBUTION''' — используется в качестве названия дистрибутива в диалогах altboot; | * '''OEM_DISTRIBUTION''' — используется в качестве названия дистрибутива в диалогах altboot; | ||
* '''OEM_CDROOT''' — необязательный путь к корню ISO-образа внутри initramfs, в ОС Альт это /image; | * '''OEM_CDROOT''' — необязательный путь к корню ISO-образа внутри initramfs, в ОС Альт это /image; | ||
* '''OEM_LIVE_STORAGE''' — метка тома live_rw раздела, если указана; | * '''OEM_LIVE_STORAGE''' — метка тома [[#Постоянное хранилище сеансов LiveCD|live_rw раздела]], если указана; | ||
* '''OEM_BAD_STORAGE''' — метка тома, чтобы не использовать live_rw раздел на плохом или слишком медленном устройстве; | * '''OEM_BAD_STORAGE''' — метка тома, чтобы не использовать [[#Постоянное хранилище сеансов LiveCD|live_rw раздел]] на плохом или слишком медленном устройстве; | ||
* '''OEM_SETUP_STORAGE''' — метка тома раздела для обновления initramfs «на лету»; | * '''OEM_SETUP_STORAGE''' — метка тома раздела для обновления initramfs «на лету»; | ||
* '''OEM_IMAGES_BASE''' — куда в stage2 монтировать каталог с образами слоёв LiveCD; | * '''OEM_IMAGES_BASE''' — куда в stage2 монтировать каталог с образами [[#Read-only слои LiveCD|слоёв LiveCD]]; | ||
* '''OEM_OVERLAYS_DIR''' — куда в stage2 монтировать сами слои LiveCD; | * '''OEM_OVERLAYS_DIR''' — куда в stage2 монтировать сами [[#Read-only слои LiveCD|слои LiveCD]]; | ||
* '''OEM_URL_NETINST''' — значение по умолчанию компоненты directory для загрузки методами http и ftp; | * '''OEM_URL_NETINST''' — значение по умолчанию компоненты directory для загрузки методами http и ftp; | ||
* '''OEM_NFS_NETINST''' — значение по умолчанию компоненты directory для загрузки методом nfs; | * '''OEM_NFS_NETINST''' — значение по умолчанию компоненты directory для загрузки методом nfs; | ||
Строка 258: | Строка 263: | ||
# Интерфейс с указанным MAC-адресом нужно назвать eth1 и поднять на нём сеть по протоколу DHCPv4 | # Интерфейс с указанным MAC-адресом нужно назвать eth1 и поднять на нём сеть по протоколу DHCPv4 | ||
automatic=method:ftp,... ifname=eth1: | automatic=method:ftp,... ifname=eth1:12:34:56:78:9a:bc ip=eth1:dhcp4 | ||
# Как пропагатор altboot тоже умеет, но это неинтересно | # Как пропагатор altboot тоже умеет, но это неинтересно и чревато не нужным диалогом, если приводов >1 | ||
automatic=method:cdrom lowmem | automatic=method:cdrom lowmem | ||
Строка 272: | Строка 277: | ||
automatic=method:cdrom,label:ALT_regular-rescue/x86_64 | automatic=method:cdrom,label:ALT_regular-rescue/x86_64 | ||
# Таких спецификаций лучше избегать, по крайне мере, здесь disk будет излишним | # Таких спецификаций с altboot лучше избегать, по крайне мере, здесь disk будет излишним | ||
automatic=method:disk,disk:nvme0n1,partition:nvme0n1p1,uuid:48B3-5935 | automatic=method:disk,disk:nvme0n1,partition:nvme0n1p1,uuid:48B3-5935 | ||
</pre> | </pre> | ||
Строка 306: | Строка 311: | ||
=Создание своего initrd.img c bootchain= | =Создание своего initrd.img c bootchain= | ||
Для | Для сборки универсального '''initrd.img''' требуется создать в пользовательском каталоге два конфига: '''bootchain''' и '''initrd.mk''', после чего выполнить команду: | ||
<pre>make-initrd --no-checks AUTODETECT= -c <путь/ | <pre> | ||
make-initrd --no-checks AUTODETECT= \ | |||
-c <путь/к/каталогу_с_конфигами>/initrd.mk \ | |||
BOOTCHAIN_PATH=<путь/к/каталогу_с_конфигами> \ | |||
-v -k <версия_ядра> | |||
</pre> | |||
В initrd.mk | В конфиге '''initrd.mk''' подключаются необходимые фичи и добавляются модули ядра либо каталоги с ними. В качестве примера смотрите [https://github.com/altlinux/mkimage-profiles/blob/master/features.in/initrd-bootchain/stage1/scripts.d/80-make-initrd-for-bootchain дистрибутивный скрипт] сборки универсального образа initramfs. Внутри каждого ISO-образа, собранного при помощи [[Mkimage-profiles|mkimage-profiles]], в каталоге '''/.disk''' находятся конфиги '''bootchain''' и '''initrd.mk''', а также скрипт '''mkinitrd''' c командами для сборки initrd*.img из этого ISO-образа. | ||
https://github.com/altlinux/mkimage-profiles/blob/master/features.in/initrd-bootchain/stage1/scripts.d/80-make-initrd-for-bootchain | |||
=Журналирование и отладка= | |||
= | Демон '''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'''. Если демон запущен в режиме совместимости с pipeline, то журнал будет назван иначе: '''/var/log/pipelined.log'''. | ||
Расширенная диагностика включается через /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]». | |||
В параметре '''stop''' нужно указывать сервис, перед запуском которого загрузка должна остановиться. При этом будет предложено запустить сервис и продолжить загрузку ('''Y'''), не запускать сервис и продолжить загрузку ('''N''') и запустить rdshell ('''S'''). Необходимо запустить rdshell, нажав '''S'''. Для выхода из shell нужно нажать '''Ctrl+D''' или выполнить команду '''exit'''. Список сервисов находится внутри initramfs в каталоге '''/etc/rc.d/init.d/'''. | |||
При отладке будет мешать интерактивная заставка '''plymouth''', поэтому нужно также указывать параметр '''nosplash'''. | |||
=Полезные ссылки= | =Полезные ссылки= |
Текущая версия от 23:20, 1 сентября 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 и более гибкие возможности дальнейшего расширения.
Важно понимать, что основная концепция make-initrd — event-driven, т.е. событийно ориентированная модель: обнаружился диск — выполнился обработчик, тогда как в пропагаторе было принято сканировать и ждать жёстко закодированное время. Две концепции противоположны, но altboot позволяет их совместить так, что теперь в установочных и «живых» дисках загрузка выполняется run-time'ом make-initrd, а не пропагатором.
Быстрое знакомство
Теперь для загрузки достаточно подключить необходимые модули bootchain вместо propagator + make-initrd-propagator и добавить к привычным всего пару опций в /proc/cmdline:
root=bootchain bootchain=fg,altboot automatic=… [ip=…] \ [ramdisk_size=…] [lowmem] [stagename={altinst|live|rescue}]
Для сетевой загрузки необходимо также добавлять параметр ip=… (рекомендуется ip=dhcp4).
Конфигурирование 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
Детали про сборку универсального initrd.img см. в разделе Создание своего initrd.img c bootchain.
Параметр automatic обрёл несколько новых аргументов, утратив при этом аргументы, связанные с настройкой сети, типа «network:...» (они игнорируются, т.к. сеть теперь настраивает сам make-initrd). Например, можно задавать пользовательский таймаут или дополнительные опции монтирования. См. детали в разделе Аргументы параметра automatic. Немного поменялась и логика работы со спецификациями дисков: теперь спецификация загрузочного диска должна однозначно указывать только на один диск. Если спецификации соответствует больше или меньше носителей, altboot выведет диалог выбора накопителя, тогда как propagator мог загрузиться с первого попавшегося.
Методы загрузки altboot
В altboot практически все параметры любого метода загрузки имеют свои значения по умолчанию, т.е. для загрузки достаточно указать через /proc/cmdline (automatic=method:…) или выбрать средствами диалога только нужный метод загрузки. При загрузке с обычной Linux rootfs, а не с универсального загрузочного носителя, напротив, метод не указывается (method="").
- nfs — указанный ISO-образ (либо каталог с распакованным ISO-образом) монтируется с сервера NFS;
- ftp — сквош stage2 (или ISO-образ) скачивается целиком с сервера по протоколу FTP;
- http — сквош stage2 (или ISO-образ) скачивается целиком с сервера по протоколу HTTP;
- cifs — указанный ISO-образ (либо каталог с распакованным ISO-образом) монтируется с сервера SAMBA;
- cdrom — загрузка с локального носителя CD/DVD-ROM Drive, в том числе, c по-байтно скопированного на перезаписываемый диск образа ISO-9660 Hybrid, и опциональной возможностью работы с постоянным хранилищем сеансов LiveCD;
- disk — загрузка с локального носителя, в том числе, записанного в формате ISO-9660 Hybrid на перезаписываемый диск, с раздела диска либо лежащего на нём ISO-образа, и опциональной возможностью работы с постоянным хранилищем сеансов LiveCD;
Методы загрузки http/ftp пока что не предназначены для работы с read-only слоями LiveCD, но если кому-то это будет очень нужно, добавить их поддержку не очень сложно. То же касается и указания номера порта. Пропагатор не поддерживал добавление номера порта и явно подразумевал использование стандартых портов для протокола (80, 21). В этой части altboot унаследовал данное поведение.
Существует два режима работы с этими методами загрузки — старый вариант, когда путь на сервере рассматривается как каталог, из которого загружается файл со сквошом второй стадии, и новый вариант, когда путь на сервере рассматривается как нераспакованный ISO-образ, загружаемый целиком вместо сквоша. Для работы с новым режимом достаточно убрать параметр загрузки ramdisk_size=… и добавить параметр automatic=…,type:iso,…
При использовании «локальных» методов загрузки (disk или cdrom), становится доступной возможность обновлять «на лету» образ initramfs с дополнительного внешнего носителя, что в частности позволяет догружать недостающие модули ядра или правила udev. За это отвечает параметр updatemodules (см. детали в полном руководстве). Совместно с модулем make-initrd-bootchain-liverw оба метода поддерживают возможность работы с постоянным хранилищем сеансов LiveCD.
Оба метода имеют небольшие отличия от исходной реализации в пропагаторе. Если гибридный ISO-образ записан на перезаписываемый носитель (USB-флеш, MMC-карту, и т.д.), то метод загрузки cdrom выполняет загрузку не с диска, а с первого раздела, что позволяет, при первой необходимости, создать дополнительный раздел для работы с сеансами 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 и live не оказывают влияния на использование памяти. Для всех остальных методов:
- Если указаны lowmem или live, в ОЗУ ничего не загружается, просто монтируется сквош;
- Если указан ramdisk_size=..., сквош загружается в RAM-диск;
- Иначе сквош загружается в TMPFS.
В последних трёх случаях, если указан путь не к каталогу, а к нераспакованному ISO-образу, то сначала будет смонтирован этот ISO-образ. altboot ориентируется не столько на наличие парметра ramdisk_size=…, сколько на наличие RAM-диска, созданного ядром по этому параметру, при этом сравнивая его фактический размер с необходимым для загрузки сквоша. Даже при наличии данного параметра, ядро не всегда создаёт RAM-диски. Например, некоторые Realtime-ядра не создают.
Поддерживаемые altboot и пропагатором
- automatic — основной накопитель аргументов пропагатора и altboot;
- hash — хэш-сумма сквоша второй стадии загрузки, посчитанная по алгоритму SHA-256 (в altboot можно использовать и другие варианты хэша с некоторыми синтаксическими добавками);
- live — (флаг) помечает ISO-образ как LiveCD, что предписывает всегда использовать режим экономии памяти;
- live_rw — (флаг) предписывает использовать раздел для сеансов LiveCD/Rescue;
- lowmem — (флаг) включает режим экономии памяти, монтируя образ непосредственно с носителя без предварительной загрузки в ОЗУ;
- profile — профиль сетевой загрузки с поддержкой read-only слоёв LiveCD (в altboot по умолчанию profile=default и может работать не только с NFS);
- 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;
Новые параметры bootchain и 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.
Параметры «шагов» altboot, определяемые в стиле bootchain
Не используются в явном виде в режиме совместимости с пропагатором, вероятно вам это конфигурировать не придётся:
- altboot_checksum[] — параметры всех «шагов» checksum: "[<hashprog>:]<hashsum>[:<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 сквошей значительно эффективнее механизма работы с постоянным хранилищем сеансов, тем более, если говорить о локальной загрузке с 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 и wait-resume, т.е. это расширение исходной фичи 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, попадание в stage1 на этапе загрузки дополнительных модулей ядра и правил udev;
- make-initrd-bootchain-liverw — обеспечивает дополнительный функционал для работы с постоянным R/W хранилищем;
- 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.
Про кофигурирование в mkimage-profiles смотрите features.in/initrd-bootchain/README.
Модуль 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:12:34:56:78:9a:bc ip=eth1:dhcp4 # Как пропагатор altboot тоже умеет, но это неинтересно и чревато не нужным диалогом, если приводов >1 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 # Таких спецификаций с altboot лучше избегать, по крайне мере, здесь 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.
Создание своего initrd.img c bootchain
Для сборки универсального initrd.img требуется создать в пользовательском каталоге два конфига: bootchain и initrd.mk, после чего выполнить команду:
make-initrd --no-checks AUTODETECT= \ -c <путь/к/каталогу_с_конфигами>/initrd.mk \ BOOTCHAIN_PATH=<путь/к/каталогу_с_конфигами> \ -v -k <версия_ядра>
В конфиге initrd.mk подключаются необходимые фичи и добавляются модули ядра либо каталоги с ними. В качестве примера смотрите дистрибутивный скрипт сборки универсального образа initramfs. Внутри каждого ISO-образа, собранного при помощи mkimage-profiles, в каталоге /.disk находятся конфиги bootchain и initrd.mk, а также скрипт mkinitrd c командами для сборки initrd*.img из этого ISO-образа.
Журналирование и отладка
Демон chaind ведёт журнал /var/log/chaind.log, доступный в stage1 на tty3 (по нажатию Alt-F3), что определяется дефолтными значениями BC_LOG_VT и BC_LOGFILE в файле конфигурации, а также перебивается параметром make-initrd rdlog=console или rdlog=printk в рантайме, что предписывает выводить журнал на /dev/console или на /dev/ttyprintk. Если демон запущен в режиме совместимости с pipeline, то журнал будет назван иначе: /var/log/pipelined.log.
Расширенная диагностика включается через /proc/cmdline параметром bc_debug. В этом случае журнал копируется по тому же пути в stage2 после отработки последнего «шага», а если в новой rootfs нет /var/log, тогда копируется в /dev/bootchain/. Аналогами propagator-debug в самом make-initrd является параметр rdshell либо stop=runinit, для их использования образ initramfs должен быть собран с соответствующей фичей «rdshell».
В параметре stop нужно указывать сервис, перед запуском которого загрузка должна остановиться. При этом будет предложено запустить сервис и продолжить загрузку (Y), не запускать сервис и продолжить загрузку (N) и запустить rdshell (S). Необходимо запустить rdshell, нажав S. Для выхода из shell нужно нажать Ctrl+D или выполнить команду exit. Список сервисов находится внутри initramfs в каталоге /etc/rc.d/init.d/.
При отладке будет мешать интерактивная заставка plymouth, поэтому нужно также указывать параметр nosplash.
Полезные ссылки
- Make-initrd
- Propagator
- Make-initrd-propagator
- https://bugzilla.altlinux.org/30315#c29
- https://lists.altlinux.org/pipermail/devel/2018-April/204192.html
- https://packages.altlinux.org/ru/sisyphus/srpms/make-initrd-bootchain/
- http://0x1.tv/20210418F
Enjoy! ;-)