Как сделать так, чтобы `ifup wlan0` немедленно возвращался, если невозможно получить аренду dhcp?
У меня есть небольшая беспроводная встроенная система на основе Ubuntu 16.04. Если беспроводной интерфейс настроен неправильно или точка доступа не работает, ifup wlan0
никогда не закончится, потому что dhclient
не демонизирует себя, пока не получит аренду. Это проблема, потому что ifdown wlan0
зависает из-за блокировки ifup
все еще держит:
ifdown: waiting for lock on /run/network/ifstate.wlan0
Как мне это решить?
- Опция 1:
pkill -f 'ifup .*wlan0'; ifdown wlan0
Это грубо, но если мне придется это сделать, я сделаю это. Я бы предпочел лучшее решение.
- Вариант 2:
dhclient
поддерживает-nw
, nowait, опция, которая говорит ему немедленно демонизировать, ноifup
не использует его, и кажется, чтоdhclient
команда жестко запрограммирована вifup
через исходный файл с именем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% \
- Вариант 3: есть ли способ заставить dhcp контролироваться статусом от wpa_supplicant? Таким образом, dhclient не будет работать, пока wpa_supplicant не завершит сопоставление с точкой доступа.
Дополнительная информация:
/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 ответ
У меня была такая же проблема некоторое время, и я делал простое:
$ systemctl enable netctl.service
$ systemctl start netctl.service
Исправлено все на моем Ubuntu 17.04.
Надеюсь, поможет.