Comment régénérer 70-persistent-net.rules sans redémarrer?

14

Le fichier /etc/udev/rules.d/70-persistent-net.rulesest généré automatiquement sur un système Linux avec udev, s'il n'existe pas, lors du redémarrage. Mais je voudrais savoir comment créer ce fichier de règles (avec une commande) sans redémarrer le serveur.

J'ai fait des recherches sur Google pendant un certain temps et j'ai constaté que le fichier de règles était généré par ce script:

/lib/udev/write_net_rules

Cependant, il est impossible d'exécuter ce script à partir de la ligne de commande, car (je suppose) qu'il veut être démarré par udev, avec certaines variables d'environnement définies correctement. Le démarrer manuellement imprime le message d'erreur "$ INTERFACE manquante". Même si j'ai défini la variable env INTERFACE = eth0 avant le démarrage du script, il affiche toujours l'erreur "correspondance valide manquante". Sans oublier que j'ai deux interfaces ( eth0et eth1) et je veux que le fichier de règles soit généré pour les deux.

Je pensais également déclencher des événements udev comme celui-ci, en espérant que cela démarrerait le script à partir d'udev lui-même, mais rien ne change:

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

Alors, quelqu'un sait-il comment régénérer les règles de réseau persistant dans le fichier /etc/udev/rules.d/70-persistent-net.rulessans redémarrer?

Tomas M
la source
Quelle est votre distribution? Quel type de système init utilise-t-il?
michas
1
Je dirais que cela n'est pas pertinent. J'utilise Slackware avec eUdev et sysvinit. J'examinais les scripts de démarrage afin de savoir ce qui est exécuté qui génère le fichier de règles, mais je n'ai trouvé que le déclencheur udevadm, avec un commentaire que c'est la commande pour générer les règles persistantes, mais d'une manière ou d'une autre cela ne fonctionne qu'au redémarrage, non effet si je l'exécute manuellement.
Tomas M
1
Cela pourrait être pertinent car je, sur Arch, n'ai ni le 70-persistent-net.rulesni le /lib/udev/write_net_rulesscript. Par conséquent, je ne peux pas vérifier, mais la $INTERFACEvariable est probablement définie dans le script lui-même. Il est très probablement passé comme argument. Pouvez-vous nous montrer le contenu du script?
terdon
Le script utilise simplement une $INTERFACEvariable. Il y a beaucoup plus de variables simplement utilisées, jamais déclarées. C'est parce qu'il est appelé par udev, et udev définit toutes les variables env avant d'exécuter le script au démarrage.
Tomas M
Avez-vous réellement besoin de savoir comment le régénérer, ou pourriez-vous simplement modifier le fichier pour refléter la nouvelle réalité?
roaima

Réponses:

5

Selon la page de manuel --action=changeest la valeur par défaut pour udevadm.

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

Par conséquent, vous feriez mieux d'essayer à la --action=addplace. Cela devrait aider:

/sbin/udevadm trigger --type=devices --action=add
se ruer
la source
intel_rapl: aucun domaine rapl valide trouvé dans le package 0
Tiina
1

Dans Ubuntu Server 16.04LTS, le 70-persistent-net.rules n'existe pas.

je n'ai fait que courir:

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

Créez ensuite le fichier en utilisant

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

et ajoutez ce qui suit

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

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

:wq enregistrer le fichier

puis redémarrez et ajustez votre fichier / etc / network / interfaces. Redémarrez ensuite à nouveau.

jadey1412
la source
9
La question est "Comment régénérer 70-persistent-net.rules sans redémarrage? " Votre réponse contient deux redémarrages. Comment est-ce une réponse à la question?
G-Man dit `` Réintègre Monica ''
0

J'ai eu le même problème, mais j'ai remarqué que je pouvais toujours voir les interfaces dans la ip addrliste. J'ai utilisé ce qui suit (en tant que 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

Répétez l'opération pour chaque interface. Cela a été utilisé pour "récupérer" mon fichier. (Remarque: une invocation répertoriera toutes les interfaces + ajoutera un renommage pour correspondre à une, donc je vous recommande de jeter un œil au fichier de sortie après une invocation)

Il existe certainement des différences entre les systèmes d'exploitation et les implémentations UDEV actuelles et les scripts de support. À noter, j'utilisais CentOS 6.8 lorsque j'ai réussi.

Crédit - J'ai principalement référencé ce site. Il y a un commentaire quelques discussions qui parlent de la modification du script, mais j'ai préféré utiliser des variables d'environnement car c'était plus propre: https://access.redhat.com/discussions/1240213

gravy21
la source
Merde - attendez. Je suis désolé, c'était la commande qui n'a pas fonctionné. Je dois mettre à jour la réponse avec l'étape que j'ai faite
gravy21
Ok, j'ai mis à jour la façon dont j'ai corrigé le mien. J'espère que cela fonctionne si cela s'applique à votre situation.
gravy21