Apakah ada solusi untuk Bug Debian #838871?
Masalah:Saya ingin memiliki konfigurasi jaringan di Debian dengan properti berikut:
- Secara otomatis mengaktifkan antarmuka jaringan saat kabel dicolokkan
- boot tanpa memblokir untuk waktu yang lama ketika tidak ada kabel yang terhubung saat boot
- tidak mengganti sistem init saya
Cara standar untuk melakukan ini adalah cuplikan berikut di /etc/network/interfaces
:
allow-hotplug eth0
iface eth0 inet dhcp
Namun, ini mengarah ke masalah yang dijelaskan dalam laporan bug tertaut:Proses booting diblokir selama>1 menit ketika tidak ada kabel jaringan yang dicolokkan dengan pesan berikut:
configuring network interfaces... ifup: waiting for lock on /run/network/ifstate.eth0
Solusi yang diberikan dalam pertanyaan ini tampaknya mengubah allow-hotplug
ke auto
:
auto eth0
iface eth0 inet dhcp
Ini secara efektif membuat pesan pemblokiran boot menghilang, namun, sistem sekarang memblokir tepat sebelum prompt login ditampilkan di tty1. Kali ini dhclient memblokir karena mencoba mendapatkan balasan dhcp di eth0, yang tidak terhubung, dan menunggu beberapa kali hingga waktu habis. Prompt login hanya muncul setelah dhclient timeout.
Untuk pengguna dengan DE grafis, ini mungkin tidak menjadi masalah, karena mereka tidak perlu masuk ke tty1, sebaliknya DE mereka melakukan booting dan mereka tidak pernah melihat pesan dhclient.
Solusi lain mungkin menggunakan network-manager
. Idealnya, saya lebih suka untuk tidak menggunakan networkmanager, tetapi sebagai upaya terakhir, saya mencobanya. Namun, pada buster Debian, rantai ketergantungan manajer jaringan bertentangan dengan sysvinit-core
, yang merupakan sistem init saya.
Alternatif terakhir yang muncul di benak saya adalah tidak mengonfigurasi eth0 di antarmuka (5). Ini membuat semua blok boot hilang, namun, saya harus secara manual ifup eth0
setelah mencolokkan kabel ethernet.
Ada ide yang lebih baik?
PEMBARUAN:Untuk mengatasi kutipan dari @sourcejedi, "allow-hotplug" ditentukan untuk "memulai antarmuka ketika kernel mendeteksi peristiwa hotplug dari antarmuka" di dokumen Debian di bawah jaringan Debian. Pertanyaan terkait:Penjelasan terperinci yang bagus tentang /etc/network/interfaces sintaks? dan Apa yang dimaksud dengan acara hotplug dari antarmuka?
Jawaban yang Diterima:
Sebelum network-manager
, cara terkenal untuk “secara otomatis ifup
antarmuka jaringan saat kabel dicolokkan” adalah ifplugd
. (Perhatikan penulis asli :-P). ifplugd
masih tersedia di Debian. Saya tidak memiliki pengalaman baru-baru ini dengannya.
Pertama, Anda akan menghapus auto eth0
atau allow hotplug eth0
baris dari /etc/network/interfaces
. Anda masih memerlukan baris iface eth0 inet dhcp
. (Baris ini tergantung pada apa nama antarmuka jaringan Anda, dan juga jika Anda ingin menambahkan dukungan ipv6, dll).
Untuk mengkonfigurasi ifplugd
untuk membuka antarmuka, edit /etc/default/ifplugd
untuk menyetel INTERFACES=
untuk menyertakan nama antarmuka jaringan Anda. Atau, ini menyarankan Anda untuk menggunakan nilai auto
. Saya tidak tahu seberapa baik auto
bekerja pada sistem terbaru apa pun :-).
https://manpages.debian.org/buster/ifplugd/ifplugd.conf.5.en.html
Fitur ini tidak pernah disediakan oleh allow-hotplug
:
Perhatikan bahwa pemeriksaan status tautan tidak selalu ada, dan bagaimanapun juga hanya dilakukan saat boot. Itu tidak pernah mendukung kasus di mana tidak ada kabel yang terhubung saat boot, dan di mana Anda mencolokkan kabel di lain waktu. — Pesan #20
Sumber-sumber yang bertentangan ini hanya salah. Jika Anda menginginkan fitur ini, Anda perlu menjalankan daemon yang menunggu event “netlink”.[*] Debian ifupdown
paket tidak termasuk daemon apa pun. allow-hotplug
bergantung pada daemon udev, yang tidak membaca peristiwa netlink yang diperlukan.
Daemon udev hanya membaca acara "hotplug" udev ("uevent"). Tidak ada "uevent" ketika perangkat Ethernet mendeteksi perubahan status tautan. Anda dapat memverifikasi ini menggunakan udevadm monitor
.
Pengembang kernel Linux membuat keputusan yang disengaja untuk tidak menyediakan "uevent" untuk ini. Lihat:Re:Q:netdev:generate kobject uevent pada event jaringan.
[*] Pedant:secara teknis ifplugd
bekerja dengan polling status tautan secara berkala. Jadi tidak selalu bergantung pada event “netlink”. Perbedaan ini ditunjukkan oleh netplug
, yang melakukannya gunakan acara "netlink". netplug
tidak memiliki semua fitur yang sama dengan ifplugd
.