Roon on TrueNAS Scale(Community Edition) local music doesn't appear

Hi all sorry for the totally newb question. I know just enough to be dangerous, but not enough to “fix” my issues.
I’m running Roon on TrueNas in Portainer and the container deploys fine. I’ve been able to connect Qobuz and I can play my Qobuz music on my Win11 PC without any issues at all.
BUT…
I have a lot of music stored on my NAS (/mnt/DataStore/Multimedia/Music) and I’m able to add that path in Roon Storage, but as far as Roon in concerned that folder is “empty” (There’s roughly 170Gb/25,000 files).
I suspect I’m missing something very simple, but I don’t know where to look to fix it.
Thanks for any help on it.

Maybe this is helpful? Here is the YAML I used to configure the container
services:
docker-roonserver:
container_name: docker-roonserver
environment:
TZ: America/Washington
hostname: docker-roonserver
image: steefdebruijn/docker-roonserver:latest
network_mode: host
privileged: True
restart: always
volumes:
- roon-app:/app
- roon-data:/data
- roon-music:/mnt/DataStore/Multimedia/Music
- roon-backups:/mnt/DataStore/Share/Scott/Music/backup
version: ‘3.7’
volumes:
roon-app: Null
roon-backups: Null
roon-data: Null
roon-music: Null

Maybe it already helps if you remove those superfluous lines from the Docker Compose file and recreate the application after?

1 Like

These locations look very much like those in the standard Docker image, and must be defined when setting up the container.

Essentially, these map the containers file system to the host file system.

What you’ve done is point Roon to /mnt on the container, not the local file system.

So, I would map the correct paths, rather than remove them, in the compose file or run command.

In Podman, I have this.

podman run -d \
  --name roon-server \
  --privileged \
  --restart=unless-stopped \
	-e TZ="Europe/London" \
	-v /home/martin/.config/containers/roon-server/app:/app \
	-v /home/martin/.config/containers/roon-server/data:/data \
	-v /srv/multimedia/music:/music \
	-v /srv/backup/roon:/backup \
	--health-cmd='[ -n "$(pgrep RoonServer)" ]' \
	--health-retries=5 \
	--health-start-period=60s \
	--health-timeout=10s \
	--network=host \
	roon-server

You’ll need to adapt for your specific setup, focusing on the volume lines.

1 Like

In the default config, that Steef provided, these volumes are declared without the null assignment as, for example:

volumes:
  roon-app:

Adding “: Null” may actually be an issue.

Personally, I would remove the entire second “volumes:” section. It is unnecessary and could be causing the issue.

@Scott_Nelson - I don’t think you should follow @mjw’s example and attempt to switch to Podman. You’ve very close to getting this working using Portainer and YAML. Many of us do that.

I would start by guaranteeing that the mount paths you’re using are correct and I would remove that second volumes section.

Also, you’re app and data paths are probably not right. Roon is going to put its app and data files there when it installs. I think you may have specified the root of your NAS instead of a dedicated folder.

Here’s a link to a now outdated walkthrough I wrote on how to get Roon working in a container on Synology. This pre-dates the ability to use a YAML file (which Synology added later) but the parts that are probably helpful to you are the parts that explain how to set up app and data directories. The model I like is to create a top-level folder/share on the NAS called “docker” or something like that and create a subfolder for each container or project. That’s where you’d want your app and data directories to go.

So…do this:

  • delete the second “volume” section. Test. That may fix your issue but your paths are still in need of being fixed
  • Fix the rest of your paths. Create a docker folder with a subfolder called Roon. Create app, data, backup(s) inside of there. Point your YAML at those paths

Hope this helps.

1 Like

I wasn’t suggesting this at all. I was simply showing that the volumes, if used, need to be declared when the container is created …

You’ll need to adapt for your specific setup, focusing on the volume lines.

Thanks @gTunes, I’ll give your tips a shot when I get off work. One question for now, are you recommending I created a Roon folder in one of the NAS datasets? (then App/data/backup subfolders)
Sorry, I don’t fully understand the way Docker works with the main system and vdevs etc…

Thanks for your post @mjw I assumed that’s what you were implying. Unfortunately, I’m likely needing a more explicit details

Somehow forgot to include the link to the walkthrough. I do think it’s worth a read because it illustrates the file hierarchy I’m recommending:

Close. When you create a Docker container, you typically need to provide mappings from the host system into the container. A good pattern for this is to create a top-level folder on your NAS called Docker or docker and then create a subfolder for each container you create. Roon may be your first container but you should look ahead and assume that you may want others in the future.

So…create a share/folder/whatever on TrueNAS called “Docker”. Then create a folder in there called “Roon” and, within that, create app, data, backup folders. Map those into the Roon container using the “volume:” section of your YAML file.

I’m not recommending that you put Music in there because you already have a Music folder. Just map that one in as you’ve been doing, but verify that the path is correct.

The walkthrough I created a few years ago explains how to do this in the Synology UI and, even though that’s not what you’re using, it shows the file hiearchy that I recommend you create.

1 Like

I see. I thought you were recommending he move to Podman. He has those volumes declared but he’s done it twice, which could be the problem. When you specify a volume’s value as “: Null” you’re telling Docker that you want to create the volume with default settings. I’m not sure what impact that has when, in same service definition, you’ve already declared those volumes with explicit values. Certainly it’s not going to help anything :slight_smile:

As far as I can tell the last set of
volumes:
roon-app:
roon-data:
roon-music:
roon-backups:

Can’t be modified or deleted. I tried, both and got a “FAILED [EFAULT] Failed ‘down’ action for ‘roon’ app. Please check /var/log/app_lifecycle.log for more details”

SO…
I killed the image, and deleted everything. I manually built the container using my volume paths:
volumes:
- roon-app:/DataStore/Docker/Roon/App
- roon-data:/DataStore/Docker/Roon/Data
- roon-music:/DataStore/Multimedia/Music
- roon-backups:/DataStore/Docker/Roon/Backup

and after I deployed the container, those “extra” ones were there again. So I killed that container too, and re-deployed it through YAML.
This is what it looks like now

services:
docker-roonserver:
container_name: docker-roonserver
environment:
TZ: USA/Washington
hostname: docker-roonserver
image: steefdebruijn/docker-roonserver:latest
network_mode: host
privileged: True
restart: always
volumes:
- roon-app:/DataStore/Docker/Roon/App
- roon-data:/DataStore/Docker/Roon/Data
- roon-music:/DataStore/Multimedia/Music
- roon-backups:/DataStore/Docker/Roon/Backup
version: ‘3.7’
volumes:
roon-app: Null
roon-backups: Null
roon-data: Null
roon-music: Null

And still, Roon can’t see the music files. I’m wondering if it’s a permissions thing with the music folder?

Let’s ignore the issue with the duplicates for the moment.

When you write this in a volume specification:

  • roon-music:/DataStore/Multimedia/Music

You’re telling Docker to create a volume in the container at “/roon-music” that is a mapping of the host’s /DataStore/Multimedia/Music. So, from within the container, you don’t want to be referencing /DataStore/MultiMedia/Music, you want to be referencing “/roon-music”.

In the picture you shared, you’re trying to find music in DataStore/Multimedia/Music. I’m actually not sure why DataStore is visible but I do know that isn’t where you want to point Roon.

Here’s a picture of my Storage folder in Roon. My server is roonTrinity, the / is the root and “music” is what I mapped my music folder into. From within this setting in Roon, you should navigate up to the root by clicking on the slash in this:
image

Once you’re looking at the root, you should see roon-music, and that’s what you want to pick. I hope that makes sense.

It makes sense (maybe not entirely, but it’s a great start).
I’ve gotten Roon pointed to /music like you have shown in your image. Although mine shows the directory to be “empty”. Which tells me I haven’t corrected the “link” (I guess you could call) of the /music to my /DataStore/Multimedia/Music (host music volume).

I really appreciate your help with this, it’s been bugging me for about a year now

I think you’re still not quite understanding.

Here’s a subset of your yaml file.

volumes:
- roon-music:/DataStore/Multimedia/Music

The second line there is a command to Docker. You are telling Docker "Make it seem like there is a folder at the root of the containers drive called “/roon-music”. Make the contents of that folder be the contents of /DataStore/Multimedia/Music.

So when you go to configure Roon, you should be looking for the folder /roon-music at the root of the drive.

In my example, you see me using the folder “/music” at the root of my drive. This is because, in my yaml file, I did something like:

volumes:
- music:/{path to my music}

In my last message, I said you needed to look for /roon-music at the root. Instead, I think you used /music. Trying looking for /roon-music.

The folders in the container are /app, /data, /backup, and /music, and the form is the same as I posted in the Podman (Docker) run command.

You should map to the local filesystem, e.g., - /mnt/DataStore/Multimedia/Music:/music

1 Like

Oh boy. You’re right but we’re giving him confusing, contradictory info. He’s trying to follow Steef’s example YAML which is why I’ve been trying to stick with roon-* but you’re right that the container expects him to be using /app and /data. The container’s run.sh doesn’t care what he uses (or if he uses anything) for music and backups. @mjw - take a look at the yaml here to see the template he’s following : GitHub - steefdebruijn/docker-roonserver: RoonServer downloading Roon on first run. This is what’s creating the confusion because of its use of roon-*.

@Scott_Nelson : I think you should do two things:

  1. Change the first volumes section to:
volumes:
- /DataStore/Docker/Roon/App:/app
- /DataStore/Docker/Roon/Data:/data
- /DataStore/Multimedia/Music:/music
- /DataStore/Docker/Roon/Backup:/backup
  1. Delete the second “volumes:” section that declares roon-app, roon-backups, roon-data, roon-music.

I know that deleting the second section didn’t work before but it should now.

Once you’ve done this, you should be able to add the root folder as /music, not roon-music as I said earlier.

Sorry for the confusion here. I think this will work.

2 Likes

Sorry about my brevity earlier, which probably lead to some of the confusion.

IIRC, the template confused me when I setup my container. The roon-* entries would be clearer if real paths were used, or something like <host path>. They are on the host not the container.

I think you’ve nailed it with your last post.

Yep …

1 Like

Holy crap… @gTunes and @mjw you are both AMAZING!!! It took a little tweaking to your YAML gTunes. It wouldn’t deploy until I added “/mnt” to the beginning. So it looks like this now

volumes:
-/mnt/DataStore/Docker/Roon/App:/app
-/mnt/DataStore/Docker/Roon/Data:/data
-/mnt/DataStore/Multimedia/Music:/music
-/mnt/DataStore/Docker/Roon/Backup:/backup

But I’ve got local files loading!!

I don’t think (as far as I can tell) anything needs to happen with the “duplicates”, the container shows this. (and also, it’s working)

2 Likes

Glad we figured it out! Sorry for the confusion earlier but we got there :slight_smile:

I’m not sure what you mean when you say “the duplicates”. Do you mean the second “volumes” block where you declare roon-music and the rest of them?

If so, that block should be removable at this point. It’s declaring a set of logical volumes that you haven’t defined and aren’t using. Personally, I’d delete it to avoid any confusion in the future.

Glad you’re up and running!

Oh no problem at all!!!
Yes, the duplicates are the 2nd set of “volumes”. I’ll play with it this evening and see it it’ll allow me to remove that section.

I’m so happy to finally have it running in TrueNAS, it’s been a pain point for me for a long time. Again thank you both for the help. I very much appreciate you taking the time to hand hold me through it

2 Likes

Once you got it running you can try out roon in an incus container.

  1. Fire up a container, e.g. debian.
  2. Pass through your music and backup directories.
  3. apt install ffmpeg cifs-utils
  4. Install the roon server as usual

image

Set permissions of the backup directory as follows:

drwxr-xr-x 3 2147000001 2147000001 3 Feb 22 10:23 roon

with the following command. uid 2147000001 is the root user inside the container.

chown 2147000001:2147000001 /mnt/tank/backup/roon (replace your backup dataset)