Bug 48516 - Propagator - Не работает определение сетевого интерфейса при сетевой установки ОС
Summary: Propagator - Не работает определение сетевого интерфейса при сетевой установк...
Status: NEW
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: 2023-11-30 17:58 MSK (History)
2 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
Да, в них это исправление ещё не попало.