Raspberry Pi 3 - eth0 nommé à tort «enx…»

28

Mon nouvel appareil RPi 3 (yay) a récemment démarré avec un Ethernet désactivé.

J'ai donc regardé /etc/networks/interfaceset vu la ligne:

auto eth0
iface eth0 inet dhcp

L'appel a ifup eth0malheureusement donné le message suivant:

eth0 No such device
No hardware found

J'ai donc vérifié ifconfig -aet vu un étrange appareil:

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

Essayer de changer /etc/networks/interfacesle nom a abouti à un réseau de travail. Comment puis-je changer le nom de ce périphérique en eth0?

PS: je n'ai aucun 70-persistent-net.rulesfichier fyi. Le système d'exploitation est Ubuntu MATE 15.10

Merci.

Tom Siwik
la source
Veuillez vérifier le fichier> / etc / iftab États de la mine: enxb827 .... mac xx: xx: xx: xx: xx: xx arp 1 wlan0 mac xx: xx: xx: xx: xx: xx arp 1

Réponses:

16

J'ai eu ce problème lors de l'exécution de Debian armhf sur Raspberry Pi 2, vous pouvez changer le nom de l'interface en créant le fichier /etc/udev/rules.d/70-persistent-net.rules et le mettre dans

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

remplacez b8: ac: 6f: 65: 31: e5 par votre adresse MAC eth0, redémarrez et il deviendra eth0, vous n'aurez peut-être pas accès à Internet après le redémarrage car dans / etc / network / interfaces définit une mauvaise interface, changez simplement enx * à eth0

Edit: Ce n'est pas un problème mais un nouveau schéma de dénomination d'interface "Noms d'interface prévisibles", vous devez l'adapter et l'utiliser au lieu d'essayer de le revenir aux anciens.

SandPox
la source
3
grâce à @UnSined j'ai regardé plus loin et trouvé que je devais ajouter: ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules. Il s'agit essentiellement de désactiver le truc de dénomination. Fonctionne maintenant .. merci!
Tom Siwik
L'utilisateur est @Ficertyn maintenant ... clarté pour les lecteurs satisfaits des documents du chapeau rouge
Tom Siwik
1
J'ai dû supprimer l' KERNEL=="eth*"entrée pour que cela fonctionne.
Roger Dueck
23

Cette solution ne fonctionne que si vous voyez un périphérique d'interface réseau étrange comme env{hwdaddress}lors de l'exécution $ ifconfig -aau lieu de eth0. J'ai essayé toutes les réponses courantes sur l'ajout de règles, mais seul ce correctif a fonctionné.

J'utilise un Raspberry Pi 3 avec armhf de serveur préinstallé Ubuntu 16.04. Longue histoire courte, exécution de noms d'interface réseau prévisibles$ apt-get update ajoutés

Modifiez le fichier suivant:

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

Tu devrais voir:

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

Modifiez le NOM à la fin comme suit:

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"

Sauvegarder les modifications

Redémarrez. Tout devrait fonctionner maintenant en supposant que tout pointe vers eth0.

Modifier (26/10/2016) Pour empêcher toute mise à jour future d'écraser ce correctif, procédez comme suit:

cp /lib/udev/rules.d/73-usb-net-by-mac.rules /etc/udev/rules.d/
Luis Godinez
la source
1
J'ai passé beaucoup, beaucoup trop de temps à essayer d'avoir une écurie eth0pour mon Pi avec Ubuntu Server 16.04. Merci. Une petite modification à votre réponse, que je vous suggère d'essayer, d'implémenter puis d'ajouter à votre réponse: Copiez le 73-usb-net-by-mac.rulesfichier dans le /etc/udev/rules.d/répertoire et modifiez celui-ci; si vous changez celui-ci, /lib/udev/rules.dil peut être remplacé dans une future mise à jour du système d'exploitation.
Kevin Teljeur
Merci pour l'information. J'ai également passé 2 jours solides à résoudre le problème. J'aurais le pi prêt à fonctionner avec Python3 et OpenCV uniquement pour que l'Ethernet cesse de fonctionner au redémarrage à cause de la mise à jour. Heureux de voir que ma réponse était utile.
Luis Godinez
1
Il m'a fallu un certain temps pour comprendre pourquoi cela se produisait, puis avoir besoin de comprendre quoi faire et pourquoi (bogue Ubuntu - le correctif tel que commis ne semble pas fonctionner, qui est une modification du même fichier). Voici la bataille en cours: bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379 - Cependant, votre correctif ne semble pas fonctionner sur mon Raspberry Pi 2. Je pense vraiment à obtenir une boîte x86 À ce point.
Kevin Teljeur
13

raspi-config est la méthode la plus simple.

Si vous êtes sur Raspbian, il est installé par défaut. Mais si vous êtes sur Ubuntu, Mint ou Mate, vous pouvez l'installer avec la commande ci-dessous:

sudo apt-get install raspi-config

Ensuite, vous pouvez le configurer avec raspi-config.

sudo raspi-config
  1. Sélectionnez "2. Options réseau"
  2. Sélectionnez "Noms d'interface réseau N3"
  3. Sélectionnez "Non". Il est désormais désactivé les noms d'interface réseau prévisibles.
  4. Cliquez sur "OK" et "Terminer". Ensuite, il redémarrera votre Raspberry Pi.

Terminé.

Almas Dusal
la source
1
Ubuntu Mate (qui est ce que l'OP utilise) a-t-il une configuration raspi?
Steve Robillard
Votre réponse ne s'applique donc pas.
Steve Robillard
1
Mais si vous avez googlé le même problème avec Raspbian, cette question a été trouvée en premier. Je l'ai fait et j'ai pris du temps pour la recherche et trouvé une solution. Je pense que cela aide quelqu'un. OK, je modifie la réponse maintenant.
Almas Dusal
1
Cela m'embrouille de voir des gens "faire des recherches" alors que la réponse est clairement écrite dans les réponses approuvées. Ubuntu, debian, raspbian tout de même. L'installation de l'outil sur Ubuntu Mate n'est pas un problème non plus (même installé par défaut) raspberrypi.stackexchange.com/a/67084/42528 . Cependant, c'est une réponse sans aucune explication sur ce qui se passe derrière le rideau. Bien qu'il résout le problème, il décourage les gens de comprendre réellement ce qui se passe. Je vais +1 pour tous les paresseux.
Tom Siwik
1
Cool! Cette réponse était certainement la plus simple et a résolu mon problème pour établir une adresse IP statique de travail
vinyll
5

Ce n'est PAS un "bug", c'est une "fonctionnalité" " un nom de périphérique réseau cohérent ". (Je ne vois rien de cohérent à ce sujet.)

Il existe probablement de nombreuses façons de "corriger" cela, mais elles peuvent ne pas fonctionner si le matériel est modifié.

Pour restaurer le comportement précédent, ajoutez "net.ifnames = 0 biosdevname = 0" à la fin de cmdline.txt.

Milliways
la source
Bien que la fonctionnalité soit, eh bien, une fonctionnalité, la façon dont elle se comporte est un bug - en particulier dans la façon dont udev gère les périphériques Ethernet USB. Il ignore net.ifnames=0. Je ne pense pas que quiconque devrait avoir besoin de suivre les discussions sur les rapports de bogues pour faire fonctionner un système d'exploitation populaire avec une configuration matérielle commune, mais c'est la vie. bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
Kevin Teljeur
@KevinTeljeur et mon commentaire était un sarcasme - c'est un problème courant sur les systèmes informatiques.
Milliways
Ha ha, désolé - après tant d'heures gaspillées, et après avoir constaté qu'il s'agissait d'un bogue discrètement documenté, je ne peux pas détecter de sarcasme de nommage de périphérique réseau cohérent. J'ai repris vos guillemets, mais l'ajout de ces incantations magiques dans config.txtne fonctionne vraiment pas sur le Pi en tant que bogue documenté (peut-être maintenant avec la sortie de la dernière construction udev, il le fait). C'est un bug étonnamment inconnu qui affecte tous les systèmes avec Ethernet sur USB.
Kevin Teljeur
4

Je ne l'ai pas rencontré spécifiquement avec l'adresse mac dans le nom, mais ce que vous rencontrez s'appelle un nom de périphérique réseau cohérent.

Ce changement a été effectué car il est possible, et peut-être même probable sur certains systèmes dotés de plusieurs cartes réseau, que les cartes sortent de l'ordre et utilisent le schéma de nommage eth0, eth1, etc., vous finirez par appliquer des règles de routage et ainsi de suite à la mauvaise interface.

De nombreuses distributions Linux sont passées à une sorte de dénomination cohérente des périphériques réseau, généralement cela ressemblera à quelque chose comme enp0s1 , identifiant le bus PCI et le point de connexion au bus (respectivement 0 et 1).

Vous pouvez obtenir plus d'informations sur https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.html , ainsi que sur la façon de changer votre système à l'ancienne façon de faire des choses si vous voulez toujours le faire.

Ficertyn
la source
1
bien qu'il s'agisse d'un commentaire informatif, il n'a pas aidé à résoudre le problème et n'a pas non plus répondu à la question (lire le type de réponse manuel). Cependant, cela a aidé à trouver un petit correctif à la solution ci-dessus. c'est pourquoi le vote positif a gagné et un merci :)
Tom Siwik
1

Avec odroid, la création de ce fichier a résolu mon problème

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ö
la source
1

J'ai eu le même problème sur Raspberry Pi 2 avec Ubuntu 16.04 et ce qui a fonctionné était de suivre le lien de #goutam et d'ajouter /etc/udev/rules.d/70-persistent-net.rules avec ce qui suit:

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

J'ai trouvé cette suggestion ici :

Remplacez une ligne du 70-persistent-net.rules par

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

qui supprime l'attribut KERNEL et change le NOM de = à: =

Il semble forcer toute adresse MAC trouvée à eth0. Fonctionne sur les systèmes de démarrage Raspberry Pi et uboot.

user855443
la source
0

Pour moi, en exécutant Debian Unstable sur le Raspberry Pi 2, le lien symbolique mentionné dans le commentaire de la première réponse était également la bonne idée, mais son nom devait être différent: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules

Axel Beckert
la source
Non, vous avez mentionné ce nom de fichier mais un autre dans votre commentaire, c'est pourquoi j'ai fait référence à ce commentaire et mentionné qu'il devait s'agir d'un nom de fichier différent pour moi.
Axel Beckert
1
Je vois. Veuillez noter la différence entre le raspberry pi 3 et le raspberry pi 2. Bien qu'ils soient techniquement presque les mêmes, cette différence de dénomination pourrait être l'une de ces choses pour tromper les gens. Merci pour les éclaircissements.
Tom Siwik
Je suppose que cette différence dans les noms de fichiers vient de Debian 8 Jessie vs Debian Unstable avec une version plus récente de systemd / udev. Le nom réel de l'interface sans ce lien symbolique peut en effet être plus différent que la simple adresse MAC. Mais au moins pour l'interface Ethernet, je pense que je me souviens avoir vu ces enxnoms d'interface sur les deux, Raspi 2 et 3. Je ne me souviens pas actuellement comment l'interface WLAN a été nommée sur le Raspi 3.
Axel Beckert
enx <MAC>, utilisait Ubuntu Mate, problème fixe comme indiqué ci-dessus. Passé à Debian et n'a pas eu à faire le changement de nom. C'est bizarre quand même ... tu as raison.
Tom Siwik
0

désactivez simplement les règles udev responsables du processus de changement de nom de l'interface, c.-à-d.

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

ou

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

EDIT: thx @ sparkie pour avoir poité une erreur. Je mélange toujours la commande. :)

DarwinsBuddy
la source
la première commande mentionnée ne peut pas fonctionner. Au moins src et dst sont mélangés.
sparkie
0

Je me rends compte que cette question est ancienne mais j'ai rencontré ce problème et aucune des solutions proposées jusqu'à présent sur cette page n'a résolu mon problème. Pour moi, l'astuce du dossier rules.d ne semble rien faire.

Ma solution était d'écrire simplement un script qui va dans le dossier init.d pour affecter DHCP au port Ethernet filaire quel que soit le nom. Ceci est important car j'ai plusieurs unités Raspberry Pi et elles ont toutes rencontré le même problème. (Très frustrant)

Mon problème est aggravé car j'ai un dossier de stockage réseau qui doit être monté pendant le processus de démarrage. Parce que l'interface n'est pas apparue, cette monture a échoué et les choses sont allées de mal en pis pour moi.

Voici ma solution. J'espère que cela aidera toute autre personne qui ne peut pas se joindre à vous en utilisant les réponses ci-dessus.

Créez le fichier /etc/init.d/raspi-init-network à l'aide de votre éditeur de texte préféré. J'aime utiliser vi.

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

Ceci est le code qui appartient au fichier

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

Assurez-vous que le script est exécutable

sudo chmod 755 raspi-init-network

Activez le code pour qu'il s'exécute pendant le processus de démarrage en exécutant la commande update-rc.d.

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

Après cela, je n'ai pas eu un seul problème et j'ai pu copier le code sur toutes mes unités Pi avec les mêmes résultats stables.

REMARQUE: Si vous ne montez pas de disques, vous pouvez laisser de côté la ligne "mount -a".

TWEAKS: Si vous utilisez votre wifi, vous pouvez changer la ligne qui commence "interface =" et modifier le premier segment "grep". Ce premier grep saisit toute la ligne de l'interface que vous souhaitez utiliser. Le deuxième grep prend cette ligne et ne renvoie que le nom de l'interface.

Glenn J. Schworak
la source