[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