Debian live-build: Ядро живой системы и ядро установщика не совпадают

Вопрос или проблема

Я пытаюсь создать пользовательский образ live Debian ISO, который автоматически загружается с включенным SSH для удаленной установки серверов с использованием debian-installer-launcher.

(Я не смог настроить partman для использования первых 60 ГБ диска с 2 LVM без форматирования оставшегося пространства, поэтому я иду к предварительно настроенному удаленному установщику, оставляя форматирование диска ручным)

При запуске установщика debian-installer-launcher --text я получаю следующую ошибку:

Различие версий ядра

Ядро live системы и ядро установщика не совпадают

Установщик может использоваться только в том случае, если версии ядер live системы (6.1.0-31-amd64) и установщика (6.1.0-29-amd64) одинаковы.

Пожалуйста, перезагрузитесь с правильным ядром (6.1.0-29-amd64).

Я не понимаю, почему live-build использует разные ядра для live и установщика? Возможно, это требование пакета в окружении установщика, которого нет в live?

Кроме как вручную установить более старое ядро для live, соответствующее ядру установщика, как гарантировать, что я смогу автоматически согласовывать версии в будущем, когда установщик будет обновлен?

Вот мой скрипт сборки:

lb config \
    --distribution bookworm \
    --binary-images iso-hybrid \
    --bootappend-live "boot=live noeject config keyboard-layouts=fr keyboard-variants=oss" \
    --bootappend-live-failsafe "boot=live noeject config keyboard-layouts=fr keyboard-variants=oss " \
    --apt apt \
    --apt-recommends true \
    --apt-secure true \
    --architecture amd64 \
    --debian-installer netinst \
    --interactive false \
    --memtest none \
    --mode debian \
    --security true \
    --updates true \
    --utc-time true \
    --system live

# Добавить pkey
mkdir -p config/includes.chroot_after_packages/home/user/.ssh
cat <<EOF > config/includes.chroot_after_packages/home/user/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBipRcjR4i/Gf98fJZ1GbFE2fhtWp6l08s7rQFaDm0u4
EOF

# Добавить нужные/полезные пакеты
cat <<EOF > config/package-lists/minimal.list.chroot
build-essential
curl
git
openssh-server
sudo
vim
lvm2
bash-completion
console-data
debian-installer-launcher
EOF

# Включить ssh службу
mkdir -p config/hooks/live
cat <<EOF > config/hooks/live/01-enable-sshd.chroot
#!/bin/bash
mkdir -p /etc/systemd/system/multi-user.target.wants
ln -sf /lib/systemd/system/ssh.service /etc/systemd/system/multi-user.target.wants/ssh.service
EOF
chmod +x config/hooks/live/01-enable-sshd.chroot

# Добавить ожидание для автоматической загрузки grub
cat <<EOF >> config/hooks/normal/0100-grub-timeout.binary
sed -i 's/timeout\ 0/timeout\ 50/g' ./isolinux/isolinux.cfg
echo "set timeout=5" >> ./boot/grub/config.cfg
EOF
chmod +x config/hooks/normal/0100-grub-timeout.binary

# Печать IP, может быть полезно, если сервер не безголовый и не может быть найден в nmap
cat <<EOF >> config/hooks/normal/0100-issue.binary
printf "\nIP address: \\\4\n" >> /etc/issue
EOF
chmod +x config/hooks/normal/0100-issue.binary

lb build

Ответ или решение

Ваша проблема, связанная с несоответствием версий ядра между живой системой и установщиком в Debian при создании пользовательского live ISO, весьма распространена среди тех, кто использует live-build для генерации собственных Linux-образов. Проблема заключается в том, что версии ядра, которые live-build выбирает для живой системы и установщика, могут отличаться из-за синхронизации пакетов в разных репозиториях или устаревших кэшей.

Теория

Основная причина несоответствия версий – это различные моменты времени сборки и обновления пакетов в репозиториях, которые используются для формирования живой системы и загрузчика установщика. Когда вы собираете свою живую систему, вы, вероятно, используете последние версии пакетов из репозитория Debian, которые могут не совпадать с версиями, используемыми в установщике, который создается отдельно и может иметь свои собственные требования.

Например, если живую систему вы собираете с использованием более свежей версии ядра (6.1.0-31-amd64), чем та, которая использует установщик (6.1.0-29-amd64), это приведет к конфликту, поскольку установщику требуется точное соответствие версии ядра.

Пример

Такой несоответствие может возникнуть, когда ваш скрипт использует репозиторий ‘bookworm’, где обновления ядра проводятся регулярно. В это же время, образы установщика могут не обновляться с такой же регулярностью, сохраняя более старую версию ядра.

Применение

  1. Управление версиями ядра: Чтобы избежать таких несоответствий, вы можете вручную зафиксировать версию ядра в вашем конфигурационном файле. Например, использовать параметр к lb config для указания фиксированных версий пакетов.

  2. Пакетный ручной контроль: Включите требуемую версию ядра в конфигурацию пакетов, чтобы убедиться, что как живая система, так и установщик используют одну и ту же версию. Это достигается путем добавления ядра в config/package-lists.

  3. Обновление кэша и индексов: Очистите кэши и обновите индексы пакетов перед сборкой образа. Это можно сделать с помощью команд:

    apt-get clean
    lb clean
    lb build
  4. Автоматизация проверки соответствия версий ядра: Настроить скрипт автоматической проверки перед сборкой, который будет сверять версии ядра в репозиториях живой системы и установщика.

Применение данных техник позволит вам более гибко и эффективно управлять созданием пользовательских Debian ISO с живыми и установочными системами, избегая проблемы несоответствия версий ядра в будущем. Используйте данные методы в вашем скрипте, чтобы улучшить автоматизацию процесса и минимизировать необходимость ручного вмешательства в процессе сборки.

Оцените материал
Добавить комментарий

Капча загружается...