¿Hay alguna solución para el error de Debian n.º 838871?
Problema:Quiero tener una configuración de red en Debian con las siguientes propiedades:
- Interfaz de red activada automáticamente cuando se conecta un cable
- arranca sin bloquearse durante mucho tiempo cuando no hay ningún cable conectado en el arranque
- no cambiar mi sistema de inicio
La forma estándar de hacer esto sería el siguiente fragmento en /etc/network/interfaces
:
allow-hotplug eth0
iface eth0 inet dhcp
Sin embargo, esto conduce al problema descrito en el informe de error vinculado:el proceso de arranque se bloquea durante>1 minuto cuando no hay ningún cable de red conectado con el siguiente mensaje:
configuring network interfaces... ifup: waiting for lock on /run/network/ifstate.eth0
Una solución dada en esta pregunta parece estar cambiando allow-hotplug
a auto
:
auto eth0
iface eth0 inet dhcp
Esto efectivamente hace que el mensaje de bloqueo de arranque desaparezca, sin embargo, el sistema ahora bloquea justo antes de que se muestre un aviso de inicio de sesión en tty1. Esta vez, dhclient está bloqueando porque intenta obtener una respuesta de dhcp en eth0, que no está conectado, y espera varios intentos de tiempo de espera. El indicador de inicio de sesión solo aparece después de que se agote el tiempo de espera de dhclient.
Para los usuarios con un DE gráfico, esto podría no ser un problema, ya que no necesitan iniciar sesión en tty1, sino que su DE arranca y nunca ven el mensaje dhclient.
Otra solución probablemente sería usar network-manager
. Idealmente, preferiría no usar el administrador de red, pero como último recurso, lo intenté. Sin embargo, en Debian Buster, la cadena de dependencia del administrador de red entra en conflicto con sysvinit-core
, que es mi sistema de inicio.
La última alternativa que me viene a la mente es no configurar eth0 en interfaces(5). Esto hace que todos los bloqueos de arranque desaparezcan, sin embargo, necesito ifup eth0
manualmente. después de conectar un cable ethernet.
¿Alguna idea mejor?
ACTUALIZACIÓN:para abordar la cita de @sourcejedi, se especifica "permitir conexión en caliente" para "iniciar la interfaz cuando el kernel detecta un evento de conexión en caliente desde la interfaz" en los documentos de Debian en la red de Debian. Preguntas relacionadas:¿Buena explicación detallada de la sintaxis de /etc/network/interfaces? y ¿Qué es un evento hotplug desde la interfaz?
Respuesta aceptada:
Antes de network-manager
, la conocida forma de "automáticamente ifup
la interfaz de red cuando se enchufa un cable” era ifplugd
. (Nota del autor original :-P). ifplugd
todavía está disponible en Debian. No tengo ninguna experiencia reciente con él.
En primer lugar, eliminaría el auto eth0
o allow hotplug eth0
línea de /etc/network/interfaces
. Aún necesitaría su línea iface eth0 inet dhcp
. (Esta línea depende del nombre de su interfaz de red y también si desea agregar compatibilidad con ipv6, etc.).
Para configurar ifplugd
para abrir la interfaz, edite /etc/default/ifplugd
para configurar INTERFACES=
para incluir el nombre de su interfaz de red. Alternativamente, sugiere que podría usar el valor auto
. no se que tan bien auto
funciona en cualquier sistema reciente :-).
https://manpages.debian.org/buster/ifplugd/ifplugd.conf.5.en.html
Esta característica nunca fue proporcionada por allow-hotplug
:
Tenga en cuenta que la verificación del estado del enlace no siempre ha estado allí y, en cualquier caso, solo se realizó en el momento del arranque. Nunca admitió el caso en el que no había ningún cable conectado en el arranque y en el que enchufaste el cable más tarde. — Mensaje #20
Las fuentes que contradicen esto simplemente están equivocadas. Si desea esta función, debe ejecutar un demonio que espera eventos de "enlace de red". [*] El ifupdown
de Debian El paquete no incluye ningún demonio. allow-hotplug
se basa en el demonio udev, que no lee los eventos de enlace de red necesarios.
El demonio udev solo lee eventos udev "hotplug" ("uevent"). No hay ningún "suceso" cuando un dispositivo Ethernet detecta un cambio de estado de enlace. Puede verificar esto usando udevadm monitor
.
Los desarrolladores del kernel de Linux tomaron la decisión deliberada de no proporcionar un "evento" para esto. Ver:Re:Q:netdev:generar kobject uevent en eventos de red.
[*] Pedante:técnicamente ifplugd
funciona sondeando el estado del enlace a intervalos regulares. Por lo tanto, no se basa necesariamente en eventos de "enlace de red". Esta distinción es señalada por netplug
, que sí use eventos de "enlace de red". netplug
no tiene las mismas funciones que ifplugd
.