Acontece que, devido ao pesado conceito modular de systemd
e systemd-networkd
, a questão de script precisa ser abordada de um ângulo diferente: em vez de procurar scripts com a ponte .netdev
definition, o systemd
maneira é ter um (muito pequeno) one-shot .service
unidade que é desejado por a ponte .netdev
.
As a side note: it seems that in more recent Linux kernels, the kernel bridges actually don't use the dynamically changing lowest MAC48 scheme for the bridge MAC48 anymore. Instead, they create a static MAC48 for the bridge itself. So, in the very strict sense this solution is not really needed anymore, unless one prefers to use a "real" hardware MAC48; which is what is done here in the following service unit.
A nova unidade de serviço necessária (em vez da antiga post-up
de /etc/network/interfaces
) reside em /etc/systemd/system/bridge-stable-mac.service
e atribui o MAC48 de (incorporado, fixo) wlan0
à própria ponte:
[Service]
Type=oneshot
ExecStart=/bin/bash -c "/bin/echo 'br0 available, setting MAC ' '/bin/cat /sys/class/net/wlan0/address'"
ExecStart=/bin/bash -c "/sbin/ip link set br0 address '/bin/cat /sys/class/net/wlan0/address'"
[Install]
WantedBy=sys-subsystem-net-devices-br0.device
O ponto central aqui é a cláusula WantedBy=
: sempre que br0
for iniciado, esse serviço deverá ser executado (exatamente uma vez, Type=oneshot
). O Systemd é realmente interessante aqui, já que ele não precisa editar a definição de dispositivo existente para adicionar nossa dependência, mas calcula essa dependência usando nosso link WantedBy=
inverso. Isso é realmente onde eu acho que systemd
brilha.
A unidade de serviço acima supõe que sua ponte é denominada br0
. Você deve usar um arquivo .netdev
correspondente para definir essa ponte br0
. Por exemplo, em /etc/systemd/network/10-br0.netdev
:
[NetDev]
Name=br0
Kind=bridge
Quando se trata de hotplug de portas de ponte, systemd
realmente faz isso já pronto, o que é muito legal; em /etc/systemd/network/10-br0-ports.network
:
[Match]
Name=eth0 wlan0
[Network]
Bridge=br0
É isso aí!