LINUX.ORG.RU

Сборка исходников AlpineLinux в ArchLinux

 , ,


0

1

Здравствуйте.

Взялся поиграть с AlpineLinux в виртуалке x86_64 (Hyper-V). Поставил. Сразу хочу gummiboot, вместо grub. Один удалил, другой поставил.

gummiboot хочет ESP в /boot, а не /boot/efi как было при grub. Ругается, мол не FAT у тебя в /boot.

Ладно, хорошо, убрал в сторонку vmlinuz-lts и initramfs-lts, почистил /boot полностью от остатков grub и смонтировал в /boot ESP (/dev/sda1), вернул ядро и образ на место.

Теперь gummiboot ругается не на FAT, а на «Failed to open filesystem /boot: No such file or directory».

Но /boot точно есть.

Мало того, что «точно есть» - я вручную создал все положенные каталоги /loader loader.conf и т.д., положил куда надо gummibootx64.efi, прописал efibootmgr - и оно работает! Прекрасно всё загружается. Я уже привык к gummiboot. Он прекрасен в своей простоте.

Но $gummiboot status по-прежнему ругается на «Failed to open filesystem /boot»!

100% какой-то косяк в его коде.

Забираю исходники из dev.alpinelinux.org/archive/gummiboot/gummiboot-48.1.tar.gz себе на Arch, вижу где должен быть косяк:

/* setup.c: 124 */
   r = asprintf(&t, "/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
   if (r < 0) {
           fprintf(stderr, "Out of memory.\n");
           return -ENOMEM;
   }
   errno = 0;
   b = blkid_new_probe_from_filename(t);
   free(t);
   if (!b) {
           if (errno != 0) {
                   fprintf(stderr, "Failed to open file system %s: %m\n", p);
                   return -errno;
           }
Что-то тут происходит неладное.

Поскольку на Alpine ещё не умею собирать, пытаюсь собрать его на Arch.

И не могу. Если просто make CFLAGS="-std=gnu89", то ругается на minor() major(), если CC=«musl-gcc», тогда ругается на -lblkid.

В общем, посыл: хочу попробовать починить этот код.
Из посыла вопрос: как его отладить? Это вообще возможно сделать на Arch?

★★★

Может, начать с этого момента?

b = blkid_new_probe_from_filename(t);

Может, оно ID блочного устройства получить не может?

Korchevatel ★★★★★
()
Ответ на: комментарий от Korchevatel

Это понятно. Хочу залезть в кишки во время исполнения и посмотреть, что там в st.st_dev.

----------

С major() minor() - VoidLinux подсказал, что добавить, чтобы glibc заработало #include <sys/sysmacros.h>, у них такая заплатка навешана на исходник.

Toxo2 ★★★
() автор топика
Ответ на: комментарий от Toxo2

А.

Так /dev/block вообще нет на свежеустановленном Alpine ) Т.е. в принципе нет такого каталога )

Ищет оно /dev/block/8:1 (дошло, что можно strace посмотреть). Только оно не 8:1 не находит, оно в принципе /dev/block не сможет найти )

Ладно, пойду дальше ковырять.

--------

Я тут у вас трусь уже чуть не три года бестолково - научил бы кто пользу приносить хоть что ли.

Toxo2 ★★★
() автор топика
Ответ на: комментарий от Toxo2

так все просто: видишь что-то новое - кричишь «нинужно!», что-то проверенное временем - «закопайте!», у кого-то что-то не получается - «rtfm!», вот и весь секрет успеха

EugeneBas ★★
()

В конце концов успокоился на:

1) Или руками создать /dev/block и внутри symlink 8:1 на ../sda1 Тогда gummiboot install перестаёт ругаться и делает всё тоже самое, что уже сделано без него руками.

2) Или установить нормальный eudev и добавить его в запуск rc-update add udev-trigger sysinit. Тогда появляются все плюшки udev, в том числе /dev/block, и соответственно gummiboot тоже не ругается.

3) Или просто плюнуть и забыть. Руками же устанавливается - и чудненько. Сам gummiboot status нужен один раз и то не шибко.

Переписать сам gummuiboot так, чтобы отвязать его от этого механизма - боюсь я не осилю.

Собственно поиграть-то хотел в роутер с 6 картами на Alpine. Да что-то застрял на этой загрузке зачем-то.

Toxo2 ★★★
() автор топика
Ответ на: комментарий от Toxo2

Я уже привык к gummiboot. Он прекрасен в своей простоте.

Ты ведь знаешь, что он превратился в systemd-boot, и, следовательно, ты не можешь его использовать?

научил бы кто пользу приносить хоть что ли.

Попробуй E-LILO, и расскажи о результате.

Я не могу представить ничего проще lilo, хотя сам предпочёл бы syslinux.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Попробуй E-LILO, и расскажи о результате

Докладываю: победил примерно с 10-го раза. Там у вас документация неправильная.

        root=/dev/sda4
        append=""
Работает, когда root внутри append указывается. Я сам тоже накосячил несколько раз в параметрах. Но в итоге - таки запустилось.

А что там такого напихано на 242 346 байт? Gummiboot все же хоть editor умеет, поправить cmdline, и всего 86 743 байта. И UUID он умеет в отличие от.

Ты ведь знаешь, что он превратился в systemd-boot

Это я знаю. А вот сегодня прям наглядно руками потрогал насколько они связаны. Ему плохо без udev.

ты не можешь его использовать

Это не понял. Могу и использую. Вроде.
VoidLinux научил, а потом Fedora показала как красиво организовать ему entries.

Toxo2 ★★★
() автор топика
Последнее исправление: Toxo2 (всего исправлений: 1)
Ответ на: комментарий от LamerOk

systemd-boot отлично работает. сам systemd в системе ему не нужен, если что

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.