[systemd-devel] Upgraded multiple systems to systemd 249.3 and all had eth1 not started / configured

Amish anon.amish at gmail.com
Mon Aug 16 12:38:28 UTC 2021


On 16/08/21 5:39 pm, Lennart Poettering wrote:
> On Mo, 16.08.21 17:31, Amish (anon.amish at gmail.com) wrote:
>
>> On 16/08/21 5:25 pm, Lennart Poettering wrote:
>>> On Mo, 16.08.21 16:09, Amish (anon.amish at gmail.com) wrote:
>>>
>>>> Some old scripts that we have expect interface names starting with eth. But
>>>> those names are not predictable.
>>>>
>>>> So to get predictable names starting with eth*, first I temporarily rename
>>>> all interface with tmpeth*. This is done via udev rules.
>>>>
>>>> SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="XX:XX:XX:XX:XX:XX",
>>>> NAME="tmpeth0"
>>>> SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="XX:XX:XX:XX:XX:YY",
>>>> NAME="tmpeth1"
>>>> SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="XX:XX:XX:XX:XX:ZZ",
>>>> NAME="tmpeth2"
>>>>
>>>> Then I have a small service (script) which runs before network-pre.target to
>>>> convert these names back to eth*
>>>>
>>>> #search for network interface with name starting from "tmpeth" and rename
>>>> them to "eth"
>>>> /usr/bin/find /sys/class/net -maxdepth 1 -name "tmpeth[0-9]" -type l -printf
>>>> "%f\n" | while read tmpiface; do /usr/bin/ip link set dev "$tmpiface" name
>>>> "$(echo $tmpiface | sed s/tmpeth/eth/)"; done
>>>>
>>>> This ensures that I have predictable names starting with eth*. And it is
>>>> working fine from 2-3 years. Even with current issue, name assignment is
>>>> working fine.
>>> This cannot work and is necesarily race. Stay out of the ethXYZ
>>> namespace, that's the kernel's namespace. Pick any other names,
>>> i.e. "foobar0", "foobar1", but otherwise you just have a racy racy
>>> mess, because the kernel might take the name whenever it pleases.
>> No I dont think this is race. Because my script runs after Udev has finished
>> assigning the interfaces names.
> device probing can take any time it wants. there isn't a point in time
> where everything is probed.

These are internal PCI LAN cards. I believe these gets probed (and 
named) sufficiently early.

And then we can expect names assigned by Udev to remain same.

And I can see in the logs that names are not changed after my script runs.

Also this has been working successfully for me from 2 or more years.

But after today's update, something is breaking all the systems.

Additionally just now on other system I see eth2 (instead of eth1) being 
renamed to eth0.

I just want to know what changed and where? (Kernel or Systemd?).

*Also another point is, I have set ConfigureWithoutCarrier=yes in 
network files and all are static IPs, so systemd-networkd should have 
configured the devices even if links are not up. But its not doing that 
anymore either after today's update.*

Regards

Amish.

> Lennart
>
> --
> Lennart Poettering, Berlin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20210816/268dac06/attachment.htm>


More information about the systemd-devel mailing list