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.
Petalinux é uma distribuição para uso embarcado, e me parece que foi projetada para ser configurada antes de você criar sua imagem alvo , e então não modificada depois. A configuração deve acontecer na seção de configurações Ethernet da
petalinux-config
ferramenta que você executaria enquanto prepara seu projeto Petalinux.O ChatGPT não reconhece o fato de que o Petalinux é uma distribuição embarcada, não uma distribuição típica de desktop/servidor.
A versão do NetworkManager usada no Petalinux é provavelmente minimizada o máximo possível. Em geral, o NetworkManager pode ter vários plugins de armazenamento de configuração para combinar com os estilos de configuração clássicos de várias distribuições, além do
keyfile
plugin padrão que está sempre incluído.No Petalinux, pode haver apenas o
keyfile
plugin presente, e qualquer mecanismo responsável por converter as configurações de rede feitaspetalinux-config
em uma configuração ativa do NetworkManager aparentemente não dispara apenas uma vez, mas a cada inicialização, e acaba entrando em conflito com suas tentativas de personalização.Assim como o systemd, as configurações no
/run/
são geradas automaticamente. Se você quiser desligar perfis automáticos para uma determinada interface de rede (para se forçar a criar um perfil para conectar Ethernet mesmo em uma rede DHCP, por exemplo), você precisará configurar o NetworkManager para desligar os perfis padrão ou criar seu próprio perfil.Para fazer isso, adicione um arquivo de configuração
/etc/NetworkManager/conf.d/
que definano-auto-default
as interfaces nas quais você não deseja receber perfis automáticos.Os arquivos restantes
/run/NetworkManager/
são o estado do sistema de tempo de execução do NetworkManager e não devem ser excluídos.