Решение проблем Simple-CDD preseed packages postinst
Полное руководство по решению проблем с Simple-CDD: настройка preseed, автоматическая установка пакетов и выполнение postinst скриптов в Debian 12.
Как решить проблемы со сборкой дистрибутива через Simple-CDD (preseed, packages, postinst)?
Подготовил донорскую систему - Debian 12 Bookworm. Использую Simple-CDD для создания сборки, подготовил соответствующую структуру файлов и каталогов:
- profiles/custom.packages
- profiles/custom.preseed
- profiles/custom.postinst
- profiles/custom.extra
Цель:
- Устанавливать дистрибутив с минимально необходимыми настройками: имя хоста, пользователь (вместо root), IP-адрес, разметка диска - все остальное автоматом.
- Оффлайн установка (с образа) минимального набора пакетов, например: iftop
- Конфигурация системы скриптами (postinst)
При сборке проверяю - все файлы на месте, он их добавляет в образ. Столкнулся с несколькими проблемами:
-
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.preseed и дописать туда строки из 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. -
При сборке образа выкачиваются нужные пакеты и зависимости, создается зеркало на образе (ISO:/pool/main). Вижу там нужные пакеты, но при установке дистрибутива они не устанавливаются.
-
Скрипт из custom.postinst не выполнился. Сейчас там простая команда на создание каталога в домашней директории пользователя.
Из описания к 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 в Debian 12 необходимо правильно настроить preseed-файлы, управление пакетами и postинсталляционные скрипты. Вот подробное решение каждой из ваших проблем:
Проблема 1: Настройка языка в preseed без подтверждения
Чтобы полностью автоматизировать выбор языка без подтверждения, используйте следующие параметры в вашем custom.preseed:
# Полная автоматизация выбора языка
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 console-setup/ask_detect boolean false
d-i console-setup/modelcode string pc105
d-i console-setup/variant RUSSIAN
d-i console-setup/layout RU
d-i console-setup/layoutcode string ru
d-i keymap select ru
Для автоматической установки через Simple-CDD добавьте параметр --locale при сборке:
build-simple-cdd --locale ru_RU --profiles custom
Проблема 2: Объединение preseed-файлов
Simple-CDD действительно загружает default.preseed автоматически, но есть важные нюансы:
- Создайте базовый файл
profiles/default.preseedсо стандартными настройками:
# Базовые настройки для всех профилей
d-i debconf/priority string critical
d-i partman-auto/init_automatically_partition select atomic
d-i partman-auto/method string regular
- В
custom.preseedиспользуйте директиву#includeдля объединения файлов:
# Включаем базовые настройки
#include /cdrom/simple-cdd/default.preseed
# Специфичные настройки для custom профиля
d-i netcfg/get_hostname string myserver
d-i netcfg/get_domain string local
- При сборке явно указывайте профиль:
build-simple-cdd --profiles custom
Проблема 3: Установка пакетов из образа
Для правильной установки пакетов выполните следующие шаги:
- В
custom.packagesукажите только нужные пакеты (исключая системные):
iftop htop vim curl
- При сборке используйте параметр
--auto-select-packages:
build-simple-cdd --profiles custom --auto-select-packages
- Проверьте содержимое образа:
mount -o loop cdd-test.iso /mnt
ls -la /mnt/pool/main/
- Для оффлайн-установки убедитесь, что в preseed есть параметры для использования локального репозитория:
d-i apt-setup/local0/repository string http://cdrom/ d-i apt-setup/local0/comment string Debian 12 Repository
Проблема 4: Запуск postинсталляционных скриптов
Для корректного выполнения скриптов custom.postinst:
- Убедитесь, что скрипт имеет правильные права:
chmod +x profiles/custom.postinst
- Проверьте содержимое скрипта:
#!/bin/bash
set -e
# Создание каталога для пользователя
mkdir -p /home/user/custom_dir
chown user:user /home/user/custom_dir
# Дополнительные настройки
echo "Custom post-install configuration" >> /etc/motd
- При использовании в preseed добавьте:
d-i preseed/late_command string in-target chmod +x /target/usr/bin/simple-cdd-profile-postinst; in-target /usr/bin/simple-cdd-profile-postinst custom
Содержание
- Настройка автоматического выбора языка
- Объединение preseed-файлов
- Правильная установка пакетов
- Запуск postинсталляционных скриптов
- Полный пример конфигурации
- Устранение неполадок
Настройка автоматического выбора языка
Для полного исключения ручного выбора языка в установщике Debian используйте комплексный подход:
# В custom.preseed
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 console-setup/ask_detect boolean false
d-i console-setup/modelcode string pc105
d-i console-setup/variant RUSSIAN
d-i console-setup/layout RU
d-i console-setup/layoutcode string ru
# Выбор раскладки клавиатуры
d-i keymap select ru
# Приоритет вопросов (critical минизирует вопросы)
d-i debconf/priority string critical
Если проблема сохраняется, попробуйте добавить параметры загрузки в меню GRUB:
linux /install.amd/vmlinuz auto priority=critical locale=ru_RU.UTF-8 keyboard-configuration/layoutcode=ru keyboard-configuration/variant=RU keyboard-configuration/modelcode=pc105
Объединение preseed-файлов
Simple-CDD загружает preseed-файлы в определенном порядке:
- Сначала
default.preseedиз/cdrom/simple-cdd/ - Затем профили
*.preseedиз того же каталога
Для корректного объединения:
- Создайте файл
profiles/default.preseed:
# Базовые настройки безопасности
d-i passwd/root-password-crypted password $6$rounds=4096$xyz
d-i passwd/make-user boolean true
d-i passwd/user-fullname string System Administrator
d-i passwd/username string admin
d-i passwd/user-password-crypted password $6$rounds=4096$xyz
# Сетевые настройки
d-i netcfg/disable_autoconfig boolean true
- В
custom.preseedиспользуйте:
# Включаем базовые настройки
#include /cdrom/simple-cdd/default.preseed
# Переопределяем или добавляем специфичные параметры
d-i netcfg/get_hostname string myserver
d-i netcfg/get_domain string localdomain
d-i netcfg/get_ipaddress string 192.168.1.100
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.1.1
d-i netcfg/get_nameservers string 8.8.8.8,8.8.4.4
- При сборке используйте:
build-simple-cdd --profiles custom --dist bookworm
Правильная установка пакетов
Для корректной установки пакетов из образа:
- Правильный формат
custom.packages:
# Только пользовательские пакеты
iftop
htop
vim
curl
wget
tree
- Исключите системные пакеты:
# НЕ включайте эти пакеты:
# linux-image-*
# grub-*
# initramfs-tools
# casper
- Параметры сборки:
build-simple-cdd \
--profiles custom \
--dist bookworm \
--arch amd64 \
--auto-select-packages \
--debian-mirror http://deb.debian.org/debian
- Проверьте репозиторий в образе:
# Монтируем образ
mount -o loop cdd-test.iso /mnt
# Проверяем наличие пакетов
ls -la /mnt/pool/main/*/iftop_*
# Проверяем файлы списков репозитория
cat /mnt/dists/bookworm/main/binary-amd64/Packages | grep iftop
- Если пакеты не устанавливаются, добавьте в preseed:
d-i apt-setup/disable-cdrom boolean false
d-i apt-setup/use_mirror boolean false
d-i apt-setup/security-updates boolean false
Запуск postинсталляционных скриптов
Для гарантированного выполнения custom.postinst:
- Правильные права доступа:
chmod +x profiles/custom.postinst
- Структура скрипта:
#!/bin/bash
set -e
# Создание каталога с правильными правами
mkdir -p /home/admin/custom_dir
chown admin:admin /home/admin/custom_dir
# Настройка системы
echo "Custom configuration applied" >> /etc/motd
# Установка дополнительных пакетов если нужно
# apt-get install -y additional-package
# Настройка сети
# cat > /etc/network/interfaces.d/eth0 <<EOF
# auto eth0
# iface eth0 inet static
# address 192.168.1.100
# netmask 255.255.255.0
# gateway 192.168.1.1
# EOF
reboot
- Добавьте в preseed команду вызова:
d-i preseed/late_command string \
in-target chmod +x /target/usr/bin/simple-cdd-profile-postinst; \
in-target /usr/bin/simple-cdd-profile-postinst custom
- Альтернативный метод через debconf:
d-i pkgsel/include string iftop htop vim
d-i pkgsel/upgrade select none
d-i pkgsel/update-policy select unattended-upgrades
# Команда для postinstall
d-i preseed/late_command string \
cp /cdrom/simple-cdd/custom.postinst /target/usr/local/bin/; \
in-target chmod +x /usr/local/bin/custom.postinst; \
in-target /usr/local/bin/custom.postinst
Полный пример конфигурации
Вот полный пример рабочей конфигурации для Simple-CDD:
Структура каталогов:
simple-cdd/
├── profiles/
│ ├── default.preseed
│ ├── custom.packages
│ ├── custom.preseed
│ └── custom.postinst
└── build-simple-cdd.conf
default.preseed:
d-i debconf/priority string critical
d-i partman-auto/init_automatically_partition select atomic
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i passwd/root-password-crypted password $6$rounds=4096$salt$hash
d-i passwd/make-user boolean true
d-i passwd/user-fullname string Administrator
d-i passwd/username string admin
d-i passwd/user-password-crypted password $6$rounds=4096$salt$hash
custom.preseed:
#include /cdrom/simple-cdd/default.preseed
# Языковые настройки
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 console-setup/ask_detect boolean false
d-i console-setup/modelcode string pc105
d-i console-setup/variant RUSSIAN
d-i console-setup/layout RU
d-i console-setup/layoutcode string ru
d-i keymap select ru
# Сетевые настройки
d-i netcfg/disable_autoconfig boolean true
d-i netcfg/get_hostname string myserver
d-i netcfg/get_domain string localdomain
d-i netcfg/get_ipaddress string 192.168.1.100
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.1.1
d-i netcfg/get_nameservers string 8.8.8.8,8.8.4.4
# Разметка диска
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
# Установка пакетов
d-i pkgsel/include string iftop htop vim curl wget tree
d-i pkgsel/upgrade select none
d-i pkgsel/update-policy select unattended-upgrades
# late command для postinstall
d-i preseed/late_command string \
cp /cdrom/simple-cdd/custom.postinst /target/usr/local/bin/; \
in-target chmod +x /usr/local/bin/custom.postinst; \
in-target /usr/local/bin/custom.postinst
custom.packages:
iftop htop vim curl wget tree
custom.postinst:
#!/bin/bash
set -e
echo "Applying custom post-install configuration..."
# Создание каталога
mkdir -p /home/admin/custom_dir
chown admin:admin /home/admin/custom_dir
# Настройка системы
echo "Custom Debian 12 build - $(date)" >> /etc/motd
# Конфигурация сети
cat > /etc/network/interfaces.d/eth0 <<EOF
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
EOF
echo "Custom configuration completed successfully."
Команда сборки:
build-simple-cdd \
--profiles custom \
--dist bookworm \
--arch amd64 \
--auto-select-packages \
--debian-mirror http://deb.debian.org/debian \
--locale ru_RU.UTF-8
Устранение неполадок
Если preseed не применяется полностью:
- Проверьте синтаксис preseed-файла:
debconf-get-selections < profiles/custom.preseed
- Добавьте отладочную информацию в preseed:
d-i preseed/late_command string \
echo "Preseed debug info" > /target/tmp/preseed.log; \
echo "Date: $(date)" >> /target/tmp/preseed.log; \
echo "Hostname: $(hostname)" >> /target/tmp/preseed.log;
Если пакеты не устанавливаются:
- Проверьте содержимое образа:
apt-cdrom -m -d /mnt add
- Добавьте в preseed принудительную установку:
d-i apt-setup/use_mirror boolean false
d-i apt-setup/disable-cdrom boolean false
d-i apt-setup/security-updates boolean false
Если postinst не выполняется:
- Проверьте права доступа к скрипту
- Добавьте логирование:
d-i preseed/late_command string \
cp /cdrom/simple-cdd/custom.postinst /target/usr/local/bin/; \
in-target chmod +x /usr/local/bin/custom.postinst; \
in-target /usr/local/bin/custom.postinst 2>&1 | tee /tmp/postinst.log;
- Проверьте выполнение в установленной системе:
cat /target/tmp/postinst.log
Заключение
-
Для автоматизации выбора языка используйте комплексный подход с параметрами языка, локали и клавиатуры в preseed-файле, а также параметр
--localeпри сборке. -
Simple-CDD автоматически загружает
default.preseed, но для надежности используйте директиву#includeявного объединения файлов. -
Для корректной установки пакетов указывайте только пользовательские пакеты в
*.packagesфайлах и используйте параметр--auto-select-packagesпри сборке. -
Postинсталляционные скрипты будут выполняться автоматически, если у них есть права на выполнение и они правильно вызываются через
d-i preseed/late_commandв preseed-файле. -
Всегда проверяйте синтаксис preseed-файлов и добавляйте логирование для отладки сложных сценариев.
При следовании этим рекомендациям вы сможете создать полностью автоматизированный установочный образ Debian 12 с нужными настройками и пакетами.
Источники
- Debian preseed.cfg - Language not set - Server Fault
- 12.3. Automated Installation - Debian Handbook
- Using pre-seeding and boot params for completely un-attended Debian install - Unix Stack Exchange
- debian-urna/simple-cdd/profiles/default.preseed - GitHub
- Simple-CDD/Howto - Debian Wiki
- How do I configure a preseed to skip the language support question? - Ask Ubuntu
- Prevent Language selection at ubuntu installation - Unix Stack Exchange
- Set language in preseed for debian-installer for console - Stack Overflow
- Simple-CDD - Debian Wiki