Tenho uma placa Petalinux (uma Trenz Electronic com um AMD/Xilinx Zynq UltraScale+ MPSoC) que inicializa com uma configuração de conexão de rede errada (sem DHCP). Ela não tem configurações em /etc
:
$ ls /etc/NetworkManager/system-connections/
$
Depois de configurar a conexão, sudo nmcli con mod eth0 ...
ela funciona bem. (Eu modifico a configuração ipv4 e ipv6, como aqui no stackoverflow .) E ele cria um arquivo de configuração permanente em /etc
:
/etc/NetworkManager/system-connections/eth0.nmconnection
Mas, após uma reinicialização, o NetworkManager cria uma nova /run
configuração, que de alguma forma tem precedência sobre minha conexão em /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 --
Aqui, o invasor 99e39a32
se /run
conectou ao eth0
dispositivo, e minha /etc
configuração de conexão fb365147
permanece ociosa.
Como salvar corretamente e permanentemente uma configuração de conexão no NetworkManager, ou fazê-lo usar /etc
a configuração como o único modelo para a eth0
conexão? Onde ele obtém as configurações para /run
? Por que ele não costuma /etc
criar /run
configurações?
Há posts dizendo que o NetworkManager cria conexões por usuário. Ou seja, a sugestão era algo como /etc
é root e de alguma forma outras conexões são usadas para meu usuário. Mas não acho que seja o caso aqui. nmcli
não me deixa modificar uma conexão sem permissões de root.
Há uma série de perguntas semelhantes na internet: 1 (não tenho /etc/netplan
o arquivo mencionado em um comentário lá), 2 , 3. Mas elas não ajudam no meu caso.
Atualizar:
Há algumas informações de como a /run
configuração é feita graças ao log journalctl -u NetworkManager
após a inicialização do computador [loggin] level=TRACE
em /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)
Acho que a questão agora é o que significa Connection 'eth0' differs from candidate 'eth0' ...
- o que é esse candidato? Ou seja, provavelmente há mais alguma configuração para o eth0
próprio dispositivo, e quando a /etc
configuração entra em conflito com essa, o NetworkManager cria uma nova?
Tentei adicionar este arquivo sem nenhuma alteração no comportamento (provavelmente está obsoleto):
$ cat /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
Atualização 2:
Só para ressaltar, tentei adicionar no-auto-default
configuração, mas não fez diferença neste caso:
/etc/NetworkManager/NetworkManager.conf
[main]
no-auto-default=*
# or no-auto-default=eth0
E adicionar a conexão /etc/network/interfaces
também não ajudou:
# Wired interfaces
auto eth0
iface eth0 inet dhcp
hwaddress ether <MAC address>
Eu acho que, como @telcoM sugeriu, é um comportamento específico do Petalinux. Você define as configurações para o dispositivo eth0 quando a imagem é construída (e aparentemente o NetworkManager pode de alguma forma ler as configurações do dispositivo ou o quê?), e você não pode modificar as configurações de ethernet no Petalinux depois que a imagem foi construída . Provavelmente, não há nada que você possa modificar no ZynqMP>
console do uboot também.
Então, o que acabei fazendo foi: renomear minha conexão e eth0dhcp
adicionar uma unidade systemd que a conecta após a inicialização.
sudo nmcli c mod fb365147-6ad9-47a0-a5c8-fbea10080ece con-name eth0dhcp
A configuração da conexão se parece com:
$ 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]
E a unidade systemd one-shot:
[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
É uma solução alternativa suficiente no meu caso. Mais tarde, vamos apenas construir imagens com quaisquer configurações que forem necessárias.