Cover art not displaying. Unable to create thumbnail.

Need help? Post your questions here.

Moderator: moderators

Cover art not displaying. Unable to create thumbnail.

Postby samoshit » Fri Jul 13, 2007 2:10 am

Subsonic accesses my music through a read-only fileshare. I'd prefer it if I can store thumbnails in /var/subsonic/thumbnails, rather than the directory of the track being played. Can this be done?
samoshit
 
Posts: 18
Joined: Fri Jul 13, 2007 1:02 am

Postby sindre_mehus » Fri Jul 13, 2007 6:20 am

The thumbnails (scaled-down version of the cover art images) are indeed stored in /var/subsonic/thumbs. The cover art images themselves, however, are stored together with the music. There is no way around this, I'm afraid.
User avatar
sindre_mehus
 
Posts: 1955
Joined: Tue Nov 29, 2005 6:19 pm
Location: Oslo, Norway

Postby samoshit » Fri Jul 13, 2007 1:37 pm

tomcat has full write access to the thumbs dir

Code: Select all
sean@santo:/var/subsonic$ ls -ld thumbs
drwxr-xr-x 3 tomcat tomcat 4096 2007-07-13 09:34 thumbs/


the cover art is already within the album directory. they are all named windows style - folder.jpg. i have cover art in this form with about 90% of my albums.

why does tomcat need to write to the album dir?
samoshit
 
Posts: 18
Joined: Fri Jul 13, 2007 1:02 am

Postby sindre_mehus » Fri Jul 13, 2007 3:25 pm

Hm, I see. No, Subsonic shouldn't need write access to the album directory. Can you pls give some more details about the error you get?

Can you also double-check that Tomcat is running as user tomcat?

Sindre
User avatar
sindre_mehus
 
Posts: 1955
Joined: Tue Nov 29, 2005 6:19 pm
Location: Oslo, Norway

Postby samoshit » Fri Jul 13, 2007 4:01 pm

Whats a line of code that will prove Tomcat is running as tomcat? I use Tomcat5.sh as a startup script, and I told it to user tomcat as the user when running.

Code: Select all
JAVA_HOME=/usr/lib/jre1.6.0_01/
CATALINA_HOME=/usr/share/tomcat/
DAEMON_HOME=/usr/share/tomcat/
TOMCAT_USER=tomcat


here is a tail of subsonic.log. It seems more detailed than the "Help" button shows.

Code: Select all
sean@santo:/var/subsonic$ tail -n 50 subsonic.log
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:178)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:217)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:106)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:229)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
        at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at net.sourceforge.subsonic.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:25)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at net.sourceforge.subsonic.filter.ParameterDecodingFilter.doFilter(ParameterDecodingFilter.java:36)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at net.sourceforge.subsonic.filter.BootstrapVerificationFilter.doFilter(BootstrapVerificationFilter.java:36)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively(Native Method)
        at java.io.File.checkAndCreate(Unknown Source)
        at java.io.File.createTempFile(Unknown Source)
        at javax.imageio.stream.FileCacheImageInputStream.<init>(Unknown Source)
        at com.sun.imageio.spi.InputStreamImageInputStreamSpi.createInputStreamInstance(Unknown Source)
        ... 58 more

sean@santo:/var/subsonic$
samoshit
 
Posts: 18
Joined: Fri Jul 13, 2007 1:02 am

Postby samoshit » Fri Jul 13, 2007 4:11 pm

oh, and i should also inform you of how the music is accessed.

My music is stored in a locked directory, accessible only by FTP program and FTP users. I don't trust my shell users to enter this area. If I could, I'd host on 2 boxes, but this is more simple.

The FTP directory is then mounted read-only using --bind to a directory subsonic can access.

Code: Select all
sean@santo:/var/subsonic/music$ mount | grep subsonic
/jail/glftpd/site/mp3 on /var/subsonic/music type none (ro,bind)
/jail/glftpd/site/mvid on /var/subsonic/music/videos type none (ro,bind)


Even though it is mounted read-only, the attributes show something different. Perhaps this is causing errors.

Code: Select all
sean@santo:/var/subsonic/music$ ls -l
total 180
drwxrwxrwx 2025 root  200 106496 2007-07-12 11:26 albums/
drwxrwxrwx   54 root  200   8192 2007-04-10 17:14 comedy/
drwxrwxrwx    3 root  200   4096 2007-05-11 01:17 incoming/
drwxrwxrwx    8 root  200   4096 2006-06-25 17:32 instrumentals/
drwxrwxrwx   12 root  200   4096 2006-05-22 01:31 misc/
drwxr-xr-x   13 root  200   4096 2006-11-18 23:32 non-scene/
drwxrwxrwx  133 root  200   8192 2007-06-05 23:07 ost/
drwxrwxrwx  153 root  200  12288 2007-02-08 18:23 singles/
drwxrwxrwx  202 root  200  12288 2007-04-02 21:13 va/
drwxrwxrwx  205 root root  16384 2007-07-10 22:07 videos/
samoshit
 
Posts: 18
Joined: Fri Jul 13, 2007 1:02 am

Postby sindre_mehus » Fri Jul 13, 2007 6:45 pm

Code: Select all
Caused by: java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively(Native Method)
        at java.io.File.checkAndCreate(Unknown Source)
        at java.io.File.createTempFile(Unknown Source)


Apparently the tomcat user is missing write access to the temp directory. This is most likely /tmp or /var/tmp.

Sindre
User avatar
sindre_mehus
 
Posts: 1955
Joined: Tue Nov 29, 2005 6:19 pm
Location: Oslo, Norway

Postby samoshit » Fri Jul 13, 2007 7:20 pm

not sure why. i found two temp dirs matching *tomcat* and tomcat user has write access to both.

Code: Select all
sean@santo:/tmp/hsperfdata_tomcat$ ls -l
total 32
-rw------- 1 tomcat tomcat 32768 2007-07-13 00:31 24679


Code: Select all
sean@santo:/var/tmp/tomcat$ ls -l
total 0
-rw-r--r-- 1 tomcat tomcat 0 2006-03-04 20:23 bugzilla37035-safeToDelete.tmp
samoshit
 
Posts: 18
Joined: Fri Jul 13, 2007 1:02 am

Postby sindre_mehus » Fri Jul 13, 2007 8:20 pm

I'm not on Linux, so I'm not sure how Tomcat is installed there, but is there a directory called "temp" or "tmp" somewhere in the TOMCAT_HOME directory? (Where subsonic.war is deployed)
User avatar
sindre_mehus
 
Posts: 1955
Joined: Tue Nov 29, 2005 6:19 pm
Location: Oslo, Norway

Postby samoshit » Fri Jul 13, 2007 11:14 pm

Yes there is but it is a symlink back to /var/tmp/tomcat. As you can see it is chmod 777 so it has full read/write.

Code: Select all
sean@santo:/usr/share/tomcat$ ls -l temp
lrwxrwxrwx 1 root root 23 2007-07-12 20:16 temp -> ../../../var/tmp/tomcat/
samoshit
 
Posts: 18
Joined: Fri Jul 13, 2007 1:02 am


Return to Help

Who is online

Users browsing this forum: No registered users and 16 guests