1 votes

Comment faire pour que `ifup wlan0` retourne immédiatement si aucun bail dhcp ne peut être obtenu ?

J'ai un petit système embarqué sans fil basé sur Ubuntu 16.04. Si l'interface sans fil est mal configurée ou si le point d'accès est hors service, ifup wlan0 ne se terminera jamais parce que dhclient ne se démonétise pas avant d'avoir obtenu un bail. C'est un problème car ifdown wlan0 se bloque à cause de la serrure ifup tient toujours :

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

Comment puis-je résoudre ce problème ?

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

C'est grossier, mais si je dois le faire, je le ferai. Je préfère avoir une meilleure solution.

  • Option 2 : dhclient soutient un -nw l'option nowait, qui lui indique de se démoniser immédiatement, mais ifup ne l'utilise pas et il semble que la dhclient est codée en dur dans ifup via un fichier source nommé 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 : existe-t-il un moyen de faire en sorte que le dhcp soit contrôlé par le statut de wpa_supplicant ? Ainsi, dhclient ne s'exécuterait pas tant que wpa_supplicant n'a pas terminé l'association avec le point d'accès.

Informations supplémentaires :

/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
}

0voto

Taz8du29 Points 171

J'ai eu le même problème pendant un certain temps, et en faisant un simple :

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

J'ai tout corrigé sur mon ubuntu 17.04.

J'espère que cela vous aidera.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X