如果无法获得 dhcp 租约,如何让 `ifup wlan0` 立即返回?

如果无法获得 dhcp 租约,如何让 `ifup wlan0` 立即返回?

我有一个基于 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支持-nwnowait 选项,该选项告诉它立即进行守护进程,但ifup不使用它,并且该命令似乎是通过名为的源文件dhclient硬编码的:ifupinet.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 上的所有问题。

希望能帮助到你。

相关内容