Hallo,
da ich mich noch nicht vorgestellt habe, möchte ich dies nun nachholen. VDR verwende ich seit 2003 in Verbindung mit LinVDR 0.4. Nachdem dann LinVDR 0.8 "gestorben" war, habe ich selbst mittels einer Debian Distribution und den "netten" Ideen von LinVDR (Busysbox, kleine Startscripts etc.) ein bootbares "Debian" zusammengestellt. Mittlerweile ist das natürlich viel zu alt, vor allem in Zeiten von HD. Somit bin ich dann auf MLD gestossen und bin begeistert. Modular aufgebaut, Update per Internet, die meißten Scripte sind Shell (ich hasse Perl und reguläre Ausdrücke). Alles fein...
Nun zum eigentlichen Thema:
@MarMic Die fehlenden Optionen für ath9k lassen sich nicht als Modul anwählen (habs mit make menuconfig gecheckt).
Da ich ein wenig Zeit hatte und es in den Räumen kälter war als draussen, habe ich mich mit wpa_supplicant beschäftigt. Heraus ist ein neues network-wireless gekommen, welches ich gern von der Community testen lassen würde (Frage: Wie läuft das hier?).
Folgendes habe ich hinzugefügt bzw. geändert:
MLD> cat /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
update_config=1
ap_scan=1
network={
ssid="any"
key_mgmt=NONE
}
MLD> cat /etc/init.d/network-wireless
#!/bin/sh
# /etc/init.d/network-wireless
# Installing wlan module
# status files in /tmp
TMP_DRIVERS=/tmp/network-wireless.drivers
TMP_INTERFACE=/tmp/network-wireless.interface
TMP_ISBUSY=/tmp/network-wireless.isbusy
TMP_CONNECTED=/tmp/network-wireless.connected
# functions
rcfWaitForIfUp() {
i=0
while [ $i -lt 5 ]; do
i=$(($i+1))
ifconfig | grep -q "$1" && break
sleep 1
done
}
rcfWaitForWpaState() {
i=0
while [ $i -lt 5 ]; do
wpa_cli -i"$1" status | grep -q "$2" && break
i=$(($i+1))
sleep 1
done
return=1
}
# end funtions
case "$1" in
start)
. /etc/init.d/rc.functions
test -e $TMP_ISBUSY && exit 0
echo "yes" > $TMP_ISBUSY
echo "Loading wireless network driver"
load_modules network-wireless "$NETWORK_WIRELESS_DRIVER" || failed
if ( check_status ); then
iwlan="$(iwconfig 2>/dev/null | grep "^S" | cut -d " " -f1)"
if [ -n "$iwlan" ]; then
echo -n "$iwlan" > $TMP_INTERFACE
echo "Starting wireless network"
ifconfig $iwlan up >>/dev/stdlog 2>/dev/null
rcfWaitForIfUp "$iwlan"
wpa_supplicant -i$iwlan -Dnl80211,wext -c/etc/wpa_supplicant.conf -B || failed
# wpa_supplicant -i$iwlan -Dnl80211,wext -c/etc/wpa_supplicant.conf -d -f/tmp/wlan.log -B || failed
check_status
# if the network "wlan wire" is configured
if [ -n "$NETWORK_WIRELESS_ESSID" ]; then
# waiting for switching from SCANNING->INACTIVE
rcfWaitForWpaState "$iwlan" "INACTIVE"
crypt=$(wpa_cli -i"$iwlan" scan_results | grep "$NETWORK_WIRELESS_ESSID" | sed "s/[[:cntrl:]]/#/g" | cut -d "#" -f4 | cut -c 2-4)
wpa_cli -i"$iwlan" disable_network 0 >/dev/null 2>&1
if [ -n "$crypt" ]; then
wpa_cli -i"$iwlan" set_network 0 ssid ""$NETWORK_WIRELESS_ESSID"" >/dev/null 2>&1
case "$crypt" in
WEP)
wpa_cli -i"$iwlan" set_network 0 wep_tx_keyidx 0 >/dev/null 2>&1
wpa_cli -i"$iwlan" set_network 0 wep_key0 "$NETWORK_WIRELESS_KEY" >/dev/null 2>&1
;;
WPA)
wpa_cli -i"$iwlan" set_network 0 key_mgmt WPA-PSK >/dev/null 2>&1
psk=$(wpa_passphrase "$NETWORK_WIRELESS_ESSID" "$NETWORK_WIRELESS_KEY" | sed "s/^[ t]*//" | grep "^psk=" | cut -d "=" -f2)
wpa_cli -i"$iwlan" set_network 0 psk "$psk" >/dev/null 2>&1
;;
*)
# TODO: wpa_supplicant can't handle Encryption "none"
echo "No Encryption"
exit 1
;;
esac
wpa_cli -i"$iwlan" enable_network 0 >/dev/null 2>&1
# waiting for connection is etablished
if ( rcfWaitForWpaState "$iwlan" "COMPLETED" ); then
echo "yes" > $TMP_CONNECTED
if [ "$NETWORK_WIRELESS_DHCP" = "1" ]; then
echo "Starting DHCP-client for wireless network"
udhcpc -qn -i $iwlan -H "w$HOST_NAME" >>/dev/stdlog 2>&1
fi
check_status
fi
fi
fi
fi
fi
test -e $TMP_ISBUSY && rm $TMP_ISBUSY
;;
stop)
. /etc/init.d/rc.functions
if [ -e $TMP_INTERFACE ]; then
echo "Disconnecting from wireless network"
test -e $TMP_CONNECTED && rm $TMP_CONNECTED
iwlan=$(cat $TMP_INTERFACE)
wpa_cli -i"$iwlan" terminate >/dev/null 2>&1
ifconfig "$iwlan" down >>/dev/stdlog 2>/dev/null || failed
check_status
rm $TMP_INTERFACE
fi
echo "Unloading wireless network drivers"
unload_modules network-wireless
check_status
;;
restart)
$0 stop
$0 start
;;
init)
start=1
before=network
;;
*)
echo "Usage $0 {start|stop|restart}" >&2
exit 1
;;
esac
Sowie wpa_cli und libreadline.so.6 "nachgeladen".
-rwxr-xr-x 1 root root 47776 Aug 19 18:52 /sbin/wpa_cli
lrwxrwxrwx 1 root root 18 Aug 19 17:47 /lib/libreadline.so.6 -> libreadline.so.6.2
-rw-r--r-- 1 root root 229488 Aug 19 17:47 /lib/libreadline.so.6.2
Mich würde nun interessieren, ob das Script auch mit anderen WLAN Modulen funktioniert und ob es überhaupt gewünscht ist.
Gruß Ralph