Raspberry Pi 3 - eth0 fälschlicherweise 'enx…' genannt

28

Mein neues RPi 3-Gerät ist kürzlich mit einem deaktivierten Ethernet hochgefahren worden.

Also habe ich /etc/networks/interfacesdie Zeile gesehen und gesehen:

auto eth0
iface eth0 inet dhcp

Anruf ifup eth0gab leider folgende Meldung:

eth0 No such device
No hardware found

Also überprüfte ich mein ifconfig -aund sah ein seltsames Gerät:

enx*MACADDRESS* Link encap:Ethernet HWaddr **:**:**:**:**:**

Der Versuch, /etc/networks/interfacesden Namen zu ändern , führte zu einem funktionierenden Netzwerk. Wie kann ich diesen Gerätenamen wieder auf ändern eth0?

PS: Ich habe keine 70-persistent-net.rulesDatei fyi. Betriebssystem ist Ubuntu MATE 15.10

Vielen Dank.

Tom Siwik
quelle
Bitte überprüfen Sie die Datei> / etc / iftab Mein Status: enxb827 .... mac xx: xx: xx: xx: xx: xx arp 1 wlan0 mac xx: xx: xx: xx: xx: xx arp 1

Antworten:

16

Ich hatte dieses Problem, als ich Debian armhf auf Raspberry Pi 2 ausführte. Sie können den Namen der Schnittstelle ändern, indem Sie die Datei /etc/udev/rules.d/70-persistent-net.rules erstellen und dies einfügen

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:ac:6f:65:31:e5", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Ersetzen Sie b8: ac: 6f: 65: 31: e5 durch Ihre eth0-MAC-Adresse, starten Sie neu und es wird eth0. Möglicherweise haben Sie nach dem Neustart keinen Internetzugang, da in / etc / network / interfaces eine falsche Schnittstelle definiert ist. Ändern Sie einfach enx * zu eth0

Bearbeiten: Dies ist kein Problem, sondern ein neues Benennungsschema für Schnittstellen "Vorhersagbare Schnittstellennamen". Sie sollten dieses anpassen und verwenden, anstatt zu versuchen, es auf die alten zurückzusetzen.

Sandpocken
quelle
3
i dank @UnSined sah weiter und fand, dass ich hinzugefügt hatte: ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules. Es ist im Grunde die Namenssache deaktivieren. Funktioniert jetzt .. danke!
Tom Siwik
Benutzer ist jetzt @Ficertyn ... Klarheit für glückliche Leser der Red Hat Docs
Tom Siwik
1
Ich musste den KERNEL=="eth*"Eintrag entfernen, damit dies funktioniert.
Roger Dueck
23

Diese Lösung funktioniert nur, wenn Sie ein seltsames Netzwerkschnittstellengerät sehen, wie es env{hwdaddress}beim Ausführen $ ifconfig -avon angezeigt wird eth0. Ich habe alle gängigen Antworten zum Hinzufügen von Regeln ausprobiert, aber nur dieses Update hat funktioniert.

Ich verwende einen Raspberry Pi 3 mit Ubuntu 16.04 vorinstalliertem Server Armhf. Lange Rede kurzer Sinn , laufend vorhersehbare Netzwerkschnittstellennamen$ apt-get update hinzugefügt

Bearbeiten Sie die folgende Datei:

$ vim /lib/udev/rules.d/73-usb-net-by-mac.rules

Das solltest du sehen:

ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \
ATTR{address}=="?[014589cd]:*", \
TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \
IMPORT{builtin}="net_id", NAME="$env{ID_NET_NAME_MAC}"

Ändern Sie den NAME am Ende wie folgt:

ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \
ATTR{address}=="?[014589cd]:*", \
TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \
IMPORT{builtin}="net_id", NAME="eth0"

Änderungen speichern

Starten Sie neu. Alles sollte jetzt funktionieren, vorausgesetzt, alles zeigt auf eth0.

Bearbeiten (26.10.2016) Gehen Sie folgendermaßen vor, um zu verhindern, dass zukünftige Updates diesen Fix überschreiben:

cp /lib/udev/rules.d/73-usb-net-by-mac.rules /etc/udev/rules.d/
Luis Godinez
quelle
1
Ich habe viel zu lange versucht, eth0mit Ubuntu Server 16.04 einen stabilen Zustand für meinen Pi zu erreichen. Vielen Dank. Eine kleine Änderung an Ihrer Antwort, die ich vorschlagen würde, dass Sie versuchen, sie zu implementieren und dann zu Ihrer Antwort hinzuzufügen: Kopieren Sie die 73-usb-net-by-mac.rulesDatei in das /etc/udev/rules.d/Verzeichnis und ändern Sie diese; Wenn Sie die Version ändern, wird /lib/udev/rules.dsie möglicherweise bei einem zukünftigen Betriebssystemupdate überschrieben.
Kevin Teljeur
Vielen Dank für die Köpfe hoch. Ich habe auch solide 2 Tage damit verbracht, das Problem zu beheben. Ich hätte das pi alle eingestellt, um mit Python3 und OpenCV nur zu gehen, um das Ethernet zu haben, das am Neustart wegen des Updates nicht mehr arbeitet. Ich bin froh, dass meine Antwort von Nutzen war.
Luis Godinez
1
Es hat eine Weile gedauert, bis ich herausgefunden hatte, warum es passiert ist, und dann musste ich herausfinden, was zu tun ist und warum. Hier ist der laufende Kampf: aktuelle bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379 - Ihr Fix scheint jedoch auf meinem Raspberry Pi 2 nicht zu funktionieren. Ich denke wirklich daran, nur eine x86-Box zu kaufen An diesem Punkt.
Kevin Teljeur
13

raspi-config ist die einfachste Methode.

Wenn Sie Raspbian verwenden, wird es standardmäßig installiert. Wenn Sie jedoch mit Ubuntu, Mint oder Mate arbeiten, können Sie es mit dem folgenden Befehl installieren:

sudo apt-get install raspi-config

Dann können Sie es mit raspi-config konfigurieren.

sudo raspi-config
  1. Wählen Sie "2. Netzwerkoptionen"
  2. Wählen Sie "N3-Netzwerkschnittstellennamen"
  3. Wählen Sie "Nein". Es ist jetzt vorhersehbare Netzwerkschnittstellennamen deaktiviert.
  4. Klicken Sie auf "OK" und "Fertig stellen". Dann wird es Ihren Himbeer-Pi neu starten.

Getan.

Almas Dusal
quelle
1
Hat Ubuntu Mate (welches ist das, was das OP verwendet) eine Raspi-Konfiguration?
Steve Robillard
Ihre Antwort trifft also nicht zu.
Steve Robillard
1
Aber wenn Sie das gleiche Problem mit Raspbian gegoogelt haben, dann wurde diese Frage zuerst gestellt. Ich tat das und nahm mir Zeit für Nachforschungen und fand eine Lösung. Ich denke, dass es jemandem hilft. OK, ich bearbeite die Antwort jetzt.
Almas Dusal
1
Es verwirrt mich, wenn Leute "recherchieren", während die Antwort klar in den genehmigten Antworten steht. Trotzdem Ubuntu, Debian, Raspbian. Die Installation des Tools unter Ubuntu Mate ist ebenfalls kein Problem (auch standardmäßig installiert) raspberrypi.stackexchange.com/a/67084/42528 . Dies ist jedoch eine unerklärliche Antwort darauf, was sich hinter dem Vorhang abspielt. Während es das Problem löst, entmutigt es die Menschen, tatsächlich zu verstehen, was los ist. Ich werde dies jedoch für alle Faulen da draußen +1 geben.
Tom Siwik
1
Cool! Diese Antwort war definitiv die einfachste und löste mein Problem bei der Einrichtung als funktionierende statische IP-Adresse
Vinyll
5

Dies ist KEIN "Bug", sondern ein "Feature". konsistente Benennung von Netzwerkgeräten ". (Ich sehe nichts Beständiges daran.)

Es gibt wahrscheinlich viele Möglichkeiten, dies zu "beheben", aber sie funktionieren möglicherweise nicht, wenn die Hardware geändert wird.

Um das vorherige Verhalten wiederherzustellen, fügen Sie am Ende von "net.ifnames = 0 biosdevname = 0" hinzu cmdline.txt.

Milliways
quelle
Obwohl es sich bei der Funktion um eine Funktion handelt, handelt es sich bei ihrem Verhalten um einen Fehler, insbesondere bei der Handhabung von USB-Ethernet-Geräten durch udev. Es ignoriert net.ifnames=0. Ich glaube nicht, dass irgendjemand den Diskussionen über Fehlerberichte folgen muss, um ein beliebtes Betriebssystem mit einer gemeinsamen Hardwarekonfiguration zum Laufen zu bringen, aber das ist das Leben. bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
Kevin Teljeur
@ KevinTeljeur und mein Kommentar war Sarkasmus - dies ist ein häufiges Problem auf Computersystemen.
Milliways
Ha ha, sorry - nach so vielen verschwendeten Stunden und der Feststellung, dass es sich um einen leise dokumentierten Fehler handelt, kann ich keinen einheitlichen Netzwerkgeräte-Namenssarkasmus feststellen. Ich habe Ihre Anführungszeichen aufgegriffen, aber das Hinzufügen dieser magischen Beschwörungsformeln config.txtfunktioniert auf dem Pi nicht wirklich als dokumentierter Fehler (möglicherweise mit der Veröffentlichung des neuesten udev-Builds, den es endlich tut). Es ist ein überraschend unbekannter Fehler, der alle Systeme mit Ethernet auf USB betrifft.
Kevin Teljeur
4

Ich habe es nicht speziell mit der MAC-Adresse als Teil des Namens angetroffen, aber was Sie erleben, heißt konsistente Netzwerkgerätenamen.

Dies wurde geändert, da es auf einigen Systemen mit mehreren Netzwerkkarten möglich und wahrscheinlich sogar wahrscheinlich ist, dass die Karten nicht mehr in Ordnung sind und das Benennungsschema eth0, eth1 usw. verwenden. Am Ende würden Sie Routing-Regeln anwenden und so weiter auf die falsche Schnittstelle.

Viele Linux-Distributionen haben eine einheitliche Bezeichnung für Netzwerkgeräte gewählt. Normalerweise sieht diese so aus enp0s1, als würde sie den PCI-Bus und den Anschlusspunkt an den Bus identifizieren (0 bzw. 1).

Weitere Informationen erhalten Sie unter https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.html sowie über die Umstellung Ihres Systems auf die alte Vorgehensweise Dinge, wenn Sie dies noch tun möchten.

Ficertyn
quelle
1
Auch wenn dies ein informativer Kommentar ist, hat er weder zur Lösung des Problems noch zur Beantwortung der Frage beigetragen (lesen Sie die manuelle Art der Antwort). Es hat jedoch geholfen, eine kleine Lösung für die oben genannte Aufgabe zu finden. das ist, warum Upvote verdient und ein Dankeschön :)
Tom Siwik
1

Mit Odroid Erstellen dieser Datei wurde mein Problem behoben

root@odroid:~# cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"
Mikael Lepistö
quelle
1

Ich hatte das gleiche Problem auf Raspberry Pi 2 mit Ubuntu 16.04 und es funktionierte, wenn ich dem Link von #goutam folgte und /etc/udev/rules.d/70-persistent-net.rules mit folgendem hinzufügte:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"
Rodrigo
quelle
1

Ich habe diesen Vorschlag hier gefunden :

Ändern Sie eine Zeile in den 70-persistent-net.rules in

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="98:90:96:e0:3c:e9", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME:="eth0"

Das KERNEL-Attribut wird gelöscht und der NAME von = in: = geändert

Es scheint zu erzwingen, dass die gefundene MAC-Adresse an eth0 gesendet wird. Funktioniert auf Raspberry Pi und Uboot-Boot-Systemen.

user855443
quelle
0

Für mich, Debian Unstable auf dem Raspberry Pi 2 auszuführen, war der im Kommentar zur ersten Antwort erwähnte Symlink auch die richtige Idee, aber sein Name musste anders lauten: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules

Axel Beckert
quelle
Nein, Sie haben diesen Dateinamen erwähnt, aber einen anderen in Ihrem Kommentar. Deshalb habe ich auf diesen Kommentar verwiesen und erwähnt, dass es für mich ein anderer Dateiname sein muss.
Axel Beckert
1
Aha. Bitte beachten Sie den Unterschied zwischen Himbeer-Pi 3 und Himbeer-Pi 2. Obwohl sie technisch fast gleich sind, könnte dieser Namensunterschied eines der Dinge sein, die Menschen irreführen. Vielen Dank für die Klarstellung.
Tom Siwik
Ich gehe davon aus, dass dieser Unterschied in den Dateinamen von Debian 8 Jessie und Debian Unstable mit einer neueren systemd / udev-Version herrührt. Der tatsächliche Name der Schnittstelle ohne diesen Symlink kann sich in der Tat von der MAC-Adresse unterscheiden. Aber zumindest für das Ethernet-Interface denke ich, dass ich mich daran erinnere, dass ich diese enxInterface-Namen auf beiden, Raspi 2 und 3, gesehen habe. Ich kann mich derzeit allerdings nicht erinnern, wie das WLAN-Interface auf dem Raspi 3 benannt wurde.
Axel Beckert
enx <MAC> verwendete Ubuntu Mate, das oben gezeigte Problem wurde behoben. Wechselte zu Debian und musste nicht umbenannt werden. Es ist seltsam, aber du hast recht.
Tom Siwik
0

Deaktivieren Sie einfach die udev-Regeln, die für den Umbenennungsprozess der Benutzeroberfläche verantwortlich sind

sudo ln -s /dev/null /etc/udev/rules.d/73-usb-net-by-mac.rules

oder

sudo touch /etc/udev/rules.d/73-usb-net-by-mac.rules

BEARBEITEN: thx @ sparkie, um einen Fehler auszudrücken. Ich vermische immer die Reihenfolge. :)

DarwinsBuddy
quelle
Der erste Befehl funktioniert nicht. Zumindest src und dst sind vertauscht.
Sparkie
0

Mir ist klar, dass diese Frage alt ist, aber ich bin auf dieses Problem gestoßen, und keine der bisher auf dieser Seite vorgeschlagenen Lösungen hat mein Problem gelöst. Für mich scheint der Ordner "rules.d" nichts zu bewirken.

Meine Lösung bestand darin, einfach ein Skript zu schreiben, das sich im Ordner init.d befindet, um dem kabelgebundenen Ethernet-Port unabhängig vom Namen DHCP zuzuweisen. Dies ist wichtig, da ich mehrere Raspberry Pi-Einheiten habe und sie alle dasselbe Problem hatten. (sehr frustrierend)

Mein Problem tritt auf, weil ich einen Netzwerkspeicherordner habe, der während des Startvorgangs bereitgestellt werden muss. Da das Interface nicht verfügbar war, ist dieses Mount fehlgeschlagen und die Situation hat sich für mich immer weiter verschlechtert.

Hier ist meine Lösung. Ich hoffe, dies wird allen anderen helfen, die mit den obigen Antworten keinen Beitritt finden können.

Erstellen Sie die Datei /etc/init.d/raspi-init-network mit Ihrem bevorzugten Texteditor. Ich benutze gerne vi.

cd /etc/init.d
sudo vi raspi-init-network

Dies ist der Code, der in die Datei gehört

#!/bin/sh
### BEGIN INIT INFO
# Provides:          boot-identify-myself
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: identify-myself
# Description:       identify this computer to the main server upon
### END INIT INFO
#
# when using predictible network names for the interfaces,
# the pi doesn't seem to activate the interface correctly so
# this script will force the issue.
#
# it works by getting the interface name of the wired network
# device and using that to initialize dhcp

start() 
{
    interface=`ifconfig -a | grep "encap:Ethernet" | grep -oh -E "^[^ ]+"`
    dhclient $interface
    mount -a
}

stop() 
{
    : # do nothing
}

uninstall() 
{
    : # do nothing
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  uninstall)
    uninstall
    ;;
  retart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|uninstall}"
esac

Stellen Sie sicher, dass das Skript ausführbar ist

sudo chmod 755 raspi-init-network

Aktivieren Sie den Code, damit er während des Startvorgangs ausgeführt wird, indem Sie den Befehl update-rc.d ausführen.

sudo update-rc.d raspi-init-network defaults 90

Danach hatte ich kein einziges Problem mehr und konnte den Code auf alle meine Pi-Einheiten mit den gleichen gleichbleibenden Ergebnissen kopieren.

ANMERKUNG: Wenn Sie keine Laufwerke mounten, können Sie die Zeile "mount -a" weglassen.

TWEAKS: Wenn Sie Ihr WLAN verwenden, können Sie die Zeile ändern, die mit "interface =" beginnt, und das erste "grep" -Segment bearbeiten. Mit diesem ersten Grep wird die gesamte Zeile der Schnittstelle erfasst, die Sie verwenden möchten. Das zweite grep nimmt diese Zeile und gibt nur den Schnittstellennamen zurück.

Glenn J. Schworak
quelle