Bug 48516 - Propagator - Не работает определение сетевого интерфейса при сетевой установки ОС
Summary: Propagator - Не работает определение сетевого интерфейса при сетевой установк...
Status: CLOSED FIXED
Alias: None
Product: Branch p10
Classification: Unclassified
Component: propagator (show other bugs)
Version: не указана
Hardware: x86_64 Linux
: P5 normal
Assignee: Leonid Krivoshein
QA Contact: qa-p10@altlinux.org
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-11-20 14:45 MSK by Alexander
Modified: 2025-02-04 13:01 MSK (History)
4 users (show)

See Also:


Attachments
Вывод при загрузке (238.26 KB, image/png)
2023-11-20 14:45 MSK, Alexander
no flags Details
screen (20.46 KB, image/png)
2023-11-30 14:17 MSK, obidinog@basealt.ru
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Alexander 2023-11-20 14:45:53 MSK
Created attachment 15087 [details]
Вывод при загрузке

При сетевой установки операционной системы AltLinux SP Server 10 kernel 6.1.29-un-def-alt1 #1 SMP PREEMPT_DYNAMIC Thu May 25 14:20:11 UTC 2023 x86_64 GNU/Linux propagator не верно определяет указанный сетевой интерфейс в параметрах, переданных ядру.

Загружаемся по pxe

imgfree
kernel http://10.102.1.199:80//11111111-fa24-45a0-a4df-aa52af816b02/kernel \
    root=/dev/ram0 text fastboot poweroff stagename=altinst ai live ramdisk_size=200000 \
    curl=http://10.102.1.199/images/alt/Metadata/11111111-fa24-45a0-a4df-aa52af816b02 \
    automatic=method:http,interface:eno1,network:dhcp,server:10.102.1.199,directory:/images/alt/distrib \
    ipa-debug=1 ipa-global-request-id=req-b06b1bad-fa4c-4c69-b4f4-dc6795f425af  initrd=ramdisk || goto boot_ramdisk
initrd http://10.102.1.199:80//11111111-fa24-45a0-a4df-aa52af816b02/ramdisk 

На приложенном скрине видим, что propagator определил выбранный в параметрах интерфейс eno1, но в процедуре intf_select_and_up_again в файле network.c он ее теряет, далее не может произвести настройку сетевого интерфейса.

Не претендующее на правильное решение, позволяющее произвести настройку и последующую установку ОС. Добавим две строки в файл /root/propagator/network.c. Если теперь пересобрать propagator, добавить его в образ и произвести загрузку с него, сетевой интерфейс определяется корректно, загрузка и установка ОС производится корректно.

intf_select_and_up_again:
        for (i = 0; i < 15; i++) {
                if ((iface = interface_select()) != NULL)
                        break;
                sleep(1);
        }

+        iface = get_auto_value("interface");
+        sleep(20);
Comment 1 Leonid Krivoshein 2023-11-20 19:38:41 MSK
iface = interface_select() определяет подключенный интерфейс, у которого уже есть несущая. Следующей строкой iface = get_auto_value("interface") ранее полученное значение iface игнорируется и берётся из переданного через командную строку, хотя передают его редко таким способом. Так что правильным решением это не назовёшь.

Логика последних патчей пропагатора на эту тему сводилась к тому, чтобы не было диалогов, чтобы не гадать. Но нужно оставить подключенным только один кабель и только из той посети с DHCP, откуда будет выполняться автоустановка.
Comment 2 Alexander 2023-11-20 20:12:25 MSK
 прошу реализовать правильную работу передачу названия интерфейса
Comment 3 Alexander 2023-11-20 20:14:47 MSK
или вы подтверждаете, что нельзя указывать имя сетевого интерфейса?
Comment 4 Leonid Krivoshein 2023-11-20 23:42:46 MSK
Последние патчи пропагатора на эту тему могли поломать возможность передачи имени интерфейса через командную строку. По вашим логам видно, что там вообще портится память, пропагатор оперирует непонятно чем, но не именем интерфейса.

В пропагаторе вообще поменяли логику, чтобы избавиться от диалогов и дать принимать решение автомату. Он решает, что правильный интерфейс -- тот, на котором раньше остальных появилась несущая.

Так что по логике авторов последних усовершенствований багом это будет только, если сетевая загрузка не работает с единственным сетевым кабелем, а указывать в этом случае интерфейс нет никакого смысла. Можете это проверить? Пользуясь случаем, можете также дать свои соображения в отношении этих усовершенствований.
Comment 5 Leonid Krivoshein 2023-11-21 02:04:41 MSK
(Ответ для Alexander на комментарий #2)
> прошу реализовать правильную работу передачу названия интерфейса
https://git.altlinux.org/gears/p/propagator.git?p=propagator.git;a=blob;f=network.c#l593

Предполагаю, что правильное решение -- добавить строки:

if (choice)
    choice = strdup(choice);

перед строкой #597 или #595, поскольку free_net_devices(interfaces) освобождает память, занятую массивом (так и должно быть, вот только исходник automatic.c не был на это рассчитан). Также обратите внимание на строку #581 в network.c. Строки #635-637 -- код, который никогда не работает, следующее за ними условие:

if (sel_intf == NULL) ...

напротив, выполняется всегда. Ошибки вида SIOCSIFADDR: No such device и квадратик вместо имени интерфейса в ваших логах -- следствие потерянного имени интерфейса.
Comment 6 Alexander 2023-11-21 10:50:29 MSK
После внесения изменений пытаемся собрать новый образ boot/initrd.img
Подскажите пожалуйста при сборке образа какое должно быть содержание файла  initrd.mk ?
Какие опции необходимо использывать для команды make-initrd --kernel=uname -r ?
Comment 7 Leonid Krivoshein 2023-11-21 12:58:38 MSK
В данном случае я бы распаковал initrd и запаковал обратно с новым бинарём, т.к. воссоздать initrd.img иным способом сильно сложнее. Могут помочь команды из состава самого make-initrd, начиная с initrd-ls.
Comment 8 Alexander 2023-11-21 13:54:07 MSK
нет описания как сделать сильно сложнее?
Comment 9 Leonid Krivoshein 2023-11-21 15:30:20 MSK
Нет. Основное есть тут: https://git.altlinux.org/gears/m/mkimage.git?p=mkimage.git;a=blob;f=tools/mki-build-propagator , но это лишь маленькая часть сборки официальных образов, много чего не достаёт. Для будущих версий и тех, что уже сейчас на Сизифе, это можно будет сделать просто командой make-initrd с использованием сохранённого дистрибутивного конфига.
Comment 10 Alexander 2023-11-21 16:28:43 MSK
спасибо
Что нужно сделать, чтобы следующие версии дистрибутива ALTLinux 10 были с исправлением текущей проблемы?
Comment 11 Leonid Krivoshein 2023-11-21 23:24:06 MSK
(Ответ для Alexander на комментарий #10)
> Что нужно сделать, чтобы следующие версии дистрибутива ALTLinux 10 были с
> исправлением текущей проблемы?
Чтобы в них попала исправленная версия пропагатора. Но большинство дистрибутивов с нумерацией 10.2 уже вышло, ожидается ещё парочка, а будущие 11.0 теоретически могут быть выпущены уже не с пропагатором. Проблема затрагивает образы на бранчах c10x, что тоже важно.

Короче, надо жестоко пинать апстримы, чтобы они что-то делали. ))
Comment 12 obidinog@basealt.ru 2023-11-30 14:16:20 MSK
Проверено на Alt SP Server 10 x86_64 и на KWorkstation 10.1.2 x86_64

Вариант 1
Шаги:
1) Создал VM на PVE Proxmox, добавил 2 интерфейса
2) Настроил сетевую установку
3) в параметрах ядра прописал 
automatic=method:http,interface:eth1,network:dhcp,server:192.168.1.1
Результат: Возникает ошибка при загрузке( не может определить интерфейс,см скрин)

Вариант 2:
Если не указывать в параметрах ядра интерфейс, то установка проходит успешно с первого интерфейса eth0

Вариант 3:
Если прописать в параметрах ядра
automatic=0
Выбрать HTTP > нужный интерфейс(любой) > DHCP
То установка проходит успешно с любого выбранного интерфейса

Ошибка заключается в том, что не может определить интерфейс если указывать его вручную в параметрах ядра
Comment 13 obidinog@basealt.ru 2023-11-30 14:17:09 MSK
Created attachment 15133 [details]
screen
Comment 14 Leonid Krivoshein 2023-11-30 17:58:04 MSK
(Ответ для obidinog@basealt.ru на комментарий #12)
> Проверено на Alt SP Server 10 x86_64 и на KWorkstation 10.1.2 x86_64
Да, в них это исправление ещё не попало.
Comment 15 Leonid Krivoshein 2025-01-19 14:07:27 MSK
Имеет ли смысл держать открытыми баги на пропагатор, если он удалён из Сизифа и p11, а образов на p10 больше не ожидается? Или закрываем как WONTFIX?
Comment 16 Антон Мидюков 2025-01-19 15:54:32 MSK
(Ответ для Leonid Krivoshein на комментарий #15)
> Имеет ли смысл держать открытыми баги на пропагатор, если он удалён из
> Сизифа и p11, а образов на p10 больше не ожидается? Или закрываем как
> WONTFIX?

Имеет. Пока p10 поддерживается.
Comment 17 Антон Мидюков 2025-01-19 15:55:40 MSK
(Ответ для Антон Мидюков на комментарий #16)
> (Ответ для Leonid Krivoshein на комментарий #15)
> > Имеет ли смысл держать открытыми баги на пропагатор, если он удалён из
> > Сизифа и p11, а образов на p10 больше не ожидается? Или закрываем как
> > WONTFIX?
> 
> Имеет. Пока p10 поддерживается.

Вообще-то для загрузки по сети можно было бы собрать initrd с исправленным propagator, будь он в репозитории p10.
Comment 18 Leonid Krivoshein 2025-01-19 18:12:02 MSK
(In reply to Антон Мидюков from comment #17)
> Вообще-то для загрузки по сети можно было бы собрать initrd с исправленным
> propagator, будь он в репозитории p10.
https://packages.altlinux.org/ru/tasks/334829/ -- его можно собрать и после команды apt-repo test 334829, а чтобы попал в репозиторий, нужно, чтобы одобрили, висит на EPERM уже больше года. Нужно ли обновлять эту сборку?
Comment 19 Leonid Krivoshein 2025-01-19 18:15:45 MSK
(In reply to Антон Мидюков from comment #16)
> Имеет. Пока p10 поддерживается.
Получается, сборка конечно под p10 тогда нужна. С удалением из Сизифа никакие коммиты не потеряются?
Comment 20 Антон Мидюков 2025-01-19 19:36:14 MSK
(Ответ для Leonid Krivoshein на комментарий #19)
> (In reply to Антон Мидюков from comment #16)
> > Имеет. Пока p10 поддерживается.
> Получается, сборка конечно под p10 тогда нужна. С удалением из Сизифа
> никакие коммиты не потеряются?

Нет. Ничего не потеряется.
Собирай под p10.
Comment 21 Leonid Krivoshein 2025-01-20 18:07:39 MSK
(In reply to Антон Мидюков from comment #20)
> Собирай под p10.
https://packages.altlinux.org/ru/tasks/370643/ -- надо проверять. То есть, как предложил Антон выше, сборка initrd с этим пропагатором позволит решить проблему сетевой загрузки. В этом таске есть последние фиксы сборки и закрытие старых багов, которые висели в кармане с 2023 года.

Избавиться от статической линковки сходу не вышло, а хорошо бы, т.к. у нас очень давно glibc попадает в initrd.img, и ещё одна копия в ОЗУ не нужна, здесь тем более в двух экземплярах, т.к. и сам initrd в ОЗУ. При избавлении от него убираются многие страшные сообщения, но оказалось, что у нас и на p8 так было.
Comment 22 Repository Robot 2025-02-04 13:01:37 MSK
propagator-20250120-alt1 -> p10:

 Mon Jan 20 2025 Leonid Krivoshein <klark@altlinux> 20250120-alt1
 - improve build and spec
 Wed Nov 22 2023 Leonid Krivoshein <klark@altlinux> 20231122-alt1
 - Memory corruption fix (closes: #36751, #48516)
 Tue Nov 21 2023 Leonid Krivoshein <klark@altlinux> 20231121-alt1
 - improvements to logging during boot loading (closes #37201)