Pyon's Diary
2006-04-16 舊 平成拾捌年彌生拾玖日 (日・曇) [長年日記]
ネツトワークに繋がら無く成つた。(bash (3.1_p16) + baselayout (1.11.14-r7))
けふ、いつもの樣に emerge -DNauv world をした後で計算機を再起動したらネツトワークに繋がら無く成つた。/var/log/kern.log を見ると以下の樣なメツセージが出力されてゐた。
Apr 16 14:37:20 www ndiswrapper: WPA support through 'ndiswrapper' interface is deprecated; use 'wext' interface
其れから三時間程、各種設定フアイルを弄つてみたが繋がる樣に成ら無い。Google で色々檢索してみたが、檢索語の選擇の仕方が惡いのか、仲々此と云つたサイトが見付から無い。其之樣な事をしてゐて、檢索で出て來たGentoo Forumsの頁を讀んでゐて、Gentoo Forums 内で檢索すれば何か出て來るかも知れ無いと思つた。
Gentoo Forums で「wpa_supplicant ndiswrapper」で檢索すると Gentoo Forums :: View topic - wpa_supplicant fails at startup と云ふのが出て來た。
其之頁の下の方で、Bash 3.1 を使用してゐるなら、Gentoo Forums :: View topic - bash breaks wpa_supplicant? を見ろ、と云ふ樣な事が書いて有つた。
改めて版を調べてみると、
- app-shells/bash 3.1_p16
- sys-apps/baselayout 1.11.14-r7
- net-wireless/wpa_supplicant 0.4.8
- net-wireless/ndiswrapper 1.13
と成つてゐた。
Gentoo Forums :: View topic - bash breaks wpa_supplicant? の貳番目の書込み(salivian)に依ると Bash 3.1 と古い版のものとでは、配列の取扱ひに違いが有るらしい。
apparently, 3.1 handles array assignments differently from the older versions.
take a look at /lib/rcscripts/net.modules.d/wpa_supplicant
change the line in wpa_supplicant_associated() to
local -a status=( $( wpa_cli -i${1} status | awk -F= '/^key_mgmt|^wpa_state|^EAP state/ { print ""$2"" }' ) )
partially fixes the problem for me ... it seems that certain double quotes(") are problematic ... the script will at least not running into a dead loop without grepping the associated status and time out.
[Gentoo Forums :: View topic - bash breaks wpa_supplicant?より引用]
其處に書いてある通りに/lib/rcscripts/net.modules.d/wpa_supplicantを修正して、/etc/init.d/net.wlan0 restartを實行するとネツトワークに繋がる樣に成つた。元のフアイルとの差分を以下に書いて置く。
> --- ._wpa_supplicant.20060416 2006-04-16 20:42:56.000000000 +0900
> +++ wpa_supplicant 2006-04-16 20:40:45.000000000 +0900
> @@ -99,7 +99,7 @@
> # Note that just because we are associated does not mean we are using the
> # correct encryption keys
> wpa_supplicant_associated() {
> - local -a status=( "$( wpa_cli -i${1} status | awk -F= '/^key_mgmt|^wpa_state|^EAP state/ { print "\""$2"\"" }' )" )
> + local -a status=( $( wpa_cli -i${1} status | awk -F= '/^key_mgmt|^wpa_state|^EAP state/ { print ""$2"" }' ) )
>
> case ${status[0]} in
> "NONE" ) [[ ${status[1]} == "ASSOCIATED" || ${status[1]} == "COMPLETED" ]] ;;
全然見當違ひの處を修正したりしてゐて、何時間も無駄に過ごして仕舞つた。
因みに Bug 130106 - wpa_supplicant _always_ times out on startup に上がつてゐた。
追記: (2006-04-18)
本日 emerge world したら baselayout の版が 1.11.14-r8 に上がつてゐた。
件の箇所が修正されてゐた。
> @@ -99,7 +99,8 @@
> # Note that just because we are associated does not mean we are using the
> # correct encryption keys
> wpa_supplicant_associated() {
> - local -a status=( "$( wpa_cli -i${1} status | awk -F= '/^key_mgmt|^wpa_state|^EAP state/ { print "\""$2"\"" }' )" )
> + local -a status
> + eval status=( $( wpa_cli -i"$1" status | awk -F= '/^key_mgmt|^wpa_state|^EAP state/ { print "\""$2"\"" }' ) )
>
> case ${status[0]} in
> "NONE" ) [[ ${status[1]} == "ASSOCIATED" || ${status[1]} == "COMPLETED" ]] ;;
> @@ -214,7 +215,8 @@
>
> # Set ESSID for essidnet and report
> ESSID=$( wpa_supplicant_get_essid ${iface} )
> - local -a status=( "$( wpa_cli -i${iface} status | awk -F= '/^bssid|^pairwise_cipher|^key_mgmt/ { print "\""$2"\"" }' )" )
> + local -a status
> + eval status=( $( wpa_cli -i"${iface}" status | awk -F= '/^bssid|^pairwise_cipher|^key_mgmt/ { print "\""$2"\"" }' ) )
> local mac=$( echo ${status[0]} | tr '[:lower:]' '[:upper:]' )
> einfo "${iface} connected to \"${ESSID//\\\\/\\\\}\" at ${mac}"
追記: (2006-04-19)
Bug 130106 は Bug 130104 の重複として解決處理されてゐた。