Frage Wie führe ich `ifup wlan0` sofort zurück, wenn kein DHCP-Leasing erhalten werden kann?


Ich habe ein kleines drahtloses Embedded-System basierend auf Ubuntu 16.04. Wenn die Wireless-Schnittstelle nicht richtig konfiguriert ist oder der Access Point nicht aktiv ist, ifup wlan0 wird nie enden, weil dhclient dämmt sich erst, nachdem es eine Lease erhalten hat. Dies ist ein Problem, weil ifdown wlan0 hängt wegen der Sperre ifup hält immer noch:

ifdown: waiting for lock on /run/network/ifstate.wlan0

Wie löse ich das?

  • Option 1: pkill -f 'ifup .*wlan0'; ifdown wlan0

Das ist grob, aber wenn ich das tun muss, werde ich es tun. Ich hätte lieber eine bessere Lösung.

  • Option 2: dhclient unterstützt a -nw, nowait, Option, die besagt, dass sie sofort dämonisieren soll, aber ifup benutzt es nicht und es scheint, dass die dhclient Befehl ist fest codiert ifup über eine Quelldatei namens inet.defn:

.

$ apt-get source ifupdown
$ grep -n 'dhclient -1' ifupdown-*/inet.defn | head -1
97:    /sbin/dhclient -1 -v -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases -I -df /var/lib/dhcp/dhclient6.%iface%.leases %iface% \
  • Option 3: Gibt es eine Möglichkeit, das Dhcp durch den Status von wpa_supplicant zu steuern? Dhclient würde nicht ausgeführt werden, bis wpa_supplicant die Zuordnung zum Zugriffspunkt abgeschlossen hat.

Zusatzinformation:

/etc/network/interfaces:

auto lo
iface lo inet loopback

# ifplugd configuration
mapping hotplug
script grep
map eth0
map wlan0

auto eth0
iface eth0 inet dhcp

auto wlan0
iface wlan0 inet dhcp
  wpa-driver wext
  wpa-conf /etc/wpa_supplicant.conf

/etc/wpa_supplicant.conf:

ctrl_interface=DIR=/var/run/wpa_supplicant

network={
   ssid="AccessPoint"
   scan_ssid=1
   proto=WPA RSN
   key_mgmt=WPA-PSK
   pairwise=CCMP TKIP
   group=CCMP TKIP
   psk="passphrase"
   priority=10
}
network={
   key_mgmt=NONE
   priority=0
   disabled=1
}

1
2018-02-14 20:43


Ursprung




Antworten:


Ich hatte das gleiche Problem für eine Weile und mache ein einfaches:

$ systemctl enable netctl.service
$ systemctl start netctl.service

Alles auf meinem Ubuntu 17.04 behoben.

Ich hoffe es hilft.


0
2017-09-23 06:15