Здравствуйте.
Взялся поиграть с 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?