== Быстрое знакомство с bootchain + altboot

=== Propagator + init-bottom ► bootchain + altboot

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

[,,subs="verbatim,quotes"]
----
`*root=bootchain bootchain=fg,altboot*` **automatic**=... [**ip**=...] \
  [ramdisk_size=...] [lowmem] [stagename={altinst|live|rescue}] ...
----

Для работы сетевой загрузки необходимо добавлять параметр *ip=…*, он нужен
make-initrd для настройки сети: *altboot* полагается на то, что сеть будет
настроена кем-то и ожидает появления сети при использовании сетевых
_<<_методы_загрузки_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}*.

_<<_конфигурирование_bootchain_и_altboot,Конфигурирование>>_ *bootchain*
и *altboot* выполняется через файл */etc/sysconfig/bootchain*, используемые
фичи перечисляются в */etc/initrd.mk* перед созданием образа stage1 командой
*make-initrd*. Например:

[,,subs="verbatim,quotes"]
----
apt-get install make-initrd-bootchain-nfs
echo "FEATURES += bootchain-nfs" >>/etc/initrd.mk
make-initrd
----

Некоторые детали есть также в подразделе
«_<<_создание_своего_initrd_img_c_bootchain>>_».

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

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

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

При этом параметры *lowmem* и *live* не оказывают влияния на использование
памяти. Для всех остальных методов:

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

В последних трёх случаях, если указан путь не к каталогу, а к нераспакованному
ISO-образу, то сначала будет смонтирован этот ISO-образ. *altboot* ориентируется
не столько на наличие парметра *ramdisk_size=…*, сколько на наличие RAM-диска,
созданного ядром по этому параметру, при этом сравнивая его фактический размер
с необходимым для загрузки сквоша. Даже при наличии данного параметра, ядро не
всегда создаёт RAM-диски. Например, некоторые
link:https://www.altlinux.org/Realtime[Realtime-ядра] не создают.

==== Создание своего initrd.img c bootchain

Для сборки универсального *initrd.img* требуется создать в пользовательском
каталоге два конфига: *bootchain* и *initrd.mk*, после чего выполнить команду:

[,,subs="verbatim,quotes"]
----
`*make-initrd*` --no-checks AUTODETECT= \
  -c <путь/к/каталогу_с_конфигами>/initrd.mk \
  BOOTCHAIN_PATH=<путь/к/каталогу_с_конфигами> \
  -v -k <версия_ядра>
----

В конфиге *initrd.mk* подключаются необходимые фичи и добавляются
модули ядра либо каталоги с ними. В качестве примера смотрите
link:https://github.com/altlinux/mkimage-profiles/blob/master/features.in/initrd-bootchain/stage1/scripts.d/80-make-initrd-for-bootchain[дистрибутивный
скрипт] сборки универсального образа initramfs. Внутри каждого ISO-образа,
собранного при помощи link:https://www.altlinux.org/Mkimage-profiles[mkimage-profiles],
в каталоге */.disk* находятся конфиги *bootchain* и *initrd.mk*, а также
скрипт *mkinitrd* c командами для сборки initrd*.img из этого ISO-образа.

