Raspberry Pi 3 - eth0 erroneamente chamado 'enx…'


28

Meu novo dispositivo RPi 3 (yay) foi inicializado recentemente com uma Ethernet desativada.

Então eu assisti /etc/networks/interfacese vi a linha:

auto eth0
iface eth0 inet dhcp

ifup eth0Infelizmente, a chamada deu a seguinte mensagem:

eth0 No such device
No hardware found

Então eu verifiquei o meu ifconfig -ae vi um dispositivo estranho:

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

Tentar mudar /etc/networks/interfacespara o nome resultou em uma rede funcionando. Como posso mudar o nome do dispositivo novamente eth0?

PS: não tenho nenhum 70-persistent-net.rulesarquivo fyi. O SO é o Ubuntu MATE 15.10

Obrigado.


Verifique o arquivo> / etc / iftab Mine states: enxb827 .... mac xx: xx: xx: xx: xx: xx arp 1 wlan0 mac xx: xx: xx: xx: xx: xx arp 1

Respostas:


16

Eu tive esse problema ao executar o Debian armhf no Raspberry Pi 2, você pode alterar o nome da interface criando o arquivo /etc/udev/rules.d/70-persistent-net.rules e colocando isso em

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

substitua b8: ac: 6f: 65: 31: e5 pelo seu endereço MAC eth0, reinicie e ele se tornará eth0; talvez você não tenha acesso à Internet após a reinicialização porque em / etc / network / interfaces está definindo a interface errada, basta alterar enx * para eth0

Edit: Este não é um problema, mas um novo esquema de nomeação de interface "Predictable Interface Names", você deve adaptar e usar isso em vez de tentar revertê-lo para os antigos.


3
graças a @UnSined eu olhei mais e encontrado, que eu tinha de acrescentar: ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules. É basicamente desabilitar o nome da coisa. Funciona agora .. obrigado!
— Tom Siwik

Usuário é @Ficertyn agora ... clareza para os leitores felizes dos docs chapéu vermelho
— Tom Siwik

11
Eu tive que remover a KERNEL=="eth*"entrada para que isso funcionasse.
— Roger Dueck 04/01

23

Esta solução só funciona se você estiver vendo um dispositivo de interface de rede estranho, como env{hwdaddress}quando está sendo executado em $ ifconfig -avez de eth0. Tentei todas as respostas comuns sobre a adição de regras, mas apenas essa correção funcionou.

Estou executando um Raspberry Pi 3 com o Ubuntu 16.04, servidor armhf pré-instalado. Para encurtar a história, nomes de interface de rede previsíveis$ apt-get update adicionados em execução

Edite o seguinte arquivo:

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

Você deveria ver:

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

Mude o NAME no final da seguinte maneira:

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"

Salvar alterações

Reinicie. Tudo deve estar funcionando agora, assumindo que tudo está apontando para eth0.

Editar (26/10/2016) Para impedir que futuras atualizações substituam essa correção, faça o seguinte:

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

11
Passei muito, muito tempo tentando chegar a um ponto estável eth0para o meu Pi com o Ubuntu Server 16.04. Obrigado. Uma pequena modificação na sua resposta, que eu sugiro que você tente, implemente e adicione à sua resposta: Copie o 73-usb-net-by-mac.rulesarquivo para o /etc/udev/rules.d/diretório e modifique esse; se você alterar esse /lib/udev/rules.d, poderá ser substituído em uma atualização futura do sistema operacional.
— Kevin Teljeur

Obrigado pela atenção. Também passei dois dias sólidos na solução do problema. Eu teria o pi pronto para usar o Python3 e o OpenCV apenas para que a Ethernet parasse de funcionar na reinicialização por causa da atualização. Fico feliz em ver que minha resposta foi útil.
— Luis Godinez

11
Demorei um pouco para descobrir por que isso estava acontecendo e, então, precisar descobrir o que fazer e por que (bug do Ubuntu - a correção comprometida não parece funcionar, que é uma edição no mesmo arquivo). Aqui está a batalha em andamento: bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379 - No entanto, sua correção não parece funcionar no meu Raspberry Pi 2. Estou realmente pensando em obter uma caixa x86 neste ponto.
— Kevin Teljeur

13

raspi-config é o método mais fácil.

Se você estiver no Raspbian, ele será instalado por padrão. Mas se você estiver no Ubuntu, Mint ou Mate, poderá instalá-lo com o comando abaixo:

sudo apt-get install raspi-config

Então você pode configurá-lo com raspi-config.

sudo raspi-config
  1. Selecione "2. Opções de rede"
  2. Selecione "N3 Network interface names"
  3. Selecione "Não". Agora está desativado os nomes previsíveis da interface de rede.
  4. Clique em "OK" e "Concluir". Em seguida, ele reiniciará o seu raspberry pi.

Feito.


11
O Ubuntu Mate (que é o que o OP está usando) tem uma configuração de raspi?
— Steve Robillard

Portanto, sua resposta não se aplica.
— Steve Robillard

11
Mas se você pesquisou o mesmo problema com o Raspbian no Google, essa pergunta foi encontrada primeiro. Fiz isso e tirei um tempo para pesquisar e encontrei a solução. Eu acho que ajuda alguém. OK, edito a resposta agora.
— Almas Dusal

11
Me confunde ver as pessoas "pesquisando", enquanto a resposta está claramente escrita nas respostas aprovadas. Ubuntu, debian, raspbian da mesma forma. Instalar a ferramenta no Ubuntu Mate também não é problema (mesmo instalado por padrão) raspberrypi.stackexchange.com/a/67084/42528 . No entanto, esta é uma resposta sem nenhuma explicação sobre o que está acontecendo atrás da cortina. Enquanto resolve o problema, desencoraja as pessoas a realmente entenderem o que está acontecendo. Marcarei +1 para todos os preguiçosos que estão por aí.
— Tom Siwik

11
Legal! Esta resposta foi definitivamente a mais fácil e resolveu meu problema ao estabelecer como endereço IP estático em funcionamento
— vinyll 21/01

5

Este não é um "bug", é um "recurso" " nomeação consistente do dispositivo de rede ". (Não vejo nada de consistente nisso.)

Provavelmente existem muitas maneiras de "consertar" isso, mas elas podem não funcionar se o hardware for alterado.

Para restaurar o comportamento anterior, adicione "net.ifnames = 0 biosdevname = 0" ao final de cmdline.txt.


Embora o recurso seja, bem, um recurso, a maneira como ele se comporta é um bug - especificamente na maneira como o udev lida com dispositivos Ethernet USB. Ignora net.ifnames=0. Não acredito que alguém precise seguir as discussões de relatórios de erros para fazer com que um sistema operacional popular funcione com uma configuração de hardware comum, mas isso é vida. bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
— Kevin Teljeur 16/16

@ KevinTeljeur e meu comentário foi sarcasmo - esse é um problema comum em sistemas de computador.
— Milliways

Ha ha, desculpe - depois de tantas horas desperdiçadas e, depois de descobrir que era um bug silenciosamente documentado, não consigo captar nenhum dispositivo de rede consistente chamado sarcasmo. Eu peguei suas aspas, mas a adição desses encantamentos mágicos no config.txtgenuinamente não funciona no Pi como um bug documentado (talvez agora com o lançamento da versão mais recente do udev finalmente funcione). É um bug surpreendentemente desconhecido que afeta todos os sistemas com Ethernet no USB.
— Kevin Teljeur

4

Não o encontrei especificamente com o endereço mac como parte do nome, no entanto, o que você está enfrentando é chamado de nomeação consistente de dispositivo de rede.

Foi uma alteração feita porque é possível, e talvez até provável, em alguns sistemas que possuem várias placas de rede, que as placas fiquem fora de ordem e usando o esquema de nomeação eth0, eth1 etc. etc., você acabaria aplicando regras de roteamento e outros enfeites para a interface errada.

Muitas distribuições Linux mudaram para algum tipo de nomenclatura consistente de dispositivo de rede, normalmente será semelhante à enp0s1identificação do barramento PCI e do ponto de conexão do barramento (0 e 1, respectivamente).

Você pode obter mais informações em https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.html , além de como mudar seu sistema para a maneira antiga de fazer coisas se você ainda quiser fazer isso.


11
mesmo que seja um comentário informativo, ele não ajudou a resolver o problema e nem respondeu à pergunta (leia o tipo de resposta manual). No entanto, ajudou a encontrar uma pequena correção para a solução acima. É por isso que upvote ganhos e obrigado :)
— Tom SIWIK



1

Com odroid criar este arquivo corrigido meu 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

Eu tive o mesmo problema no Raspberry Pi 2 com o Ubuntu 16.04 e o que funcionou foi seguir o link do #goutam e adicionar /etc/udev/rules.d/70-persistent-net.rules com o seguinte:

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

1

Encontrei esta sugestão aqui :

Altere uma linha nas 70-persistent-net.rules para

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

que está descartando o atributo KERNEL e alterando o NAME de = para: =

Parece forçar qualquer endereço MAC encontrado para eth0. Funciona em sistemas de inicialização Raspberry Pi e uboot.


0

Para mim, executando o Debian Unstable no Raspberry Pi 2, o link simbólico mencionado no comentário para a primeira resposta também era a idéia certa, mas seu nome tinha que ser diferente: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules


Não, você mencionou esse nome de arquivo, mas um nome diferente no seu comentário, e é por isso que me referi a esse comentário e mencionei que ele tinha que ser um nome de arquivo diferente para mim.
— precisa saber é o seguinte

11
Entendo. Observe a diferença entre raspberry pi 3 e raspberry pi 2. Embora eles sejam tecnicamente quase os mesmos, essa diferença de nomes pode ser uma dessas coisas para enganar as pessoas. Obrigado pelo esclarecimento embora.
— Tom Siwik

Suponho que essa diferença nos nomes de arquivos seja proveniente do Debian 8 Jessie vs Debian Unstable com uma versão mais recente do systemd / udev. O nome real da interface sem esse link simbólico pode realmente ser mais diferente do que apenas o endereço MAC. Mas, pelo menos para a interface Ethernet Acho que me lembro de ter visto esses enxnomes de interface em ambos, Raspi 2 e 3. I embora atualmente pode não se lembrar de como a interface WLAN foi nomeado na Raspi 3.
— Axel Beckert

enx <MAC>, estava usando o Ubuntu Mate, problema corrigido como mostrado acima. Mudou para o Debian e não precisou mudar o nome. É estranho ... você está certo.
— precisa saber é o seguinte

0

simplesmente desative as regras do udev responsáveis ​​pelo processo de renomeação da interface, ou seja,

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 por apontar um erro. Eu sempre confundo o pedido. :)


o primeiro comando mencionado não pode funcionar. Pelo menos src e dst são misturados.
— Sparkie 20/09/17

0

Percebo que essa pergunta é antiga, mas resolvi esse problema e nenhuma das soluções propostas até agora nesta página resolveu meu problema. Para mim, o truque da pasta rules.d parece não fazer nada.

Minha solução foi simplesmente escrever um script que vá na pasta init.d para atribuir DHCP à porta Ethernet com fio, independentemente do nome. Isso é importante porque eu tenho várias unidades Raspberry Pi e todas elas vieram com esse mesmo problema. (muito frustrante)

Meu problema foi agravado porque tenho uma pasta de armazenamento em rede que precisa ser montada durante o processo de inicialização. Como a interface não surgiu, essa montagem falhou e as coisas foram de mal a pior para mim.

Aqui está a minha solução. Espero que isso ajude qualquer pessoa que não encontre a associação usando as respostas acima.

Crie o arquivo /etc/init.d/raspi-init-network usando seu editor de texto favorito. Eu gosto de usar vi.

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

Este é o código que pertence ao arquivo

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

Verifique se o script é executável

sudo chmod 755 raspi-init-network

Ative o código para que ele seja executado durante o processo de inicialização executando o comando update-rc.d.

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

Depois disso, não tive um único problema e consegui copiar o código para todas as minhas unidades Pi com os mesmos resultados constantes.

NOTA: Se você não estiver montando unidades, poderá deixar de fora a linha "mount -a".

JOGOS: Se você estiver usando seu wifi, você pode alterar a linha que inicia "interface =" e editar o primeiro segmento "grep". Este primeiro grep captura toda a linha da interface que você deseja usar. O segundo grep pega essa linha e retorna apenas o nome da interface.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.