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

*Метод загрузки* «живой» системы (или *метод установки* ОС) определяет способ
нахождения сквоша второй стадии загрузки (stage2), такой, как *live*, *rescue*
или *altinst*. По сути, это самый первый «шаг» установщика (или загрузчика)
дистрибутива в stage1, если не считать «шага» *выбора метода* загрузки,
который обычно скрыт от пользователя. Данный подход изначально был заведён в
link:https://www.altlinux.org/Propagator[пропагаторе], все *методы загрузки*
(установки) ОС были заимствованы из него вместе с диалогами и соответствующими
_<<_параметры_загрузки_altboot,параметрами загрузки>>_.

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

image::../images/altboot.jpg[align="center"]

* *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,постоянным хранилищем сеансов LiveCD>>_;
* *disk* — загрузка с локального носителя, в том числе, записанного в
  формате ISO-9660 Hybrid на перезаписываемый диск, с раздела диска либо
  лежащего на нём ISO-образа, и опциональной возможностью работы с
  _<<_постоянное_хранилище_сеансов_livecd,постоянным хранилищем сеансов LiveCD>>_.

Методы загрузки *http/ftp* пока что не предназначены для работы с
_<<_read_only_слои_livecd,read-only слоями LiveCD>>_, но если кому-то
это будет очень нужно, добавить их поддержку не очень сложно. То же
касается и указания номера порта. Пропагатор не поддерживал добавление
номера порта и явно подразумевал использование стандартых портов для
протокола (80, 21). В этой части *altboot* унаследовал данное поведение.

Методы *http/ftp* обеспечиваются «шагом» *download*. Существует два режима
работы с этими *методами загрузки* — старый вариант, когда путь на сервере
рассматривается как каталог, из которого загружается файл со сквошом второй
стадии, и новый вариант, когда путь на сервере рассматривается как ISO-образ,
загружаемый целиком, вместо сквоша. В пропагаторе поддержка нового варианта
тоже появилась, но позже, так что по параметрам могут быть отличия. В случае
*altboot*, для работы с новым режимом достаточно убрать параметр загрузки
*ramdisk_size=…* и добавить параметр *automatic=…,type:iso,…*

Внутренний метод *url* аналогичен *http* (или *ftp* с анонимным доступом),
в диалоговое меню *выбора методов* он не выводится, но его можно задействовать
через /proc/cmdline, а также он используется для указания файла в каталоге,
смонтированного на предыдущем шаге, и предназначенного для дальнейшего
использования в качестве ISO-образа или сквоша. Для всех «сетевых» *методов
загрузки* отдельно через /proc/cmdline должна быть сконфигурирована сеть.
См. параметр *ip=…* и другие в фиче *make-initrd*
«link:https://github.com/osboot/make-initrd/tree/master/features/network[network]».

При использовании «локальных» *методов загрузки* (*disk* или *cdrom*),
становится доступной возможность обновлять «на лету» образ initramfs с
дополнительного внешнего носителя, что в частности позволяет догружать
недостающие модули ядра или правила udev. См. детали в
_<<_oemsetup,описании «шага» *oemsetup*>>_. Совместно с
_<<_модули_bootchain_altboot,модулем>>_ *make-initrd-bootchain-liverw*
оба метода поддерживают возможность работы с
_<<_постоянное_хранилище_сеансов_livecd,постоянным хранилищем сеансов LiveCD>>_.

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

См. также:

* https://bugzilla.altlinux.org/37080
* https://bugzilla.altlinux.org/40554
* https://www.altlinux.org/Propagator
* https://www.altlinux.org/Make-initrd
* https://www.altlinux.org/Alterator-netinst
* https://github.com/osboot/make-initrd/tree/master/features/network
* https://ru.wikipedia.org/wiki/ISO_9660
* https://en.wikipedia.org/wiki/Hybrid_disc

