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
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.
Thanks for the comment, as I have time I’ll try to supplement with explanations
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.