I have finally managed to complete my 2nd attempt at the jukebox / music player using a Raspberry Pi, Music Player Daemon (MPD) and Client175. This time using ArchLinux instead of Raspbian.This was also prompted by firstly having my initial USB hub start to smoke (be careful of leaving cheap hubs permanently powered) and secondly, the fact I managed to destroy the installation by attempting to uninstall all things X from the system. Apparently my face was a picture when I saw the packages "mpd" and "als-utils" being automatically removed!
While Rasbian is okay and based on an OS I know intimately (Debian), the appeal of ArchLinux was how streamlined it is out of the box. However, unlike the Raspbian version, I endured a lot of irritation and frustration as I struggle to find information about the simplest of task (e.g. Static IP addresses). Rather than detail all the painful circles I went round to get this project to this stage, I will simply highlight the initial problem and solution.
The ArchLinux image is available from the Raspberry Pi's Download page. Once downloaded I simply inserted my SD card into my laptop and executed the following commands: (Sorry, I'm a Linux user, so if you use windows you should check out this page)
unzip archlinux-hf-2012-09-18.zip
sudo dd bs=1M if=archlinux-hf-2012-09-18.img of=/dev/mmcblk0
sudo sync
You should be aware that above device path (/dev/mmcblk0) could be different from machine to machine.
Once this has been done, simply pop the SD card out of you computer and slot it into the Raspberry Pi.
For this version, I decided to add the added challenge of do this build completely headless., so the following information was quite usuaful.
root
root
alarmpi
So using this information I was simply about to ssh onto the Raspberry Pi. However, if you have no way of finding this out and want the similar challenge, you could try a ping sweep (I use nmap -sP 192.168.1-254
and see what IP addresses are ping-able.
Once I logged in, I then proceeded to also:
pacman
: pacman -Syu
sudo echo raspmusicplayer > /etc/hostname

Like Raspbian, installing the software was extremely simple. I had the basic software all installed pretty much by this command:
pacman -S alsa-utils mpd mpc
However, there was a bit of configuration that needed completing.
While you think it would be abvious, it was to me and caused a bit of head scratching.
systemd-tmpfiles --create
mkdir -p /var/lib/mpd/playlists
touch /var/lib/mpd/{mpd.db,mpdstate}
chown -R mpd.audio /var/lib/mpd
vi /etc/mpd.conf
and change the following entries
music_directory "/var/lib/mpd/music"

#bind_to_address "localhost"

auto_update "yes"

zeroconf_enabled "yes"

zeroconf_name "Raspberry Pi Music Player"
Also, as I use a static IP address (see WiFi section), I have also added to the following lines to the mpd.conf
file:
BindAddress 127.0.0.1
BindAddress 192.168.1.3
Note: First pain occured with starting the player on boot. While it was starting, none of the clients were able to communicate and running systemctl status mpd returned an error and failed to start:
mpd.service - Music Player Daemon Loaded: loaded (/usr/lib/systemd/system/mpd.service; enabled) Active: active (running) since Mon, 15 Oct 2012 12:26:21 +0100; 1s ago Main PID: 248 (mpd) CGroup: name=systemd:/system/mpd.service â”” 248 /usr/bin/mpd --no-daemon Jan 1 01:00:08 raspmusicplayer mpd[96]: Failed to bind to '192.168.1.3:6600': Cannot assign requested address Jan 1 01:00:08 raspmusicplayer systemd[1]: mpd.service: main process exited, code=exited, status=1 Jan 1 01:00:08 raspmusicplayer systemd[1]: Unit mpd.service entered failed state.
The issue was that mpd was trying to start prior to the wireless connection being established. The solution was to edit the /usr/lib/systemd/system/mpd.service and add change the After=
line to:
After=sound.target network.target
I really like this client as you can even edit the mp3 tags. However, I'm on the look out for a mobile friendly web UI, but may well try writing my own. Due to ArchLinux being such a thin install, you will need to install python, this is achieved by the following command:
pacman -S mutagen python-beautifulsoup python2 python2-cherrypy
You will need to download the tarball.
wget http://client175.googlecode.com/files/client175_0.7.tar.gz
Once downloaded:
cd /var/lib/mpd
sudo -u mpd tar -zxvf /home/pi/client175_0.7.tar.gz
vi client175/site.conf
and change the following entries
music_directory: "/var/lib/mpd/music/"
run_as: "mpd"
vi /etc/rc.local
and add the following line before the exit(0)
, this will ensure that Client175 is fired up automatically/usr/bin/python /var/lib/mpd/client175/server.py &> /var/log/mpd/Client175.log &
Now let me introduce the second pain. Getting Client175 to start on boot.
I started off trying to replicate the SysVInit rc.local method, but no matter what I did I could not get Client175 to start on boot. This caused me enormous amounts of frustration, as I found that the documentation seemed to be sparse on this subject and use forums seemed to be full of people informing me "don't use rc.local. It's an ugly hack and there's always a better way." but never offering me information as to what the "better way" was. Eventually I worked it out that I should create my out systemd config file:
/usr/lib/systemd/system/client175.service:
[Unit] Description=A Web Server Frontend for Music Player Daemon After=mpd.service [Service] ExecStart=/usr/bin/python2 /var/lib/mpd/client175/server.py [Install] WantedBy=multi-user.target
This was in some ways very easy and in some way a pain in the arse and it seems that there is very little documentation on
So, to keep things simple, I have only documented what I did to get it working, not everything I tried to do.
Install the software:
pacman -S wireless_tools netcfg wpa_supplicant
Edit /etc/wpa_supplicant/wpa_supplicant.conf
:
ctrl_interface=/var/run/wpa_supplicant eapol_version=1 ap_scan=1 fast_reauth=1 network={ ssid="ACCESSPOINT_NAME" proto=RSN key_mgmt=WPA-PSK pairwise=CCMP TKIP group=CCMP TKIP psk="PASSPHRASE" }
Edit /etc/network.d/home.static
:
CONNECTION='wireless' DESCRIPTION='A simple WPA encrypted wireless connection using a static IP' INTERFACE='wlan0' SECURITY='wpa-config' WPA_CONF='/etc/wpa_supplicant/wpa_supplicant.conf' IP='static' # Any other CONNECTION='ethernet' options may be used. ADDR='192.168.1.3' GATEWAY='192.168.1.254' DNS=('192.168.1.254') # Uncomment this if your ssid is hidden #HIDDEN=yes
Finally, you should be able to execute the following:
systemctl disable dhcp@something.service
systemctl enable netcfg@home.static.service
reboot
Note: As soon as you have issued the reboot command, you need to whip the wired network out of it's socket.
This site uses cookies, please read my cookie policy.