Como posso fazer com que o 'ifup wlan0' retorne imediatamente se não for possível obter uma concessão de dhcp?

1

Eu tenho um pequeno sistema embarcado sem fio baseado no Ubuntu 16.04. Se a interface sem fio estiver configurada incorretamente ou o ponto de acesso estiver inoperante, ifup wlan0 nunca será concluído porque dhclient não se daemoniza até depois de obter uma concessão. Isso é um problema porque ifdown wlan0 trava devido ao bloqueio que ifup ainda mantém:

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

Como eu resolvo isso?

  • Opção 1: pkill -f 'ifup .*wlan0'; ifdown wlan0

Isso é grosseiro, mas se eu tiver que fazer isso, eu vou. Eu prefiro ter uma solução melhor.

  • Opção 2: dhclient suporta uma opção -nw , nowait, que avisa para daemonizar imediatamente, mas ifup não o usa e parece que o comando dhclient está codificado em ifup via um arquivo de origem chamado 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% \
  • Opção 3: existe uma maneira de fazer com que o dhcp seja controlado pelo status de wpa_supplicant? Portanto, o dhclient não seria executado até que o wpa_supplicant concluísse a associação ao ponto de acesso.

Informação extra:

/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
}
    
por Harvey 14.02.2017 / 21:43

1 resposta

0

Eu tive o mesmo problema por um tempo e fazendo um simples:

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

Corrigido tudo no meu Ubuntu 17.04.

Espero que ajude.

    
por Taz8du29 23.09.2017 / 08:15