Jak zregenerować 70-persistent-net.rules bez restartu?


14

Plik /etc/udev/rules.d/70-persistent-net.rulesjest generowany automatycznie w systemie Linux z udev, jeśli nie istnieje, podczas ponownego uruchamiania. Chciałbym jednak wiedzieć, jak utworzyć ten plik reguł (z poleceniem) bez ponownego uruchamiania serwera.

Przeszukiwałem go przez jakiś czas i odkryłem, że plik reguł jest generowany przez ten skrypt:

/lib/udev/write_net_rules

Nie można jednak uruchomić tego skryptu z wiersza poleceń, ponieważ (zakładam) chce on zostać uruchomiony przez udev, a niektóre zmienne środowiskowe są ustawione poprawnie. Uruchomienie go ręcznie powoduje wyświetlenie komunikatu o błędzie „brak $ INTERFACE”. Nawet jeśli ustawię zmienną env INTERFACE = eth0 przed uruchomieniem skryptu, nadal wyświetla błąd „brak prawidłowego dopasowania”. Nie wspominając, że mam dwa interfejsy ( eth0i eth1) i chcę wygenerować plik reguł dla obu.

Myślałem również o wywołaniu takich zdarzeń udev, mając nadzieję, że uruchomi skrypt od samego udev, ale nic się nie zmienia:

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

Czy ktoś wie, jak zregenerować trwałe reguły sieciowe w pliku /etc/udev/rules.d/70-persistent-net.rulesbez ponownego uruchamiania?


Jaka jest twoja dystrybucja? Jakiego rodzaju systemu init używa?
michas

1
Powiedziałbym, że to nie ma znaczenia. Używam Slackware z eUdev i sysvinit. Sprawdzałem skrypty startowe, aby dowiedzieć się, co jest wykonywane, co generuje plik reguł, ale znalazłem tylko wyzwalacz udevadm, z komentarzem, że jest to polecenie generujące trwałe reguły, ale jakoś to działa tylko przy ponownym uruchomieniu, nie efekt, jeśli uruchomię go ręcznie.
Tomas M

1
Może to mieć znaczenie, ponieważ ja, na Arch, nie mam 70-persistent-net.rulesani /lib/udev/write_net_rulesscenariusza, ani scenariusza. Dlatego nie mogę sprawdzić, ale przypuszczalnie $INTERFACEzmienna jest ustawiona w samym skrypcie. Najprawdopodobniej jest przekazywany jako argument. Czy możesz pokazać nam zawartość skryptu?
terdon

Skrypt po prostu używa $INTERFACEzmiennej. Po prostu używa się znacznie więcej zmiennych, nigdy nie deklarowanych. Jest tak, ponieważ jest wywoływany przez udev, a udev ustawia wszystkie zmienne env przed uruchomieniem skryptu podczas rozruchu.
Tomas M

Czy naprawdę musisz wiedzieć, jak go zregenerować, czy możesz po prostu edytować plik, aby odzwierciedlić nową rzeczywistość?
roaima

Odpowiedzi:


5

Według strony man --action=changewartością domyślną jest udevadm.

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

Dlatego lepiej spróbuj --action=addzamiast tego. Powinno pomóc:

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

intel_rapl: nie znaleziono prawidłowych domen rapl w pakiecie 0
Tiina

1

W Ubuntu Server 16.04LTS 70-persistent-net.rules nie istnieje.

wszystko, co zrobiłem, to uruchomić:

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

Następnie utwórz plik za pomocą

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

i dodaj następujące

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

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

:wq aby zapisać plik

następnie uruchom ponownie i dostosuj plik / etc / network / interfaces. Następnie uruchom ponownie komputer.


9
Pytanie brzmi: „Jak zregenerować 70-persistent-net.rules bez restartu? ” Twoja odpowiedź zawiera dwa restarty. Jak to jest odpowiedź na pytanie?
G-Man mówi „Przywróć Monikę”

0

Miałem ten sam problem, ale zauważyłem, że wciąż widzę interfejsy na ip addrliście. Użyłem następujących (jako 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

Powtórz dla każdego interfejsu. Służyło to do „odzyskania” mojego pliku. (Uwaga: jedno wywołanie spowoduje wyświetlenie listy wszystkich interfejsów + dodanie zmiany nazwy w celu dopasowania jednego, dlatego polecam przejrzenie pliku wyjściowego po jednym wywołaniu)

Z pewnością istnieją różnice między systemem operacyjnym a obecnymi implementacjami UDEV i skryptami pomocniczymi. Należy zauważyć, że korzystałem z CentOS 6.8, kiedy udało mi się to z powodzeniem.

Kredyt - najczęściej odwoływałem się do tej witryny. Jest kilka komentarzy na temat modyfikacji skryptu, ale wolałem używać zmiennych środowiskowych, ponieważ były one czystsze: https://access.redhat.com/discussions/1240213


Cholera - czekaj. Przepraszam, to było polecenie, które nie działało. Muszę zaktualizować odpowiedź o krok, który zrobiłem
gravy21

Ok, zaktualizowałem sposób, w jaki naprawiłem mój. Mam nadzieję, że to zadziała, jeśli dotyczy twojej sytuacji.
sos 21
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.