我有一块 Petalinux 开发板(带有 AMD/Xilinx Zynq UltraScale+ MPSoC 的 Trenz Electronic),它启动时网络连接配置错误(无 DHCP)。它没有以下配置/etc
:
$ ls /etc/NetworkManager/system-connections/
$
配置连接后,sudo nmcli con mod eth0 ...
它可以正常工作。 (我修改了 ipv4 和 ipv6 配置,就像stackoverflow 上的那样。) 它会在中创建一个永久配置文件/etc
:
/etc/NetworkManager/system-connections/eth0.nmconnection
但是,重新启动后,NetworkManager 会创建一个新的/run
配置,该配置以某种方式优先于我的连接/etc
:
$ nmcli -f TYPE,FILENAME,UUID,NAME,DEVICE connection
TYPE FILENAME UUID NAME DEVICE
ethernet /run/NetworkManager/system-connections/eth0.nmconnection 99e39a32-c0ab-4b3f-be16-75a9bdff1277 eth0 eth0
loopback /run/NetworkManager/system-connections/lo.nmconnection 5d84c484-4214-47e4-8f00-01f7730200b3 lo lo
ethernet /etc/NetworkManager/system-connections/eth0.nmconnection fb365147-6ad9-47a0-a5c8-fbea10080ece eth0 --
这里,恶意程序99e39a32
已/run
连接到eth0
设备,并且我的/etc
连接配置fb365147
保持空闲状态。
如何在 NetworkManager 中正确永久地保存连接配置,或者让其使用/etc
配置作为连接的唯一模板eth0
?它从哪里获取配置/run
?它为什么不用/etc
来创建/run
配置?
有帖子说 NetworkManager 会为每个用户创建连接。也就是说,建议是/etc
root,然后其他连接会以某种方式用于我的用户。但我不认为这里的情况如此。nmcli
不允许我修改没有 root 权限的连接。
互联网上有许多类似的问题:1 (我没有/etc/netplan
评论中提到的文件),2,3 。但它们对我的情况没有帮助。
更新:
通过计算机启动后的日志/run
可以了解配置如何产生的一些信息:journalctl -u NetworkManager
[loggin] level=TRACE
/etc/NetworkManager/NetworkManager.conf
NetworkManager[347]: <info> [1734374462.9312] device (eth0): carrier: link connected
NetworkManager[347]: <trace> [1734374462.9313] ethtool[3]: ETHTOOL_GSET, eth0: success
NetworkManager[347]: <debug> [1734374462.9317] device[e5c0e28febbc1b13] (eth0): unmanaged: flags set to [platform-init,!user-settings=0x4/0x14/unmanaged/unrealized], set-managed [user-settings=0x10])
NetworkManager[347]: <debug> [1734374462.9318] device[e5c0e28febbc1b13] (eth0): unmanaged: flags set to [!platform-init,!user-settings=0x0/0x14/managed/unrealized], set-managed [platform-init=0x4])
NetworkManager[347]: <debug> [1734374462.9318] device[e5c0e28febbc1b13] (eth0): unmanaged: flags set to [!sleeping,!platform-init,!user-settings=0x0/0x15/managed/unrealized], set-managed [sleeping=0x1])
NetworkManager[347]: <trace> [1734374462.9319] dbus-object[e5c0e28febbc1b13]: export: "/org/freedesktop/NetworkManager/Devices/2"
NetworkManager[347]: <info> [1734374462.9329] manager: (eth0): new Ethernet device (/org/freedesktop/NetworkManager/Devices/2)
NetworkManager[347]: <trace> [1734374462.9349] settings: auto-default: cannot create auto-default connection for device eth0: already has a profile
<----- this already existing "profile" must be the config in /etc
when I added no-auto-default=* or eth0 in NetworkManager.conf
this line said: cannot create auto-default.. because no-auto
...
NetworkManager[347]: <debug> [1734374462.9356] Connection 'eth0' differs from candidate 'eth0' in ipv4.addresses, ipv4.gateway, ipv4.method
NetworkManager[347]: <debug> [1734374462.9357] manager: (eth0): assume: generated connection 'eth0' (b807ebb2-d7a5-4b26-82c1-c321a6e7d5ba)
NetworkManager[347]: <debug> [1734374462.9357] device[e5c0e28febbc1b13] (eth0): assume-state: set guess-assume=0, connection=(null)
NetworkManager[347]: <trace> [1734374462.9370] keyfile: commit: b807ebb2-d7a5-4b26-82c1-c321a6e7d5ba (eth0) added as "/run/NetworkManager/system-connections/eth0.nmconnection" (nm-generated,volatile,external)
我想现在的问题是Connection 'eth0' differs from candidate 'eth0' ...
- 候选者是什么?也就是说,设备本身可能还有一些配置eth0
,当/etc
配置与该配置冲突时,NetworkManager 会创建一个新的配置?
我尝试添加此文件,但行为没有任何变化(它可能已被弃用):
$ cat /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
更新 2:
需要指出的是,我曾尝试添加no-auto-default
配置,但在这种情况下没有任何区别:
/etc/NetworkManager/NetworkManager.conf
[main]
no-auto-default=*
# or no-auto-default=eth0
添加连接/etc/network/interfaces
也无济于事:
# Wired interfaces
auto eth0
iface eth0 inet dhcp
hwaddress ether <MAC address>
我认为,正如@telcoM 所建议的那样,这是 Petalinux 特有的行为。您在构建映像时定义 eth0 设备的设置(显然 NetworkManager 可以以某种方式从设备读取设置,或者其他什么?),并且在构建映像后您无法在 Petalinux 中修改以太网设置ZynqMP>
。可能,您在 uboot控制台中也无法修改任何内容。
所以,我最终做的是:重命名我的连接并eth0dhcp
添加启动后连接它的 systemd 单元。
sudo nmcli c mod fb365147-6ad9-47a0-a5c8-fbea10080ece con-name eth0dhcp
连接配置如下:
$ sudo cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0dhcp
uuid=fb365147-6ad9-47a0-a5c8-fbea10080ece
type=ethernet
autoconnect=false
interface-name=eth0
timestamp=1734377647
[ethernet]
mac-address=<mac address>
[ipv4]
method=auto
[ipv6]
addr-gen-mode=default
method=auto
[proxy]
一次性的 systemd 单元:
[Unit]
Description=UP the eth0dhcp for eth0 after boot
After=network.target
Requires=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
User=root
ExecStart=nmcli con up eth0dhcp
SuccessExitStatus=0
Restart=on-failure
RestartSec=20
StartLimitInterval=300
StartLimitBurst=5
[Install]
WantedBy=multi-user.target
对我来说,这已经足够了。稍后我们将使用所需的任何设置来构建图像。