kagemomiji / airsonic-advanced

airsonic-advanced
GNU General Public License v3.0
165 stars 14 forks source link

[Bug]: Changing cover art fails and results in FileSystemException: Read-only file system #373

Open maghiel opened 7 months ago

maghiel commented 7 months ago

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

  1. mkdir /srv/mp3
  2. Copy an album in it (without coverart)
  3. chown -R airsonic:airsonic /srv/mp3
  4. chmod -R 777 /srv/mp3
  5. 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]