Raspberry Pi 3 - eth0 erroneamente chiamato "enx ..."


28

Il mio nuovo dispositivo RPi 3 (yay) si è avviato di recente con una Ethernet disattivata.

Quindi ho visto /etc/networks/interfacese visto la linea:

auto eth0
iface eth0 inet dhcp

La chiamata ifup eth0purtroppo ha dato il seguente messaggio:

eth0 No such device
No hardware found

Quindi ho controllato il mio ifconfig -ae ho visto uno strano dispositivo:

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

Il tentativo di cambiare /etc/networks/interfacesil nome ha portato a una rete funzionante. Come posso cambiare il nome di quel dispositivo in eth0?

PS: non ho nessun 70-persistent-net.rulesfile fyi. Il sistema operativo è Ubuntu MATE 15.10

Grazie.


Controlla il file> / etc / iftab Stati miniera: enxb827 .... mac xx: xx: xx: xx: xx: xx arp 1 wlan0 mac xx: xx: xx: xx: xx: xx arp 1

Risposte:


16

Ho avuto questo problema quando eseguivo Debian armhf su Raspberry Pi 2, puoi cambiare il nome dell'interfaccia creando il file /etc/udev/rules.d/70-persistent-net.rules e inserendolo

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

sostituisci b8: ac: 6f: 65: 31: e5 con il tuo indirizzo MAC eth0, riavvia e diventerà eth0, potresti non avere accesso a internet dopo il riavvio perché in / etc / network / interfaces sta definendo un'interfaccia sbagliata, cambia enx * a eth0

Modifica: questo non è un problema, ma un nuovo schema di denominazione delle interfacce "Nomi di interfaccia prevedibili", dovresti adattarti e usarlo invece di provare a ripristinare quelli precedenti.


3
grazie a @UnSined ho guardato oltre e trovato, che ho dovuto aggiungere: ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules. Fondamentalmente sta disabilitando la cosa dei nomi. Funziona ora .. grazie!
Tom Siwik,

L'utente è @Ficertyn ora ... chiarezza per i lettori felici dei documenti red hat
Tom Siwik

1
Ho dovuto rimuovere la KERNEL=="eth*"voce perché funzionasse.
Roger Dueck,

23

Questa soluzione funziona solo se stai vedendo un dispositivo di interfaccia di rete strano come env{hwdaddress}quando si esegue $ ifconfig -ainvece di eth0. Ho provato tutte le risposte comuni sull'aggiunta di regole ma solo questa correzione ha funzionato.

Sto eseguendo un Raspberry Pi 3 con Ubh 16.04 preinstallato armhf server. Per farla breve, con l' $ apt-get updateaggiunta di nomi di interfaccia di rete prevedibili

Modifica il seguente file:

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

Tu dovresti vedere:

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}"

Cambia il NOME alla fine come segue:

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"

Salva I Cambiamenti

Reboot. Tutto dovrebbe funzionare ora supponendo che tutto stia puntando a eth0.

Modifica (26/10/2016) Per evitare che eventuali aggiornamenti futuri sovrascrivano questa correzione, procedi come segue:

cp /lib/udev/rules.d/73-usb-net-by-mac.rules /etc/udev/rules.d/

1
Ho trascorso molto, troppo tempo nel tentativo di arrivare al punto di avere una stalla eth0per il mio Pi con Ubuntu Server 16.04. Grazie. Una piccola modifica alla tua risposta, che ti suggerirei di provare, implementare e quindi aggiungere alla tua risposta: copia il 73-usb-net-by-mac.rulesfile nella /etc/udev/rules.d/directory e modifica quello; se si cambia quello in /lib/udev/rules.dallora potrebbe essere sovrascritto in un futuro aggiornamento del sistema operativo.
Kevin Teljeur,

Grazie per il testa a testa. Ho anche trascorso 2 giorni solidi per risolvere il problema. Avrei tutto pronto per andare con Python3 e OpenCV solo per far sì che Ethernet smettesse di funzionare al riavvio a causa dell'aggiornamento. Sono contento di vedere che la mia risposta è stata di qualche utilità.
Luis Godinez,

1
Mi ci è voluto un po 'di tempo per capire perché stesse accadendo, e quindi aver bisogno di capire cosa fare e perché (bug di Ubuntu - la correzione come impegnata non sembra funzionare, che è una modifica allo stesso file). Ecco la battaglia in corso: bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379 - Tuttavia, la tua correzione non sembra funzionare sul mio Raspberry Pi 2. Sto davvero pensando di ottenere solo una scatola x86 a questo punto.
Kevin Teljeur,

13

raspi-config è il metodo più semplice.

Se sei su Raspbian, allora è installato di default. Ma se sei su Ubuntu, Mint o Mate, puoi installarlo con il comando seguente:

sudo apt-get install raspi-config

Quindi puoi configurarlo con raspi-config.

sudo raspi-config
  1. Seleziona "2. Opzioni di rete"
  2. Seleziona "N3 Nomi interfaccia di rete"
  3. Seleziona "No". Ora è disabilitato i nomi delle interfacce di rete prevedibili.
  4. Fai clic su "OK" e "Fine". Quindi riavvierà il tuo lampone pi.

Fatto.


1
Ubuntu Mate (che è quello che utilizza l'OP) ha una configurazione raspi?
Steve Robillard,

Quindi la tua risposta non si applica.
Steve Robillard,

1
Ma se hai cercato su Google lo stesso problema con Raspbian, questa domanda è stata trovata per prima. L'ho fatto e mi sono preso del tempo per la ricerca e ho trovato una soluzione. Penso che aiuti qualcuno. OK ora modifico la risposta.
Almas Dusal

1
Mi confonde vedere le persone "ricercare" mentre la risposta è chiaramente scritta nelle risposte approvate. Ubuntu, debian, raspbian lo stesso. L'installazione dello strumento su Ubuntu Mate non è un problema (anche installata per impostazione predefinita) raspberrypi.stackexchange.com/a/67084/42528 . Tuttavia questa è una risposta senza alcuna spiegazione di ciò che sta accadendo dietro il sipario. Mentre risolve il problema, scoraggia le persone a capire davvero cosa sta succedendo. Lo farò +1 per tutti i pigroni là fuori però.
Tom Siwik,

1
Freddo! Questa risposta è stata sicuramente la più semplice e ha risolto il mio problema per stabilire come indirizzo IP statico funzionante
vinyll

5

Questo NON è un "bug" ma una "caratteristica" " denominazione coerente dei dispositivi di rete ". (Non vedo nulla di coerente al riguardo.)

Probabilmente ci sono molti modi per "risolvere" questo, ma potrebbero non funzionare se l'hardware viene modificato.

Per ripristinare il comportamento precedente aggiungi "net.ifnames = 0 biosdevname = 0" alla fine di cmdline.txt.


Sebbene la funzionalità sia, beh, una funzionalità, il modo in cui si comporta è un bug, in particolare nel modo in cui udev gestisce i dispositivi Ethernet USB. Ignora net.ifnames=0. Non credo che qualcuno debba seguire le discussioni sulla segnalazione di bug per far funzionare un SO popolare con una configurazione hardware comune, ma questa è la vita. bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
Kevin Teljeur

@KevinTeljeur e il mio commento è stato sarcasmo - questo è un problema comune sui sistemi informatici.
Milliways,

Ah ah, scusa - dopo così tante ore sprecate, e poi scoprendo che si trattava di un bug documentato in modo discreto, non riesco a rilevare alcun sarcasmo coerente di denominazione dei dispositivi di rete. Ho raccolto le tue virgolette, ma l'aggiunta di quegli incantesimi magici config.txtnon funziona davvero sul Pi come un bug documentato (forse ora con il rilascio dell'ultima build udev lo fa finalmente). È un bug sorprendentemente sconosciuto che colpisce tutti i sistemi con Ethernet su USB.
Kevin Teljeur,

4

Non l'ho trovato specificamente con l'indirizzo mac come parte del nome, tuttavia quello che stai vivendo si chiama denominazione coerente del dispositivo di rete.

Questa è stata una modifica perché è possibile, e forse anche probabile su alcuni sistemi che hanno più schede di rete che le schede sarebbero fuori servizio e usando lo schema di denominazione eth0, eth1, ecc. Finirebbe per applicare le regole di routing e quant'altro all'interfaccia sbagliata.

Molte distribuzioni Linux sono passate a una sorta di denominazione coerente dei dispositivi di rete, in genere avrà un aspetto simile enp0s1, identificando il bus PCI e il punto di attacco al bus (rispettivamente 0 e 1).

Puoi ottenere maggiori informazioni da https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.html , nonché come cambiare il tuo sistema nel vecchio modo di fare cose se vuoi ancora farlo.


1
sebbene questo sia un commento informativo non ha aiutato a risolvere il problema e non ha nemmeno risposto alla domanda (leggi il tipo di risposta manuale). Tuttavia, ha aiutato a trovare una piccola correzione alla soluzione sopra. ecco perché l'upgrade ha ottenuto e un ringraziamento :)
Tom Siwik



1

Con odroid la creazione di questo file ha risolto il mio problema

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"

1

Ho avuto lo stesso problema su Raspberry Pi 2 con Ubuntu 16.04 e ciò che ha funzionato è stato seguire il link da #goutam e aggiungere /etc/udev/rules.d/70-persistent-net.rules con il seguente:

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

1

Ho trovato questo suggerimento qui :

Cambia una riga in 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"

che sta eliminando l'attributo KERNEL e sta cambiando NAME da = a: =

Sembra forzare qualsiasi indirizzo MAC trovato in eth0. Funziona su sistemi di avvio Raspberry Pi e uboot.


0

Per me, eseguendo Debian Unstable su Raspberry Pi 2, anche il collegamento simbolico menzionato nel commento alla prima risposta era l'idea giusta, ma il suo nome doveva essere diverso: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules


No, hai menzionato questo nome di file ma uno diverso nel tuo commento, motivo per cui ho fatto riferimento a quel commento e hai detto che doveva essere un nome di file diverso per me.
Axel Beckert,

1
Vedo. Notare la differenza tra raspberry pi 3 e raspberry pi 2. Anche se tecnicamente sono quasi uguali, questa differenza di denominazione potrebbe essere una di quelle cose per fuorviare le persone. Grazie per chiarimenti però.
Tom Siwik,

Presumo che questa differenza nei nomi dei file derivi da Debian 8 Jessie vs Debian Unstable con una nuova versione di systemd / udev. Il nome effettivo dell'interfaccia senza questo link simbolico potrebbe in effetti essere più diverso dell'indirizzo MAC. Ma almeno per l'interfaccia Ethernet penso di ricordare di aver visto questi enxnomi di interfaccia su entrambi, Raspi 2 e 3. Tuttavia, al momento non riesco a ricordare come l'interfaccia WLAN sia stata nominata su Raspi 3.
Axel Beckert,

enx <MAC>, stava usando Ubuntu Mate, risolto problema come mostrato sopra. Passato a Debian e non è stato necessario rinominare. È strano però ... hai ragione.
Tom Siwik,

0

è sufficiente disattivare le regole udev responsabili del processo di ridenominazione dell'interfaccia, ad es

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

o

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

EDIT: thx @ sparkie per aver individuato un errore. Mescolo sempre l'ordine. :)


il primo comando menzionato non può funzionare. Almeno src e dst sono confusi.
Sparkie,

0

Mi rendo conto che questa domanda è vecchia ma ho riscontrato questo problema e nessuna delle soluzioni proposte finora in questa pagina ha risolto il mio problema. Per me il trucco della cartella rules.d non sembra fare nulla.

La mia soluzione era semplicemente scrivere uno script che si trova nella cartella init.d per assegnare DHCP alla porta Ethernet cablata indipendentemente dal nome. Questo è importante perché ho diverse unità Raspberry Pi e tutte hanno riscontrato lo stesso problema. (molto frustrante)

Il mio problema è aggravato perché ho una cartella di archiviazione di rete che deve essere montata durante il processo di avvio. Poiché l'interfaccia non è stata creata, questo montaggio è fallito e le cose sono andate di male in peggio per me.

Ecco la mia soluzione Spero che questo possa aiutare chiunque non riesca a trovare unirsi usando le risposte sopra.

Crea il file /etc/init.d/raspi-init-network usando il tuo editor di testo preferito. Mi piace usare vi.

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

Questo è il codice che appartiene al file

#!/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

Assicurarsi che lo script sia eseguibile

sudo chmod 755 raspi-init-network

Attiva il codice in modo che venga eseguito durante il processo di avvio eseguendo il comando update-rc.d.

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

Dopo questo, non ho avuto un singolo problema e sono stato in grado di copiare il codice su tutte le mie unità Pi con gli stessi risultati costanti.

NOTA: se non si montano unità, è possibile tralasciare la riga "mount -a".

TWEAKS: Se stai usando il tuo wifi puoi cambiare la linea che inizia "interfaccia =" e modificare il primo segmento "grep". Questo primo grep prende l'intera linea dell'interfaccia che si desidera utilizzare. Il secondo grep prende quella linea e restituisce solo il nome dell'interfaccia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.