Raspberry Pi 3 - eth0 secara salah bernama 'enx…'

28

Perangkat RPi 3 baru saya (yay) baru-baru ini di-boot dengan ethernet yang dinonaktifkan.

Jadi saya melihat /etc/networks/interfacesdan melihat garis:

auto eth0
iface eth0 inet dhcp

ifup eth0Sayangnya, panggilan memberi pesan berikut:

eth0 No such device
No hardware found

Jadi saya memeriksa ifconfig -adan melihat perangkat aneh:

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

Mencoba mengubah /etc/networks/interfacesnama menghasilkan jaringan yang berfungsi. Bagaimana saya bisa mengubah kembali nama perangkat itu eth0?

PS: Saya tidak punya 70-persistent-net.rulesfile fyi. OS adalah Ubuntu MATE 15.10

Terima kasih.

Tom Siwik
sumber
Silakan periksa file> / etc / iftab Status Tambang: enxb827 .... mac xx: xx: xx: xx: xx: xx: arp 1 wlan0 mac xx: xx: xx: xx: xx: xx arp 1

Jawaban:

16

Saya memang memiliki masalah ini ketika menjalankan Debian armhf di Raspberry Pi 2, Anda dapat mengubah nama antarmuka dengan membuat file /etc/udev/rules.d/70-persistent-net.rules dan meletakkannya di

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

ganti b8: ac: 6f: 65: 31: e5 dengan alamat MAC eth0 Anda, reboot dan itu akan menjadi eth0, Anda mungkin tidak memiliki akses internet setelah reboot karena di / etc / network / interfaces mendefinisikan antarmuka yang salah, cukup ubah enx * ke eth0

Sunting: Ini bukan masalah tetapi skema penamaan antarmuka baru "Nama Antarmuka yang Dapat Diprediksi", Anda harus beradaptasi dan menggunakan ini alih-alih mencoba untuk mengembalikannya ke yang lama.

Cacar Air
sumber
3
berkat @UnSined saya melihat lebih lanjut dan menemukan, bahwa saya harus menambahkan: ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules. Ini pada dasarnya menonaktifkan penamaan. Bekerja sekarang .. terima kasih!
Tom Siwik
Pengguna adalah @Ficertyn sekarang ... kejelasan untuk pembaca yang senang dari dokumen topi merah
Tom Siwik
1
Saya harus menghapus KERNEL=="eth*"entri agar ini berfungsi.
Roger Dueck
23

Solusi ini hanya berfungsi jika Anda melihat perangkat antarmuka jaringan yang aneh seperti env{hwdaddress}saat berjalan, $ ifconfig -abukan eth0. Saya mencoba semua jawaban umum tentang menambahkan aturan tetapi hanya perbaikan ini yang berhasil.

Saya sedang menjalankan Raspberry Pi 3 dengan Ubuntu 16.04 server arm diinstal sebelumnya. Singkat cerita, menjalankan $ apt-get updatemenambahkan Nama Antarmuka Jaringan Terprediksi

Edit file berikut:

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

Anda harus melihat:

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

Ubah NAME di bagian akhir sebagai berikut:

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"

Simpan perubahan

Mulai ulang. Semuanya harus berfungsi sekarang dengan asumsi semuanya menunjuk ke eth0.

Edit (10/26/2016) Untuk mencegah pembaruan di masa mendatang dari menimpa perbaikan ini, lakukan hal berikut:

cp /lib/udev/rules.d/73-usb-net-by-mac.rules /etc/udev/rules.d/
Luis Godinez
sumber
1
Saya telah menghabiskan jauh, terlalu lama mencoba untuk sampai pada titik memiliki stabil eth0untuk Pi saya dengan Ubuntu Server 16.04. Terima kasih. Satu modifikasi kecil untuk jawaban Anda, yang saya sarankan agar Anda coba, laksanakan dan kemudian tambahkan ke jawaban Anda: Salin 73-usb-net-by-mac.rulesfile ke /etc/udev/rules.d/direktori dan modifikasi yang itu; jika Anda mengubah yang masuk /lib/udev/rules.dmaka mungkin akan ditimpa dalam pembaruan OS di masa depan.
Kevin Teljeur
Terimakasih atas peringatannya. Saya juga menghabiskan waktu 2 hari untuk memecahkan masalah. Saya ingin pi siap untuk digunakan dengan Python3 dan OpenCV hanya agar Ethernet berhenti bekerja saat boot ulang karena pembaruan. Senang melihat jawaban saya berguna.
Luis Godinez
1
Butuh beberapa saat untuk mencari tahu mengapa itu terjadi, dan kemudian perlu mencari tahu apa yang harus dilakukan dan mengapa (bug Ubuntu - perbaikan seperti yang dilakukan tampaknya tidak berfungsi, yang merupakan pengeditan untuk file yang sama). Inilah pertempuran yang sedang berlangsung: bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379 - Namun, perbaikan Anda tampaknya tidak berfungsi pada Raspberry Pi 2. Saya benar-benar berpikir untuk mendapatkan kotak x86 pada saat ini.
Kevin Teljeur
13

raspi-config adalah metode termudah.

Jika Anda menggunakan Raspbian maka instal secara default. Tetapi jika Anda berada di Ubuntu, Mint atau Mate maka Anda dapat menginstalnya dengan perintah di bawah ini:

sudo apt-get install raspi-config

Kemudian Anda dapat melakukan konfigurasi dengan raspi-config.

sudo raspi-config
  1. Pilih "2. Opsi jaringan"
  2. Pilih "N3 nama antarmuka jaringan"
  3. Pilih "Tidak". Sekarang dinonaktifkan nama antarmuka jaringan yang dapat diprediksi.
  4. Klik "OK" dan "Selesai". Maka itu akan reboot pi raspberry Anda.

Selesai

Almas Dusal
sumber
1
Apakah Ubuntu Mate (yang digunakan OP) memiliki raspi-config?
Steve Robillard
Jadi jawaban Anda tidak berlaku.
Steve Robillard
1
Tetapi jika Anda googled masalah yang sama dengan Raspbian maka pertanyaan ini ditemukan terlebih dahulu. Saya melakukan itu dan mengambil waktu untuk penelitian dan menemukan solusi. Saya pikir itu membantu seseorang. OK saya edit jawaban sekarang.
Almas Dusal
1
Itu membingungkan saya untuk melihat orang-orang "meneliti" sementara jawabannya jelas ditulis dalam jawaban yang disetujui. Ubuntu, debian, raspbian semuanya sama. Menginstal alat pada Ubuntu Mate juga tidak ada masalah (bahkan diinstal secara default) raspberrypi.stackexchange.com/a/67084/42528 . Namun ini adalah jawaban tanpa penjelasan apa pun yang terjadi di balik tirai. Sementara itu memecahkan masalah, hal itu membuat orang tidak benar-benar memahami apa yang sedang terjadi. Saya akan memberi ini +1 untuk semua malas di luar sana.
Tom Siwik
1
Keren! Jawaban ini jelas yang paling mudah dan menyelesaikan masalah saya karena menetapkan alamat IP statis yang berfungsi
vinyll
5

Ini BUKAN "bug" itu adalah "fitur" " penamaan perangkat jaringan yang konsisten ". (Saya tidak melihat sesuatu yang konsisten tentang hal itu.)

Mungkin ada banyak cara untuk "memperbaiki" ini, tetapi mereka mungkin tidak berfungsi jika perangkat keras diubah.

Untuk mengembalikan perilaku sebelumnya, tambahkan "net.ifnames = 0 biosdevname = 0" di akhir cmdline.txt.

Milliways
sumber
Meskipun fitur tersebut, yah, fitur, cara berperilaku adalah bug - khususnya dalam cara udev menangani perangkat ethernet USB. Mengabaikan net.ifnames=0. Saya tidak percaya bahwa ada orang yang perlu mengikuti diskusi laporan bug untuk membuat OS yang populer bekerja dengan konfigurasi perangkat keras yang umum, tetapi itulah kehidupannya. bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
Kevin Teljeur
@KevinTeljeur dan komentar saya sarkasme - ini adalah masalah umum pada sistem komputer.
Milliways
Ha ha, maaf - setelah sekian banyak waktu yang terbuang sia-sia, dan kemudian menemukan bahwa itu adalah bug yang terdokumentasi dengan tenang, saya tidak dapat menangkap sarkasme perangkat jaringan yang konsisten. Saya memang menangkap tanda kutip Anda, tetapi penambahan mantra sihir itu config.txtbenar-benar tidak berfungsi pada Pi sebagai bug yang terdokumentasi (mungkin sekarang dengan rilis udev build terakhir akhirnya berhasil). Ini adalah bug yang tidak diketahui yang mempengaruhi semua sistem dengan ethernet pada USB.
Kevin Teljeur
4

Saya belum menemukannya secara khusus dengan alamat mac sebagai bagian dari nama, namun apa yang Anda alami disebut penamaan perangkat jaringan yang konsisten.

Ini adalah perubahan yang dibuat karena itu mungkin, dan mungkin bahkan mungkin pada beberapa sistem yang memiliki banyak kartu jaringan sehingga kartu-kartu tersebut akan rusak dan menggunakan skema penamaan eth0, eth1, dll. Anda akhirnya akan menerapkan aturan perutean dan yang lainnya ke antarmuka yang salah.

Banyak distribusi Linux telah pindah ke semacam penamaan perangkat jaringan yang konsisten, biasanya akan terlihat seperti enp0s1, mengidentifikasi bus PCI dan titik lampiran ke bus (masing-masing 0 dan 1).

Anda dapat memperoleh informasi lebih lanjut dari https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.html , serta cara mengubah sistem Anda ke cara lama melakukan hal-hal jika Anda masih ingin melakukannya.

Ficertyn
sumber
1
walaupun ini adalah komentar yang informatif, itu tidak membantu menyelesaikan masalah dan juga tidak menjawab pertanyaan (baca jenis jawaban manual). Namun, itu membantu menemukan perbaikan kecil untuk solusi di atas. itu sebabnya upvote diterima dan terima kasih :)
Tom Siwik
1

Dengan odroid membuat file ini memperbaiki masalah saya

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ö
sumber
1

Saya memiliki masalah yang sama pada Raspberry Pi 2 dengan Ubuntu 16.04 dan apa yang berhasil adalah mengikuti tautan dari #goutam dan menambahkan /etc/udev/rules.d/70-persistent-net.rules dengan yang berikut:

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

Saya menemukan saran ini di sini :

Ubah satu baris di 70-persistent-net.rules menjadi

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

yang menjatuhkan atribut KERNEL dan mengubah NAME dari = menjadi: =

Tampaknya memaksa alamat MAC apa pun ditemukan eth0. Bekerja pada Raspberry Pi dan sistem booting uboot.

pengguna855443
sumber
0

Bagi saya, menjalankan Debian Unstable pada Raspberry Pi 2, symlink yang disebutkan dalam komentar untuk jawaban pertama juga merupakan ide yang tepat, tetapi namanya harus berbeda: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules

Axel Beckert
sumber
Tidak, Anda memang menyebutkan nama file ini tetapi berbeda dalam komentar Anda, itulah sebabnya saya merujuk komentar itu dan menyebutkan bahwa itu harus nama file yang berbeda untuk saya.
Axel Beckert
1
Saya melihat. Harap perhatikan perbedaan antara raspberry pi 3 dan raspberry pi 2. Walaupun secara teknis hampir sama perbedaan penamaan ini bisa menjadi salah satu hal untuk menyesatkan orang. Terima kasih atas klarifikasi.
Tom Siwik
Saya menganggap perbedaan dalam nama file ini berasal dari Debian 8 Jessie vs Debian Tidak stabil dengan versi systemd / udev yang lebih baru. Nama sebenarnya dari antarmuka tanpa symlink ini mungkin memang lebih berbeda dari sekedar alamat MAC. Tapi setidaknya untuk antarmuka ethernet saya pikir saya ingat pernah melihat enxnama - nama antarmuka ini pada keduanya, Raspi 2 dan 3. Saya saat ini tidak dapat mengingat bagaimana antarmuka WLAN dinamai pada Raspi 3.
Axel Beckert
enx <MAC>, menggunakan Ubuntu Mate, memperbaiki masalah seperti yang ditunjukkan di atas. Beralih ke Debian dan tidak perlu melakukan penggantian nama. Anehnya ... kamu benar.
Tom Siwik
0

cukup nonaktifkan aturan udev yang bertanggung jawab untuk proses penggantian nama antarmuka, yaitu

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

atau

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

EDIT: thx @ sparkie untuk kesalahan kesalahan. Saya selalu mencampur pesanan. :)

DarwinsBuddy
sumber
perintah yang disebutkan pertama tidak bisa bekerja. Setidaknya src dan dst tercampur.
sparkie
0

Saya menyadari bahwa pertanyaan ini sudah lama tetapi saya telah mengenai masalah ini dan sejauh ini tidak ada solusi yang diusulkan untuk menyelesaikan masalah saya. Bagi saya aturan. Trik folder sepertinya tidak melakukan apa-apa.

Solusi saya adalah cukup menulis skrip yang masuk dalam folder init.d untuk menetapkan DHCP ke port ethernet kabel terlepas dari namanya. Ini penting karena saya memiliki beberapa unit Raspberry Pi dan mereka semua memiliki masalah yang sama. (sangat membuat frustrasi)

Masalah saya diperparah karena saya memiliki folder penyimpanan jaringan yang perlu dipasang selama proses boot. Karena antarmuka tidak muncul, pemasangan ini gagal dan segalanya berubah dari buruk menjadi lebih buruk bagi saya.

Ini solusinya. Saya harap ini akan membantu orang lain yang tidak dapat bergabung menggunakan jawaban di atas.

Buat file /etc/init.d/raspi-init-network menggunakan editor teks favorit Anda. Saya suka menggunakan vi.

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

Ini adalah kode yang termasuk dalam 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

Pastikan skrip dapat dieksekusi

sudo chmod 755 raspi-init-network

Aktifkan kode sehingga akan dieksekusi selama proses boot dengan menjalankan perintah update-rc.d.

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

Setelah ini, saya tidak punya satu masalah pun dan saya bisa menyalin kode ke semua unit Pi saya dengan hasil tetap yang sama.

CATATAN: Jika Anda tidak memasang drive, Anda dapat meninggalkan jalur "mount -a".

Tweak: Jika Anda menggunakan wifi Anda, Anda dapat mengubah baris yang dimulai "interface =" dan mengedit segmen "grep" pertama. Grep pertama ini mengambil seluruh baris antarmuka yang ingin Anda gunakan. Grep kedua mengambil garis itu dan hanya mengembalikan nama antarmuka.

Glenn J. Schworak
sumber