Hi all,
I think I have finally isolated what is happening with Roon Server updates on my QNAP Docker installation, and I found a workaround that allowed me to update Roon Server without losing my existing configuration.
My setup:
QNAP TS-453Be
QNAP Container Station
Docker Compose
Roon Docker image: Package roonserver · GitHub
network_mode: host
ROON_INSTALL_BRANCH=earlyaccess
My Roon Server was stuck on:
Roon Server 2.71 build 1676 earlyaccess
while the current Early Access build was 1684.
Roon could see/check for the update, but the update process was not completing correctly.
My compose configuration was:
services:
roonserver:
image: Package roonserver · GitHub
container_name: roonserver
network_mode: host
environment:
- ROON_INSTALL_BRANCH=earlyaccess
- TZ=Europe/Rome
volumes: - /share/Multimedia/RoonOnNAS:/Roon
- /share/Musica:/Music
- /share/Multimedia/RoonBackups:/RoonBackups
restart: unless-stopped
logging:
driver: local
FIRST TEST: COMPLETELY FRESH /Roon DIRECTORY
To rule out corruption or leftovers from the old Roon installation, I first renamed my old persistent Roon directory and created a completely new empty one.
The container correctly detected that there was no existing RoonServer installation:
Roon Docker image 1.0.7 starting.
No existing RoonServer install found under /Roon/app/RoonServer.
Resolved ROON_INSTALL_BRANCH=‘earlyaccess’.
No install present; installing branch ‘earlyaccess’.
Downloading from:
https://download.roonlabs.net/builds/earlyaccess/RoonServer_linuxx64.tar.bz2
100%
During extraction, however, I got these errors:
tar: RoonServer/Appliance/.roonhost/RAATServer: Cannot change mode to rwxr-xr-x: Bad address
tar: RoonServer/Appliance/.roonhost/RoonAppliance: Cannot change mode to rwxr-xr-x: Bad address
tar: RoonServer/Server/.roonhost/RoonServer: Cannot change mode to rwxr-xr-x: Bad address
tar: RoonServer/Server/.roonhost: Cannot change mode to rwxr-xr-x: Bad address
tar: RoonServer/Server: Cannot change mode to rwxr-xr-x: Bad address
tar: RoonServer/Appliance/.roonhost: Cannot change mode to rwxr-xr-x: Bad address
tar: RoonServer/Appliance: Cannot change mode to rwxr-xr-x: Bad address
tar: RoonServer: Cannot change mode to rwxr-xr-x: Bad address
tar: Exiting with failure status due to previous errors
Interestingly, because the container is configured with:
restart: unless-stopped
it restarted automatically.
On the next start I got:
Roon Docker image 1.0.7 starting.
Detected existing RoonServer install (branch: earlyaccess).
Resolved ROON_INSTALL_BRANCH=‘earlyaccess’.
Installed branch ‘earlyaccess’ matches requested branch; no reinstall needed.
Image: 1.0.7
Branch: earlyaccess
Roon: 2.71 (build 1684) earlyaccess
Started
Running
So despite tar reporting a failure, Roon Server 2.71 build 1684 had actually been installed well enough to start and run normally.
SECOND TEST: REINSTALL ONLY /Roon/app
I then tried a cleaner approach, because using a completely new /Roon directory means losing the existing Roon configuration unless a backup is restored.
Instead of replacing the whole /Roon directory, I stopped the container and renamed only:
/Roon/app
for example:
/Roon/app_OLD
I left the rest of the persistent Roon data untouched, especially:
/Roon/database
Then I restarted/recreated the container with exactly the same compose configuration.
Because /Roon/app/RoonServer was no longer present, the Docker image again detected that RoonServer was not installed:
No existing RoonServer install found under /Roon/app/RoonServer.
Resolved ROON_INSTALL_BRANCH=‘earlyaccess’.
No install present; installing branch ‘earlyaccess’.
It downloaded build 1684 again.
I still got the same:
Cannot change mode to rwxr-xr-x: Bad address
errors during extraction.
After the automatic restart, however:
Image: 1.0.7
Branch: earlyaccess
Roon: 2.71 (build 1684) earlyaccess
Started
Running
And this time the important part is that my existing Roon configuration was preserved.
I did not have to restore my database or reconfigure the server.
My existing library/database state and configuration remained in place because I only replaced the application files under:
/Roon/app
and left:
/Roon/database
untouched.
WORKAROUND
For QNAP Docker users who are stuck on an older Roon Server build, this worked for me:
-
Stop the Roon Docker container.
-
Rename:
/Roon/app
to something like:
/Roon/app_OLD
- Do NOT touch:
/Roon/database
-
Start/recreate the container.
-
Let the Docker image download and reinstall Roon Server.
-
The extraction may still show:
Cannot change mode to rwxr-xr-x: Bad address
-
With restart: unless-stopped enabled, the container restarts.
-
In my case, Roon Server then started correctly on build 1684.
-
The existing Roon configuration was preserved.
-
Keep app_OLD temporarily until everything has been checked.
CONCLUSION
This seems to show that the problem is not necessarily caused by a corrupted Roon database.
The same “Cannot change mode … Bad address” error occurs even with a completely fresh /Roon directory.
The problem appears to happen during extraction / permission handling of the RoonServer files on the QNAP bind-mounted filesystem.
At least on my TS-453Be, tar reports failure when changing file modes, but the files themselves are apparently extracted sufficiently for RoonServer to start after the container restarts.
Renaming only /Roon/app seems to be a useful workaround because it forces a fresh RoonServer installation while preserving the existing database and configuration.
Has anyone else on QNAP seen exactly the same “Cannot change mode … Bad address” behaviour?
And for the Roon team: could this be related to chmod/fchmodat behaviour on QNAP’s filesystem or Docker bind mounts?
Happy to provide the complete container logs if useful.
Nicola