Short version:
Changing cover art fails and results in an exception.
java.nio.file.FileSystemException: /srv/mp3/Artist - Album (1970) [FLAC]/cover.png: Read-only file system
As a last resort I've changed ownership and group to airsonic:airsonic and mode to 777, still fails.
Long version:
I like anything to have as little permissions as possible.
So I've set up my music dirs to be only readable by a group the airsonic user is in.
To be able for airsonic to change or add coverart, I wanted to just simply touch cover.png and cover.png.backup with ownership granted to airsonic. In other words: all media readable by airsonic and only coverart given full permissions to airsonic. This resulted in exceptions. So I started taking steps back, created a new path and added it to the library, still fails.
Steps to reproduce
/srv has ownership root:root
mkdir /srv/mp3
Copy an album in it (without coverart)
chown -R airsonic:airsonic /srv/mp3
chmod -R 777 /srv/mp3
Go to the web interface and try to change the coverart
Results in:
Failed to download image.
java.nio.file.FileSystemException: /srv/mp3/Artist - Album (1970) [FLAC]/cover.png: Read-only file system
Note that I first had
ProtectSystem=strict
ProtectHome=true
Changing them back to
ProtectSystem=full
ProtectHome=false
has no effect.
Version
11.1.x (Edge)
Version Detail
11.1.3 – February 6, 2024 at 1:14:16 PM CET [Commit: 154574bc7b5a149127ea85dbc295aed0139d5b62]
Operating System
openSUSE Leap 15.5
Java Version
Apache Tomcat/9.0.83, java 17.0.10
Database
Other
DB Detail
hsql
Configuration paramter
.
Proxy Server
Apache 2
client detail
Firefox
language
English
Relevant log output
2024-02-16 21:44:03.757 WARN --- o.a.p.service.CoverArtService : Failed to create image file backup /srv/mp3/Artist - Album (1970) [FLAC]/cover.png.backup
java.nio.file.FileSystemException: /srv/mp3/Artist - Album (1970) [FLAC]/cover.png -> /srv/mp3/Artist - Album (1970) [FLAC]/cover.png.backup: Read-only file system
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100) ~[na:na]
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106) ~[na:na]
at java.base/sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:477) ~[na:na]
at java.base/sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:266) ~[na:na]
at java.base/java.nio.file.Files.move(Files.java:1432) ~[na:na]
at org.airsonic.player.service.CoverArtService.backupCoverArt(CoverArtService.java:191) ~[classes!/:11.1.3]
at org.airsonic.player.service.CoverArtService.saveCoverArt(CoverArtService.java:177) ~[classes!/:11.1.3]
at org.airsonic.player.service.CoverArtService.setCoverArtImageFromUrl(CoverArtService.java:145) ~[classes!/:11.1.3]
at org.airsonic.player.ajax.CoverArtWSController.setCoverArtImage(CoverArtWSController.java:40) ~[classes!/:11.1.3]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMatch(AbstractMethodMessageHandler.java:569) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:511) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:94) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessageInternal(AbstractMethodMessageHandler.java:524) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:458) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
2024-02-16 21:44:03.781 WARN --- o.a.p.ajax.CoverArtWSController : Failed to save cover art for media file 12306
java.nio.file.FileSystemException: /srv/mp3/Artist - Album (1970) [FLAC]/cover.png: Read-only file system
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100) ~[na:na]
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106) ~[na:na]
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) ~[na:na]
at java.base/sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:248) ~[na:na]
at java.base/sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:110) ~[na:na]
at java.base/java.nio.file.Files.deleteIfExists(Files.java:1191) ~[na:na]
at java.base/java.nio.file.Files.copy(Files.java:3148) ~[na:na]
at org.airsonic.player.service.CoverArtService.saveCoverArt(CoverArtService.java:180) ~[classes!/:11.1.3]
at org.airsonic.player.service.CoverArtService.setCoverArtImageFromUrl(CoverArtService.java:145) ~[classes!/:11.1.3]
at org.airsonic.player.ajax.CoverArtWSController.setCoverArtImage(CoverArtWSController.java:40) ~[classes!/:11.1.3]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMatch(AbstractMethodMessageHandler.java:569) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:511) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:94) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessageInternal(AbstractMethodMessageHandler.java:524) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:458) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144) ~[spring-messaging-5.3.31.jar!/:5.3.31]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
What happened?
Short version: Changing cover art fails and results in an exception. java.nio.file.FileSystemException: /srv/mp3/Artist - Album (1970) [FLAC]/cover.png: Read-only file system As a last resort I've changed ownership and group to airsonic:airsonic and mode to 777, still fails.
Long version: I like anything to have as little permissions as possible. So I've set up my music dirs to be only readable by a group the airsonic user is in. To be able for airsonic to change or add coverart, I wanted to just simply touch cover.png and cover.png.backup with ownership granted to airsonic. In other words: all media readable by airsonic and only coverart given full permissions to airsonic. This resulted in exceptions. So I started taking steps back, created a new path and added it to the library, still fails.
Steps to reproduce
/srv has ownership root:root
Results in: Failed to download image. java.nio.file.FileSystemException: /srv/mp3/Artist - Album (1970) [FLAC]/cover.png: Read-only file system
Note that I first had ProtectSystem=strict ProtectHome=true Changing them back to ProtectSystem=full ProtectHome=false has no effect.
Version
11.1.x (Edge)
Version Detail
11.1.3 – February 6, 2024 at 1:14:16 PM CET [Commit: 154574bc7b5a149127ea85dbc295aed0139d5b62]
Operating System
openSUSE Leap 15.5
Java Version
Apache Tomcat/9.0.83, java 17.0.10
Database
Other
DB Detail
hsql
Configuration paramter
.
Proxy Server
Apache 2
client detail
Firefox
language
English
Relevant log output