Monday, 4 August 2014

Squeezebox Receiver / Touch 直駁 LMS (Logitech Media Server)

個多月前在Review33上見到Welborne兄話用 SB Touch 直駁 NAS 再用搖控選歌比經 wi-fi router 接駁好聲云云. 我看到後, 信會好, 但我心中即時有個問號: "好幾多?"

因為我信係會好, 只係好多少的問題, 既然我本身有隻 Cubieboard2 係度, 佢有 SATA port, 又夠簡單, 用嚟做 LMS 加隻 wifi dongle 俾 iPad 接入應該可以做到:

iPad (iPeng) <-> CB2 (LMS) <-> SBR (player)
就咁諗都可行, 於是就開工....

雖然諗就好似好簡單, 但原來執行上嚟有好多問道:
1. CB2 我係行緊 Voyage MPD (w/RT kernel), 但無LMS. 我要先學習如何在 Voyage Linux 上安裝 LMS
2. CB2 加 Wi-Fi USB dongle 不知如何攪. 已知係, 我的 Wi-Fi USB dongle 是 Realtek chip, 我以前 build RT kernel 時已經加入左 Realtek Wi-Fi chip 的 module, 所以 driver 應該是無問題的. 只是 Wi-Fi 的設定是個未知素.


在開始安裝前, 先接上一隻 hard disk, 並在 /etc/fstab 中加入 mount point 的動作, 例如:
mkdir -p /mnt/sata
echo "/dev/sda1 /mnt/sata ntfs defaults,noatime,ro,nls=utf8 0 0" >> /etc/fstab
試一試:
mount /media/sata
ls /media/sata
你也可以安裝 NFS / CIFS services, 把 mount point 設定成 read/write, 這樣以後加減歌可以經 network.


1. 安裝 LMS
不斷的 google, 試, 攪左兩三個星期, 我終於做到了, 原來因為 CB2 同 Rapsberry Pi 硬件上係好近似, 所以其實只要用番 LMS for Pi 的 setup 便可:

Reference: http://allthingspi.webspace.virginmedia.com/lms.php

以上的是 copy-and-paste 自上面的網頁:
"1. Update some stuff and install some libraries. If you are prompted to reboot your Pi after this step, type reboot and hit enter.
sudo apt-get update && sudo apt-get dist-upgrade
sudo apt-get install libjpeg8 libpng12-0 libgif4 libexif12 libswscale2 libavcodec53
2. Download Logitech Media Server and install.
wget http://downloads.slimdevices.com/LogitechMediaServer_v7.7.2/logitechmediaserver_7.7.2_all.deb
sudo dpkg -i logitechmediaserver_7.7.2_all.deb
3. Stop the Logitech Media Server service.
sudo service logitechmediaserver stop
4. Download and extract some files used for this how-to guide to save you having to build everything yourself.
wget http://allthingspi.webspace.virginmedia.com/files/lms-rpi-raspbian.tar.gz
tar -zxvf lms-rpi-raspbian.tar.gz
5. Patch the bootstrap perl module.
sudo patch /usr/share/perl5/Slim/bootstrap.pm lms-rpi-bootstrap.patch
6. Move some files into place, create symbolic links, refresh dynamic linker bindings.
sudo mv arm-linux-gnueabihf-thread-multi-64int /usr/share/squeezeboxserver/CPAN/arch/5.14/
sudo mv libmediascan.so.0.0.0 libfaad.so.2.0.0 /usr/local/lib
sudo mv /usr/share/squeezeboxserver/Bin/arm-linux/faad /usr/share/squeezeboxserver/Bin/arm-linux/faad.old
sudo mv faad /usr/share/squeezeboxserver/Bin/arm-linux
sudo ln -s /usr/local/lib/libmediascan.so.0.0.0 /usr/local/lib/libmediascan.so
sudo ln -s /usr/local/lib/libmediascan.so.0.0.0 /usr/local/lib/libmediascan.so.0
sudo ln -s /usr/local/lib/libfaad.so.2.0.0 /usr/local/lib/libfaad.so
sudo ln -s /usr/local/lib/libfaad.so.2.0.0 /usr/local/lib/libfaad.so.2
sudo ldconfig
7. Fix some permissions.
sudo chown -R squeezeboxserver:nogroup /usr/share/squeezeboxserver/
8. Start the Logitech Media Server service.
sudo service logitechmediaserver start
Point your browser at "http://<pi ipaddress here>:9000" and configure the Logitech Media Server. After this you should be able to connect with a player, or if you want to use the same Pi to play the music as well as serve it, continue on........."

我不會安裝 squeezelite 因為不打算USB出DAC/DDC.

2. 設定 Wi-Fi
又攪左好耐(2星期), 最後發現原來 Voyage Linux 本身已經做好晒. 只要將 Wi-Fi dongle 插入, 再把想做的 setting 在 /etc/network/interfaces 中 uncomment 了, 再執行 service networking restart 便可.

做 Wi-Fi 的設定有好多好多種, 我會建議以下兩種二選一

2.1 Ad-hoc mode
Wifi ad-hoc mode 意思係建立一個小型 Wi-Fi network 作共享模式. 好處係簡單 setup, 壞處係 iPad 加入了 ad-hoc network 後便不能上網, 因為 ad-hoc 的機 (CB2 和 iPad) 都沒有接上 router network, 所以不能出 Internet.

如打算做 ad-hoc mode, 你的 interfaces file (/etc/network/interfaces) 的設定可以如下:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
  address 192.168.1.8
  netmask 255.255.255.0
  broadcast 192.168.1.255
#
# As ad-hoc
#
auto wlan0
iface wlan0 inet static
  address 10.1.10.1
  netmask 255.255.255.0
  broadcast 10.1.10.255
  up iwconfig wlan0 essid voyage-adhoc mode Ad-hoc

eth0 便是 (有線) LAN 的 interface. 這個用的 IP address 和 subnet 要和 SBR 一致. 如果你的 SBR 設定了 static IP, 咁你不用開 DHCP server. 但如果你的 SBR 是使用 dynamic IP, 咁你要在 CB2 上開啟 DHCP server. (DHCP server setup 會在下面提到)

wlan0 因為是 adhoc network, 它和其他 join 左這 adhoc network 的機 (如 iPad) 都一係要用 fix IP, 一係要有一個 DHCP server 派 IP. 請留意.

做了以上的設定, reboot / restart networking service 便可在 iPad 上見到有個 "voyage-adhoc" 的 ad-hoc network, 接上後再開 iPeng 便會見到 SBR.

2.2 Wi-Fi client mode
Wi-Fi client mode 意思係把 Wi-Fi dongle connect 到你家中已有的 Wi-Fi network. 這個的好處係你的 iPad 可以上網, 但因為把 Wi-Fi dongle 接到家中 Wi-Fi network, 在同一個 network 中多了 traffic, 對 CB2 的 Wi-Fi interface 的工作一定較多, 會有影響但未必聽得出.

如打算做 Wi-Fi client mode, 你的 interfaces file (/etc/network/interfaces) 的設定可以如下:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
  address 10.1.20.1
  netmask 255.255.255.0
  broadcast 10.1.20.255
auto wlan0
iface wlan0 inet static
  address 192.168.1.98
  netmask 255.255.255.0
  broadcast 192.168.1.255
  wpa-driver wext
  wpa-ssid {see_below}
  wpa-ap-scan 1
  wpa-proto RSN
  wpa-pairwise CCMP
  wpa-group CCMP
  wpa-key-mgmt WPA-PSK
  wpa-psk {see_below}
我的家是用 WPA2 的, 如果你的不是 WPA2, 請自行選擇合適的 WPA setting (在 /etc/network/interfaces 中把合適的 WPA setting  uncomment 便可.

"wpa-ssid" 填上你的 SSID
"wpa-psk" 要填上一個已經 encrypt 的 Wi-Fi 密碼, 你要打這個 linux command 去取得適合你家 network 的密碼:

wpa_passphrase MYSSID passphrase

例如你家的 network SSID 是 "my_wifi", Wi-Fi 密碼 (passphrase) 是 "password1234". 這樣便輸入

wpa_passphrase my_wifi password1234

再把它回來的字串貼在 "wpa-psk" 後面.

3. DHCP Server
原來開一個獨立 network 給 LMS <-> SBR 是需要有 DHCP server. 好在 Voyage Linux 本身已經有了一個小型 DHCP server service, 不過沒有啟動, 只要做以下的設定便可:

vi /etc/dnsmasq.more.conf
入到去會見到已經有一些不同的 interface 定了不同的 IP subnet 作為一旦開放 DHCP service 時的參考.
#dhcp-range=wlan0,10.1.10.10,10.1.10.250,24h
#dhcp-range=eth1,10.1.20.10,10.1.20.250,24h
#dhcp-range=eth2,10.1.30.10,10.1.30.250,24h
#dhcp-range=eth3,10.1.40.10,10.1.40.250,24h
dhcp-leasefile=/var/tmp/dnsmasq.leases

只要把你想要開 DHCP server 的 interface uncomment 左便可. 當然要留意 IP subnet 是否跟你在 /etc/network/interfaces 中的定義一至. 否則也會不能接上.

例如你想把 eth0 設定成有DHCP service, subnet 用 192.168.1.x, wlan0 也要有 DHCP servcice, subnet 用 10.1.20.x, 咁可以:
dhcp-range=eth0,192.168.1.10,192.168.1.250,24h
dhcp-range=wlan0,10.1.20.10,10.1.20.250,24h
dhcp-leasefile=/var/tmp/dnsmasq.leases

Reboot, or re-start dnsmasq 便可.

Reference: http://svn.voyage.hk/repos/voyage/branches/voyage-live/0.9.2/config/includes.chroot/README

相關Blog文:
Cubieboard2 with Logitech Squeezebox Media Server 入箱
摩改 Squeezebox Duet Receiver (上)
摩改 Squeezebox Duet Receiver (中)
摩改 Squeezebox Duet Receiver (下)
不用 Squeezebox Duet Controller 的方法 - Net::UDAP - SqueezeBox Receiver configuration tool

No comments:

Post a Comment