Как лучше решить проблемы со сборкой дистрибутива через Simple-CDD (preseed, packages, postinst)?
По вводным: подготовил донорскую систему - Debian 12 Bookworm.
По вводным: использую Simple-CDD для создания сборки, подготовил соответствующую структуру файлов и каталогов:
Profiles/custom.packages
Profiles/custom.preseed
Profiles/custom.postinst
Profiles/custom.extra
Цель:
По вводным: 1. Устанавливать дистрибутив с минимально необходимыми настройками:
По вводным: имя хоста, пользователь (вместо root), ip адрес, разметка диска - все остальное автоматом.
По вводным: 2. Оффлайн установка (с образа) минимального набора пакетов. Например: iftop
По вводным: 3. Конфигурация системы скриптами (postinst)
По вводным: при сборке проверяю - все файлы на месте, он их добавляет в образ.
Сейчас ситуация такая: столкнулся с нескольким проблемами, при сборке своего дистрибутива:
По вводным: 1. Preseed - если я указываю в установщике, в параметрах запуска конкретно свой.preseed - он запускается, подставляет где-то нужные параметры, но:
1.1.
d-i debian-installer/language string ru d-i debian-installer/country string RU d-i debian-installer/locale string ru_RU.UTF-8
Нужно понять: строки выбирают значение по умолчанию, но не выбирают значение. То есть приходиться все равно подтверждать выбор. Как от этого избавиться?
d-i debconf/priority string critical- не дало результата
По вводным: 1.2. По идее simple-cdd, если я все правильно понял, должен был следующую логику при сборке использовать:
По вводным: взять из каталога default.presseed и дописать туда строки из custom.preseed.
Нужно понять: да же если там есть default.preseed - он ничего не дописывает, если смотреть получившийся файл в образе. И получается что в меню выбора установки нужно явно указывать preseed файл. Можно ли от этого избавиться?
Сейчас ситуация такая: хотя где-то написано что после загрузки профиля... Не совсем понятно на каком этапе он загружается
profiles/default.preseed is loaded after the debian-installer CD is mounted.
other profiles preseed files are loaded when the simple-cdd-profile .udeb is
installed. some questions may have to be passed at the boot prompt(see below),
as they are asked before any of the preseed files are loaded.
Сейчас ситуация такая: 2. При сборке образа - выкачиваются нужные пакеты и зависимости, создается зеркало на образе (ISO:/pool/main). Я вижу там нужные мне пакеты, но при инсталляции дистрибутива они не устанавливаются.
Сейчас ситуация такая: 3. Скрипт из custom.postinst не выполнился.
По вводным: сейчас там простая команда на создание каталога в домашней директории пользователя.
По вводным: из описания к Simple-CDD с git (https://github.com/kaisenlinux/simple-cdd)
*.packages
packages installed when the profile is selected. do not include packages such
as linux-image or grub, as debian-installer will handle these specially.
*.postinst
profile-specific post-install script. runs in the "finish-install" phase of
debian-installer.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Simple-CDD лучше настраивать итерационно: сначала минимальный профиль, который собирается и ставится, потом packages, потом preseed, потом postinst. Если сразу сложить всё в
custom.packages,custom.preseed,custom.postinstи extra-файлы, сложно понять, на каком этапе сборка ломается.Структура в целом правильная:
profiles/ custom.packages custom.preseed custom.postinst custom.extra
Сначала проверьте, что профиль виден Simple-CDD и собирается с минимальным packages. Запускайте сборку с подробным логом и сохраняйте вывод:
build-simple-cdd --profiles custom 2>&1 | tee build.log
В
custom.packagesуказывайте только пакеты, которые доступны в подключённых репозиториях. Если нужен локальный deb, его нужно положить в extra/local repo и корректно добавить в APT, иначе установщик его не найдёт.Preseed проверяйте отдельно. Частая ошибка — неверные имена debconf-параметров или команды late_command. Для postinst лучше писать скрипт так, чтобы он логировал действия:
#!/bin/sh set -e exec > /target/var/log/custom-postinst.log 2>&1 echo "Custom postinstall started"
Если скрипт выполняется в контексте installer, помните про
/target. Команда, которая должна выполниться в установленной системе, часто должна быть черезin-target:in-target systemctl enable my-servicein-target systemctl enable my-service
Итог: разбейте задачу на этапы. Сначала пустой профиль, потом packages, потом preseed, потом postinst. Все postinst-действия логируйте, различайте installer environment и
/target, а локальные пакеты подключайте как нормальный APT-источник.