Squeezebox Radio

Im Oktober 2006 kam die Ankündigung, dass Slimdevices an Logitech verkauft wird. Damals war das Ende eigentlich schon absehbar. Das Sterben dauerte dann doch noch 6 Jahre aber zur IFA2012 war es dann soweit. Vermutlich um die Lager zu räumen, gab es das Squeezebox Radio für 99€ beim Promarkt. Da habe ich dann doch nochmal zugeschlagen. Jaja ich weiß tote Pferde und so....

"Das Logitech Squeezebox Radio vereint die Möglichkeiten des Internets mit der Einfachheit altmodischer Radios. Anschließen, einschalten und Musikquelle auswählen: kostenloses Internetradio, Musikdienste oder Ihre persönlich digitale Musiksammlung."

So tönt der Werbetexter und zum Teil hat er recht, einfach und altmodisch stimmt mit Sicherheit. An den miesen Leistungsumfang bei den WLAN Sicherheitsfeatures in Consumer Produkten ist man ja inzwischen gewöhnt. Wenn man sein WLAN zu Hause nicht per WEP oder WPA-PSK absichert, kann man 99,9% der Geräte mit WLAN unbesehen im Laden stehen lassen. Da ich was die Netzwerksicherheit angeht etwas paranoid bin ist mein WLAN mit EAP-PEAP(MSCHAPv2) gesichert. Deswegen hatte ich mich schon damit abgefunden an den zukünftigen Einsatzort des Squeezebox Radios ein LAN-Kabel zu legen.

Den Squeezebox Controller z.B. hatte ich mir damals nur gekauft, weil darauf Linux läuft und man den wpa_supplicant zumindest manuell dazu bringen konnte EAP-PEAP zu sprechen. Leider hat Logitech später bei irgendeinem Update dieses Feature über Bord geworfen. Das Binary mit dem EAP Support konnte man aber weiterverwenden.

Nachdem das Radio in Betrieb genommen und einer genaueren Inspektion unterzogen worden war stellte sich heraus, dass darauf die gleiche Software läuft wie auf dem Squeezebox Controller. Das Stück Software heisst SqueezeOS. Also sollte es doch prinzipiell möglich sein mit dem selben Trick der den Squeezebox Controller ins WLAN bringt auch das Radio zu verbinden. Leider klappt das nicht, denn im Controller tickt ein WLAN Modul von Marvell und im Radio eins von Atheros und damit ist der wpa_supplicant vom Controller nicht verwendbar. Da jetzt aber prinzipiell die Möglichkeit bestand das Bohren von Löchern und das Verlegen von Kabeln durch den Einsatz eines kleinen Programmes zu umgehen war mein Ehrgeiz geweckt.

Build-Umgebung

Weil im Squeezebox Radio ein ARM Prozessor tickt sind ein paar Vorbereitungen notwendig um Programme dafür kompilieren zu können. Glücklicherweise stellt Logitech den Bausatz für eine Build-Umgebung für das SqueezeOS bereit. Als Basis dient hierfür eine Ubuntu Linux der Version 10.04. Wie das installiert wird werde ich hier nicht beschreiben dazu gibt es genug Anleitungen im Netz. Nach Abschluss der Installation habe ich erstmal alle verfügbaren Updates installiert und das System neu gestartet. Danach müssen noch ein paar zusätzliche Programme installiert werden.

sudo apt-get install build-essential python diffstat texinfo texi2html cvs subversion wget gawk help2man gcc-4.4 libx11-dev libsdl1.2-dev xmlto curl libcurl4-openssl-dev zip subversion python-psyco

Logitech empfiehlt den Link von /bin/sh auf /bin/dash nach /bin/bash zu verändern.

cd /bin
sudo rm sh
sudo ln -s bash sh

Ich bin mir zwar nicht sicher ob es wirklich notwendig ist aber ich habe noch einen Symlink von gcc-3.4 nach gcc-4.4 gelegt.

cd /usr/bin
sudo ln -s gcc-4.4 gcc-3.4
Die mmap minimum address muss auch modifiziert werden. Diese Änderung übersteht einen Reboot nicht. Solltet ihr also zwischendrin euren Rechner neu starten, muss dieser Wert erneut gesetzt werden.

sudo sh -c 'echo "0" > /proc/sys/vm/mmap_min_addr'

Die Build-Umgebung wird mit poky gebaut das holen wir uns jetzt aus dem SVN von Logitech. Root Rechte werden nicht gebraucht ich habe das alles in meinem Home-Verzeichnis erledigt.

cd ~
svn co http://svn.slimdevices.com/repos/jive/7.7/trunk

Nun kann es losgehen.

cd ~/trunk/squeezeos/poky
source poky-init-build-env
bitbake squeezeos-image

Bei mir hat poky die Datei fakeroot_1.9.4.tar.gz nicht herunterladen können. Man kann die Datei aber manuell herunterladen und nach ~/trunk/squeezeos/poky/sources kopieren.

wget -O ~/trunk/squeezeos/poky/sources/fakeroot_1.9.4.tar.gz http://downloads.foonas.org/sources/fakeroot_1.9.4.tar.gz

Danach bitbake nochmal starten. Nun könnt ihr erstmal spazieren gehen das dauert jetzt ne Weile. Wenn ich sage spazieren gehen, dann meine ich Marathon und ne Weile heißt 4 Stunden. Danach haben wir einen C-Compiler für ARM. Der liegt unter ~/trunk/squeezeos/poky/build/tmp-jive/cross/armv5te/bin/ um uns zukünftig etwas Schreibarbeit zu ersparen nehmen wir diesen Ordner in $PATH auf. Dazu editieren wir die Datei ~/.profile und schreiben folgendes hinten dran.

~/.profile if [ -d "$HOME/trunk/squeezeos/poky/build/tmp-jive/cross/armv5te/bin" ] ; then
PATH="$PATH:$HOME/trunk/squeezeos/poky/build/tmp-jive/cross/armv5te/bin"
fi

Wer nicht rebooten möchte tippt jetzt:

source ~/.profile

OpenSSL

Damit sind alle Vorbereitungen abgeschlossen und wir können uns der eigentlichen Aufgabe zuwenden. Als erstes brauchen wir OpenSSL für ARM. Die aktuelle Version ist die 1.0.1c (Stand 7.10.2012). Also erstmal runterladen und auspacken.

cd ~
wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
tar xzf openssl-1.0.1c.tar.gz
cd openssl-1.0.1c

Jetzt muss das Makefile vorbereitet werden.

./Configure linux-generic32

Im Makefile müssen wir dann ab Zeile 62 die Einträge für Compiler, Linker, GNU ar, GNU nm und ranlib editieren.

Makefile CC= arm-none-linux-gnueabi-gcc
CFLAG= -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIO -O3 -fomit-frame-pointer -Wall
DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_STORE
PEX_LIBS=
EX_LIBS= -ldl
EXE_EXT=
ARFLAGS=
AR= arm-none-linux-gnueabi-ar $(ARFLAGS) r
RANLIB= arm-none-linux-gnueabi-ranlib
NM= arm-none-linux-gnueabi-nm
PERL= /usr/bin/perl
TAR= tar
TARFLAGS= --no-recursion
MAKEDEPPROG= arm-none-linux-gnueabi-gcc

Nun können wir OpenSSL mit make zusammenbauen.

make

wpa_supplicant

Nachdem wir OpenSSL fertig haben können wir uns dem wpa_supplicant zuwenden. Ich verwende hier nicht die aktuellste Version, denn die hat Abhängigkeiten zur Netlink Protocol Library Suite (libnl) und die wollte ich nicht auch noch lösen. Ich verwende daher die Version 0.6.9 das ist die, die auch Logitech auf den Geräten einsetzt. Auch hier gilt erstmal runterladen und auspacken.

cd ~
wget http://hostap.epitest.fi/releases/wpa_supplicant-0.6.9.tar.gz
tar xzf wpa_supplicant-0.6.9.tar.gz
cd wpa_supplicant-0.6.9/wpa_supplicant

Das Makefile brauchen wir diesmal nicht anzufassen hier passiert alles über eine separate Konfigurationsdatei. Eine Vorlage liegt bereits im Ordner und muss nur umbenannt werden.

cp defconfig .config

Die .config Datei müssen wir jetzt aber doch editieren. Wichtig sind hier die Variablen CFLAGS, LIBS, LDFLAGS und CC die wir ab Zeile 17 einfügen.

.config CFLAGS += -I$$HOME/openssl-1.0.1c/include
LIBS += -L$$HOME/openssl-1.0.1c
LDFLAGS += -L$$HOME/openssl-1.0.1c -ldl
CC=arm-none-linux-gnueabi-gcc

Jetzt schalten wir noch die unnötigen Treiber aus.

.config #CONFIG_DRIVER_HOSTAP=n
#CONFIG_DRIVER_ATMEL=n
#CONFIG_DRIVER_WIRED=n
#CONFIG_DRIVER_IPW=n

Nun können wir auch wpa_supplicant mit make zusammenbauen.

make

Danach sollten wir in dem Ordner die drei Dateien: wpa_supplicant, wpa_cli und wpa_passphrase vorfinden

Installation auf dem Squeezebox Radio

Jetzt sind wir schon fast am Ziel was bleibt ist die neuen Dateien auf das Radio zu kopieren und die WLAN Konfiguration anzupassen. Da das Radio momentan nur einfache WLAN Verschlüsselungen beherrscht benutzen wir einen WLAN Accesspoint mit WPA-PSK und der gleichen SSID wie später im Regelbetrieb. Der Netzwerkname(ESSID) sollte sich nicht ändern, denn das Radio merkt sich diesen Namen intern an mehreren Stellen und es ist zusätzlicher Aufwand das alles zu verändern. Als erstes setzen wir das Radio auf die Werkseinstellungen zurück. Dazu das Netzteil abziehen den MORE(+) Button drücken, gedrückt halten, nun das Netzteil wieder anschließen und warten.

Zurücksetzen auf Werkseinstellung

Jetzt den Setup Dialog durcharbeiten. Also Sprache auswählen und das Radio am temporären WLAN Accesspoint per WPA-PSK anmelden.

Sprache auswählenSprache wird geladenVerbindungstyp auswählenNetzwerkname auswählenKwennwort eingebenVerbindung wird hergestellt

War das erfolgreich müssen wir noch den Zugriff per SSH auf das Radio freischalten.

Menü Einstellungen auswählenErweiterte Einstellungen auswählenRemote Anmeldung auswählenSSH Zugang einschaltenSSH aktiv

Jetzt können wir per SSH auf die Kommandozeile des Linux Betriebssystems auf dem Radio zugreifen. Dazu verwenden wir die im letzten Bild angegebene IP Adresse, den Benutzernamen 'root' und das Passwort '1234'. Wenn das geklappt habt begrüßt uns das System mit dieser netten und wohl nicht ganz ernst gemeinten Warnung.

This network device is for authorized use only. Unauthorized or improper use
of this system may result in you hearing very bad music. If you do not consent
to these terms, LOG OFF IMMEDIATELY.

Ha, only joking. Now you have logged in feel free to change your root password
using the 'passwd' command. You can safely modify any of the files on this
system. A factory reset (press and hold add on power on) will remove all your
modifications and revert to the installed firmware.

Enjoy!

Als erstes schaffen wir den alten wpa_supplicant beiseite und ersetzen ihn durch den Neuen. Danach müssen wir die neue Version noch ausführbar machen. Ich habe die 3 Dateien des neuen wpa_supplicant bei mir im LAN auf einem Webserver abgelegt auf den das Radio zugreifen kann. Solltet ihr keinen solchen Server haben, es gibt diverse kleine Programme auch für Windows.

# cd /usr/sbin/
# mv wpa_cli wpa_cli.old
# mv wpa_supplicant wpa_supplicant.old
# wget http://192.168.1.123/SBR_wpa_supplicant/wpa_cli
Connecting to 192.168.1.123 (192.168.1.123:80)
wpa_cli 100% |***********************************************************************| 79096 00:00:00 ETA


# wget http://192.168.1.123/SBR_wpa_supplicant/wpa_passphrase
Connecting to 192.168.1.123 (192.168.1.123:80)
wpa_passphrase 100% |***********************************************************************| 1298k 00:00:00 ETA


# wget http://192.168.1.123/SBR_wpa_supplicant/wpa_supplicant
Connecting to 192.168.1.123 (192.168.1.123:80)
wpa_supplicant 100% |***********************************************************************| 2666k 00:00:00 ETA


# chmod 755 wpa*

Jetzt muss noch die Konfigurationsdatei für den wpa_supplicant ausgetauscht werden.

# cd /etc/
# mv wpa_supplicant.conf wpa_supplicant.conf.old
# wget http://192.168.1.123/SBR_wpa_supplicant/wpa_supplicant.conf
Connecting to 192.168.1.123 (192.168.1.123.2:80)
wpa_supplicant.conf 100% |***********************************************************************| 204 --:--:-- ETA

Die Konfiguration für ein WLAN mit WPA2-Enterprise und EAP-PEAP mit MS-CHAPv2 sieht folgendermaßen aus.

wpa_supplicant.conf ctrl_interface=/var/run/wpa_supplicant
update_config=1

network={
    ssid="WLAN-Name"
    scan_ssid=1
    proto=RSN
    key_mgmt=WPA-EAP
    pairwise=CCMP
    eap=PEAP
    identity="Benutzername"
    password="PasSwOrT"
}

Jetzt muss man das Radio nur neu starten.

Fertig!

Et voilà!

Kommentare:

Andy am 09.01.2015 - 18:25
Uff, ich hatte da so meine Schwierigkeiten.. Es muss wirklich alles passen - Ubuntu 10.04, nix anderes, genug (virtuellen) Festplattenplatz - ich habe auf 14 GB gestellt, nachdem's mal eienn Fehler bezüglich Disk Space gab (trotz genug freiem Platz eigtl.)

Dann sollte es aber nach und nach klappen ;) Zum Debuggen habe ich zwischendurch mal per Ethernet verbunden und folgende Befehle ausgeführt:
iwlist scanning
wpa_supplicant -i eth1 -D wext -c /etc/wpa_supplicant.conf -d

Wer so wie ich mit Zertifikaten arbeitet muss in der Config-Datei noch folgende Dinge einpflanzen, sofern er das so nutzt. Das KEY-File habe ich in PKCS8 umgewandelt, da es davor Fehlermeldungen gab:

key_mgmt=WPA-EAP
group=CCMP TKIP
pairwise=CCMP TKIP
eap=TLS
proto=WPA2
identity="NAME unter dem uns der RADIUS Server kennt"
ca_cert="/etc/certs/ca.crt"
client_cert="/etc/certs/Client.crt"
private_key="/etc/certs/Client_PKCS8.pem"
private_key_passwd="PASSWORT"
dh_file="/etc/certs/dh2048.pem" # nur falls im Einsatz

fedja am 15.05.2013 - 17:20
Schöne Anleitung! Hat problemlos funktioniert!!

btw... falls Ihr den Netzwerkname(ESSID) nachträglich anpassen müsst/wollt einfach die Dateien /etc/network/interfaces und /var/run/ifstate entsprechend editieren und das Radio neu starten.

 Kommentieren Sie diesen Artikel 
Ihr Name:
Ihre E-Mail-Adresse:
   optional
Ihr Kommentar:
 
This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)