Raspberry Pi 3-「enx…」という誤った名前のeth0


28

私の新しいRPi 3デバイス(イェー)は最近、非アクティブ化されたイーサネットで起動しました。

だから私/etc/networks/interfacesはラインを見た:

auto eth0
iface eth0 inet dhcp

ifup eth0残念ながら、呼び出しは次のメッセージを出しました:

eth0 No such device
No hardware found

だから私は自分ifconfig -aをチェックして、奇妙なデバイスを見ました:

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

/etc/networks/interfaces名前を変更しようとすると、ネットワークが機能しました。デバイス名を元に戻すにはどうすればよいeth0ですか?

PS:70-persistent-net.rulesファイルfyi がありません。OSはUbuntu MATE 15.10です

ありがとう。


ファイルを確認してください/ etc / iftab鉱山の状態:enxb827 .... mac xx:xx:xx:xx:xx:xx arp 1 wlan0 mac xx:xx:xx:xx:xx:xx arp 1

回答:


16

Raspberry Pi 2でDebian armhfを実行しているときにこの問題が発生しました。ファイル/etc/udev/rules.d/70-persistent-net.rulesを作成してこれを配置することにより、インターフェイス名を変更できます。

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

b8:ac:6f:65:31:e5をeth0 MACアドレスに置き換え、再起動するとeth0になります。/etc/network/interfacesで間違ったインターフェイスを定義しているため、enx *を変更するだけで、再起動後にインターネットにアクセスできない場合がありますeth0

編集:これは問題ではなく、新しいインターフェイスの命名スキーム「予測可能なインターフェイス名」です。古いものに戻そうとする代わりに、これを調整して使用する必要があります。


3
@UnSinedのおかげで、さらに調べて、追加する必要があることがわかりましたln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules。基本的にネーミングを無効にします。今すぐ動作します。
トムシウィック

ユーザーは今@Ficertynです...レッドハットドキュメントの幸せな読者のための明快さ
トムシウィック

1
これが機能するには、KERNEL=="eth*"エントリを削除する必要がありました。
ロジャーデューク

23

あなたのような奇妙なネットワーク・インターフェース・デバイス見ている場合は、このソリューションは、のみ動作しenv{hwdaddress}実行したとき$ ifconfig -aの代わりにeth0。ルールの追加に関する一般的な回答をすべて試しましたが、この修正のみが機能しました。

Ubuntu 16.04がプリインストールされたサーバーarmhfでRaspberry Pi 3を実行しています。簡単に言えば、$ apt-get update追加された予測可能なネットワークインターフェイス名を実行する

次のファイルを編集します。

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

見るべき:

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

最後にNAMEを次のように変更します。

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"

変更内容を保存

リブート。すべてがeth0を指していると仮定すると、すべてが動作するはずです。

編集(2016年10月26日) 今後の更新でこの修正が上書きされないようにするには、次の手順を実行します。

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

1
eth0Ubuntu Server 16.04でPiを安定させるために、かなり長い時間を費やしました。ありがとうございました。あなたの答えを少し修正します。それを試して、実装してから、あなたの答えに追加することをお勧めします。73-usb-net-by-mac.rulesファイルを/etc/udev/rules.d/ディレクトリにコピーして、それを修正します。変更した場合/lib/udev/rules.d、将来のOSアップデートで上書きされる可能性があります。
ケビンテルジュール16年

ヘッドアップをありがとう。また、問題のトラブルシューティングに2日間を費やしました。更新のためにリブート時にイーサネットが機能しなくなるように、パイをすべてPython3およびOpenCVに設定する必要があります。私の答えを見てうれしかったです。
ルイスゴディネス

1
なぜそれが起こっているのか、そして何をすべきか、そしてなぜそれを理解する必要があるのか​​を理解するのにしばらく時間がかかりました(Ubuntuのバグ-コミットされた修正は機能しないようです。これは同じファイルの編集です)。進行中の戦いは次のとおりです。bugs.launchpad.net / ubuntu / + source / systemd / + bug / 1593379-ただし、Raspberry Pi 2では修正が機能していないようです。x86ボックスを入手することを本当に考えていますこの時点で。
ケビンテルジュール

13

raspi-configが最も簡単な方法です。

Raspbianを使用している場合、デフォルトでインストールされます。ただし、Ubuntu、Mint、Mateを使用している場合は、以下のコマンドでインストールできます。

sudo apt-get install raspi-config

その後、raspi-configを使用して構成できます。

sudo raspi-config
  1. 「2.ネットワークオプション」を選択します
  2. 「N3ネットワークインターフェイス名」を選択します
  3. 「いいえ」を選択します。予測可能なネットワークインターフェイス名が無効になりました。
  4. 「OK」および「完了」をクリックします。その後、ラズベリーパイを再起動します。

できた


1
Ubuntu Mate(OPが使用しているもの)にはraspi-configがありますか?
スティーブロビラード

したがって、あなたの答えは当てはまりません。
スティーブロビラード

1
しかし、Raspbianで同じ問題をGoogleで検索した場合、この質問が最初に見つかりました。私はそれをし、研究に時間をかけて解決策を見つけました。私はそれが何かを助けると思う。OK今すぐ回答を編集します。
アルマスデュサル

1
承認された回答に回答が明確に書かれている間、人々が「研究」しているのを見るのは混乱します。Ubuntu、debian、raspbianはすべて同じです。Ubuntu Mateにツールをインストールしても問題ありません(デフォルトでインストールされていても)raspberrypi.stackexchange.com/a/67084/42528です。しかし、これはカーテンの向こう側で何が起こっているのかを説明することなく答えです。問題を解決する一方で、何が起こっているのかを実際に理解することを思いとどまらせます。ただし、そこにあるすべてのレイジーに対してこれを+1します。
トムシウィック

1
クール!この答えは間違いなく最も簡単で、動作する静的IPアドレスとして確立するための私の問題を解決しました
vinyll

5

これは「バグ」ではなく、「機能」「一貫したネットワークデバイスの命名」です。(私はそれについて一貫したものを見ていません。)

おそらくこれを「修正」する多くの方法がありますが、ハードウェアが変更された場合には機能しない可能性があります。

以前の動作を復元するには、「net.ifnames = 0 biosdevname = 0」を末尾に追加しcmdline.txtます。


この機能は機能ですが、その動作方法はバグです-特にudevがUSBイーサネットデバイスを処理する方法にあります。無視しnet.ifnames=0ます。一般的なOSを一般的なハードウェア構成で動作させるために、バグレポートの議論に従う必要があるとは思いませんが、それは人生です。bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
ケビンテルジュール

@KevinTeljeurと私のコメントは皮肉でした-これはコンピューターシステムの一般的な問題です。
ミリウェイズ

ハハ、ごめんなさい-非常に多くの無駄な時間の後、それが静かに文書化されたバグであることがわかった後、私は一貫性のないネットワークデバイスの命名の皮肉を拾うことができません。私はあなたの引用符を拾いましたが、それらの魔法の呪文の追加はconfig.txt、文書化されたバグとしてPi上で本当に動作しません(おそらく最新のudevビルドのリリースで最終的に動作します)。これは、USB上のイーサネットを備えたすべてのシステムに影響する、驚くほど未知のバグです。
ケビンテルジュール

4

名前の一部としてmacアドレスを使用して具体的には検出していませんが、発生しているものは一貫したネットワークデバイスの命名と呼ばれます。

これは可能な変更であり、複数のネットワークカードを使用しているシステムで、カードが故障したり、eth0、eth1などの命名規則を使用したりする可能性があるため、変更が行われました。間違ったインターフェースへ。

多くのLinuxディストリビューションは、何らかの一貫したネットワークデバイスの命名に移行しました。通常enp0s1、PCIバスとバスへの接続ポイント(それぞれ0と1)を識別するようなものになります。

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.htmlから詳細情報を取得できます。また、システムを古い方法に変更する方法も取得できます。まだやりたいことがあれば


1
これは有益なコメントですが、問題の解決には役立ちませんでしたし、質問への回答もしませんでした(手動の回答を読んでください)。ただし、上記のソリューションの小さな修正を見つけるのに役立ちました。そのため、
賛成票



1

このファイルを作成するodroidで私の問題を修正しました

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

Ubuntu 16.04を搭載したRaspberry Pi 2でも同じ問題が発生しましたが、#goutamからのリンクをたどって/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

私はこの提案をここに見つけまし

70-persistent-net.rulesの1行を次のように変更します

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

KERNEL属性を削除し、NAMEを=から:=に変更しています

eth0に検出されたMACアドレスを強制するようです。Raspberry Piおよびubootブートシステムで動作します。


0

Raspberry Pi 2でDebian Unstableを実行している私にとって、最初の答えに対するコメントで言及されたシンボリックリンクも正しい考えでしたが、その名前は異なっていなければなりませんでした: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules


いいえ、あなたはこのファイル名に言及しましたが、コメントに別の名前を付けました。そのため、私はそのコメントを参照し、私にとっては別のファイル名にする必要があると述べました。
アクセルベッカート

1
そうですか。raspberry pi 3とraspberry pi 2の違いに注意してください。これらは技術的にはほぼ同じですが、この命名の違いは人々を誤解させるものの1つです。明確化してくれてありがとう。
トムシウィック

ファイル名のこの違いは、新しいsystemd / udevバージョンを使用したDebian 8 JessieとDebian Unstableによるものと思われます。このシンボリックリンクがないインターフェイスの実際の名前は、実際には単なるMACアドレスとは異なる場合があります。しかし、少なくともイーサネットのため、私は私がこれらの見たことを覚えて考えるインターフェースenxの両方のインターフェイス名を、現在のWLANインタフェースがRaspi 3に選ばれましたか覚えていないもののRaspi 2と3 I
アクセルBeckertの

enx <MAC>はUbuntu Mateを使用しており、上記のような問題を修正しました。Debianに切り替えて、名前を変更する必要がなくなりました。それは奇妙ですが...あなたは正しいです。
トムシウィック16

0

インターフェースの名前変更プロセスを担当するudevルールを無効にするだけです。

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

または

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

編集:thx @ sparkie、間違いを指摘してくれました。私はいつも注文を混乱させます。:)


最初に述べたコマンドは機能しません。少なくともsrcとdstは混同されます。
sparkie

0

私はこの質問が古いことを理解していますが、この問題にぶつかり、このページでこれまでに提案された解決策のどれも私の問題を解決しませんでした。私にとって、rules.dフォルダーのトリックは何もしないようです。

私の解決策は、名前に関係なく、有線のイーサネットポートにDHCPを割り当てるために、init.dフォルダーに入るスクリプトを単に書くことでした。私はいくつかのRaspberry Piユニットを持っているので、これは重要です。それらはすべてこの同じ問題を抱えています。(非常にイライラする)

ブートプロセス中にマウントする必要があるネットワークストレージフォルダーがあるため、私の問題はさらに複雑になります。インターフェイスがアップしなかったため、このマウントは失敗し、事態は悪化しました。

これが私の解決策です。これが上記の回答を使用して参加を見つけることができない他の人を助けることを願っています。

任意のテキストエディターを使用して、ファイル/etc/init.d/raspi-init-networkを作成します。私はviを使うのが好きです。

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

これはファイルに属するコードです

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

スクリプトが実行可能であることを確認してください

sudo chmod 755 raspi-init-network

update-rc.dコマンドを実行して、ブートプロセス中に実行されるようにコードをアクティブにします。

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

この後、私は単一の問題を抱えておらず、同じ安定した結果ですべてのPiユニットにコードをコピーすることができました。

注:ドライブをマウントしない場合は、「mount -a」行を省略できます。

調整:WiFiを使用している場合、「interface =」で始まる行を変更して、最初の「grep」セグメントを編集できます。この最初のgrepは、使用するインターフェイスの行全体を取得します。2番目のgrepはその行を受け取り、インターフェース名のみを返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.