Existe-t-il une solution de contournement pour le bogue Debian #838871 ?
Problème :Je souhaite avoir une configuration réseau sur Debian avec les propriétés suivantes :
- Activer automatiquement l'interface réseau lorsqu'un câble est branché
- démarre sans bloquer pendant une longue période lorsqu'aucun câble n'est connecté au démarrage
- ne change pas mon système d'initialisation
La manière standard de le faire serait l'extrait suivant dans /etc/network/interfaces
:
allow-hotplug eth0
iface eth0 inet dhcp
Cependant, cela conduit au problème décrit dans le rapport de bogue lié :le processus de démarrage se bloque pendant> 1 min lorsqu'aucun câble réseau n'est branché avec le message suivant :
configuring network interfaces... ifup: waiting for lock on /run/network/ifstate.eth0
Une solution de contournement donnée dans cette question semble changer allow-hotplug
à auto
:
auto eth0
iface eth0 inet dhcp
Cela fait effectivement disparaître le message de blocage de démarrage, cependant, le système se bloque maintenant juste avant qu'une invite de connexion ne s'affiche sur tty1. Cette fois, dhclient bloque car il essaie d'obtenir une réponse DHCP sur eth0, qui n'est pas connecté, et attend plusieurs tentatives d'expiration. L'invite de connexion n'apparaît qu'après l'expiration du délai dhclient.
Pour les utilisateurs avec un DE graphique, cela pourrait ne pas être un problème, car ils n'ont pas besoin de se connecter sur tty1, à la place leur DE démarre et ils ne voient jamais le message dhclient.
Une autre solution serait probablement d'utiliser network-manager
. Idéalement, je préférerais ne pas utiliser networkmanager, mais en dernier recours, j'ai essayé cela. Cependant, sur Debian buster, la chaîne de dépendance du gestionnaire de réseau entre en conflit avec sysvinit-core
, qui est mon système d'initialisation.
La dernière alternative qui me vient à l'esprit est de ne pas configurer eth0 dans interfaces(5). Cela fait disparaître tous les blocs de démarrage, cependant, je dois manuellement ifup eth0
après avoir branché un câble Ethernet.
Avez-vous de meilleures idées ?
MISE À JOUR :Pour répondre à la citation de @sourcejedi, "allow-hotplug" est spécifié pour "démarrer l'interface lorsque le noyau détecte un événement hotplug à partir de l'interface" dans la documentation Debian sous Debian networking. Questions connexes :Bonne explication détaillée de la syntaxe /etc/network/interfaces ? et Qu'est-ce qu'un événement hotplug de l'interface ?
Réponse acceptée :
Avant network-manager
, la méthode bien connue pour "automatiquement ifup
l'interface réseau lorsqu'un câble est branché" était ifplugd
. (Notez l'auteur original :-P). ifplugd
est toujours disponible dans Debian. Je n'ai aucune expérience récente avec cela.
Tout d'abord, vous supprimeriez le auto eth0
ou allow hotplug eth0
ligne de /etc/network/interfaces
. Vous auriez toujours besoin de votre ligne iface eth0 inet dhcp
. (Cette ligne dépend du nom de votre interface réseau, et aussi si vous souhaitez ajouter le support ipv6, etc.).
Pour configurer ifplugd
pour afficher l'interface, modifiez /etc/default/ifplugd
pour définir INTERFACES=
pour inclure le nom de votre interface réseau. Alternativement, cela suggère que vous pouvez utiliser la valeur auto
. Je ne sais pas à quel point auto
fonctionne sur n'importe quel système récent :-).
https://manpages.debian.org/buster/ifplugd/ifplugd.conf.5.en.html
Cette fonctionnalité n'a jamais été fournie par allow-hotplug
:
Notez que la vérification de l'état des liens n'a pas toujours été là, et en tout cas n'a été effectuée qu'au démarrage. Il n'a jamais pris en charge le cas où aucun câble n'était connecté au démarrage et où vous avez branché le câble ultérieurement. —Message #20
Les sources qui contredisent cela sont tout simplement fausses. Si vous voulez cette fonctionnalité, vous devez exécuter un démon qui attend les événements "netlink".[*] La Debian ifupdown
Le package n'inclut aucun démon. allow-hotplug
s'appuie sur le démon udev, qui ne lit pas les événements netlink nécessaires.
Le démon udev ne lit que les événements « hotplug » udev (« uevent »). Il n'y a pas d'"événement" lorsqu'un périphérique Ethernet détecte un changement d'état de liaison. Vous pouvez le vérifier en utilisant udevadm monitor
.
Les développeurs du noyau Linux ont pris la décision délibérée de ne pas fournir d'"événement" pour cela. Voir :Re :Q :netdev :génère un uevent kobject sur les événements réseau.
[*] Pédant :techniquement ifplugd
fonctionne en interrogeant l'état du lien à intervalles réguliers. Il ne repose donc pas nécessairement sur des événements « netlink ». Cette distinction est soulignée par netplug
, ce qui fait utiliser les événements "netlink". netplug
n'a pas toutes les mêmes fonctionnalités que ifplugd
.