[make-initrd] Добавить udev правило в initrd через initrd.mk

Leonid Krivoshein klark.devel at gmail.com
Mon Sep 27 21:25:03 MSK 2021


27.09.2021 18:38, Антон Мидюков пишет:
> 23.09.2021 21:36, Alexey Gladkov пишет:
>> On Thu, Sep 23, 2021 at 09:20:44PM +0700, Антон Мидюков wrote:
>>>>> Обнаружил, что сетевой интерфейс включенный в initrd остаётся с именем eth0 при сетевой
>>>>> установке. Что приводит к тому, что в инсталяторе настраиваем eth0, а в установленной системе
>>>>> имеем его с именем enp0s8 подобным без конфигурации. Так что к установленной системе по сети после установки уже
>>>>> можно и не подключиться (сетевой интерфейс подключен один).
>>>> Переименовывает systemd или что-то около его. Насколько я помню на это
>>>> влияет присутствие dmidecode.
>>>>
>>>> Это не моё дело, но инсталлер неправ, когда использует имена без
>>>> последующей привязки имени к mac или businfo>> Соответственно, появилась мысль, что нужно отработать в initrd udev-правило переименования интерфейса.
>>>>
>>>> initrd как раз ничего не переименовывает. Имя eth* каноническое.
>>>>
>>> Это я знаю. Но проблема в том, что уже поднятый интерфейс не переименовывается в stage2.
>>> Отсюда мысль, что нужно переименовать его ещё в initrd до его поднятия.
>> Я предлагал наоборот в stage2 добавить аналог цикла:
>>
>> https://github.com/osboot/make-initrd/blob/master/features/network/data/lib/initrd/cmdline.d/network#L165-L175
>>
> Возможно, это хорошая идея.
> Но почему-то я не увидел /etc/udev/rules.d/60-persistent-net.rules в initrd.
> Загружался с ip=dhcp stop=bootchain
> Фича network уже должна была отработать. Сетевые интерфейсы настроены.
>
>> или в системе их кто-то всё равно пытается переименовать ?
> Настроенные в initrd интерфейсы никто не переименовывает в stage2. Отсюда и проблема.

Проблема в другом: когда мы грузимся с сетевыми параметрами, runtime 
make-initrd настраивает сетевую карту, даже если не переименовывает 
интерфейс, в другом случае он ничего не делает, так как нет сетевых 
параметров, тогда это делается в stage2.

Как я понял, ты хочешь, чтобы независимо от сетевых параметров настройки 
интерфейсов были одинаковы в stage1 и stage2, для этого в stage1 нужны 
правила, которые будут попадать в initramfs и отрабатывать независимо от 
включенности фичи network. С этим может возникнуть одна проблема: если 
эти правила не успеют отработать до того, как будет найден корень, 
данное решение не поможет. К слову, фича network переименовывает 
интерфейс только если её об этом попросить, лишь в этом случае создаётся 
60-persistent-net.rules.


> Мне кажется, нужно передавать правило udev в stage2, чтобы при установке скопировать в устанавливаемую
> систему. Тогда проблема бы решилась.

Ни в коем случае. Потому что суммарный набор правил в stage2 всё равно 
будет непредсказуемым, stage1 об этом ничего не знает.

Наверное, правильное направление -- разместить в stage1 те же udev rules 
около 8?-network-*, которые есть в stage2, для явного переименования 
интерфейса может отработать фича network, избежать рейса с тем, кто 
раньше -- найдётся корень или применятся правила к интерфейсам можно 
лишь опять же включив явно настройки ip.


-- 
Best regards,
Leonid Krivoshein.



More information about the Make-initrd mailing list