¿Existen alternativas al uso de `udev`?


16

Si bien entiendo la grandeza de udev y aprecio el esfuerzo de los desarrolladores, simplemente me preguntaba si hay una alternativa.

Por ejemplo, me imagino que debería haber una forma de crear un script de inicio que cree la mayoría de los nodos de dispositivos que en mi sistema (sin cambiar el hardware) son los mismos de todos modos.

El beneficio o la razón por la que me gustaría omitir udevsería el mismo que para omitir dbus, es decir, reducir la complejidad y, de ese modo, aumentar mis cambios para configurar el sistema de manera más segura.

Respuestas:


23

Hay varias alternativas a udevpor ahí. Aparentemente, Gentoo puede usar algo llamado mdev. Otra opción sería intentar usar udevel predecesor devfsd. Finalmente, siempre puede crear todos los archivos de dispositivo que necesita mknod.

Tenga en cuenta que con este último no hay necesidad de crear todo en el momento del arranque ya que los nodos se pueden crear en el disco y no en un sistema de archivos temporal como con las otras opciones. Por supuesto, pierde la flexibilidad de haber creado dinámicamente archivos de dispositivo cuando se conecta un nuevo hardware (por ejemplo, una memoria USB). Creo que el enfoque estándar en esta era era tener todos los archivos de dispositivos que podría necesitar razonablemente creados /dev(es decir, muchos archivos de dispositivos).

Por supuesto, la dificultad de lograr que cualquiera de estos enfoques funcione en una distribución moderna es probablemente bastante alta. La wiki de Gentoo menciona dificultades mdevpara trabajar con un entorno de escritorio (y mucho menos fuera de Gentoo). La última devfsdversión fue 2002, no tengo idea si funcionará con los núcleos modernos. La creación de los nodos manualmente es probablemente el enfoque más viable, pero incluso la desactivación udevpodría ser un desafío, particularmente en el uso de distos systemd( udevahora es parte de systemd, lo que sugiere una fuerte dependencia).

Mi consejo es seguir udev;)


1
¡Gracias! ¡Gran respuesta que abordó la mayoría de los aspectos de la pregunta, si no todos, y estaba llena de información! Me pregunto cómo resolver el problema de systemd ahora ... Veré cómo desenredar esto :)
humanityANDpeace

udevdebería funcionar perfectamente bien sin systemdque ambos se desarrollen dentro de la misma base de código, pero udevse pueden construir + ejecutar independientemente de él.
Elias Probst

@Elias, por supuesto, udevha existido por mucho más tiempo que de systemdtodos modos. La pregunta es, ¿puede systemdtrabajar sin él udev? Supongo que al menos tendría que volver a compilar con algún tipo de --without-udevopción.
Graeme

2
@Graeme: No, no puede. Es un poco como tratar de reducir la complejidad de un automóvil quitando las ruedas. Si está de acuerdo con arrancar con systemd (que hace mucho ), pero está muy preocupado por la complejidad de udev (que hace cada vez menos), entonces tiene las cosas realmente confusas.
user1686

@grawity Fair point, pero tal vez ni siquiera estoy tan bien con el arranque con systemd for init. tengo que echarle un vistazo
humanitypeace

22

Los núcleos modernos de Linux son compatibles con el devtmpfssistema de archivos (no confunda con los antiguos devfs) , que crea todos los nodos de dispositivos dinámicamente tan pronto como el núcleo los descubre. (De hecho, las últimas udevversiones requieren esto; encontrará que udev ya no crea ningún nodo de dispositivo, solo enlaces simbólicos).

Del mismo modo, la carga de firmware también se ha trasladado al kernel, por lo que las únicas tareas restantes udevson la carga de módulos (según las modalidades) y la aplicación de permisos de dispositivos y otras reglas de udev.

Entonces, en teoría, un núcleo completamente monolítico debería arrancar bien sin udev.

Sin embargo, el verdadero problema aquí es lo que sucede más tarde.

  1. Muchos programas de espacio de usuario confían en que udev mantenga su base de datos de dispositivos, accesible a través de libudev. Si bien la enumeración de dispositivos y la escucha de eventos agregados / eliminados se pueden hacer directamente utilizando las interfaces del kernel (sysfs y netlink), aún se quedará sin todos los metadatos que varias reglas de udev han adjuntado.

  2. udev reglas también mantienen varios enlaces simbólicos "persistentes" en /dev/disk/by-*, /dev/mapper, /dev/input/by-path, /dev/snd/by-path, y así sucesivamente. Por ejemplo, si tiene dos discos conectados, no hay garantía de que el primero siempre sea sdao sdb, pero udev asegura que los enlaces simbólicos /dev/disk/by-uuidcontinuarán apuntando al correcto.

  3. Si bien los núcleos de dispositivos ahora son creados por el kernel y, por lo tanto, ya no son de su incumbencia, es importante tener en cuenta que algunos tipos de dispositivos han comenzado a usar números mayores / menores asignados dinámicamente, por lo que aunque tenga 10,228 /dev/fusey /dev/hpet10,229 hoy, lo harán tener números diferentes después de cada reinicio, por lo que devtmpfso bien (en sistemas más antiguos) se requiere un programa que escuche eventos .

Muchas de estas cosas podrían ser fácilmente realizadas por otros programas como mdev, por supuesto. Mi punto es que un /etc/MAKEDEVscript estático ya no funcionará ...


Entonces, básicamente, cuando se trata de la complejidad del arranque, udev es probablemente la menor de sus preocupaciones.


Interesante, ¿sabes qué versión del kernel introduce la creación dinámica de nodos?
Graeme


12

Hay varias alternativas:

  • Basta con tener un conjunto de apropiados chmod, chown, ln, y cosas por el estilo comandos en un script que se ejecuta como parte de la rutina de carga.
  • Use systemd-udev, el administrador plug-and-play que forma parte del proyecto systemd.
  • Utilice Gentoo'seudev , que es una bifurcación de la systemd-udevque systemd ahora se ha desviado significativamente.
  • Use Devuan'svdev , que es un administrador plug-and-play desarrollado por Jude Nelson, que es parte de Devuan.
  • Uso mdev, que contrario a otra respuesta no es una cosa de Gentoo. Es el administrador plug-and-play integrado en BusyBox .
  • Utilice Suckless,mdev que es un administrador plug-and-play desarrollado por Dimitris Papastamos.
  • Use Laurent Bercot'smdevd , que es una configuración compatible con BusyBox mdevpero que maneja su propio socket y no comprende el protocolo LISTEN.

Todos estos, aparte del primero, requieren conjuntos de reglas que describen cómo reaccionar ante los eventos de notificación del núcleo sobre los dispositivos. Obviamente.

También hay herramientas que tomarán programas diseñados para /proc/sys/kernel/hotplug, como los dos mdevs, y que los adaptarán y serializarán al escuchar un socket de enlace de red y luego generar esos programas:


6

udev? La mejor alternativa es no usarlo. Y al aprender a no usarlo, Linux y el mundo * NIX comenzarán a tener un sentido más lógico.

La mejor alternativa a largo plazo es usar dispositivos estáticos (ver nota). Si tiene el controlador, el kernel de Linux gestiona la conexión en caliente. Prefiero no tener udevd funcionando, nunca.

dbus es otro asunto. Sí ralentiza su sistema, pero al mundo en constante cambio de los guionistas les encanta. Por lo tanto, muchas cosas a las que está acostumbrado, como los navegadores web o las aplicaciones con backends de script, deben repararse (iniciarse o reconstruirse sin esas cosas o volcarse para otra aplicación).

Nota: Si solo está conectando una unidad flash o un dispositivo de DVD, use dmesg|tailpara ver el nombre del dispositivo a montar. Aprender cuando un dispositivo es un personaje o un dispositivo de bloque es un conocimiento fundamental del sistema en el mundo del hardware informático. En Linux es de código abierto, mira esto mucho sobre Linux, no solo incrustado . Es lo mejor para una comprensión más amplia de la lógica directa (no filosofía) de todos los * NIX, como Linux (Solaris, HPUX, AIX, etc.).

Udev, dbus, gconf / dconf, systemd, gnome-shell, Gnome, Glib, mono y Fedora son para personas con mucho tiempo en sus manos que no pueden RTFM, o que desean una actualización automática realmente ingeniosa pero más lenta que melaza, buggy, a mitad de camino Linux. (Un lugar realmente horrible, busca toneladas de experiencias similares en la web).

El sistema arranca y luego ejecuta udevd. Pero, se afirma que udev es necesario porque, los números menores del dispositivo will changeal reiniciar. La razón de ser de Udev parece contradecirse a cada paso. Y dónde están los archivos parece estar siempre mal, sin importar a quién consultes. No confíes en freedesktop.org.

Además de que udev está siendo absorbido por ese horror conocido como systemd, no sé qué se hace con los / etc / udev junk entonces. Y, es fatuo decir que escribir reglas udev es de alguna manera mejor que nada. La gente de gentoo parece querer aferrarse a él y no tener que tener systemd, por lo que se lo han bifurcado a eudev.

Si desea un sistema ridículamente rápido y sin sorpresas desagradables, use los conceptos básicos de Linux.


66
Esto es más una queja que una respuesta ...
jasonwryan

2
@jasonwryan de alguna manera sí, aún hay algo de valor ya que aconseja algunas formas de manejar manualmente esas tareas que normalmente están cubiertas en la udevfuncionalidad. También está bien señalar las fortalezas de este enfoque alternativo .
humanityANDpeace

1
Votó esto. La razón es que, aunque estoy completamente de acuerdo en que el estilo puede ser considerado inapropiado por algunos, tiene sus méritos, e incluso si no es realmente útil, tiendo a aceptarlo como un hecho. En el kernel 4.x, udev renombra aleatoriamente las interfaces de ethernet. ¡¿QUÉ ?!
Victor

No puede confiar en el kernel para dispositivos con nombres persistentes. Al menos udev te da el control.
Emmanuel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.