我有一个使用 Yocto 编译的嵌入式 Linux 系统,使用 systemd。我有一个网络配置文件,位于/etc/systemd/network/20-wired.network
.该文件的内容是:
[Match]
Name=eth0
[Network]
Address=192.168.5.40/24
Gateway=192.168.5.1
DNS=192.168.5.1
但是,当我重新启动计算机时,eth0 接口已使用 DHCP 成功配置,而不是分配静态 IP 地址。该ip a
命令显示:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.223/16 brd 10.1.255.255 scope global dynamic noprefixroute eth0
valid_lft 85898sec preferred_lft 85898sec
inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
valid_lft forever preferred_lft forever
但是,如果我在启动后等待 5 秒左右,然后执行systemctl restart systemd-networkd
系统通常会正确配置,如下所示:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.40/24 brd 192.168.5.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
valid_lft forever preferred_lft forever
最后,通过正确的时间重新启动网络服务,我似乎甚至可以得到这个结果(既包括预期的静态地址,也包括不需要的 DHCP 地址):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether f8:dc:7a:3c:27:82 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.40/24 brd 192.168.5.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.1.1.223/16 brd 10.1.255.255 scope global dynamic noprefixroute eth0
valid_lft 86246sec preferred_lft 86246sec
inet6 fe80::43ec:fd39:e1c0:3c05/64 scope link noprefixroute
valid_lft forever preferred_lft forever
有谁知道这里发生了什么或如何调试它?我的配置有明显的错误吗?
systemctl status systemd-networkd
启动后立即显示以下内容(特别是在 network-online.target 之后):
* systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: activating (start) since Tue 2021-07-20 12:58:52 UTC; 65ms ago
TriggeredBy: * systemd-networkd.socket
Docs: man:systemd-networkd.service(8)
Main PID: 282 ((networkd))
Tasks: 1 (limit: 3576)
Memory: 416.0K
CGroup: /system.slice/systemd-networkd.service
`-282 (networkd)
几秒钟后,它看起来像这样:
* systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-07-20 12:58:52 UTC; 3min 20s ago
TriggeredBy: * systemd-networkd.socket
Docs: man:systemd-networkd.service(8)
Main PID: 282 (systemd-network)
Status: "Processing requests..."
Tasks: 1 (limit: 3576)
Memory: 2.0M
CGroup: /system.slice/systemd-networkd.service
`-282 /lib/systemd/systemd-networkd
因此,当 network-online.target 服务运行时,该服务看起来仍在“激活”。但我不确定这意味着什么,或者这是否是一个问题。
答案1
我刚刚注意到 systemd-networkd 和 NetworkManager 都在运行。这不正常,对吧?通常你会想要其中之一? systemctl disable /lib/systemd/system/NetworkManager.service && reboot
似乎已经解决了问题。
编辑:这不是答案,或者至少不是全部答案。即使禁用了 NetworkManager,这种情况也再次发生。
答案2
您不需要禁用网络管理器。只需将此行附加到您的配置文件中:
NM_CONTROLLED=no
希望这会有所帮助。