Методика проверки bootchain + altboot
=====================================

0. Предварительные условия
--------------------------

- Необходима система с настроенным hasher и максимаьно свежим mkimage.
- Желательно иметь много ОЗУ и собирать всё на tmpfs, у меня 32Гб + SWAP.
- Желательно иметь зеркало свежего среза Сизифа, у меня оно в /ALT/Sisyphus.
- Исходный пакет make-initrd-bootchain доступен в Сизифе: http://git.altlinux.org/gears/m/make-initrd-bootchain.git
- На рабочей машине должны быть установлены: qemu/kvm, fakeroot, sha256sum, squashfs-tools, 7zip и usermode-fs-tools.

Тестирование будем выполнять на стенде с использованием qemu/kvm. Для реального железа и другой виртуализации описываемый сценарий можно адаптировать. Мы можем расшарить файлы между хостом и гостевым сервером сетевой загрузки. Но одним из проверяемых сетевых протоколов является NFS, который не позволит экспортировать нужное, если данные лежат в хост-системе и импортируются через файловую систему 9p. Так что на хост-системе мы создадим "диск данных" сервера сетевой загрузки и подключим его вторым диском к виртуальной машине "сервера". В качестве альтернативы можно было бы использовать rsync для копирования данных с хоста на внутренний диск "сервера" в гостевой машине через 9p, но такой вариант приводит к дополнительным манипуляциям и дополнительному расходу памяти.


I. Подготовка исходных материалов
---------------------------------

1. Собираем make-initrd-bootchain локально или получаем RPM'ки иным способом. В моём случае первый вариант, результат окажется в /home/klark/hasher-repo/x86_64/RPMS.hasher/make-initrd-bootchain*.rpm:

$ cd ~/build/
$ git clone git://git.altlinux.org/gears/m/make-initrd-bootchain.git
$ cd make-initrd-bootchain/ && gear-hsh && hsh --clean


2. Клонируем git://git.altlinux.org/people/antohami/packages/mkimage-profiles.git в ~/build/antohami-bootchain/, переключаемся на ветку next. Готовим списки и конфиг APT'а для Сизифа:

$ cd ~/build/antohami-bootchain/

$ cat >sisyphus.list <<EOF
rpm file:/ALT/Sisyphus x86_64 classic
rpm file:/ALT/Sisyphus noarch classic
rpm-dir file:/home/klark/hasher-repo x86_64 hasher
EOF

$ cat >sisyphus.conf <<EOF
APT::Cache-Limit 100663296;
Dir::Etc::Main "/dev/null";
Dir::Etc::Parts "/var/empty";
Dir::Etc::SourceParts "/var/empty";
Dir::Etc::Preferences "/dev/null";
Dir::Etc::PreferencesParts "/var/empty";
Dir::Etc::SourceList "/home/klark/build/antohami-pipeline/sisyphus.list";
EOF


3. Собираем ISO-образы трёх типов: спасательная система (ALT Rescue), установщик (JeOS) и живая система (MATE):

$ make APTCONF="$PWD/sisyphus.conf" REPORT=1 DEBUG=1 regular-rescue.iso
** ARCH: x86_64
21:03:06 initializing BUILDDIR: build/
21:03:06 preparing distro config: build/distcfg.mk
21:03:09 starting image build: tail -f build/build.log
21:09:16 done (6:07)
** image: $TMP/out/regular-rescue-20210822-x86_64.iso [606M]

$ make APTCONF="$PWD/sisyphus.conf" REPORT=1 DEBUG=1 regular-jeos-sysv.iso
** ARCH: x86_64
22:53:29 initializing BUILDDIR: build/
22:53:29 preparing distro config: build/distcfg.mk
22:53:32 starting image build: tail -f build/build.log
22:58:14 done (4:41)
** image: $TMP/out/regular-jeos-sysv-20210822-x86_64.iso [538M]

$ make APTCONF="$PWD/sisyphus.conf" REPORT=1 DEBUG=1 regular-mate.iso
** ARCH: x86_64
23:23:19 initializing BUILDDIR: build/
23:23:19 preparing distro config: build/distcfg.mk
23:23:25 starting image build: tail -f build/build.log
23:32:46 done (9:20)
** image: $TMP/out/regular-mate-20210822-x86_64.iso [1,2G]

Все три имеют минимальный размер и в случае успеха сборки примерно через 20 минут окажутся в $TMPDIR/out/.


4. Чтобы создать сквош оверлея корневой системы, запускаем скрипт:

$ ~/build/make-initrd-bootchain/bootchain-doc/scripts/mksquash.sh

либо готовим в отдельном каталоге структуру папок и файлов для этого сквоша и тогда запускаем тот же скрипт следующим образом:

$ ~/build/make-initrd-bootchain/bootchain-doc/scripts/mksquash.sh /путь/к/файлам/rootfs

Результат будет сохранён в $TMPDIR/out/root.squashfs.


5. Чтобы создать структуру файлов и каталогов диска данных сервера сетевой загрузки, выполняем следуюшие команды:

$ mkdir $TMPDIR/server-data
$ cd $TMPDIR/server-data/
$ ~/build/make-initrd-bootchain/bootchain-doc/scripts/mksrvdata.sh $HOME/.ssh/id_ed25519.pub

Передаём свой публичный ключ ssh, если хотим получить удалённое управление сервером сетевой загрузки с хост-системы.
Передавать SSH-ключ необязательно, но если это сделать, он будет использован при настройке сервера.


6. Чтобы создать образ диска данных сервера сетевой загрузки, выполняем команду:

$ dir2extfs -q -t ext4 [-r reserved_mib] -L SRVDATA -- $TMPDIR/out/srvdata.raw

См. подсказку (--help), а детали -- тут: https://www.altlinux.org/Usermode-fs-tools#dir2extfs . После '-r' можно указать объём свободного места, иначе его не останется на диске. В результате выполнения этой команды будет создан образ диска ext4 с меткой тома SRVDATA, который можно будет подключать к виртуалке сервера сетевой загрузки (файл $TMPDIR/out/srvdata.raw). Промежуточные данные при этом больше не понадобятся, т.е. $TMPDIR/server-data можно удалить.

$ cd .. && rm -rf server-data

В отсутсвии пакета usermode-fs-tools файл раздела можно создать командами:

$ truncate -s 3G -- $TMPDIR/out/srvdata.raw
$ /sbin/mke2fs -q -j -t ext4 -L SRVDATA -d . -- $TMPDIR/out/srvdata.raw

Размер образа (3G) подбирается эмпирическим путём. При этом версия e2fsprogs должна быть не менее 1.44. В противном случае придётся стать пользователем root, смонтировать файл как loop-устройство, отформатировать отдельной командой, затем смонтировать куда-то, другой командой скопировать содержимое каталога server-data на этот раздел, после чего отмонтировать и освободить loop-устройство.


7. Конвертируем образ диска данных в формат qcow2:

$ cd $TMPDIR/out/
$ qemu-img convert -f raw -O qcow2 srvdata.raw ../srvdata.img
$ cd .. && rm -rf out


II. Подготовка сервера сетевой загрузки
---------------------------------------

В виртуальную машину установим сервер с профилем "Минимальная установка". В качестве основы подойдёт ISO-образ любого продукта из списка: Альт Сервер 8.2, Альт Сервер 9.0/9.1/9.2, Альт 8 СП Сервер (любой выпуск). Здесь и далее команды и скриншоты приводятся для Альт 8 СП Сервер (ИК декабрь 2020 с ядром 5.4-std-def на основе репозитория c9f1), для других вариантов, возможно, потребуется адаптация.


Продолжение следует...
