Raspberry Pi + XBMC + wifi AP

A cél egy médialejátszó építése volt. Ehhez vettem egy Raspberry Pi -t. Ezen egy Debian alapú oprendszer fog futni, és nem csak médialejátszásra fogom használni, hanem ezzel kiváltom a második wifi routert, tehát wifi AP -ként is fog működni. Még vásároltam ezért egy TPLINK TL-WN822N USB wifi adaptert (ver.3), és egy 7 portos USB hubot (!saját tápellátással). Mint médialejátszó, nem csak az usb lemezt fogja látni, hanem nfs -en képes lesz felcsatolni az otthoni PC adott könyvtárát, ahol egyéb médiafájlokat tárolok, illetve képes lesz DVD lemezeket lejátszani a külső usb -s DVD meghajtóról.

Első lépésként megpróbáltam telepíteni a raspbmc -t. Ez működött is, filmeket tökéletesen játszotta, viszont a wifi AP beállításával nem boldogultam a következők miatt:
– network-manager -t használja, nem veszi figyelembe az /etc/network/interfaces beállításokat network-manager törlése után sem
– a legtöbb dpkg-reconfigure parancs hibára fut. Ez a hiba megszűnik apt-get install --reinstall initscripts parancs után, viszont az XBMC -ből kilépve, már nem kapok konzolt, csak egy sötét képernyőt. Ilyenkor, ha a hálózati módosítások miatt nincs IP címe az eszköznek, akkor nem tudok rajta csinálni semmit.
2 nap szívás után dobtam a raspbmc -t.
Egy honlapon találtam összehasonlítást a raspbmc, openelec és xbian -ról. Ami még fontos volt, hogy működjön a HDMI CEC is, és itt azt írták, hogy az xbian alatt ez is működik és ráadásul ez is Debian alapú. Letöltöttem az xbian telepítőjét. A telepítés (xbian beta verzio) sokkal gyorsabb volt mint a raspbmc esetén. A feltelepített rendszer is sokkal gyorsabban indult. Belépni ssh -val lehet, felhasználónév/jelszó: xbian/raspberry. Ekkor elkövettem egy ‘hibát’: apt-get update után elindítottam az apt-get upgrade parancsot, ami valamilyen python telepítési hibával leállt. Ezek után nem indult el a rendszer. Világos lett, hogy nem szabad apt-get upgrade parancsot kiadni. Újratelepítettem. Ezek után be tudtam állítani a wifi AP -t, viszont az XBMC nem kezelte a DVD meghajtót. Utánaolvastam, hogyan lehetne életre kelteni, de a fórumom a disztribúció karbantartója egy hasonló kérdésre azt felelte, hogy Ő ezt nem kívánja megoldani, meg amúgy is utálja a DVD lejátszást. Hát ez így elég furcsa a részéről … Egy másik probléma adódott az ssh frissítése közben is, mert hiányoztak a /dev/random és /dev/urandom eszközök. Ezért dobtam ezt a disztribúciót is.

Egy másik versenyző az UltraSlim disztró lett volna, ez az XBMC -n kívül játékokat is tartalmaz és egy másik helyen egész jó leírás van róla. Nekem ezekre most nem volt szükségem, de lehet, hogy majd kipróbálom.

Végül rábukkantam, hogyan kell Raspbian alá xbmc -t telepíteni. Én nem az eredeti Raspbian alá telepítettem az xbmc -t, hanem kerestem egy minimális Raspbian disztrót. Én a Raspbian Wheezy armhf Raspberry Pi minimal image -t válaszottam, de hasonló a minibian is.

A rendszer első indítása után:

#locale beállítás -> töröltem az IT -t, helyette bejelöltem: en_US.UTF-8 és hu_HU.UTF-8 (majd a hu_HU.UTF-8 -at választottam)
dpkg-reconfigure locales

#időzóna beállítása
dpkg-reconfigure tzdata

#billentyűzet beállítása
dpkg-reconfigure console-data

#SD kártya újraparticionálása (swap partíció törlése és a második partíció újbóli létrehozása az SD kártya teljes méretének használatához).
#Nagyon ajánlott kétszer is ellenőrizni a második partíció start szektorát az adatvesztés elkerülése miatt!!! 
#Nekem nem volt vele problémám
(echo d; echo 3; echo d; echo 2; echo n; echo p; echo 2; echo ; echo; echo w) | fdisk /dev/mmcblk0

reboot

Újraindítás után:

#Fájlrendszer megnövelése, hogy a teljes rendelkezésre álló helyet használjuk
resize2fs /dev/mmcblk0p2

#csomagfrissítés
apt-get update && apt-get -y upgrade

#raspi-config és az összes hozzávaló csomag telepítése
apt-get -y install lua5.1 triggerhappy dmsetup libdevmapper1.02.1 libparted0debian1 parted curl
wget http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20130925-1_all.deb -O raspi-config.deb
dpkg -i raspi-config.deb && rm raspi-config.deb
raspi-config

#eszköz firmware update
apt-get -y install usbutils binutils ca-certificates git-core
wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && chmod +x /usr/bin/rpi-update && rpi-update

reboot

Újraindítás után:

# 512MB swap létrehozása
dd if=/dev/zero of=/var/swapfile bs=1024 count=524288
mkswap /var/swapfile
chmod 0600 /var/swapfile
swapon /var/swapfile
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab

#host név beállítása
echo "EnGepnevenAmitBeallitok" > /etc/hostname

#Change .bashrc (enable "ll"-shortcut)
sed -i .bashrc -e '12s!# alias!alias!'
sed -i .bashrc -e '12s!-l!-lsah!'

#expand path to include raspistill and raspivid for root
echo "export PATH=\$PATH:/opt/vc/bin" >> .bashrc

*Megjegyzés: az én otthoni hálózatom a 192.168.7.0/24 tartományban van és az RPI IP címe: 192.168.7.10.

XBMC telepítése:

echo 'deb http://archive.mene.za.net/raspbian wheezy contrib' > /etc/apt/sources.list.d/mene.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-key 5243CDED
apt-get update
apt-get install xbmc cec-utils libdvdnav4 libdvdread4 libdvdcss2 sudo
#Nem mindent játszott le, valószínűleg codec -ek hiányoztak (ez a minidlna és függőségei telepítése után már rendben volt)
#ezért ideírom, hogy szerintem még kell telepíteni a következőket:
apt-get install libavformat53 libavutil51 libexif12 libflac8 libgcc1 libid3tag0 libjpeg8 libogg0 libvorbis0a
# XBMC -t futtató xbmc felhasználó létrehozása:
adduser xbmc
# ha az input csoport nem létezik, létre kell hozni:
addgroup --system input
# az xbmc -t futtató felhasználó tagja kell legyen a következő csoportoknak:  audio video input dialout plugdev tty cdrom
for g in `echo "audio video input dialout plugdev tty cdrom"`;do echo $g;usermod -a -G $g xbmc;done
#
echo 'SUBSYSTEM=="vchiq", GROUP="video", MODE="0660"' > /etc/udev/rules.d/10-vchiq-permissions.rules

udev szabály /etc/udev/rules.d/99-input.rules -be, mert különben nem működik a billentyűzet, egér:

SUBSYSTEM=="input", GROUP="input", MODE="0660"
KERNEL=="tty[0-9]*", GROUP="tty", MODE="0660"
KERNEL=="mouse|mice", NAME="input/%k", MODE="664", GROUP="input"
KERNEL=="ts[0-9]*|uinput", MODE="0660", GROUP="input"
KERNEL=="js[0-9]*", MODE="0660", GROUP="input"

Szeretném, hogy az XBMC automatikusan elinduljon a rendszer indításakor xbmc felhasználó alatt, ezért az /etc/default/xbmc -be a következő módosítás kell:

ENABLED=1
USER=xbmc

Az xbmc felhasználót beletettem az /etc/sudoers -be is, de lehet hogy ez sem szükséges.

xbmc    ALL=(ALL) NOPASSWD: ALL

Természetesen azt szeretném, hogy egy vagy több külső USB lemezről tudjak filmeket lejátszani. Amennyiben több lemezt csatlakoztatok a lejátszóhoz, vagy a több lemezből egyet lehúzok, szeretném, hogy mindig ugyanazt az eszköz nevet adja a rendszer adott lemeznek. Az USB lemez csatlakoztatása után a dmesg paranccsal meg tudom nézni, hogy a rendszer minek ismerte fel. Tegyük fel, hogy sda -ként látja. Megnézem az azonosítóját a következő paranccsal: udevadm info -a -n /dev/sda | grep serial. A parancs kimenete ehhez hasonló:

    ATTRS{serial}=="FDC0FD500000000XXXXXXXXXXXXXXX"
    ATTRS{serial}=="bcm2708_usb"

Készítek egy udev szabályt a /etc/udev/rules.d/80-external-disk.rules -be:

KERNEL=="sd[a-h]1", ATTRS{serial}=="FDC0FD500000000XXXXXXXXXXXXXXX", SYMLINK+="diskExtWDp1", \
    RUN+="/bin/mkdir -p /media/diskExtWDp1", RUN+="/bin/mount /dev/diskExtWDp1 /media/diskExtWDp1", \
    RUN+="/etc/init.d/transmission-daemon start"

Ez a szabály a lemezt a /media/diskExtWDp1 könyvtárba fogja csatolni és még elindítja a transmission-daemon -t is.

Transmission telepítés:

apt-get install transmission-daemon

Én azt szeretném, hogy a transmission-daemon csak akkor induljon el, ha az adott lemez, amire letölt fel van csatolva. Ezt megteszi a /etc/udev/rules.d/80-external-disk.rules szabály, a rendszer indulásakor nem szabad elindulnia:

update-rc.d -f transmission-daemon remove

Fontos leállítani a transmission-daemont a /etc/transmission-daemon/settings.json konfig fájl szerkeszése előtt:

/etc/init.d/transmission-daemon stop

A /etc/transmission-daemon/settings.json -be a következő paramétereket állítottam:

    "download-dir": "/media/diskExtWDp1/downloads",
    "incomplete-dir": "/media/diskExtWDp1/downloads/incomplete",
    "incomplete-dir-enabled": false,
    "port-forwarding-enabled": true,
    "rpc-authentication-required": false,
    "rpc-port": 19091,
    "rpc-whitelist": "127.0.0.1,192.168.7.*",
    "rpc-whitelist-enabled": true,

El lehet indítani a transmission-daemon -t:

/etc/init.d/transmission-daemon start

Böngészőből a transmission webes felülete elérhető a 192.168.7.0/24 hálózatból a http://192.168.7.10:19091 címen.

Wifi AP -hez csomagok telepítése:

apt-get install hostapd dnsmasq firmware-realtek bridge-utils wireless-tools

Az alap hostapd csomagban lévő hostapd program nem kezeli a RTL8192CU chipsetet. Ezen honlapon van leírva, hogy a RTL8192cu chipset -hez, honnan kell letölteni a módosított hostapd programot (xbian alatt működik). Ezt letöltöttem és bemásoltam az eredeti helyére (/usb/sbin). Viszont ez ioctl[RTL_IOCTL_HOSTAPD]: Invalid argument hibát dob.
Itt írják le, hogy mi a megoldás: le kell tölteni az RTL8192CU chipset driver forrását tartalmazó RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip fájlt és lefordítani a hostapd programot.

unzip RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911
cd wpa_supplicant_hostapd
tar -xvf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz
cd wpa_supplicant_hostapd-0.8_rtw_r7475.20130812
cd hostapd
apt-get install gcc make
make

cp hostapd /usr/sbin/hostapd
chown root.root /usr/sbin/hostapd
chmod 755 /usr/sbin/hostapd

Hostapd beállítása:

#/etc/hostapd/hostapd.conf 
interface=wlan0
bridge=br0
ssid=APName
channel=7

# WPA and WPA2 configuration
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0

#WPA settings
wpa=2
wpa_passphrase=secretPassword
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

#Hardware configuration
driver=rtl871xdrv
hw_mode=g
ieee80211n=1
device_name=RTL8192CU
manufacturer=Realtek

hostapd -hez conf fájl beállítása:

/etc/default/hostapd -ben: DAEMON_CONF="/etc/hostapd/hostapd.conf"

Beállítottam a kernel paramétereket:

#/etc/sysctl.d/myhome.conf 

net.ipv4.ip_forward = 1

Kernel paraméterek beállítása a /etc/sysctl.d/myhome.conf alapján:

sysctl -p /etc/sysctl.d/myhome.conf

Hálózati interfészek beállítása:

#/etc/network/interfaces
auto lo eth0 br0

iface lo inet loopback

iface default inet dhcp

allow-hotplug eth0
iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual

iface br0 inet static
 address 192.168.7.10
 netmask 255.255.255.0
 gateway 192.168.7.1
 bridge_ports eth0 wlan0
 bridge_stp no
 bridge_fd 0
 bridge_maxwait 0

 # reset existing rules and chains
 up /sbin/iptables -F
 up /sbin/iptables -X
 up /sbin/iptables -t nat -F

 # Mask for the interface, activate port-forwarding and NAT
 up iptables -A FORWARD -o eth0 -i wlan0 -s 192.168.7.0/24 -m conntrack --ctstate NEW -j ACCEPT
 up iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 up iptables -t nat -A POSTROUTING  -j MASQUERADE

Ha valaki mégis xbian telepítésre vetemedne, az xbian esetén az a furcsaság történik, hogy az újraindítás után a hálózat kiszámíthatatlan idő múlva indul el és néha a wifi AP ezért nem működött jól, csak a hostapd manuális újraindítása után. Ezért kivettem, hogy a rendszer indulásakor ne induljanak el a hostapd és dnsmasq, csak a hálózati eszköz beállítása után (az xbian abban beta változatban keverte az upstart -ot és sysv -t), a következő módosításokat kell végezni:

#!!!Only for xbian!!!
#/etc/network/interfaces 
 post-up service hostapd start
 post-up service dnsmasq start
 pre-down service dnsmasq stop
 pre-down service hostapd stop
#!!!Only for xbian!!!
#sysv disable
update-rc.d -f hostapd remove
update-rc.d -f dnsmasq remove

#upstart disable
#!!!Only for xbian!!!
echo "manual" >> /etc/init/hostapd.override
echo "manual" >> /etc/init/dnsmasq.override

#!!!Only for xbian!!!
xbian ssh reinstall probléma megoldása

#!!!Only for xbian!!!
mknod -m 644 /dev/random c 1 8
mknod -m 644 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom

3 Comments

  1. Posted April 3, 2014 at 9:56 pm | Permalink | Reply

    I do consider all the concepts you’ve introduced for your post.

    They’re very convincing and will certainly work. Nonetheless, the
    posts are very quick for novices. Could you please prolong them a little from subsequent time?
    Thank you for the post.

    • Posted April 4, 2014 at 11:10 am | Permalink | Reply

      Thanks for the comment, as I have time I’ll try to supplement with explanations

  2. Posted April 7, 2014 at 8:37 pm | Permalink | Reply

    Your style is so unique in comparison to other people I have read stuff
    from. Thanks for posting when you’ve got the opportunity,
    Guess I’ll just bookmark this blog.

Leave a comment