Ich habe mittlerweile den Ruf, generell alles Neue abzulehnen, einfach, weil es neu ist. Aber ich rante ja nicht gegen systemd oder die angeblich »predictable« Interfacenamen, weil es mir Spaß macht, sondern weil der Scheiß halt einfach nicht wie angepriesen – oder zumindest prinzipiell besser als das, was es vorher gab – funktioniert …
Seit bald rund einem halben Jahrzehnt baue ich ja nun auch an »kommunistischen Frickelnetzen«, wie Kollege Max aus Paderborn die Freifunk-Netze liebevoll nennt. Dabei werden oft gut abgehangene Systeme (5+ Jahre alt, also mehr als einmal abgeschrieben) genutzt, die uns dankenswerterweise gespendet werden, weiteres Zubehör stammt gerne günstig aus der Bucht und ist auch nicht grade taufrisch.
Und in diesem Kontext geht mir derzeit mal wieder der PNIN-Kram auf den Zeiger, denn am Chelsio T320 10GbE Dual Port Adapter verschluckt sich mindestens Ubuntu 16.04 — im aktuellen Setup heißt das eine der beiden Interfaces, welches einen SFP+-Einschub und daran einen Link hat, »renameN«, mit N sich bei jedem Reboot ändernd:
root@chimaera:~# lshw -businfo -C network | awk 'BEGIN{tmpfile=sprintf("/tmp/awk-%d.tmp", systime()); printf("%-10s %-10s %s\n", "Pred. Name", "BIOS Name", "Hardware");} /^pci.*network/ {predname=$2; line=$0; pcistr=$1; devstr=substr($0, index($0, $4)); cmdline=sprintf("biosdevname -i %s >%s\n", predname, tmpfile); system(cmdline); getline <tmpfile ; close(tmpfile); biosname=$1; if(biosname==pcistr) biosname="-"; printf("%-10s %-10s %s\n", predname, biosname, devstr);} END{cmdline=sprintf("/bin/rm %s", tmpfile); system(cmdline);}'
Pred. Name BIOS Name Hardware
ens2f0 p2p1 NX3031 Multifunction 1/10-Gigabit Server Adapter
ens2f1 p2p2 NX3031 Multifunction 1/10-Gigabit Server Adapter
enp3s0f0 em1 NetXtreme II BCM5709 Gigabit Ethernet
enp3s0f1 em2 NetXtreme II BCM5709 Gigabit Ethernet
enp4s0f0 em3 NetXtreme II BCM5709 Gigabit Ethernet
enp4s0f1 em4 NetXtreme II BCM5709 Gigabit Ethernet
rename6 - T320 10GbE Dual Port Adapter
ens1 - Ethernet interface
Spannend dabei ist, daß es nicht einmal seitens des BIOS eine Namenvorgabe gibt — für keines der beiden Interfaces.
Gut, das kann man zum Glück noch per udev-Regeln lösen …
root@chimaera:~# cat /etc/udev/rules.d/10-persistent-network.rules
ACTION=="add", SUBSYSTEM=="net",ATTR{address}=="00:07:43:00:00:00",NAME="ens1f0"
ACTION=="add", SUBSYSTEM=="net",ATTR{address}=="00:07:43:00:00:01",NAME="ens1f1"
… aber sollten nicht heutzutage die Namen »predictable«, vorhersagbar, sein? »renameX« ist eher ein Zeichen von Hilflosigkeit …
Wie man es dreht und wendet, einmal mehr hat »das Neue« sein Versprechen, alles besser und schöner zu machen, nicht gehalten.
Epilog: Richtig »Spaß« hatte ich, als ich den Server mit 4.15.0-34-generic nach der Installation von »biosdevname« rebootete:
root@chimaera:~# egrep 'Linux version|Command line:' /var/log/syslog
Sep 23 10:34:22 chimaera kernel: [ 0.000000] Linux version 4.15.0-34-generic (buildd@lgw01-amd64-037) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)) #37~16.04.1-Ubuntu SMP Tue Aug 28 10:44:06 UTC 2018 (Ubuntu 4.15.0-34.37~16.04.1-generic 4.15.18)
Sep 23 10:34:22 chimaera kernel: [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.15.0-34-generic root=/dev/mapper/chimaera--vg-root ro
root@chimaera:~# lshw -businfo -C network | awk 'BEGIN{tmpfile=sprintf("/tmp/awk-%d.tmp", systime()); printf("%-10s %-10s %s\n", "Pred. Name", "BIOS Name", "Hardware");} /^pci.*network/ {predname=$2; line=$0; pcistr=$1; devstr=substr($0, index($0, $4)); cmdline=sprintf("biosdevname -i %s >%s\n", predname, tmpfile); system(cmdline); getline <tmpfile ; close(tmpfile); biosname=$1; if(biosname==pcistr) biosname="-"; printf("%-10s %-10s %s\n", predname, biosname, devstr);} END{cmdline=sprintf("/bin/rm %s", tmpfile); system(cmdline);}'
Pred. Name BIOS Name Hardware
p2p1 p2p1 NX3031 Multifunction 1/10-Gigabit Server Adapter
p2p2 p2p2 NX3031 Multifunction 1/10-Gigabit Server Adapter
em1 em1 NetXtreme II BCM5709 Gigabit Ethernet
em2 em2 NetXtreme II BCM5709 Gigabit Ethernet
em3 em3 NetXtreme II BCM5709 Gigabit Ethernet
em4 em4 NetXtreme II BCM5709 Gigabit Ethernet
ens1 - T320 10GbE Dual Port Adapter
rename6 - Ethernet interface
»Vorhersagbar« war auch das eher nicht — und im Endeffekt war der Server ohne Netz. Es stellte sich heraus, daß die schiere Installation des »biosdevname«-Packetes dazu führt, daß zwingend die BIOS-Namen verwendet wurde. Ausschlaggebend ist dafür eine Datei, die mitinstalliert wird; kommentiert man dort GOTO="netdevicename_end" aus, …
root@chimaera:~# diff -u 71-biosdevname.rules.dist /lib/udev/rules.d/71-biosdevname.rules
--- 71-biosdevname.rules.dist 2018-09-26 11:56:20.355804576 +0100
+++ /lib/udev/rules.d/71-biosdevname.rules 2018-09-26 11:56:40.132482266 +0100
@@ -12,7 +12,7 @@
ENV{UDEV_BIOSDEVNAME}=="1", GOTO="netdevicename_start"
# uncomment the next line for biosdevname to be off by default
-# GOTO="netdevicename_end"
+GOTO="netdevicename_end"
LABEL="netdevicename_start"
… und baut die initrd neu (update-initramfs -u), ist nach einem weiteren Reboot die Normalität wiederhergestellt.
Seriously?! Ich installiere ein Package, reboote — und habe kein Netz mehr? Was immer Packager und Maintainer da für Zeug geraucht haben: es war schlecht! Sane defaults your ass? Der Pizzadeckel wurde entsprechend aktualisiert …
