(In reply to Fabian Vogt from comment #8) > > That only does something in the bootdev/ip=dhcp case though AFAICT, but a > bit further up there is: Hm, but the code writing did-setup is outside the 'for p in $(getargs ip=)' loop. The conditionals there are: --> # no ip option directed at our interface? if [ -z "$NO_AUTO_DHCP" ] && [ ! -e /tmp/net.${netif}.up ]; then --< "$NO_AUTO_DHCP" is only set in special cases and /tmp/net.${netif}.up shouldn't have been written either since that is done in the for loop. In this case it should go down to: --< if [ $? -eq 0 ] && [ -z "$(ls /tmp/leaseinfo.${netif}*)" ]; then > /tmp/net.${netif}.did-setup if [ -e /sys/class/net/${netif}/address ]; then > /tmp/net.$(cat /sys/class/net/${netif}/address).did-setup fi fi --< > So this behaviour is a combination of: > - Interfaces without explicit ip= config fall back to DHCP > - It waits for (any) explicitly configured interface to be up > - ip=dhcp counts as "explicitly configuring all interfaces" > > This might just need a '>/tmp/net.${netif}.did-setup' there? I already burned my fingers by writing did-setup too early in the code. That might skip the setup of other configured interfaces or the setup of an dual ipv4/ipv6 stack. I want to be very careful here. > As there is no ip parameter set, it can't possibly reach the code in > the 'for p in $(getargs ip=)' loop which creates the did-setup flag, > but net-genrules.sh generated the initqueue hook waiting for them > irregardless of any ip parameters. Correct, the culprit is the missing did-setup, but I'm not sure yet why it doesn't get written. Do you see any other reason? > > ... > > > > It does setup the ip but not the netroot. > > So, without the ip= parameter, dracut doesn't seems to recognize that the > > system root is provided via network. > > According to the manpage, rd.neednet only commands dracut to set up the > > network, but not to provide netroot: > > > > --> > > rd.neednet=1 > > boolean, bring up network even without netroot set > > --< > > That's actually what it's used for here - have network in the initrd, but > boot from local disk. > It's because a dracut module (ignition) uses network for downloading files. > > > I guess you would have to add a netroot parameter to make dracut aware that > > system root is provided via network. > > Maybe also root=dhcp works, though. > > That might break booting... Even if that works as alternative to ip=dhcp > without the delay, it doesn't seem like a good idea to use it instead, just > the name alone would need a big disclaimer... Ok, so I don't need to consider the netroot case. Let's focus on the did-setup then.