Como regenerar 70-persistent-net.rules sem reiniciar?


14

O arquivo /etc/udev/rules.d/70-persistent-net.rulesé gerado automaticamente em um sistema Linux com o udev, se não existir, durante a reinicialização. Mas eu gostaria de saber como criar esse arquivo de regras (com um comando) sem reiniciar o servidor.

Eu estava pesquisando no Google por um tempo e descobri que o arquivo de regras é gerado por este script:

/lib/udev/write_net_rules

No entanto, é impossível executar esse script a partir da linha de comando, pois (presumo) ele deseja ser iniciado pelo udev, com algumas variáveis ​​de ambiente definidas corretamente. Iniciando manualmente, imprime a mensagem de erro "ausente $ INTERFACE". Mesmo se eu definir a variável env INTERFACE = eth0 antes do início do script, ele ainda imprimirá o erro "falta de correspondência válida". Sem mencionar que tenho duas interfaces ( eth0e eth1) e quero o arquivo de regras gerado para ambas.

Eu também estava pensando em acionar eventos do udev como este, esperando que ele inicie o script a partir do próprio udev, mas nada muda:

udevadm trigger --type=devices --action=change

Então, alguém sabe como regenerar as regras de rede persistentes no arquivo /etc/udev/rules.d/70-persistent-net.rulessem reiniciar?


Qual é a sua distribuição? Que tipo de sistema init ele usa?
Michas

1
Eu diria que isso é irrelevante. Estou usando o Slackware com eUdev e sysvinit. Eu estava examinando os scripts de inicialização para descobrir o que é executado que gera o arquivo de regras, mas encontrou apenas o acionador udevadm, com um comentário de que este é o comando para gerar as regras persistentes, mas de alguma forma isso funciona apenas na reinicialização, não efeito se eu executá-lo manualmente.
Tomas M

1
Pode ser relevante, já que eu, no Arch, não tenho 70-persistent-net.rulesnem o /lib/udev/write_net_rulesroteiro nem o . Portanto, não posso verificar, mas presumivelmente a $INTERFACEvariável está definida no próprio script. Muito provavelmente, é passado como argumento. Você pode nos mostrar o conteúdo do script?
terdon

O script simplesmente usa $INTERFACEvariável. Existem muito mais variáveis ​​simplesmente usadas, nunca declaradas. É porque é chamado pelo udev, e o udev define todas as variáveis ​​env antes de executar o script na inicialização.
Tomas M

Você realmente precisa saber como regenerá-lo ou pode simplesmente editar o arquivo para refletir a nova realidade?
roaima 16/01

Respostas:


5

De acordo com a página do manual, --action=changeé o valor padrão para udevadm.

   -c, --action=ACTION
       Type of event to be triggered. The default value is change.

Portanto, é melhor você tentar --action=add. Deve ajudar:

/sbin/udevadm trigger --type=devices --action=add

intel_rapl: nenhum domínio rapl válido encontrado no pacote 0
Tiina

1

No Ubuntu Server 16.04LTS, o 70-persistent-net.rules não existe.

tudo o que fiz foi correr:

ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

Em seguida, crie o arquivo usando

sudo vi /etc/systemd/network/10-internet.link

e adicione o seguinte

[Match] 
Path=pci-0000:(your device mac address)

[Link] 
Name=eth0 (or whatever you want to name it)

:wq salvar o arquivo

depois reinicie e ajuste seu arquivo / etc / network / interfaces. Em seguida, reinicie novamente.


9
A pergunta é "Como regenerar 70-persistent-net.rules sem reinicialização? " Sua resposta contém duas reinicializações. Como isso é uma resposta para a pergunta?
G-Man diz 'Reinstate Monica'

0

Eu tive o mesmo problema, mas notei que ainda conseguia ver as interfaces na ip addrlista. Eu usei o seguinte (como root):

# ip addr # to get my mac addresses
# export INTERFACE=eth0; export MATCHADDR="xx:xx:xx:xx:xx:xx"; /lib/udev/write_net_rules
# replace the 00's with the real mac addr

Repita para cada interface. Isso foi usado para "recuperar" meu arquivo. (Nota: uma invocação listará todas as interfaces + adicionará renomeação para corresponder a uma, então eu recomendo que você espreite o arquivo de saída após uma invocação)

Definitivamente, existem diferenças entre os sistemas operacionais e as implementações atuais do UDEV e os scripts de suporte. Para observar, eu estava usando o CentOS 6.8 quando fiz isso com sucesso.

Crédito - referenciei principalmente este site. Há um comentário em alguns tópicos abaixo sobre como modificar o script, mas eu preferi usar variáveis ​​de ambiente, pois era mais limpo: https://access.redhat.com/discussions/1240213


Merda - espere. Sinto muito, esse foi o comando que não funcionou. Preciso atualizar a resposta com a etapa que fiz
gravy21 18/17

Ok, eu atualizei para como consertou o meu. Espero que funcione se for aplicável à sua situação.
gravy21
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.