Установка GRUB на live-образе Debian 11 не удалась: не удалось получить канонический путь ‘overlay’

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

Мы разрабатываем продукт на основе Debian. Чтобы упростить создание этих образов на производстве, я пытаюсь создать загрузочный диск, который установит основную ОС. У нас есть более старая версия продукта, которая использует этот процесс, но она основана на Debian 7. Я использую Debian 11. Мой процесс восстановления и образ для Debian 11 основаны на версии для Debian 7. Оба используют live-build. Система Debian 11 получает ОС из основных репозиториев bullseye и моего репозитория для одного пакета, который включает наши данные. Это многоступенчатый процесс, в котором мы запускаем live-build для создания ОС, сжимаем его в squashfs, а затем создаем загрузочную ОС вокруг него с помощью скрипта, который выполняет такие задачи, как разбиение диска, распаковка файла squashfs в соответствующий раздел и, что наиболее критично и неработает, применение GRUB.

Часть сборки выполняет:

install -d /boot/seed
grub-mkimage -Ox86_64-efi -o /boot/seed/BOOTX64.EFI -p '(hd0,1)/EFI/BOOT/grub' \
    part_gpt part_msdos fat
grub-mkimage -Oi386-pc -o /boot/seed/mbr-core.img -p '(hd0,msdos1)/biosgrub' \
    part_msdos fat biosdisk
grub-mkimage -Oi386-pc -o /boot/seed/gpt-core.img -p '(hd0,gpt1)/biosgrub' \
    part_gpt fat biosdisk
cp -a /usr/lib/grub/i386-pc/boot.img /boot/seed/boot.img
cp -a /usr/lib/grub/i386-pc/modinfo.sh /boot/seed/modinfo.sh
grub-editenv /boot/seed/grubenv create

Эти файлы попадают в загрузочную ОС и копируются в раздел ESP перед попыткой установить GRUB. Эти файлы и все различные модули GRUB копируются на середине скрипта установки.

Позже в скрипте мы вызываем grub-install.

grub-install \
    --directory /mnt/biosgrub \
    --boot-image boot.img \
    --core-image core_img \
    /dev/sda

Проблема заключается в том, что новые версии grub-install больше не поддерживают флаги core-image и boot-image, как это делала версия из Debian 7, поэтому он сразу же терпит неудачу. Я убрал флаги boot-image и core-image, и теперь он выдает ошибку:

grub-install: error: failed to get canonical path of `overlay'.

Да, там действительно есть открывающая обратная кавычка и закрывающая одинарная кавычка на overlay.

Я пробовал удалить шаг с GRUB, позволив ему распаковать все, а затем загрузиться с графического загрузочного диска на базе Manjaro (он валялся у меня под рукой), чтобы попытаться получить больше информации о ситуации с GRUB. Запуск grub-install там завершился провалом тем же образом.

Из гугления я узнал, что это происходит потому, что grub-install считает, что целевое устройство использует overlayfs и не может определить, какое именно устройство использовать, но я не совсем уверен, что делать дальше и какие вопросы задавать. Я рад предоставить больше деталей, хотя некоторые вещи придется заменить по соображениям конфиденциальности программного обеспечения.

Если это имеет значение, ручное монтирование созданного раздела ОС вне системы показывает, что все находится на своих местах, наш код на месте и, вероятно, будет работать нормально, если бы был загрузчик.

ETA: Я добился некоторого прогресса, смонтировав распакованную ОС в каталог на загрузочном диске, смонтировав /proc, /sys и /dev в этот каталог, смонтировав мой раздел EFI в него и выполняя chroot. Затем я выполнил grub-install /dev/sda, но GRUB по-прежнему отсутствует при загрузке.

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

Debos: https://github.com/go-debos/debos

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

Установка GRUB на live-образе Debian 11: Решение проблемы с ошибкой "failed to get canonical path of ‘overlay’"

Вам может показаться, что создание живого диска для установки Debian 11 имеет много общего с предыдущими версиями Debian, однако изменения в программном обеспечении могут вызвать определённые сложности. В вашем случае проблема заключается в ошибке grub-install: error: failed to get canonical path of 'overlay'. Давайте рассмотрим основные причины, почему это может происходить, и возможные решения.

Понимание проблемы

Прежде всего, важно понимать, что ошибка failed to get canonical path of 'overlay' возникает, когда grub-install неправильно определяет целевое устройство. Это может происходить по нескольким причинам:

  1. Использование OverlayFS: Когда вы работаете с образами, особенно с live-образами, система может использовать overlayfs для управления файлами и директориями. Это может привести к путанице в адресации дисков и разделов.

  2. Структура каталогов: Убедитесь, что ваши каталоги правильно смонтированы и доступны. Проверьте наличие необходимых точек монтирования, таких как /proc, /sys и /dev, а также соответствующий файловый раздел для установки GRUB.

  3. Ошибки синтаксиса в скриптах: Убедитесь, что подход к вызову grub-install соответствует новой версии. Параметры --core-image и --boot-image более не поддерживаются, что вы уже отметили. Поэтому важно следовать актуальной документации.

Решения

1. Проверка и подготовка среды

  • Убедитесь, что вы смонтировали все необходимые файловые системы. Вероятнее всего, ваши монтирования могут выглядеть так:
mount --bind /proc /mnt/your_mount_point/proc
mount --bind /sys /mnt/your_mount_point/sys
mount --bind /dev /mnt/your_mount_point/dev
  • Важно также смонтировать EFI-раздел, если вы устанавливаете GRUB в EFI/UEFI-систему:
mount /dev/sdXY /mnt/your_mount_point/boot/efi # Замените sdXY на ваш EFI раздел

2. Чистая установка GRUB

  • После завершения монтирования можно использовать chroot для перехода в вашу систему:
chroot /mnt/your_mount_point
  • Внутри chroot-окружения выполните команду установки GRUB:
grub-install /dev/sda

3. Вариант с использованием Debos

Как вы уже обнаружили, более простой и современный подход заключается в использовании инструментов, таких как Debos. Эта утилита упрощает процесс создания образов и управления зависимостями. Данный метод может значительно снизить количество возникающих проблем, так как Debos обрабатывает множество задач автоматически.

Заключение

Процесс установки GRUB на live-образ Debian 11 может вызывать определенные сложности из-за изменений в программной среде и новых требований к конфигурации. Однако, корректный подход к монтированию файловых систем, а также применение современных инструментов, таких как Debos, могут значительно упростить этот процесс. Если у вас возникали затруднения, возможно, стоит ещё раз проверить конфигурацию или использовать более новые средства автоматизации сборки.

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

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