# Ramboot Набор утилит и скриптов для сборки загрузочных образов linux для работы в памяти. [TOC] ## Окружение ### Каталоги git репозитория - [boot_configs](https://git.wildberries.ru/sre-app/ramboot/-/tree/main/boot_configs) - примеры конфигураций для ipxe загрузчика - [debian](https://git.wildberries.ru/sre-app/ramboot/-/tree/main/debian) - каталог с конфигурационными файлами для сборки образов debian - [scripts](https://git.wildberries.ru/sre-app/ramboot/-/tree/main/scripts) - скрипты для управления gitlab ci ### Виртуальные машины - debian-image-builder - rhel-image-builder ### Инфраструктурные сервисы и репозитории - [netbox](https://netbox.wildberries.ru) - [cloud-dhcp](https://git.wildberries.ru/infrastructure/cloud-api-server) - dhcp/pxe сервер cloud-prod-bm-4.3d.wb.ru ## Общая информация о создании live образа дистрибутивов linux ### Debian live-build #### Програмное обеспечение для сборки Сборка live образа debian осуществляется с помощью скриптов из пакета live-build и по сути представляет инсталяцию новой ОС в chroot дирректорию с последующей упаковкой образа в iso, squshfs или tar архив. В пакет live-build входят несколько базовых утилит: - live-config - утилиты для настройки этапов сборки образа(выбор пакетов, репозиториев, версии дистрибутива etc) - live-build - сборочные скрипты для настроеного chroot окружения - live-boot - пакет скриптов используемых для настройки загрузчика операционной системы Непосредственный выбор скриптов и команд производиться с помощью утилиты lb(обрязка над более низкоуровневыми скриптами) #### Конфигурирование окружения Все конфигурирование окружения производиться с помощью команды `lb config`, c указанием параметров будущего образа, перечислю самые важные параметры: `--distribution` - кодовое имя дистрибутива debian `--binary-images` - инсталяционный образ используемы на этапе сборки `-chroot-filesystem` - тип файловой системы, в которую будет упакован результат работы фактически для правильной работы live-build требуется указать только эти параметры, остальные возможно оставить не инициализированными. После создания выполнения команды `lb config` будет создана структура каталогов сборочного окружения, дальнейшая работа по конфигурированию образа будет проводиться уже внутри данной структуры. #### Сборка образа и этапы Непосредственно сборка образа запускается командой `lb build` внутри сконфигурированного ранее окружения. Далее весь процесс делиться на несколько стадий: - bootstrap - создание chroot окружения debian(фактически выполнение скриптов debootstrap из процесса исталяции debian) - chroot - установка внутрь chroot указанных на этапе конфигурирования пакетов и выполнение hook - binary - упаковка готового chroot окружения в squashfs, iso или tar архив, создание initrd и установка ядра после выполнения стадии binary мы получаем готовый к загрузке образ debian. ### GitLab CI Автоматический запуск описанных ранене процедур происходит через gitlab CI/CD, все этапы сборки и скрипты описаны в файле [gitlab-ci.yml](https://git.wildberries.ru/sre-app/ramboot/-/blob/main/.gitlab-ci.yml) процесс делится на несколько этапов: ``` - prepare - проверка окружения gitlab-runner машины - configure - конфигурирование окружения - build - сборка - upload - загрузка собранного образа на зеркало ``` #### Запуск сборки debian в gitlab Запуск pipeline осуществляется с помощью скрипта [ramboot_image_build](https://git.wildberries.ru/sre-app/ramboot/-/tree/main/scripts/ramboot-image-build) следующим образом: `ramboot_image_build -T -D ` после выполнения скрипт вернёт id созданого pipeline и ссылку на него.