Installer/common/altboot

Материал из ALT Linux Wiki
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


bootchain+altboot

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

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=dhcp4.

Внимание! В altboot нет диалогов для настройки сети, она конфигурируется только через /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). Например, можно задавать пользовательский таймаут: «timeout:120». См. детали в соответствующем разделе.

Методы загрузки 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;
  • Если ramdisk_size=... не указан, сквош грузится в TMPFS.

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

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

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

  • automatic — основной накопитель аргументов пропагатора и altboot;
  • hash — хэш-сумма сквоша второй стадии загрузки, посчитанная по алгоритму SHA-256 (в altboot можно использовать и другие варианты хэша с некоторыми синтаксическими добавками);
  • live — (флаг) помечает ISO-образ как LiveCD, что предписывает всегда использовать режим экономии памяти;
  • live_rw — (флаг) предписывает использовать R/W-раздел для сеансов LiveCD/Rescue;
  • lowmem — (флаг) включает режим экономии памяти, монтируя образ непосредственно с носителя без предварительной загрузки в ОЗУ;
  • profile — профиль сетевой загрузки с поддержкой слоёв 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: hash, hashprog, 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

...

Постоянное хранилище сеансов 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;
  • make-initrd-bootchain-getimage — обеспечивает метод загрузки образов по сети утилитой wget по протоколам HTTP и FTP;
  • 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 — документация и набор тестов.

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

...

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

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

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

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

Enjoy! ;-)