…illetve dehogyis, hát nem olvastad a címet, kis butus?
A süti majd jön valamikor a közeljövőben, most inkább hackeljünk!
Az ötlet elég régóta motoszkál a fejemben: olyan konykakész megoldást akarok, amiből kilóg egy audio out és egy tápcsatlakozó és az eszköz AirPlay serverként funkcionál, azaz küldhetek drótok nélkül az ő audio portjára zenét. Az ilyen dobozkát be lehet építeni az autóba, vagy akár egy aktív hangfal dobozába és kész a wireless audio stream bárhol. Nézzük, mire jutottam.
Kétféle megoldást fogok megmutatni – mindkettő járt már a fejemben elég régóta. Az érdekes az, hogy mindkét ötletet implementálták már korábban, vannak is róluk többé-kevésbé használható leírások, én mégis összeszedem ide a saját tapasztalataimat, mert szerintem több szempontból is megéri.
“No time Tolouse” hack: Airport Express vérének kiontása teliholdkor
Az első ötletet a
lifehacker dokumentálta precízen. Ennek a lényege, hogy egy gyári Apple Airport Expresst kinyitunk, a nagyfeszültségű tápot kiszedjük és a helyére egy 5V-3.3V átalakítóval egy USB aljzatot kötünk, amit megtáplálunk egy mezei szivargyújtós USB tápkábellel. Az Airport Expresst az asztalon felkonfiguráljuk, aztán mehet a kocsiba, vagy akár a nappaliba bárhova (ez utóbbi esetben nyilván nincs sok értelme annak, hogy szétbarmoljuk a pöpec kis Apple hardvert).
Hozzávalók és költségek
- Airport Express: ~32000 HUF
- USB drót: ~500 HUF
- 5V-3.3V átalakító: ~1000 HUF
- szivargyújtós USB töltő: ~1500 HUF
Nagyjából tehát 35000 pénzből hozzuk ki a dolgot.
Időszükséglet
- Airport Express konfigurál: ~10 perc
- Airport Express szétszed, táp kibányász, stepdown konverter beforraszt, USB drót beforraszt: ~45 perc
Közel egy órát pepecselünk tehát evvel a verzióval.
“Szeretünk rollerezni” hack: Raspberry Pi-vel minimalizáljuk a költségeket
A Raspberry Pi alapú játék igazi do it yourself feladat lesz. Nincs konyhakész disztró erre (vagy legalábbis én nem találtam), nekünk kell shellben nindzsáznunk. Azért ez sem rocket science, nyugi.
Hozzávalók és költségek
- RPi “A” variáns (egy USB port, no ethernet), 8GB-os SD kárytával: ~9600 HUF
- Micro USB táp (számoljuk csak a kocsiba valót): ~1000 HUF
- USB billentyűzet és HUB – legyen az, hogy van otthon vagy kölcsönbe: 0 HUF
- RPi dobozka: ~1000 HUF
Szűk 12000 HUF pénzből összeszedtük tehát a vasat – az nem is rossz, közel a harmada a “kényelmes” confignak!
Időszükséglet
Több forrást is találtam, akik a stock Raspbian OS-ből indulva építenek ilyen configot maguknak. Az egyik egy
Instructables leírás volt, míg a másik
Stanislav Khromov kicsit up-to-date-ebb tutorialja. Kisebb-nagyobb gubancok mindkettővel akadtak, ezért gondoltam, írok egy harmadikat, hogy lássuk, mivel telik az idő, miután kiperkáltuk a 12000 HUF-ot a vasért.
0. Preface
Feltételezem, hogy a default “pi” userrel lépsz be és annak home folderében csinálsz mindent, amit írok.
1. OS
Ha a RPink mellé rendeltünk gyári SD kártyát, akkor azon nagy eséllyel
NOOBS lesz installálva, ami az első bootkor rákérdez, hogy melyik disztrót kérjük és helyettünk süt-főz-mosogat kicsit, majd reboot után előáll a disztónk. Ha magunk csináljuk, akkor vettünk egy 8+ gigás SD kártyát és felpakoltuk rá a Raspbiant. Ezt nem részletezném, tökéletes leírás van minden platformra a
Raspberry Pi wikijében.
A Raspbian egyébként egy Debian Linux disztró fork.
2. OS config
Mindenekelőtt csomag adatbázist frissítünk, beállítjuk a locale-t, billentyűzetet, hostname-et:
sudo apt-get update && apt-get upgrade
sudo raspi-config
3. WiFi install
Én egy 2000 HUF-os Logilink donglét használtam. A Raspbian gyárilag tartalmazza a hozzávaló
firmware-ralink
modult, így ezzel semmi dolgunk, csak magát a network interface-t kell bekonfigurálnunk. Módosítsuk meg a
/etc/network/interfaces
file-t:
sudo vim /etc/network/interfaces
Ez legyen az új file-ban:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "a_wifi_routered_ssidje"
wpa-psk "a_wifi_routered_passwordje"
Ha ezt elmentettük, bootoljuk újra a RPi-t és nézzük meg, hogy látszik-e a
wlan0
network interface:
4. Dependency install
Az
shairport
névre hallgató AirPlay servercsomagunk forrásának fordításához kell majd pár csomag, így felpakoljuk azokat:
sudo apt-get install vim build-essential libssl-dev libcrypt-openssl-rsa-perl libao-dev libio-socket-inet6-perl libwww-perl avahi-utils pkg-config git chkconfig libssl-dev libavahi-client-dev libasound2-dev pcregrep pgrep
5. Csúnyán pattanó hang kikapcsolása a hangkártya indulásakor
Ehhez a kis masinánk komplett firmware-ét cseréljük az aktuálisra:
git clone git://github.com/Hexxeh/rpi-update.git
sudo rpi-update/rpi-update
Ez elmolyol egy darabig, majd közli, ha minden OK és akkor rebootolhatunk egy
sudo reboot
parancs kiadásával (fehér ember nem veszi el a tápot proper shutdown nélkül ugye…)
6. ALSA config módosítás
Azért, hogy a shairport indulásakor ne
Unknown PCM cards.pcm.front
hibát kapjunk, bele kell picit túrnunk a hangkártyát meghajtó software configfile-jába:
sudo vim /usr/share/alsa/alsa.conf
Itt keressük meg a
pcm.front cards.pcm.front
részt és cseréljük ki
pcm.front cards.pcm.default
értékre.
7.
avahi daemon hack
Ez a discovery service – nem a TV csatorna, egy másik. Ha érdekel a mélye, itt a link felül. A lényeg, hogy a default configgal az avahi daemon szeret nekünk
avahi-daemon disabled because there is a .local domain
hibával visszatérni, ami azért nem nagyon jó. Hogy ezt ne tehesse, a DISABLE_TAG paraméterét egy invalid filenévre változtatjuk:
sudo vim /etc/init.d/avahi-daemon
Keresd meg a DISABLE_TAG szöveget és azt a sort cseréld ki erre:
DISABLE_TAG="/var/run/avahi-daemon/disabled-for-unicast-local-DISABLED"
Ha a config módosítás kész, újraindítjuk a daemont és biztos ami biztos bekapcsoljuk, hogy bootkor induljon a service:
sudo service avahi-daemon restart
sudo chkconfig avahi-daemon on
8. Audio teszt
Mielőtt shairportot forgatunk, ellenőrizzük, hogy megy-e a hangkártya. Mindenekelőtt állítsuk be az
amixer
binárissal default kimenetnek az analóg out-ot, nehogy azért ne szóljon a cucc, mert a HDMIbe tolja a hangjegyeket a mini jack helyett:
Ha ez megvan, akkor letöltünk egy .wav file-t, aztán az
aplay
binárissal lejátszatjuk próbának:
wget http://snippets.khromov.se/wp-content/uploads/2013/04/piano2.wav
aplay piano2.wav
A próba audio file-t
nekik köszönhetjük.
Ha nem megy, akkor indítsunk egy
alsamixer
binárist és tekerjük fel a volumét úgy 85%-ig, hátha csak azért nem szól az egész, mert nullán volt a hang.
9. Shairport install
Ehhez klónozzuk a git repóból a forrást, aztán konfiguráljuk, fordítunk, majd installérázunk:
git clone -b 1.0-dev git://github.com/abrasive/shairport.git
cd shairport
sudo ./configure
sudo make
sudo make install
Próbáljuk ki, hogy megy-e! Indítsuk el a shellben, aztán nézzük meg egy AirPlay kliensen, hogy megjelent-e a
Vizesnyolcas
nevű AirPlay audio target:
./shairport -a 'Vizesnyolcas'
Mielőtt továbbszaladnánk, installáljunk kultúráltan, azaz pakoljuk be a default configfile-t és a logrotate démon vezérlőt is a helyére:
sudo cp shairport/scripts/debian/default/shairport /etc/default/
sudo cp shairport/scripts/debian/logrotate.d/shairport /etc/logrotate.d/
10. Shairport autorun install
Be kell konfigurálnunk, hogy a shairport serverünk bootkor magától induljon. Ehhez kell a rendberakott startup script innen:
git clone https://gist.github.com/khromov/6398615
sudo cp 6398615/gistfile1.txt /etc/init.d/shairport
Aztán kapcsold ki, majd be a script bootkori indítását:
sudo chkconfig shairport off
sudo chkconfig shairport on
11. Watchdog
Ha a shairport serverünk a korábban már beállított avahi multicast DNS service felállása előtt indul el, akkor az nem lesz jó. Azért, hogy ezt biztosan kiküszöböljük, egy ronda, de annál hasznosabb watchdog scriptet írunk, ami semmi mást nem csinál, mint leellenőrzi a process listában, hogy fut-e már a shairport daemonunk és ha nem, akkor elindítja:
sudo vim /root/shairport-watchdog.sh
A watchdog scriptünk így néz ki:
pgrep shairport
if [ $? -ne 0 ]
then
service shairport start
echo "shairport started or restarted."
fi
Ezt a scriptet aztán percenként egyszer elindíttatjuk a cronnal. Kinyitjuk editálni a
/etc/crontab
file-t:
…és az alábbi sort biggyesztjük a végére:
* * * * * root /bin/sh /root/shairport-watchdog.sh > /dev/null
12. Jog fix
Végül Stanislav tanácsára még megfixáljuk a /home/pi folderünk összes termeiben a jogokat:
sudo chown -R pi:pi /home/pi/
Ha minden jól ment, a következő
sudo reboot
után kisvártatva meg kell, hogy jelenjen a
shairport
AirPlay serverünk az AirPlay audio targetek között az AirPlay klienseken. A serverünknek a RPi hostnevét örökli – ha cifrábbat szeretnénk, akkor a
/etc/default/shairport
file-ban az
AP_NAME=SzabadsagElvtasrak
sor definiálásával módosíthatunk rajta.
Megvagyunk. Summa summarum, nekem ez keresgéléssel, tokkal-vonóval nagyjából 2 órámba telt – ha nekivágsz, neked valószínűleg kevesebb ideig tart, mivel most up-to-date a fent leírt doksi és így menni fog azonnal. Azt mindenki döntse el maga, hogy végig akarja-e tolni a Linuxos vonalat, vagy inkább karosszékből konfigurálná csak az Airport Expresst, mert úgy érzi, öreg már az efféle hackelősdihez. Az én pálcám a “jó pap holtig” irányba tört most.
]]>