Hálózati eszközök neveinek migrálása a Debian 9 (Stretch) udev szabványába

botond küldte be 2019. 07. 14., v - 17:20 időpontban

Tartalom

 

Bevezető

A Debian a 9-es (Stretch) kiadásától kezdve új hálózati interfész elnevezési sémát vezetett be. A korábban megszokott ethernet eszközök nevei (pl. eth0) vagy WLAN eszközök nevei (pl. wlan0), stb helyett – egy friss telepítésű Debian 9 Stretch rendszer – ilyen neveket használ, mint például enp5s7, illetve wlp2s0. Ez a változás azonban nem érinti azokat a rendszereket, amik az előző Debian 8 (Jessie) kiadásról lettek felfrissítve, hogy a hálózat továbbra is tudjon működni a korábbi beállításokkal. Az udev a Debian 9 (Stretch)-ben tehát még lekezeli ezeket a régi hálózati elnevezéseket, de a Debian 10 (Buster)-ben hivatalosan már nem támogatja őket. Ezért akik olyan Debian 9 (Stretch) rendszert szeretnének frissíteni Debian 10 (Buster)-re, amit azelőtt még a Debian 8 (Jessie) változatáról upgrade-eltek – amik még továbbra is a régi hálózati interfész elnevezéseket használják –, azoknak szükséges elvégezniük ezt a kis beállítást, amivel átállíthatják a nevek használatát az új udev sémájára, hogy a későbbi Debian kiadásokra történő frissítések után a hálózat továbbra is működőképes maradjon.

Ebben a leírásban elvégezzük az új nevek használatára történő átállítást, hogy rendszerünk kompatibilis legyen a Debian 10 (Buster)-el. Természetesen akik új telepítésű Debian 9 (Stretch) rendszerről tervezik a frissítést a Busterre, azokra ez nem vonatkozik. Viszont egy sok éven át működtetett szerver életében többször is előfordulhat egy-egy teljes disztribúció frissítés, hogy egy teljes újratelepítés nélkül, minimális állásidő után újra működhessenek a szolgáltatások. Ezekben az esetekben viszont előre el kell végezni ezt a beállítást, hogy ne a frissítés után adódjanak hálózati problémák.

 

 

Alternatív megoldások

Kerülő megoldás lehet ha átváltunk egy olyan támogatott mechanizmusra, ami kikényszeríti a régi elnevezési sémát, például a systemd .link fájl megoldással. Másik alternatíva még, a net.ifnames=0 kernel paraméter beállítása.

Mindazonáltal előbb, vagy utóbb muszáj lesz átállni az új nevek használatára, ezért lehetőleg ne használjunk alternatív megoldásokat – mert ezekkel csak elodázzuk a problémát –, hanem végezzük el az itt következő beállításokat.

 

Áttérés az új hálózati eszköznevek használatára

Korábban már felfrissítettem a laptopomat Debian 8 (Jessie) rendszerről Debian 9 (Stretch)-re, így ez az állapot most pont jól is jön a beállítás bemutatására. Adott tehát egy Stretch-re frissített gép, amin még a régi elnevezésű hálózati interfész nevek vannak használatban, így most ezeket fogjuk átállítani az új sémára.

A beállításokat az asztali gépemről SSH-n keresztül belépve végzem el, ezzel hasonló körülményeket biztosítok ahhoz, mintha egy távoli szerveren hajtanám végre ugyanezeket.

Régi és az új nevek felderítése

Először derítsük ki, hogy milyen hálózati eszköz neveket használ a rendszerünk. Ezt az alábbi paranccsal tehetjük meg:

echo /sys/class/net/[ew]*

Ennek nálam ez a kimenete:

/sys/class/net/eth0 /sys/class/net/wlan0

Ebből tehát jól látszik, hogy ebben a gépben van egy eth0 nevű hálózati kártya és egy wlan0 elnevezésű WIFI adapter. Jelenleg ezeket a neveket használja a rendszer.

Ezután nézzük meg, hogy mely konfigurációs fájlok hivatkoznak ezekre a nevekre. Ezt mindegyik eszköznévre lefuttatva egy grep paranccsal kérdezhetjük le:

grep -rnw "eth0" /etc
grep -rnw "wlan0" /etc

Természetesen mindenki a saját rendszerében használt nevekkel futtassa a keresést:

Hálózati eszköznevek használati helyei

(Ilyenkor jön jól a grep parancs színes kimenete, amit korábban már a .bashrc fájlomban beállítottam.)

Itt kiadott néhány találatot, nem vészes, hamar át lehet őket irogatni majd. Persze ez a gép egy szinte teljesen alap telepítés, csak ilyen kísérleti alanynak használom, így egy több mindent tartalmazó gépben, vagy egy szerverben ennél jóval több hivatkozás is előfordulhat.

Most derítsük ki, hogy az új udev séma szerint milyen nevek lennének használatosak ugyanebben a rendszerben. Ezt pedig az alábbi udevadm parancsokkal nézhetjük meg mindegyik hálózati eszközre külön:

udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null
udevadm test-builtin net_id /sys/class/net/wlan0 2>/dev/null

Nálam a kimenete ezeknek a parancsoknak:

Új hálózati eszköznevek kiderítése

Itt a parancsok kimeneteinek utolsó sorai adják meg a választ: a hálózati kártya leendő neve enp5s7 lesz, míg a WIFI adapteré pedig wlp2s0. Ezeket a neveket a rendszer az új séma szerint az alaplapokon lévő PCI busz-ok sorszáma és az egyéb hardverazonosítók alapján állítja össze, ami egy egyedileg beazonosítható eszköznévvé áll össze.

Ha az udevadm parancs kimenete egy "onboard" nevet is ad, az lesz az elsődleges. A MAC-alapú neveket rendszerint csak visszacsatolásra használja a rendszer, amennyiben nem találja az elsődleges nevet, stb, de szükség lehet az USB alapú hálózati eszközök használata esetén is.

Az eddigi információk elegendőek ahhoz, hogy elkezdjük az átállítást.

 

 

Átállás az új nevek használatára

Normál gépen

Az átállításhoz normál gépeken (nem virtuális gép) lépjünk be root-ként, ha eddig még nem így voltunk bent, majd nevezzük át a /etc/udev/rules.d/70-persistent-net.rules fájlt, vagy kommentezzük ki a benne lévő eszközöket leíró sorokat. Én az utóbbit javaslom, tehát nyissuk meg szerkesztésre:

nano /etc/udev/rules.d/70-persistent-net.rules 
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x10ec:0x8139 (8139too)
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1a:92:fb:6e:48", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x168c:0x001c (ath5k)
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1b:9e:3f:4a:cd", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"

És a zölddel kiemelt módon kommentezzük ki a sorokat. Ahány hálózati eszköz van a gépünkbe, annyi sornak kell lennie.

Virtuális gépen

Virtuális gépeken pedig szintén root-ként törölni kell az alábbi fájlt:

rm /etc/systemd/network/99-default.link

Ha pedig a virtuális gép virtio hálózati eszközt használ, ebben az esetben még ezt a fájlt is:

rm /etc/systemd/network/50-virtio-kernel-names.link

 

Ha megvagyunk, építsük újra az initrd-t az update-initramfs parancs segítségével (szintén root-ként):

update-initramfs -u

Ezután a fentebbi grep-es parancsot újra futtatva módosítsuk át az összes konfigurációs fájlban a régi neveket az új nevekre, amíg el nem fogynak a régi elnevezéseket tartalmazó konfig fájlok.

A kommentekkel kezdődő találatokat nem szükséges átírni, azonban sose lehet tudni, hogy később milyen kommentezett beállítás fog érvénybe lépni, ezért én azt javaslom, hogy írjunk át minden régi név előfordulást az újra.
Ezt itt meg lehetne oldani egy sed-es karakterlánc cserélő paranccsal is, de a /etc könyvtárban én mégis csak inkább kézzel javítgatnék bele a konfigurációs fájlokba.

Gép újraindítása

Ezután indítsuk újra a gépet:

reboot

Természetesen, ha ez a gép egy éles szerver, akkor előtte tájékoztassuk a felhasználókat az újraindításról, valamint győződjünk meg róla, hogy nincsenek megnyitott dokumentumok, stb.

Az eredeti leírás ezt a részt fordítva írta le, tehát ott előbbre került az újraindítás rész. Azonban ha távoli SSH kapcsolaton vagyunk bejelentkezve a gépre, nem lenne tanácsos a konfigurációs fájlok átjavítása előtt újraindítanunk a gépet, mert könnyen előfordulhat, hogy – a megfelelő konfigurációs fájlok hiányában – a hálózat nem indul el, így nem tudnánk visszalépni SSH-n az újraindítást követően, hanem csak a konzolon tudnánk befejezni a munkát. Egy távoli szerver estében ez nagyon nagy gond lenne.

 

 

Hálózat tesztelése

Miután újraindult a gép (távoli gép esetén egy körülbelüli idő kivárása után) jelentkezzünk újra vissza (nálam már nem kér jelszót, mert elvégeztem a nyilvános kulcsos belépést), majd root-ként futtassuk az ifconfig parancsot:

ifconfig

Hálózat ellenőrzése

Aminek a kimenete önmagáért beszél: Lett egy enp5s7 elnevezésű hálózati kártyánk, és egy wlp2s0 névvel ellátott WLAN eszközünk. És ha már SSH-n be tudtunk jelentkezni, akkor a teljes hálózatkezelés megfelelően működik, így például az internet is elérhető.

 

Konklúzió

Ezután már a Debian 8 (Jessie)-ről Debian 9 (Stretch)-re frissített rendszerünk is az új hálózati interfész elnevezési sémát használja, így ha eljön az ideje, bátran belevághatunk a rendszerünk tovább Debian 10 (Buster)-re történő frissítésébe.