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

Colin Guthrie gmane at colin.guthr.ie
Tue Aug 17 09:48:19 UTC 2021


Hiya,

As has been said, this is racy. "Sufficiently early" is just a hope, 
rather than a guarantee. Perhaps something in the kernel made things 
more or less efficient (try booting with the old kernel to see if it 
helps, but as this is a race, it may only work some of the time.). Or 
perhaps some unit ordering changed so make this better? Perhaps udev 
settle units have now been dropped and thus the boot is faster and 
things happen in a more hotplug oriented way? Lot's of possibilities for 
why this no longer works (and even before it definitely wasn't a 
guaranteed or recommended approach).

As has been said, you're best to pick a different "namespace" lan0 wan0 
wan1 etc. if you can but if you can't change this due to some legacy 
scripts, at least pick sufficiently high ethN numbers to stay out of the 
way of the kernel, e.g. if you have three eth cards, then pick your 
names starting from e.g. 5: eth5, eth6, eth7 and thus you can avoid this 
dance with temporary names (although I'd still recommend using different 
names altogether if you can).

Hope that helps.

Col

Amish wrote on 16/08/2021 13:38:
> 
> 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


-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
   Tribalogic Limited http://www.tribalogic.net/
Open Source:
   Mageia Contributor http://www.mageia.org/
   PulseAudio Hacker http://www.pulseaudio.org/
   Trac Hacker http://trac.edgewall.org/



More information about the systemd-devel mailing list