O stick da WLAN não está funcionando no momento da inicialização

4

Não estou conseguindo usar um FRITZ! WLAN USB Stick N para conectar meu Raspberry Pi 1B à minha rede sem fio. Eu vejo vários problemas, mas não consigo localizar e eliminar a causa raiz. O problema é reproduzível em um Raspberyy Pi 3B.

No final do processo de inicialização, a rede sem fio não está disponível, o dispositivo de rede é mostrado por ifconfig , mas sem endereço IP. iwconfig relatórios

wlan0     IEEE 802.11abgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off

Correção Manual (funciona)

Se eu trouxer wlan0 manualmente com ifup wlan0 , tudo funcionará bem e a máquina se conectará à minha rede (tentando deixar de fora coisas esperançosamente irrelevantes):

wpa_supplicant[854]: Successfully initialized wpa_supplicant
dhclient: Internet Systems Consortium DHCP Client 4.3.1
dhclient: DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 8
wpa_supplicant[855]: wlan0: Associated with xx:xx:xx:xx:xx:xx
wpa_supplicant[855]: wlan0: WPA: Key negotiation completed with xx:xx:xx:xx:xx:xx [PTK=CCMP GTK=CCMP]
[...]
wpa_supplicant[855]: wlan0: CTRL-EVENT-CONNECTED - Connection to xx:xx:xx:xx:xx:xx completed [id=0 id_str=]
dhcpcd[485]: wlan0: carrier acquired
wpa_supplicant[855]: wlan0: CTRL-EVENT-REGDOM-CHANGE init=COUNTRY_IE type=COUNTRY alpha2=DE
dhcpcd[485]: wlan0: adding address xxxx::xxxx:xxxx:xxxx:xxxx
dhcpcd[485]: wlan0: IAID 43:0d:1f:fd
dhcpcd[485]: wlan0: rebinding lease of xxx.xxx.x.xx
dhcpcd[485]: wlan0: soliciting an IPv6 router
dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
dhclient: bound to xxx.xxx.x.xx -- renewal in 335050 seconds.

No entanto, eu gostaria de deixar o sistema (sem cabeça) inicializar e conectar sem supervisão.

Hipótese

Talvez o problema seja que o pen drive USB muda sua identificação USB após carregar o firmware?

syslog me diz que o stick é reconhecido no início do processo de inicialização (t = 4.2s) com idVendor = 057c e idProduct = 84ff . Logo após (t = 5,3s), é detectado um CD-ROM SCSI com o rótulo "FRITZ! WLAN selfinstall 1.00 PQ: 0 ANSI: 0 CCS". Eu acho que o bastão em si fornece essa unidade para deixar a máquina carregar algum firmware de chip USB.

Em algum ponto entre t = 12s e t = 15,5s, _wpa_supplicant_ tenta exibir o dispositivo de rede, mas falha:

wpa_supplicant[264]: Successfully initialized wpa_supplicant
wpa_supplicant[264]: Could not read interface wlan0 flags: No such device 
wpa_supplicant[264]: nl80211: Driver does not support authentication/association or connect commands 
wpa_supplicant[264]: Could not read interface wlan0 flags: No such device 
wpa_supplicant[264]: WEXT: Could not set interface 'wlan0' UP 
wpa_supplicant[264]: wlan0: Failed to initialize driver interface networking[198]: Configuring network interfaces...wpa_supplicant: /sbin/wpa_supplicant daemon failed to start 
networking[198]: run-parts: /etc/network/if-pre-up.d/wpasupplicant exited with return code 1 
networking[198]: Failed to bring up wlan0.
networking[198]: done.

Muito mais tarde (t = 30s), o dispositivo USB desconecta e reconecta a exibição de idVendor = 057c, idProduct = 8401 . Logo após (t = 34.2s), o dhcpcd tenta novamente, mas não consegue se conectar à rede:

dhcpcd[484]: wlan0: adding address xxxx::xxxx:xxxx:xxxx:xxxx
dhcpcd[484]: wlan0: waiting for carrier
kernel: [   35.199371] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
khcpcd[484]: wlan0: carrier acquired
dhcpcd[484]: wlan0: IAID 43:0d:1f:fd
dhcpcd[484]: wlan0: carrier lost
dhcpcd[484]: wlan0: deleting address xxxx::xxxx:xxxx:xxxx:xxxx

Por que isso falha? Eu não consigo ter uma idéia adequada.

Sentado (não funciona)

Tentei configurar minha solução de fallback: deixar ifup wlan0 sendo chamado como serviço systemd . Criado /etc/systemd/system/fritz.wlan.service para iniciar um script de shell o mais tarde possível:

[Unit]
Description=Fritz WLAN Stick N
After=ntp.target multi-user.target
[Service]
Type=oneshot
ExecStartPre=/bin/sleep 5
ExecStart=/usr/local/bin/fritz.wlan.sh
[Install]
WantedBy=multi-user.target

e um script de shell /usr/local/bin/fritz.wlan.sh:

#!/bin/sh
/bin/sleep 660
iwconfig 2>&1 | grep ESSID:\"xxx > /dev/null || ifup wlan0 2>&1 >> /var/log/fritz.wlan.log

Isso não leva a sucesso. O script é iniciado logo após o multi-user.target. syslog informa que o dispositivo foi criado e que uma concessão de DHCP foi adquirida, mas logo depois, o kernel decide autenticar o dispositivo que desenrola a conexão inteira:

kernel: [  717.685006] wlan0: deauthenticating from e0:28:6d:37:3e:f5 by local choice (Reason: 3=DEAUTH_LEAVING)
dhcpcd[465]: wlan0: carrier lost
wpa_supplicant[1330]: wlan0: CTRL-EVENT-DISCONNECTED bssid=e0:28:6d:37:3e:f5 reason=3 locally_generated=1

Hrmph. Mais tarde, systemd informa que o processo de inicialização foi concluído. Não mais cedo. Bem, no entanto.

systemd[1]: Started Fritz WLAN Stick N.
systemd[1]: Startup finished in 3.332s (kernel) + 11min 54.388s (userspace) = 11min 57.720s.

Pode ser que o problema apareça quando ifup wlan0 é iniciado por systemd e não por um shell raiz interativo?

Hacky (mas trabalhando) Fallback

cron cria /var/run/fritz.wlan na hora da reinicialização. Outra tarefa cron permite que um script de shell verifique a existência desse arquivo a cada minuto. Para sempre ter um minuto de atraso, este script toca /var/run.fritz.wlan.2 e remove o primeiro arquivo e sai. Ao ser chamado no minuto seguinte com o segundo arquivo existente, o script chama ifup wlan0 , remove o segundo arquivo e sai.

Melhoria seria mesmo remover o cron job que dispara o script a cada minuto.

Ainda assim, gostaria de entender completamente o problema e encontrar uma solução adequada. Alguma sugestão?

    
por Twonky 26.02.2017 / 01:17

0 respostas