=== download

Многофункциональный интерактивный базовый «шаг», использующий curl.
Входит в подпакет *make-initrd-bootchain-altboot*. Обеспечивает
_<<_методы_загрузки_altboot,методы загрузки>>_ *url*, *http*, *ftp*,
также может использоваться для загрузки сквоша в память, может загрузить
образ чего угодно в любое указанное блочное устройство или как файл в каталог.

Для сетевой загрузки дополнительно требуется фича *make-initrd*
«link:https://github.com/osboot/make-initrd/tree/master/features/network[network]».
В процессе работы может выводить диалоги ввода данных (виджет *form*). При
поиске сервера и ожидании установки соединения используется виджет *ponder*.
При скачивании образа используется виджет *gauge*.

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

* *altboot_download* — набор аргументов в виде «ключ=значение», перечисленных
  через «;» (см. ниже);
* `*curlopts*` — дополнительные опции curl для всех «шагов» download.

image::../images/bc02.jpg[align="center",scaledwidth="75%"]

image::../images/bc03.jpg[align="center",scaledwidth="75%"]

image::../images/bc04.jpg[align="center",scaledwidth="75%"]

image::../images/bc-err3.jpg[align="center",scaledwidth="75%"]

Возможные места для загрузки образов (значения аргумента *to*):

* *RD* — использовать первый свободный RAM-диск /dev/ram<N>;
* */dev/…* — использовать непосредственно указанное блочное устройство;
* *pipe<N>* или `*step<N>*` — имя устройства берётся из файла DEVNAME в
  каталоге результата указанного «шага»;
* _другое_ — использовать обычный файл в памяти (на TMPFS) в стиле pipeline.

Поддерживаемые аргументы, в том числе, через *automatic=…*:

* *method* — _<<_методы_загрузки_altboot,метод загрузки>>_ altboot (см. выше);
* `*to*` — определяет место, куда загружать образ (см. выше);
* `*url*` — путь к файлу либо полный URL при использовании метода url;
* *server* — имя или IP-адрес сервера при использовании методов http/ftp;
* *directory* — полный путь к ISO-образу на сервере для методов http/ftp;
* *user* — имя авторизованного пользователя при использовании метода ftp;
* *pass* — пароль авторизованного пользователя при использовании метода ftp;
* `*reserve*` — сколько мегабайт ОЗУ необходимо зарезервировать для работы
  после загрузки сквоша: если останется меньше, выдаётся фатальная ошибка
  (начиная с версии *0.1.5-alt27*);
* `*squash*` — название файла сквоша второй стадии загрузки (начиная
  с версии *0.1.5-alt30*);
* `*imgsize*` — размер ISO-образа или сквоша в байтах, чтобы не запрашивать
  этот размер у сервера (_новое в altboot_);
* `*timeout*` — предел временного ожидания на соединение с HTTP/FTP-сервером
  (_новое в altboot_).

Параметр *curlopts* имеет глобальное значение для всех «шагов» *download*.
Если набор дополнительных опций curl разделяется пробелами, можно прописать
их в *CURLOPTS=…* в конфигурационном файле */etc/sysconfig/bootchain*. Имя
пользователя и пароль необязательны, при их отсутствии метод *download*
повторяет поведение исходной реализации метода FTP в пропагаторе, т.е.
скачивает файл анонимно.

Если не указать *server*, то на его поиск выделяется дополнительное время,
равное половине *timeout*, по умолчанию используется опция *next-server*
DHCP-сервера или адрес шлюза. Чтобы не запрашивать на сервере размер файла
образа, на что тратится дополнительное время, и что может привести к ошибке,
если сервер не возвращает размер файла по выбранному протоколу или возвращает
неверный размер файла, следует использовать аргумент *imgsize*. Если не указан
путь к ISO-образу (*directory*), по умолчанию предлагается значение из
конфигурационной переменной *$OEM_URL_NETINST*, для ОС Альт это начальный
путь всех официальных образов.

В случае успеха загрузки и только в
_<<_совместимость_с_propagator_и_init_bottom,режиме совместимости с пропагатором>>_
«шаг» *download* экспортирует в stage2 переменные окружения:

* *METHOD* — название выбранного _<<_методы_загрузки_altboot,метода загрузки>>_
  altboot (http, ftp, url);
* *HOST* — имя или IP-адрес HTTP/FTP сервера;
* *PREFIX* — путь к ISO-образу на сервере;
* `*URL*` — полный URL, если был выбран одноимённый
  _<<_методы_загрузки_altboot,метод загрузки>>_;
* *LOGIN* — имя авторизованного пользователя FTP, если был указан user;
* *PASSWORD* — пароль авторизованного пользователя FTP, если был указан user.

На момент написания настоящей документации спецификация определения дисков
в стиле *MODEL=…* не поддерживается make-initrd, так что второй пример (ниже)
скорее гипотетический.

.Примеры использования:
[,,subs="verbatim,quotes"]
----
root=bootchain bootchain=fg,`*altboot*` ip=dhcp4 \
  automatic=method:**http**,network:dhcp,server:ftp.altlinux.org,directory:\
  /pub/distributions/ALTLinux/p9/images/workstation/x86_64/alt-workstation-9.1-x86_64.iso

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/alt-ws11.img

root=bootchain bootchain=fg,localdev,`*download*`,squashfs,liveboot,rootfs \
  altboot_localdev=method=cdrom;uuid=2021-05-31-01-09-58-00;directory=/rescue \
  `*altboot_download*`=to=RD;method=**url**;**url**=file:///rescue ramdisk_size=497773 \
  altboot_liveboot=stagename=rescue;method=cdrom;overlays=SLICES;flags=live_ro,rescue
----

См. также:

* https://bugzilla.altlinux.org/40267
* https://bugzilla.altlinux.org/34546
* https://bugzilla.altlinux.org/36751

