Apakah ada alternatif untuk menggunakan `udev`?

16

Sementara saya memahami kehebatan udev dan menghargai upaya pengembang, saya hanya ingin tahu apakah ada alternatif untuk itu.

Sebagai contoh, saya mungkin membayangkan harus ada cara untuk membuat skrip startup yang menciptakan sebagian besar node perangkat yang pada sistem saya (tidak ada perubahan perangkat keras) yang paling sama.

Manfaat atau alasan yang ingin saya lewati udevakan sama dengan melompat-lompat dbus, yaitu mengurangi kompleksitas dan dengan itu meningkatkan perubahan saya untuk mengatur sistem lebih aman.

humanityANDpeace
sumber

Jawaban:

23

Ada berbagai alternatif di udevluar sana. Tampaknya Gentoo dapat menggunakan sesuatu yang disebut mdev. Pilihan lain adalah mencoba menggunakan udevpendahulunya devfsd. Akhirnya, Anda selalu dapat membuat semua file perangkat yang Anda perlukan mknod.

Perhatikan bahwa dengan yang terakhir tidak perlu membuat semuanya saat boot karena node dapat dibuat pada disk dan tidak dalam sistem file sementara seperti dengan opsi lainnya. Tentu saja, Anda kehilangan fleksibilitas karena secara dinamis membuat file perangkat ketika perangkat keras baru dicolokkan (misalnya, stik USB). Saya percaya pendekatan standar di era ini adalah memiliki setiap file perangkat yang Anda perlukan sudah dibuat di bawah /dev(yaitu banyak file perangkat).

Tentu saja kesulitan dalam mendapatkan salah satu pendekatan ini untuk bekerja di distro modern mungkin cukup tinggi. Wiki Gentoo menyebutkan kesulitan untuk mdevdapat bekerja dengan lingkungan desktop (apalagi di luar Gentoo). devfsdRilis terakhir adalah tahun 2002, saya tidak tahu apakah itu akan bekerja sama sekali dengan kernel modern. Membuat node secara manual mungkin adalah pendekatan yang paling layak, tetapi bahkan menonaktifkan udevdapat menjadi tantangan, terutama dalam penggunaan disto systemd( udevsekarang merupakan bagian dari systemd, yang menunjukkan ketergantungan yang kuat).

Saran saya tetap dengan udev;)

Graeme
sumber
1
Terima kasih! Jawaban yang bagus yang paling banyak dituju jika tidak semua aspek pertanyaan dan penuh dengan informasi! Bertanya-tanya bagaimana mengatasi masalah systemd sekarang ... Saya akan melihat bagaimana mengurai ini :)
humanityANDpeace
udevharus bekerja dengan baik tanpa systemd- mereka berdua hanya dikembangkan dalam basis kode yang sama, tetapi udevdapat dibangun + dijalankan secara terpisah dari itu.
Elias Probst
@Lias, tentu saja, udevsudah ada jauh lebih lama daripada systemditu. Pertanyaannya adalah, bisakah systemdbekerja tanpa udev? Dugaan saya adalah bahwa Anda setidaknya harus mengkompilasi ulang dengan beberapa --without-udevopsi.
Graeme
2
@ Greme: Tidak, tidak bisa. Ini seperti mencoba mengurangi kerumitan mobil dengan melepas roda. Jika Anda baik-baik saja dengan mem-boot dengan systemd (yang memang banyak ), tetapi sangat khawatir tentang kompleksitas udev (yang semakin sedikit), maka Anda memiliki banyak hal yang benar-benar membingungkan.
user1686
@Grawity Fair point, tapi mungkin aku bahkan tidak sebagus itu dengan boot dengan systemd untuk init! Harus melihatnya
humanityANDpeace
22

Kernel Linux modern mendukung devtmpfssistem file (jangan bingung dengan kuno devfs) , yang membuat semua node perangkat secara dinamis segera setelah kernel menemukan mereka. (Faktanya, udevrilis terbaru memerlukan ini; Anda akan menemukan bahwa udev tidak lagi membuat node perangkat, hanya symlinks.)

Demikian pula, memuat firmware telah dipindahkan ke kernel juga, sehingga tugas yang tersisa hanya udevmelakukan memuat modul (sesuai dengan modaliases) dan menerapkan izin perangkat & aturan udev lainnya.

Jadi dalam teori, kernel yang sepenuhnya monolitik seharusnya bisa boot tanpa udev.

Namun, masalah sebenarnya di sini adalah apa yang terjadi kemudian.

  1. Cukup banyak program userspace mengandalkan udev menjaga database perangkatnya, dapat diakses melalui libudev. Sementara menghitung perangkat dan mendengarkan peristiwa yang ditambahkan / dihapus dapat dilakukan secara langsung menggunakan antarmuka kernel (sysfs dan netlink), Anda masih akan dibiarkan tanpa semua metadata yang telah dilampirkan oleh berbagai aturan udev.

  2. udev aturan juga mempertahankan berbagai "gigih" symlink di /dev/disk/by-*, /dev/mapper, /dev/input/by-path, /dev/snd/by-path, dan sebagainya. Misalnya, jika Anda memiliki dua disk yang terhubung, tidak ada jaminan bahwa yang pertama akan selalu sdaatausdb , tetapi udev memastikan bahwa symlink di /dev/disk/by-uuidakan terus mengarah ke yang benar.

  3. Meskipun node perangkat sekarang dibuat oleh kernel dan karena itu bukan urusan Anda lagi, penting untuk dicatat bahwa beberapa tipe perangkat sudah mulai menggunakan nomor utama / minor yang ditentukan secara dinamis, jadi meskipun Anda memiliki /dev/fuse10.228 dan /dev/hpet10.229 hari ini, mereka akan memiliki nomor yang berbeda setelah setiap reboot, sehingga salah satu devtmpfsatau (pada sistem yang lebih tua) sebuah program yang mendengarkan banyak hal diperlukan .

Banyak dari hal-hal ini dapat dengan mudah dilakukan oleh program lain seperti mdev, tentu saja. Maksud saya adalah bahwa /etc/MAKEDEVskrip statis tidak akan berfungsi lagi ...


Jadi, pada dasarnya, ketika datang ke kompleksitas boot, udev kemungkinan adalah yang paling tidak menjadi perhatian Anda.

pengguna1686
sumber
Menarik, tahukah Anda versi kernel mana yang memperkenalkan pembuatan dinamis node?
Graeme
2
@Graeme: Sekitar 2.6.32 .
user1686
12

Ada beberapa alternatif:

  • Cukup memiliki satu set dari yang tepat chmod, chown,ln , dan perintah sejenisnya di sebuah script yang dijalankan sebagai bagian dari bootstrap.
  • Menggunakan systemd-udev , plug-and-play manager yang merupakan bagian dari proyek systemd.
  • Gunakan Gentoo'seudev , yang merupakan garpusystemd-udev dari mana systemd kini telah menyimpang secara signifikan.
  • Gunakan Devuanvdev , yang merupakan manajer plug-and-play yang dikembangkan oleh Jude Nelson, yang merupakan bagian dari Devuan.
  • Gunakan mdev, yang bertentangan dengan jawaban lain bukanlah hal yang Gentoo. Itu adalah plug-and-play manager yang dibangun ke dalam BusyBox .
  • Gunakan Sucklessmdev yang merupakan plug-and-play manager yang dikembangkan oleh Dimitris Papastamos.
  • Gunakan Laurent Bercot'smdevd , yang merupakan konfigurasi yang kompatibel dengan BusyBox mdevtetapi melakukan penanganan soket sendiri dan tidak memahami protokol LISTEN.

Semua ini, terlepas dari yang pertama, membutuhkan serangkaian aturan yang menjelaskan cara bereaksi terhadap peristiwa pemberitahuan kernel tentang perangkat. Jelas sekali.

Ada juga alat yang akan mengambil program yang dirancang untuk /proc/sys/kernel/hotplug, seperti keduanya mdev, dan yang akan mengadaptasi dan membuat serial mereka dengan mendengarkan soket netlink dan kemudian memunculkan program-program tersebut:

JdeBP
sumber
6

udev? Alternatif terbaik adalah tidak menggunakannya. Dan dengan mempelajari cara tidak menggunakannya Linux dan dunia * NIX akan mulai lebih masuk akal.

Alternatif jangka panjang terbaik adalah menggunakan perangkat statis (lihat catatan). Jika Anda mendapatkan drivernya, kernel Linux mengelola hot-plugging. Saya lebih suka tidak menjalankan udevd, selamanya.

dbus adalah masalah lain. Memang memperlambat sistem Anda, tetapi, dunia orang naskah yang selalu berubah menyukainya. Jadi, banyak hal, Anda terbiasa, seperti browser web atau aplikasi dengan skrip-backend, harus diperbaiki (diluncurkan atau dibangun kembali tanpa barang-barang itu atau dibuang untuk aplikasi lain).

Catatan: Jika Anda hanya mencolokkan flash drive atau perangkat dvd, gunakan dmesg|tail untuk melihat nama perangkat yang akan dipasang. Belajar ketika perangkat adalah karakter atau perangkat blok adalah pengetahuan sistem dasar dalam dunia perangkat keras komputer. Di Linux itu open source, lihat ini banyak tentang Linux, bukan hanya tertanam . Ini yang terbaik untuk pemahaman yang lebih luas tentang logika lurus ke depan (bukan filosofi) dari semua * NIX, seperti Linux (Solaris, HPUX, AIX, dll).

Udev, dbus, gconf / dconf, systemd, gnome-shell, Gnome, Glib, mono dan Fedora adalah untuk orang-orang dengan banyak waktu di tangan mereka yang tidak dapat RTFM, atau menginginkan pembaruan yang otomatis benar-benar licin (mencari) tetapi, lebih lambat dari molase, buggy, Linux setengah jalan di sana. (Tempat yang benar-benar mengerikan, lihat di web untuk banyak pengalaman serupa).

Sistem mem-boot kemudian menjalankan udevd. Tapi, itu diklaim udev diperlukan karena, nomor perangkat kecilwill change saat reboot. Raison d'etre Udev tampaknya bertentangan dengan dirinya sendiri di setiap kesempatan. Dan di mana file-file itu tampaknya selalu salah, tidak peduli siapa yang Anda berkonsultasi. Jangan percaya atau freedesktop.org.

Selain udev sedang diserap ke dalam kengerian yang dikenal sebagai systemd, saya tidak tahu apa yang dilakukan dengan sampah / etc / udev kemudian. Dan, bodoh untuk mengatakan bahwa menulis aturan udev entah bagaimana lebih baik daripada apa pun. Orang-orang gentoo tampaknya ingin bertahan dan tidak harus memiliki systemd, jadi mereka telah membayarnya untuk eudev.

Jika Anda ingin sistem yang sangat cepat, tidak ada sistem jahat, gunakan dasar-dasar Linux.

Ginleagh
sumber
6
Ini lebih merupakan kata-kata kasar daripada jawaban ...
jasonwryan
2
@jasonwryan agak ya, masih ada beberapa nilai karena menyarankan beberapa cara untuk secara manual menangani tugas-tugas yang biasanya tercakup dalam udevfungsi. Agak juga baik untuk menunjukkan kekuatan dari pendekatan alternatif ini .
humanityANDpeace
1
Terpilih ini. Dasar pemikirannya adalah ketika saya sepenuhnya setuju bahwa gaya tersebut mungkin dianggap tidak pantas oleh sebagian orang, itu memiliki kelebihan, dan bahkan jika itu sebenarnya tidak membantu, saya cenderung menerimanya sebagai fakta. Di kernel 4.x, udev secara acak mengganti nama antarmuka ethernet .. APA ?!
Victor
Anda tidak dapat mengandalkan kernel untuk perangkat penamaan yang persisten. Setidaknya udev memberi Anda kendali.
Emmanuel