Squeezy-Pi

by foolonthehill  

edit: new post for version 7.8 here, (to include a deb package)

It's been a long time coming, but Logitech has finally dumped the fantastic Squeezebox systems they bought from Slim Devices some years ago. Ultimately, I think they never understood the product they bought: incredibly powerful and widely revered for its audio fidelity/quality, its plugin structure, but requiring a fairly high level of technical expertise. From my original SB3, I now have a selection of players round the house, run from my home server. And perhaps I should treat myself to a Touch before they disappear forever...

As my Linkstation has now been superseded by my RPi, I need to get SqueezeboxServer (formerly SlimServer, then SqueezeboxCenter, now Logitech Media Server - LMS) running on it: hopefully with hard float calculations which should give me a massive improvement from my poor old Linkstation which always tried hard but evidently struggled...

In light of what I ended having to do below to get this working, I think I need to give a bit of context for how LMS sits within the RPi ecosystem: I will write how I understand RPi/Debian/LMS to work, but please take all of this with a pinch of salt - there may well be misunderstandings or omissions!

Like many other small, low power systems, the Pi runs on an ARM v6 CPU, with a Floating Point co-processor. As the FPU is in hardware, this can be utilised for significant performance gains by applications that are compiled to use "hard float" function calls, as opposed to the more common "soft float". The difference is to do with how processes process variables in the CPU/FPU registers (the "ABI") which I won't go into (though there seems to be an excellent description on the RPi forums here)

In the Debian world, the (historically-)usual ARM distribution is 'armel', using a soft float. Raspbian is available in this form, or in 'armhf' form, which the recommended form and includes packages compiled for hard float. While LMS (and its predecessors) is open-source, it is released as pre-compiled binaries and packages for a variety of platforms including x86 Windows, x86 linux and ARM linux.

And the binary most relevant on the face of it is the Debian .deb package for all architectures. However, the 'all' description is not quite wide enough: LMS is compiled for armel not armhf. As such, it doesn't know how to communicate with other binaries on the system, so is ultimately as incompatible with this system as trying to run the Windows binary!

This all means we need an alternative to the packages from Logitech, of which there are two: Build it yourself, or download it from someone who has done it for you. Fortunately, a keen Squeezeboxer appears to have done the work for you and hosted a tutorial. Or there is the DIY approach below:

  1. First, download the latest LMS package for Debian. As discussed, this won't work, but it will help the package manager realise that LMS is installed, get any necessary dependencies, and add the necessary startup scripts etc.
    $ sudo wget http://downloads.slimdevices.com/LogitechMediaServer_v7.7.2/logitechmediaserver_7.7.2_all.deb  --2012-09-26 22:33:03-- http://downloads.slimdevices.com/LogitechMediaServer_v7.7.2/logitechmediaserver_7.7.2_all.deb Resolving downloads.slimdevices.com (downloads.slimdevices.com)... 192.221.115.254, 8.26.222.254, 8.27.6.126 Connecting to downloads.slimdevices.com (downloads.slimdevices.com)|192.221.115.254|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 97278672 (93M) [text/plain] Saving to: `logitechmediaserver_7.7.2_all.deb' 100%[======================================>] 97,278,672 490K/s in 1m 43s 2012-09-26 22:34:46 (926 KB/s) - `logitechmediaserver_7.7.2_all.deb' saved [97278672/97278672]
  2. tall the package using
    $ sudo dpkg -i logitechmediaserver_7.7.2_all.deb
    Then stop the service, which isn't working anyway!
    $ sudo service logitechmediaserver stop
  3. If you do try to run squeezeboxserverfrom the command line, it will point you to the location of a script to rebuild the CPAN modules, noticing that they are not loading:
    $ sudo -u squeezeboxserver squeezeboxserver The following modules failed to load: DBI EV XML::Parser::Expat HTML::Parser JSON::XS Digest::SHA1 YAML::XS Sub::Name ******* NOTE: If you're running some unsupported Linux/Unix platform, please use the buildme.sh script located here: http://svn.slimdevices.com/repos/slim/7.7/trunk/vendor/CPAN/
  4. So, we download the sources as suggested, either using subversion or simply using wget. This includes all the CPAN modules, as well as a couple of extra binaries which LMS needs patched.

    For info, the arguments used here are:

    • -r : be recursive
    • -np : no-parent (don't go up the hierarchy)
    • -nH : don't use the domain as a folder
    • -cut-dirs=5 : don't use "repos/slim..." as a folder
    • -R index.html : ignore this file

    Having initially used wget myself, I would actually recommend using svn, as some of the build scripts make use of svn versioning in their folder structure. Also, if you use wget, you will need run sudo chmod +x buildme.sh to make the scripts executable to run them directly.

  5. Before we get started, there are a few bits of housekeeping needed to get a sensible build environment. Fortunately, we already have build-essentials and obviously perl, but we need to get an updated version of the compiler. When building Perl modules, we need to match the compiler with that used to build Perl itself and, as Raspbian currently seems to be compiling with gcc-4.7 (while only gcc-4.6 is installed by default), we must add the extra package:
    $ sudo apt-get install gcc-4.7
    Initally, I thought we also needed some sort of database, but of course, LMS likes to be self-contained, and includes it's own embedded version (sqlite?).
  6. I'm not sure if this is necessary, but I also added an extra bit of swap, just in case it's needed, and I've seen elsewhere that the RPi can have trouble when compiling big packages. I've used the external USB drive I have plugged in, as it runs pretty fast.
    $ sudo dd if=/dev/zero of=/mnt/[somewhere]/swap_extra bs=8M count=128 $ sudo /bin/ln -s /mnt/[somewhere]/swap_extra /var/swap_extra $ sudo mkswap /var/swap_extra $ sudo swapon /var/swap_extra
  7. Then we get started on the build. There is one missing library in the base Raspbian install, which caused the build to fail for me, so install it first and you should be able to build in one go.
    $ sudo apt-get install libstdc++6-4.7-dev $ sudo ./buildme.sh
    This is where a bit of patience is needed. Leave it overnight, as it's definitely going to take a while...
  8. Once finished, it's time to get building a couple of the other libraries/binaries used by LMS. This includes faad and flacwhich evidently the LMS team have patched so that they play:
    • alac_decoder - Decoder for Apple Lossless Audio Codec files (ALAC).
      [I haven't compiled this]
    • faad2 - MPEG-4 and MPEG-2 AAC decoder
    • flac - FLAC decoder
    • shine-fixed - Appears to be a RISC OS decoder.
      [I haven't compiled this]
    • sox - a library to read/write a variety of audio formats
    • wavpack - library for lossless audio compression
      [I haven't compiled this]
    For each one, I entered the folder, and ran the relevant build file:
    $ sudo ./buildme-linux.sh
  9. There is little output to the build scripts above, as most of it is piped into the config.log file, but the resulting build folder structure is zipped into a tarball, from which we need to extract the (very deeply nested binaries) into the LMS folder.
    $ sudo cp -r CPAN/build/arch/5.14/arm-linux-gnueabihf-thread-multi-64int /usr/share/squeezeboxserver/CPAN/arch/5.14/ $ sudo mv $(sudo tar zxvf faad2/faad2-build-armv6l-33991.tgz --wildcards *bin/faad) /usr/share/squeezeboxserver/Bin/arm-linux/ $ sudo mv $(sudo tar zxvf flac/flac-build-armv6l-33991.tgz --wildcards *bin/flac) /usr/share/squeezeboxserver/Bin/arm-linux/ $ sudo mv $(sudo tar zxvf sox/sox-build-armv6l-33991.tgz --wildcards *bin/sox) /usr/share/squeezeboxserver/Bin/arm-linux/ $ sudo ldconfig
  10. And once we are done, that is all the building complete, leaving only a small change required to the startup script in the squeezebox server (thanks to allthingspi for identifying this). The script assumes that all arm devices are alike and that they use the gnueabi architecture. We can simply change this to the armhf architecture, or add a check for armhf and adapt accordingly. I have put the couple of lines that need to be changed into a patch(or use the one from allthingspi):
    $ sudo patch /usr/share/perl5/Slim/bootstrap.pm bootstrap.pm.patch
  11. As allthingspi notes, there may be some permission issues remaining, though this may have been because I tried running squeezeboxserver as root to test it. The issues I had were with the /var/lib/squeezeboxserver/prefs folder rather than the /usrsource, which I would tend to prefer remaining under root ownership
    $ sudo chown -R squeezeboxserver:nogroup /var/lib/squeezeboxserver
  12. I've not had the opportunity to test the audio output yet, as it's now happily re-building my library. However, looking at allthingspi's work, it seems that libmediascan.so and libfaad.so may not be working, so we'll see what happens when I try to play something later.... I've been running LMS happily for a day or so of internet radio and local media, synced across 4 devices with no trouble, and it is certainly much, much more responsive than my poor old LSPro. Excellent. Any comments/questions are welcome below from those who find this useful or spot problems.

30 comments

User ratings
5 star:
 
(12)
4 star:
 
(3)
3 star:
 
(0)
2 star:
 
(0)
1 star:
 
(0)
15 ratings
Average user rating:
4.8 stars
(4.8)
Comment from: RaspLMSBeginner [Visitor]
RaspLMSBeginner

Hi
Thank you for the good instructions, I will give it a try. Just received my Raspberry board. However, I was also thinking of using it as a player.
Can you help with compiling SqueezePlay for Raspberry as well?

29/09/12 @ 16:27
Comment from: foolonthehill [Member]

I am planning to get squeezeplay running on my RPi (though I tend to use my hardware players more), so will try to have a go at compiling this week. If you are not confident, then allthingspi has offered a binary (obviously, at your own risk - I do not know allthingspi)

29/09/12 @ 17:14
Comment from: RaspLMSBeginner [Visitor]
RaspLMSBeginner

Thank you for trying, I also use my hardware players more, but it would be an easy way to upgrade, because now LOgitech has stopped the production of hardware players we need an alternative.
Regarding allthingspi,, I can’t find any squeezeplay binary?

30/09/12 @ 08:55
Comment from: foolonthehill [Member]

If you follow the tutorial at http://allthingspi.webspace.virginmedia.com/lms.php then step 4 downloads his tarball which contains the compiled CPAN modules and binaries for squeezeplay, faad and flad.

30/09/12 @ 09:13
Comment from: RaspLMSBeginner [Visitor]
RaspLMSBeginner

Ah - thank you I did not know that Squeezeplay was included in that
Thank you

30/09/12 @ 11:34
Comment from: Alban [Visitor]
Alban
4 stars

Thank you for the guide, very helpful.

I think there is an copy and paste error in section 9:

$ sudo mv $(sudo tar zxvf flac/flac-build-armv6l-33991.tgz –wildcards *bin/flac) /usr/share/squeezeboxserver/Bin/arm-linux/
$ sudo mv $(sudo tar zxvf flac/flac-build-armv6l-33991.tgz –wildcards *bin/flac) /usr/share/squeezeboxserver/Bin/arm-linux/

should be

$ sudo mv $(sudo tar zxvf flac/flac-build-armv6l-33991.tgz –wildcards *bin/flac) /usr/share/squeezeboxserver/Bin/arm-linux/
$sudo mv $(sudo tar zxvf sox/sox-build-armv6l-33991.tgz –wildcards *bin/sox) /usr/share/squeezeboxserver/Bin/arm-linux/

03/10/12 @ 23:57
Comment from: foolonthehill [Member]

@Alban You are totally correct. Thank you for that: now corrected.

04/10/12 @ 09:47
Comment from: Philipp [Visitor]
Philipp

Tried to install the package but get the error

Unable to locate package logitechmediaserver_7.7.2_all_with_armhf.deb

Couldn’t find any package by regex ‘logitechmediaserver_7.7.2_all_with_armhf.deb’

30/10/12 @ 18:59
Comment from: Philipp [Visitor]
Philipp

Ups sorry wrong command sudo dpkg -i made it :D.
Thanks a lot !

30/10/12 @ 19:11
Comment from: foolonthehill [Member]

@Philipp Glad you got it working - it would be good to know if the package worked for you and you have managed to get LMS running.

As for my attempt to get squeezeplay/jive running (as per previous comments), I’ve been having real difficulty in getting everything to come together. I have managed to compile without error, but the binary won’t run. Hopefully one day, I’ll get round to debugging further, but I think it may be an issue with SDL on raspbian…

31/10/12 @ 17:29
Comment from: Tamex [Visitor]
Tamex
5 stars

Hi.

Thank you for the uploaded package logitechmediaserver_7.7.2_all_with_armhf.deb . I spent five days to install and compiling the LMS without any success.

Now it works on my Odroid-X with the Debian Wheezy.

Thankz a lot!
Tamex

23/11/12 @ 00:25
Comment from: MattEK [Visitor]
MattEK
5 stars

Thank you !

I purchased a RaspberryPi with the simple and only intention of having a cooler running ‘always on’ computer (especially during summer time) that could host my Logitech Media Server so that I could use my Logitech Squeezebox Touch (great product) all the time. I just got the crazy idea by realising how reasonably priced the RaspberryPi was as a device and the fact that there was a Linux version of the Logitech Media Server (had previously been using the server software from a desktop box with a Windows OS).

I got as far as downloading the Logitech Media Server software for Linux (Debian/Ubuntu) and installing the package and then… it did not work! Oh! End of a good idea.

I would not have had a chance of working through the issues. Not a chance! And given Logitech has called it quits on the Squeezebox players and the associated bits and pieces, I thought there would be absolutely no way to get support and assistance - an end for me!

So between this post and the ‘All Things Pi’ post (http://allthingspi.webspace.virginmedia.com/lms.php) I have been able to realise the wish!

Thank you. Thank you. Thank you.

Could not have done it otherwise.

17/12/12 @ 04:03
Comment from: Ramage [Visitor]
Ramage
5 stars

logitechmediaserver_7.7.2_all_with_armhf.deb.
Downloaded the above server version to my Raspberry Pi B (256M ram) with excellent results, worked first time. Well done.

20/12/12 @ 20:09
Comment from: marco [Visitor]
marco
5 stars

Hi, thank you very much for the detailed instructions and also for the deb package!

Can’t find an easier way to configure the server than modifying by hand the /var/lib/squeezeboxserver/prefs file. Any advice?

A last remark: it could be useful to extend the post by explaining how to install squeezeslave mentioned at http://allthingspi.webspace.virginmedia.com/lms.php

Bye! Thanks again!

03/01/13 @ 21:12
Comment from: marco [Visitor]
marco
5 stars

Sorry if I am writing a comment again
I have just found that using your deb package don’t changes the /etc/init.d/logitechmediaserver settings as per allthingspi suggestion (http://allthingspi.webspace.virginmedia.com/lms.php)

Some lines should be changed
! # Required-Start: $all
! # Required-Stop: $all
! # Should-Start: $all
! # Should-Stop: $all
so that $all becomes sshd

The change avoids errors when installing squeezeslave (along with squeezeslavestart and the related script in /etc/init.d/) from wget http://allthingspi.webspace.virginmedia.com/files/lms-rpi-raspbian.tar.gz and setting squeezeslave booting as demon with invoke-rc.d -f squeezeslave defaults

bye
marco
PS: to auto-answer my previous question, squeezebox can be managed accessing localhost:9000 using a browser on the raspberrypi [It was not that clear to me since I am forced to use raspberrypi via ssh, so I need to setup a vnc session…]

03/01/13 @ 22:03
Comment from: foolonthehill [Member]

marco,

Thanks for your comments. You are right that allthingspi has a couple of extra steps to get squeezeslave working and add a bit more functionality.

His package includes the squeezeplay binary, which I have not managed to get to compile happily on my pi, and also adds an init.d script.

As for managing the server, you should be able to access LMS from any other PC/device on your network. Just run ifconfig from your ssh session to get the pi’s ip address (it will look something like 192.168.1.50) then access this address on port 9000 in any browser - ie go to http://192.168.1.50:9000

Hope this helps and good luck.

foth

03/01/13 @ 22:28
Comment from: Bernard [Visitor]
Bernard
5 stars

Hi,

Very clear instructions. Thx a lot.

I recently bought a Raspberry Pi Type B and installed the latest Raspbian Wheezy image on it (2012-12-16-wheezy-raspbian). This distro comes with Perl version 5.14.2, which is not supported by the buildme.sh script for the CPAN modules.
So I modified the buildme.sh to add support for Perl 5.14.2, launched the build script, and followed the rest of the instructions.
Everything seems to work fine.

The changes I needed to do for the buildme.sh:
$ diff -c buildme.sh.orig buildme.sh
*** buildme.sh.orig 2013-01-03 18:15:42.318840973 +0100
— buildme.sh 2013-01-03 18:36:39.474892678 +0100
***************
*** 146,151 ****
— 146,160 —-
echo “Building with Perl 5.14 at $PERL_514″
fi

+ # Path to Perl 5.14.2
+ if [ -x “/usr/bin/perl5.14.2″ ]; then
+ PERL_514=/usr/bin/perl5.14.2
+ fi
+
+ if [ $PERL_514 ]; then
+ echo “Building with Perl 5.14 at $PERL_514″
+ fi
+
# Install dir for 5.14
BASE_514=$BUILD/5.14

04/01/13 @ 16:14
Comment from: Richard [Visitor]
Richard
5 stars

Thanks for the tut. I followed all steps so far but when I try

$ sudo ./buildme.sh from Step 7

I got “command not found". What did I do wrong?

Thanks

09/04/13 @ 21:00
Comment from: Geoff [Visitor]
Geoff
5 stars

Thanks for the guide. I have managed to install the media server on the RPi and it is running. However, how do I point it towards the music folder on a Linkstation Live NAS?

25/04/13 @ 19:10
Comment from: foolonthehill [Member]

@Richard It is telling you that it can’t find the “buildme.sh” script, so you are most likely not in the correct folder. You’ll need to ‘cd’ into the CPAN folder, then run the build script.

Apologies this probably isn’t clear in the instructions, so I’ll correct it. Thanks

26/04/13 @ 15:17
Comment from: foolonthehill [Member]

@Geoff Glad that you managed to get it running. You do all the set up for LMS in the web interface. Go to http://192.168.***.***:9000 (replace *** with the correct address for the server) and choose the ‘Settings’ link in the bottom right hand corner. Then put in the correct Media Folders under “Basic Settings".

If you are unsure of the IP address fro your pi-server, run ‘ifconfig’ from a command line. It will be listed as “inet addr:” under the eth0 adapter (may be different if you are using a wifi card).

26/04/13 @ 15:21
Comment from: cooperised [Visitor]  
cooperised
5 stars

Thank you - your post helped me with most of the steps to get LMS compiled for a Pandaboard running Ubuntu 12.04 LTS with the TI OMAP4 kernel (ARMv7, hf).

There were a couple of other required changes, not least because some inline and out-of-line assembler in SoX uses the RSC instruction, which is not available in the Thumb-2 instruction set on ARMv7 - but the majority of the process was very similar, and it helped a lot.

The compiled binary had yet another name (armv7l-linux-thread-64int) so my plan is to sort out a way of differentiating between armel, gnuabihf and armv7 in bootstrap.pm and then to blog about it when I have the time!

There are a lot of Squeezebox users still out there. Any idea if there are plans for anyone to take on the development and maintenance of LMS? It would be great to have a project that coordinated all these development efforts…

Thanks again for sharing.

08/05/13 @ 07:57
Comment from: Kevin [Visitor]
Kevin
5 stars

Thanks for the .deb package. Got it running on my Pi right away. Awesome!

20/06/13 @ 19:25
Comment from: Jerome [Visitor]  
Jerome

Thank you very much for this tutorial. Unfortunately I cannot download the file logitechmediaserver_7.7.2_all_with_armhf.deb. It is not available any more. Could you please make it available again. That would be a great help! Or should I do the compiling by myself instead.

Thanks Jerome

31/07/13 @ 08:32
Comment from: Ian [Visitor]  
Ian
4 stars

Thanks for the great work! In the process of trying to get this running on a Beaglebone Black (as of yet unsuccessful) on Ubuntu Raring. I ran into one problem where the compilation complained that zlib was not installed (but it was!) I’ve installed zlib-dev, hoping this will fix.

Also, I’ve noticed your .deb isn’t hosted anymore - any chance of getting it back up?

10/08/13 @ 11:52
Comment from: Ian [Visitor]  
Ian
4 stars

Hi! In the throws of trying to get lms running on a Beaglebone Black. I was hoping to use your .deb, but it looks like the link is broken. Any chance of posting it again?

I’m in the process of building CPAN for a second time… let’s wait and see…

10/08/13 @ 14:33
Comment from: Piotr [Visitor]
Piotr
5 stars

Hi, the link to the .deb package 404s. Any chance you still have the package lying around ?
Cheers!

24/08/13 @ 17:32
Comment from: Johan [Visitor]
Johan
5 stars

Hello,
Could someone please share the deb package file?
The link seems to be broken.

Regards,
Johan

25/08/13 @ 12:52
Comment from: foolonthehill [Member]

Afternoon all,

Apologies for not getting back to the requests I’ve had for the deb package etc - I’m afraid I was on holiday and subsequently haven’t had a chance to update the blog.

I am in the process of updating my pi server to the latest version of SBS, so will update the package after. Of course, you might be better off by following the instructions to build a version for yourself - just installing a .deb package from a website you know nothing about is a dangerous practice indeed….!

foth.

20/09/13 @ 12:33
Comment from: foolonthehill [Member]

There’s a new update to this tutorial now, posted at http://www.imagineict.co.uk/squeezier-pi

This includes a new, whizzy .deb package for those that want it. Any feedback very welcome.

foth

25/10/13 @ 08:44


Form is loading...