Channels on TrueNAS Scale

Hi,

Loaded TrueNAS Scale on a box that I'm using for backups and would like to use for Channels as well. I've not dug into the "right" way to get it to work, but I've got it going simply using docker-compose. - Though note that the "runtime" option does not seem to be supported on the version of docker, but running "docker info" shows that the default runtime is nvidia, so I would think that should work.

Here's my compose file (created from looking at another post on the Channels forum):

version: '3.3'
services:
channels-dvr:
image: fancybits/channels-dvr:nvidia
container_name: channels-dvr
network_mode: host
environment:
- TZ=America/New_York
- NVIDIA_VISIBILE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility,video
ports:
- "8089:8089"
restart: unless-stopped
devices:
- /dev/dri:/dev/dri
volumes:
- /mnt/Rabbit/appdata/Channels:/channels-dvr
- /mnt/Turtle/media/Channels:/shares/DVR

This works well, except for perhaps a couple of things. When I start the container, I get this at the CLI:

truenas# docker-compose up -d
Creating channels-dvr ... done

truenas# 2021 Mar 28 17:12:50 truenas Process 3205400 (ffmpeg) of user 0 dumped core.

Stack trace of thread 35:
#0 0x0000000001c24931 n/a (/channels-dvr/2021.03.16.1916/ffmpeg + 0x1824931)
#1 0x0000000000c2710e n/a (/channels-dvr/2021.03.16.1916/ffmpeg + 0x82710e)
#2 0x0000000000000038 n/a (n/a + 0x0)

2021 Mar 28 17:12:50 truenas Process 3205455 (ffmpeg) of user 0 dumped core.

Stack trace of thread 36:
#0 0x0000000001c24931 n/a (/channels-dvr/2021.03.16.1916/ffmpeg + 0x1824931)
#1 0x0000000000c2710e n/a (/channels-dvr/2021.03.16.1916/ffmpeg + 0x82710e)
#2 0x0000000000000038 n/a (n/a + 0x0)

Aside from the above errors, the GUI works, I was able to restore my DB, and all looks fine, except it only does software transcoding. I can connect to it from clients locally and it seems to work great.

If I run the curl -XPOST line to check what it finds for hardware support, I get two more ffmpeg core dumps, and no useful data.

Also, I got the same core dumps before I set the docker image to use the nvidia tag, so perhaps the nvidia tag isn't needed anymore?

Anyhow, I know I'm running on an Alpha version, so I'm not expecting much, but thought I would ask.

1 Like

Is TrueNAS based on Linux now instead of FreeBSD?

TrueNAS Scale is their project to create a Linux based NAS using KVM for virtual machines and containers using Kubernetes.

This is an alpha version Iā€™m running.

I'm also in the process of setting up a TN scale box. Where you able to get hardware transcoding working? I'm hoping to use quicksync like I do with plex.

Anybody get this working on Scale yet? I've been able to install it. But, I haven't been able to access it from a browser. I don't know if the networking is broken, if the app is running as intended or what.

2 Likes

Running in Scale here now. I posted directions in the Playground section. I hope it helps.

1 Like

Thanks for taking time to post. For reference, I found your installation steps.

It seems you didn't install it as an app, which could lead to unforeseen issues, possibly performance related like you saw. You basically treated TrueNAS as any Debian install and set it up as a Docker. I would prefer to stay within the TrueCharts App wizard.

My issue atm seems to be network related. I can't be certain that Channels is running correctly, but it appears to be installed just looking at TrueCharts App. For example:

image

So, I will keep fiddling. But, thanks for your time.

I did not think Channels was in Truecharts yet like your image shows. The last time I looked it was not there. Looking this morning, its not there that I can find.

I would have preferred to make it work as a Docker app but have yet to be able to. I did get Channels to work in TrueNas Core by using the available jail app.

Installing it as a Debian app seemed the best way to go for Truenas when there are no instructions. I don't understand Docker stuff at all and there is little to no Docker instructions for Channels. I gave up after many tries using Portainer on Fedora Linux. Its just a pain. If people are making it work as a Docker app, they aren't helping any one.

Good luck! I will edit my instructions if I can to make sure people know its not a Docker app.

No. It's not an app, but it should be. On the Apps "page", there's a button to install a Docker. That's what I've been using. It provides a "form" or a "wizard" to fill out. I feel like I'm close, but I don't believe I'm populating the "wizard" correctly. So, it's showing up like the screenshot, but I can't access it. That could be because I'm not properly launching the entry point in the container or I just don't have the IP set up correctly.

I'm new to Docker, too. I like the concept. So, I have recently started using some Docker containers elsewhere on other boxes, So, I don't know Docker either. I believe I'll get the hang of it. It just takes time. Solving problems like this is one way I learn.

I've been doing some additional reading since I replied to you. I saw something on the Discord channel today about a docker-compose app that might be able to read the yml file. I'm at work now, so, I'll try to take a few minutes when I get home to try it. I believe the way it works is that you use it as a template and then rename it from docker-compose to whatever you need.

EDIT: Also, another option that I have considered but am trying to avoid is to install another Linux as a VM and then set up docker there. But, I want to stick with containers as I believe the memory and cpu would only be tied up when the container was actually busy, as opposed to, tying up CPU cores, threads and memory all the time. I'm unclear whether those resources become unavailable to host OS when they are defined for the VM. But, the TrueNAS documentation says this: "TrueNAS assigns a portion of system RAM and a new zvol to each VM. While a VM is running, these resources are not available to the host computer or other VMs." which sounds to me like resources are tied up.

EDIT2: There's a "Launch Docker" button on the Apps screen. I tried to get the docker-compose to work. But, I never could. But, using the "Launch Docker" button got it installed. I can browse to my new instance in browser. I feel pretty sure it work okay. But, I haven't migrated my current install because I'm not quite ready to flip the switch to my new server. But, I'll post back once I have a chance to confirm it works as expected. Meanwhile, if you're looking for help, start with the "Launch Docker" button.

So just an update to this its now a TrueCharts app which makes the install even easier :slight_smile: I now have it running but its still not working with hardware transcoding. I ran the two permissions commands from the hardware transcoding FAQ post. I was running version 2023.09.15.0559 but also had it pull the beta 2023.10.01.0552 other than that things are working well. Here is the debug info so it still looks like a rights problem.

amf

fork/exec /channels-dvr/2023.10.01.0552/ffmpeg-dl: no such file or directory

nvenc

fork/exec /channels-dvr/2023.10.01.0552/ffmpeg-dl: no such file or directory

vaapi@/dev/dri/card0

no such file or directory

vaapi@/dev/dri/renderD128

no such file or directory

vaapi@/dev/dri/renderD129

no such file or directory

vaapi@/dev/renderD128

no such file or directory

Does this exist and has it been exposed to the container?

1 Like

root@truenas[/dev/dri]# ls
by-path card0 renderD128
root@truenas[/dev/dri]#

Its there but now I need to figure out how to give the container access to it... I thought the other commands did that but maybe I missed something

These are the commands I tried maybe I did them wrong?

I just tried them again and see the following

root@truenas[~]# sudo adduser $(id -u -n) video
The user root' is already a member of video'.
root@truenas[~]# sudo adduser $(id -u -n) render
The user root' is already a member of render'.

I did all of this through the main terminal interface, trying to do the same commands through the PODs shell fail due to not having sudo rights

Did you ever get the access?

My TrueNAS Scale had /dev/dri/renderD128 but it is not visible in the container.

When you create the container, pass --device /dev/dri on the command line when creating it to give the container access to the device. Or if they use some UI when creating the container, add the path as a device.

(Edited per post below.)

isn't -d for --detach?
thought devices were --device
like --device /dev/dri:/dev/dri

I think you may be right. (I always use the long options to keep my scripts legible, and never use the detach option.)

Just checking in on this, has anyone been able to pass through hardware decoding? Trying to decide whether to do my next build with TrueNAS scale on bare metal or put it in Proxmox.

There are plenty of youtube videos that show how to bass the GPU from Proxmox to VMs

1 Like

For the more-than-a-little technically inclined, Proxmox is something special. So, I'd say yes -- virtualize it, especially if you're running it on a decent hardware platform.

Proxmox is a its best when resources aren't monopolized, but rather are shared, and this is best done with LXC containers. There are times when VMs are the only solution, but where possible CTs are preferred. In addition, when passing resources through, typically you don't want that resource dedicated to a single virtualization.

Unfortunately, much of the of what you'll find on YouTube or through other Googling is inaccurate, incomplete or outdated -- especially if you want to run Channels DVR in an unprivileged container, with hardware transcoding available (but not exclusive) to the container.

There are differences in how to approach this depending on the hardware you're using, so rather than laying out all the options here, the answer to your question is yes. :slight_smile:

Here's Channels DVR running as a Docker container, in an unprivileged Proxmox LXC, with Intel QuickSync passed through:

intel-gpu-top -  275/ 275 MHz;    0% RC6;  1.11 Watts;      645 irqs/s

      IMC reads:     1136 MiB/s
     IMC writes:      641 MiB/s

          ENGINE      BUSY                                                                                          MI_SEMA MI_WAIT
     Render/3D/0   13.69% |ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–‰                                                                           |      7%      0%
       Blitter/0    0.80% |ā–‹                                                                                      |      0%      0%
         Video/0    6.20% |ā–ˆā–ˆā–ˆā–ˆā–ˆā–                                                                                 |      0%      0%
  VideoEnhance/0    7.70% |ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–‹                                                                                |      2%      0%

Thanks guys, I do know Proxmox is easy enough to pass through on -- was looking for news specifically on the ability to do this with TrueNAS.

1 Like