JUL 2015 UPDATE: I modified the procedure to work with Ubuntu 14.04 x86_64, see post 8 : http://forums.slimdevices.com/showth...l=1#post824281
The subject of building Squeezeplay on Linux comes up occasionally but the most popular Googled guides are also a bit out of date, so here's what I just pulled off on my i386 Xubuntu box.
1. Set up your environment:
I'm not sure if this dependency list is up to date since I know I've had to update these libraries for other projects from time to time. Therefore I simply copied this list from the excellent though old http://www.jfwhome.com/2009/11/22/co...-ubuntu-amd64/ . If you're doing this from scratch you may find that you have to update the library list, but this will at least get you moving in the right direction.
sudo apt-get install build-essential flex bison subversion automake libtool libpng12-dev libjpeg62-dev libexpat1-dev libreadline5-dev xorg-dev libflac++-dev libvorbis-dev libvorbisidec-dev libasound-dev
2. Pull a Squeezeplay v7.8 snapshot:
cd <builddir>
svn co http://svn.slimdevices.com/repos/jiv...nk/squeezeplay
3. Tweak <builddir>/squeezeplay/src/Makefile.linux:
On line 10, change ${PWD} to $(shell pwd) . After the change, line 10 will look like this:
SRC_DIR = $(realpath $(shell pwd)) .
Search for 'luaprofiler-2.0', change line from:
cd luaprofiler-2.0 && make -f Makefile.linux install
to:
cd luaprofiler-2.0 && LD="gcc -shared" make -f Makefile.linux install
4. Tweak <builddir>/squeezeplay/src/squeezeplay/src/audio/decode/decode.c:
Search for 'elapsed:%llu' , change printf line from '%llu' to '%"PRIu64"' . After the change, the line will look something like this:
printf("elapsed:%"PRIu64" buffers: %0.1f%%/%0.1f%%\n", elapsed, dbuf, obuf);
5. Kludge the Squeezeplay PulseAudio library by downloading the latest library snapshot:
http://www.portaudio.com/archives/pa_snapshot.tgz
Delete all contents in <builddir>/squeezeplay/src/portaudio_v19_1360, then expand the library snapshot in this directory.
6. Kludge the Squeezeplay SDL library by downloading 1.2.15 source from:
http://www.libsdl.org/download-1.2.php
Delete all contents in <builddir>/squeezeplay/src/SDL-1.2.13 then expand the latest source in this directory.
7. cd <builddir>/squeezeplay/src/, execute "sudo make -f Makefile.linux" . If the build succeeds your results will be in <builddir>/squeezeplay/build (as directories you can copy to /opt/squeezeplay AND a tarball).
This gets you a working build but there's some other stuff you'll have to tweak to get around PulseAudio.
8. Modify your ALSA configuration:
a. Copy /usr/share/alsa/alsa.conf to /usr/share/alsa/alsa-nopulse.conf.
b. Comment OUT any Pulse invocation in also-nopulse.conf. In my case I commented every alsa.conf.d invocation within the @hooks/files section of this file, leaving "/etc/asound.conf" and "~/.asoundrc" in place, e.g.:
@hooks [
{
func load
files [
# {
# @func concat
# strings [
# { @func datadir }
# "/alsa.conf.d/"
# ]
# }
"/etc/asound.conf"
"~/.asoundrc"
]
errors false
}
]
9. Modify the squeezeplay.sh script you just built (<builddir>/squeezeplay/bin/squeezeplay.sh) to bypass PulseAudio using your new script:
Change "./jive" to:
ALSA_CONFIG_PATH=/usr/share/alsa/alsa-nopulse.conf ./jive
10. My system has some remaining permissions issues so I have to run /opt/squeezeplay/bin/squeezeplay.sh with root privilege. I got tired of tracking problems down so if anyone knows how to get it running as a normal user, please add to the thread.
Results 1 to 8 of 8
-
2013-01-01, 11:08 #1
- Join Date
- Jun 2011
- Posts
- 13
Building & running Squeezeplay v7.8 trunk on Ubuntu 12.04
Last edited by Braklet; 2015-07-15 at 14:12. Reason: 14.04 x86_64 update
-
2013-01-06, 15:21 #2
- Join Date
- Sep 2005
- Posts
- 2,848
-
2013-01-19, 06:52 #3
- Join Date
- Jun 2011
- Posts
- 13
Hi Jan, that's a good guess but isn't the case on my system. Normal user is part of all the audio related system groups:
Code:groups rlr rlr : rlr adm dialout cdrom audio plugdev lpadmin admin sambashare mythtv vboxusers pulse pulse-access
Code:Squeezeplay 7.8.0 r9704M 20130119 13:40:22.564 INFO squeezeplay - JiveMain.lua:265 SqueezePlay version 7.8.0 r9704M 20130119 13:54:48.841 ERROR audio.codec - decode_alsa_init:210 shmget error Permission denied 20130119 13:40:24.965 ERROR squeezeplay.applets - AppletManager.lua:371 Error configuring meta for SetupAppletInstaller:/opt/squeezeplay/share/jive/jive/AppletManager.lua:710: fopen: Permission denied stack traceback: /opt/squeezeplay/share/jive/jive/AppletManager.lua:371: in function '_evalMetas' /opt/squeezeplay/share/jive/jive/AppletManager.lua:403: in function 'discover' /opt/squeezeplay/share/jive/jive/JiveMain.lua:516: in function 'reload' /opt/squeezeplay/share/jive/jive/JiveMain.lua:378: in function </opt/squeezeplay/share/jive/jive/JiveMain.l 20130119 13:40:26.222 ERROR net.thread - NetworkThread.lua:264 Error running notify_playerAlarmState:/opt/squeezeplay/share/jive/jive/AppletManager.lua:710: fopen: Permission denied stack traceback: ...pt/squeezeplay/share/jive/jive/net/NetworkThread.lua:264: in function 'notify' /opt/squeezeplay/share/jive/jive/slim/Player.lua:1251: in function '?' /opt/squeezeplay/share/jive/jive/slim/Player.lua:236: in function 'func' /opt/squeezeplay/share/jive/jive/net/Comet.lua:952: in function '_response' /opt/squeezeplay/share/jive/jive/net/Comet.lua
Thanks for your input!Last edited by Braklet; 2013-01-19 at 06:56. Reason: Forgot to include decode_alsa_init error
-
2013-01-19, 07:10 #4
- Join Date
- Jun 2011
- Posts
- 13
Well, after replying, I started playing around with Squeezeplay and permissions.
Running Squeezeplay seems to leave detritus scattered about the filesystem. If you run anything with root privilege, you will only be successful running with root privilege from that point on. The only way to eliminate this restriction is to power cycle.
I was able to successfully run Squeezeplay under normal user privilege after cycling power.
Now I have to go change all my menu scripts...
In any case, thanks for inducing me to take another look.
-
2013-04-09, 08:20 #5
- Join Date
- Apr 2013
- Posts
- 1
Thanks and addition
Hi,
Great post. It helped me a great deal.
I had to make 1 additional adjustment before building.
I had to comment out line 371 to 376 in <builddir>/squeezeplay/src/squeezeplay/src/ui/jive_framework.c
After my tweak it looks like:
/* check queue size */
/* if (perfwarn.queue) {
if (SDL_EventQueueLength() > perfwarn.queue) {
printf("SDL_event_queue > %2d : %3d\n", perfwarn.queue, SDL_EventQueueLength());
}
}*/
If I don't do that it keeps complaining that the SDL_EventQueueLength is an unknown function.
Regards,
MartijnLast edited by mvheezik; 2013-04-09 at 09:32.
-
2013-04-13, 20:22 #6
- Join Date
- Apr 2013
- Posts
- 3
I had to do a few extra steps...unfortunatly, i cant make a post with a link in it till i have more than 1 post...sooo...see next post.
-
2013-04-13, 20:22 #7
- Join Date
- Apr 2013
- Posts
- 3
I needed some extra steps for my system: Ubuntu 12.10, intel i5 64bit
libreadline5-dev doesnt seem to be available for my system via apt-get, but libreadline6-dev is:
Sudo apt-get install libreadline6-dev
ncurses was also needed but not installed:
sudo apt-get install ncurses-dev
From here i had to download replace 4 files from the tarball linked
files to be replaced are in the <build>/squeezeplay/src/SDL-1.2.13 dir *after* you download and expand the latest version (1.2.15 as of today)
After that, i got a successful make.
-
2015-07-15, 09:50 #8
- Join Date
- Jun 2011
- Posts
- 13
Ubuntu 14.04 x86_64 Update
Just repeated a Squeezeplay build using an Ubuntu 14.04 LTS 64 bit OS and the Squeezeplay 7.8 trunk (rev 9704). Required some changes to the procedure outlined in post #1 which I'll recap here.
1. Don't make the change to <builddir>/squeezeplay/src/squeezeplay/src/audio/decode/decode.c, just leave it as original. "%llu" works fine on my x86_64 platform.
2. The make system is set to treat warnings as errors, so tweak <builddir>/squeezeplay/src/squeezeplay/src/jive_debug.c:
Change line 100 from "memset(hd, 0, sizeof(hd));" to "memset(hd, 0, sizeof(*hd));"
3. The latest SDL-1.2.15 is a pain. I don't know how it ever worked with Squeezeplay. However, the SDL-1.2.13 bundled with Squeezeplay still causes problems so you still have to replace it with downloaded 1.2.15. Then you have to hack it and pull some of the 1.2.13 code back in. In a nutshell:
a. Download SDL-1.2.15 and replace SDL-1.2.13 as described before.
b. Patch it with this: https://sources.gentoo.org/cgi-bin/v...ch?view=markup , for example:
Code:cd SDL-1.2.13 patch -p1 < libsdl-1.2.15-const-xdata32.patch
Code:sed -i '/_XData32/s:register long:register _Xconst long:' src/video/x11/SDL_x11sym.h
Code:cd SDL-1.2.13/include patch < SDL_keysym.h.patch patch < SDL_events.h.patch cd SDL-1.2.13/src/events patch < SDL_events.c.patch
Last edited by Braklet; 2015-07-15 at 14:17.