GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Debian-Workaround 838871:DHCP-Netzwerkkonfiguration ohne Blockierung des Startvorgangs?

Gibt es eine Problemumgehung für den Debian-Fehler #838871?

Problem:Ich möchte eine Netzwerkkonfiguration auf Debian mit den folgenden Eigenschaften haben:

  • Automatisches Öffnen der Netzwerkschnittstelle, wenn ein Kabel eingesteckt wird
  • bootet längere Zeit ohne zu blockieren, wenn beim Booten kein Kabel angeschlossen ist
  • ändere mein Init-System nicht

Der Standardweg dafür wäre das folgende Snippet in /etc/network/interfaces :

allow-hotplug eth0
iface eth0 inet dhcp

Allerdings führt dies zu dem im verlinkten Fehlerbericht beschriebenen Problem:Der Bootvorgang blockiert für>1min wenn kein Netzwerkkabel eingesteckt ist mit folgender Meldung:

configuring network interfaces... ifup: waiting for lock on /run/network/ifstate.eth0

Eine in dieser Frage angegebene Problemumgehung scheint das Ändern von allow-hotplug zu sein auf auto :

auto eth0
iface eth0 inet dhcp

Dadurch verschwindet die Boot-Blocking-Nachricht effektiv, aber das System blockiert jetzt, bevor eine Anmeldeaufforderung bei tty1 angezeigt wird. Dieses Mal blockiert dhclient, weil es versucht, eine DHCP-Antwort auf eth0 zu erhalten, das nicht verbunden ist, und auf mehrere Timeout-Versuche wartet. Die Anmeldeaufforderung erscheint nur nach den dhclient-Timeouts.

Für Benutzer mit einem grafischen DE ist dies möglicherweise kein Problem, da sie sich nicht bei tty1 anmelden müssen, stattdessen startet ihr DE und sie sehen nie die dhclient-Nachricht.

Eine andere Problemumgehung wäre wahrscheinlich die Verwendung von network-manager . Idealerweise würde ich es vorziehen, den Netzwerkmanager nicht zu verwenden, aber als letzten Ausweg habe ich das versucht. Unter Debian Buster steht die Abhängigkeitskette des Netzwerkmanagers jedoch in Konflikt mit sysvinit-core , das ist mein Init-System.

Die letzte Alternative, die mir einfällt, ist, eth0 nicht in Interfaces (5) zu konfigurieren. Dadurch verschwinden alle Boot-Blöcke, aber ich muss manuell ifup eth0 ausführen nach dem Einstecken eines Ethernet-Kabels.

Irgendwelche besseren Ideen?

UPDATE:Um das Zitat von @sourcejedi zu adressieren, ist „allow-hotplug“ in den Debian-Dokumenten unter Debian-Netzwerk so angegeben, dass „Schnittstelle starten, wenn der Kernel ein Hotplug-Ereignis von der Schnittstelle erkennt“. Verwandte Fragen:Gute detaillierte Erklärung der /etc/network/interfaces-Syntax? und Was ist ein Hotplug-Ereignis von der Schnittstelle?

Akzeptierte Antwort:

Vor network-manager , der bekannte Weg zum „automatischen ifup die Netzwerkschnittstelle, wenn ein Kabel eingesteckt ist“ war ifplugd . (Beachten Sie den ursprünglichen Autor :-P). ifplugd ist noch in Debian verfügbar. Ich habe keine neueren Erfahrungen damit.

Zuerst würden Sie auto eth0 entfernen oder allow hotplug eth0 Zeile aus /etc/network/interfaces . Sie bräuchten noch Ihre Zeile iface eth0 inet dhcp . (Diese Zeile hängt vom Namen Ihrer Netzwerkschnittstelle ab und auch davon, ob Sie IPv6-Unterstützung usw. hinzufügen möchten).

Um ifplugd zu konfigurieren Um die Schnittstelle aufzurufen, bearbeiten Sie /etc/default/ifplugd um INTERFACES= zu setzen um den Namen Ihrer Netzwerkschnittstelle einzufügen. Alternativ schlägt es vor, dass Sie den Wert auto verwenden könnten . Ich weiß nicht, wie gut auto funktioniert auf jedem neueren System :-).

Verwandte:Zeitüberschreitung beim Einschlafen festlegen, bevor die Netzwerkverbindung getrennt wird?

https://manpages.debian.org/buster/ifplugd/ifplugd.conf.5.en.html

Diese Funktion wurde von allow-hotplug nie bereitgestellt :

Beachten Sie, dass die Überprüfung des Verbindungsstatus nicht immer vorhanden war und in jedem Fall nur beim Booten durchgeführt wurde. Es wurde nie der Fall unterstützt, dass beim Booten kein Kabel angeschlossen war und Sie das Kabel zu einem späteren Zeitpunkt eingesteckt haben. — Nachricht Nr. 20

Die Quellen, die dem widersprechen, sind einfach falsch. Wenn Sie diese Funktion wünschen, müssen Sie einen Daemon ausführen, der auf „netlink“-Ereignisse wartet.[*] Der Debian ifupdown Paket enthält keinen Daemon. allow-hotplug stützt sich auf den udev-Daemon, der die notwendigen netlink-Ereignisse nicht liest.

Der udev-Daemon liest nur udev-„Hotplug“-Ereignisse („uevent“s). Es gibt kein „uevent“, wenn ein Ethernet-Gerät eine Änderung des Verbindungsstatus erkennt. Sie können dies mit udevadm monitor überprüfen .

Die Linux-Kernel-Entwickler haben sich bewusst dafür entschieden, kein „uevent“ dafür bereitzustellen. Siehe:Re:F:netdev:kobject uevent auf Netzwerkereignissen generieren.

[*] Pedant:technisch gesehen ifplugd funktioniert, indem es den Verbindungsstatus in regelmäßigen Abständen abfragt. Es ist also nicht unbedingt auf „netlink“-Ereignisse angewiesen. Auf diese Unterscheidung wird durch netplug hingewiesen , was macht Verwenden Sie „netlink“-Ereignisse. netplug hat nicht dieselben Funktionen wie ifplugd .


Debian
  1. So richten Sie eine statische IP-Adresse unter Debian Linux ein

  2. Linux-Grundlagen - Statische IP- und Netzwerkkonfiguration unter Debian Linux

  3. Debian – Wie versteckt man einen bestimmten Prozess?

  4. Installieren Sie Squid auf Debian 6 „Squeeze“

  5. DHCP-Konfigurationsdatei /etc/dhcp/dhcpd.conf erklärt

Installieren Sie Debian 9 (Stretch) über den PXE Network Boot Server

Installieren und konfigurieren Sie den ISC-DHCP-Server in Debian 9

Ändern Sie den Standardnetzwerknamen (ens33) in eth0 unter Debian 10 / Debian 9

Netzwerkkonfiguration in Debian 10

Asterisk auf Debian installieren

So installieren Sie Nginx unter Debian 10