Project One-Click: All-in-One Installations of Docker Extensions and CDVR Custom Channels

If you're spinning them up through Project One-Click, then it should work. @chDVRuser and I spent some time making sure that would work, on Synology and Debian at least. :slight_smile:

Misread this, I somehow thought you were asking about two CDVR instances. Since OliveTin already supports multiple DVRs, multiple instances of OliveTin have not been tested.

You must be thinking about multiple Channels DVR Server containers.
I never ran more than one instance of OT4C on a server and can't see why someone would.
In fact, I don't think you have a Project One-Click for OliveTin for Channels.

Right you are -- lazy reading on my part.

For some reason ChannelsDVR won't start. I even tried restarting the PC (and then restarting docker, portainer) but even when I click to start ChannelsDVR it won't start.
any idea?

The Docker version of CDVR -- installed via Project One-Click?

I don't recall . Probably not. How do I redo it?

You should search for any relevant topics on this subject, and if you don't find one, create a new topic. That'll bring in some folks with more troubleshooting experience on something like this...

I just clicked "Create a Channels DVR Stack in Portainer" in the Olivetin one-click and it created the container and now Channels DVR opened. It asked me to setup from scratch.
Is there anything that I need to know when filling in the info for the custom channels

EDIT - In E+TV I selected linear channels, and then copied the URL that it gave into Channels DVR Source field - and it works!!!! Thanks SO much. Very excited.

New bnhf/olivetin:latest (aka bnhf/olivetin:2025.03.27) pushed, that should address the issue with the Plex-for-Channels Project One-Click Action throwing errors on setting up one or both CDVR Custom Sources for Plex.

I was previously only waiting for the M3U to become available before considering the container online, now I'm waiting for the XML specified in the Project One-Click configuration, to come up before adding the Custom Sources.

Also, big news on Project EZ-Start progress. OliveTin EZ-Start can now be spun-up from the command line, with Portainer and the full version of OliveTin available via Project One-Click.

More details here:

I'm doing this with the new OliveTin EZ-Start: The Next Generation project. So yes, it can be done, and there's even a Project One-Click Action to do it.

1 Like

@bnhf I see that you have been very productive. I'm a little slow. So, I'll start by giving the Plex-for-Channels Project One-Click Action a try.

The One-Click Plex-for-Channels action completed with two sources.

Screenshot 2025-03-27 2.12.40 PM

Initially, guide data was incomplete.

After refreshing once, it looks ok.

What did you use for your HOST_DIR value?

/Users/xxx/data , which I use on other working containers. The container added files there too, so appears to work.

Thanks for the tip on restart unless stopped on the other thread, but this is where it gets weird :

When i comment that out, and start the container - it stays up fine. I'll leave as-is for troubleshooting now, but it looks like something after deployment is causing it to restart, but i can't pinpoint it without 1-click composing the stack with that commented out, right?

Scratch that - it failed after 5 mins (vs instantaneouly when flag was active) - i'll take this back to the mlb thread.

I'm having issues getting new project one-click's to work. Below is the post-install healthcheck. What am I doing wrong?

  • dvr=192.168.150.242:8089

  • hostHealthcheck=0

  • [[ 0 == 0 ]]

  • hostHealthcheck=
    ++ echo 192.168.150.242:8089
    ++ awk -F: '{print $1}'

  • channelsHost=192.168.150.242
    ++ echo 192.168.150.242:8089
    ++ awk -F: '{print $2}'

  • channelsPort=8089

  • logFile=/config/192.168.150.242-8089_healthcheck-olivetin_latest.log

  • healthcheck=/config/fifopipe_containerside.sh

  • main

  • containerHealthcheck

  • echo -e 'Checking your OliveTin-for-Channels installation...'

  • [[ -n '' ]]

  • echo -e '(extended_check=false)\n'
    ++ grep pageTitle: /config/config.yaml
    ++ awk '{print $3}'

  • olivetinVersion=2025.07.02

  • echo -e 'OliveTin Container Version 2025.07.02'

  • echo -e 'OliveTin Docker Compose Version \n'

  • echo -e '----------------------------------------\n'

  • echo -e 'Checking that your selected Channels DVR server (192.168.150.242:8089) is reachable by URL:'

  • echo -e 'HTTP Status: 200 indicates success...\n'
    ++ curl --fail --output /dev/null --max-time 5 -w 'HTTP Status: %{http_code}\nEffective URL: %{url_effective}\n' http://192.168.150.242:8089

  • curlDVR=' % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed

    0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
    100 1276 100 1276 0 0 113k 0 --:--:-- --:--:-- --:--:-- 113k
    HTTP Status: 200
    Effective URL: http://192.168.150.242:8089/'

  • echo -e ' % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed

    0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
    100 1276 100 1276 0 0 113k 0 --:--:-- --:--:-- --:--:-- 113k
    HTTP Status: 200
    Effective URL: http://192.168.150.242:8089/\n'

  • echo -e '----------------------------------------\n'

  • echo -e 'Checking that your selected Channels DVR server'''s data files (/mnt/192.168.150.242-8089) are accessible:'

  • echo -e 'Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...\n'

  • ls -la /mnt/192.168.150.242-8089

  • echo -e '\nIf the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:\n'

  • echo -e 'Channels reports this path as...'
    ++ curl -s http://192.168.150.242:8089/dvr
    ++ jq -r .path
    ++ tee -a /config/192.168.150.242-8089_healthcheck-olivetin_latest.log

  • dvrShare='/Volumes/External Drive/Channels DVR'

  • [[ /Volumes/External Drive/Channels DVR == \ ]]

  • windowsOS=

  • [[ -n '' ]]

  • [[ -n '' ]]

  • echo -e '\n----------------------------------------\n'

  • echo -e 'Checking that your selected Channels DVR server'''s log files (/mnt/192.168.150.242-8089_logs) are accessible:'

  • echo -e 'Folders with the names data and latest should be visible...\n'

  • ls -la /mnt/192.168.150.242-8089_logs

  • echo -e '\nIf the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:\n'

  • echo -e 'Channels reports this path as...'
    ++ grep -m 1 'Starting Channels DVR'
    ++ awk '{print $NF}'
    ++ awk '{sub(/[\/]?data$/, ""); print}'
    ++ curl -s 'http://192.168.150.242:8089/log?n=100000'
    ++ tee -a /config/192.168.150.242-8089_healthcheck-olivetin_latest.log

  • logsShare=Support/ChannelsDVR

  • [[ Support/ChannelsDVR == \ ]]

  • windowsOS=

  • [[ -n '' ]]

  • [[ -n '' ]]

  • echo -e '\n----------------------------------------\n'

  • echo -e 'Checking if your Portainer token is working on ports 9000 and/or 9443:\n'

  • [[ -z 9443 ]]

  • portainerPort=9443
    ++ curl -s -k --max-time 3 -H 'Authorization: Bearer ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' http://192.168.150.242:9000/api/status
    ++ jq -r .Version

  • echo 'Portainer http response on port 9000 reports version 2.16.2'
    ++ curl -s -k -X GET --max-time 3 -H 'X-API-Key: ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' http://192.168.150.242:9000/api/endpoints
    ++ jq '.[] | select(.Name=="local") | .Id'
    jq: error (at :1): Cannot index string with string "Name"

  • echo 'Portainer Environment ID for local is '
    ++ curl -s -k --max-time 3 -H 'Authorization: Bearer ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' https://192.168.150.242:9443/api/status
    ++ jq -r .Version

  • echo 'Portainer https response on port 9443 reports version '
    ++ curl -s -k -X GET --max-time 3 -H 'X-API-Key: ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' https://192.168.150.242:9443/api/endpoints
    ++ jq '.[] | select(.Name=="local") | .Id'

  • echo 'Portainer Environment ID for local is '

  • echo -e '\n----------------------------------------\n'

  • echo -e 'Here'''s a list of your current OliveTin-related settings:\n'

  • echo HOSTNAME=olivetin

  • echo CHANNELS_DVR=192.168.150.242:8089

  • echo CHANNELS_DVR_ALTERNATES=

  • echo 'CHANNELS_CLIENTS=192.168.150.231 192.168.150.194 146.12.197.19 192.168.150.177'

  • echo ALERT_SMTP_SERVER=smtp.gmail.com:587

  • echo [email protected]

  • awk -F@ '{print "ALERT_EMAIL_FROM=[Redacted]@" $2}'

  • [[ -n ALERT_EMAIL_PASS ]]

  • echo 'ALERT_EMAIL_PASS=[Redacted]'

  • echo [email protected]

  • awk -F@ '{print "ALERT_EMAIL_TO=[Redacted]@" $2}'

  • echo UPDATE_YAMLS=true

  • echo UPDATE_SCRIPTS=true

  • [[ -n ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c= ]]

  • echo 'PORTAINER_TOKEN=[Redacted]'

  • echo PORTAINER_HOST=192.168.150.242

  • echo PORTAINER_PORT=9443

  • echo PORTAINER_ENV=

  • echo -e '\n----------------------------------------\n'

  • echo -e 'Here'''s the contents of /etc/resolv.conf from inside the container:\n'

  • sed 's/tail.*.ts.net/tail[Redacted].ts.net/' /etc/resolv.conf

  • echo -e '\n----------------------------------------\n'

  • echo -e 'Here'''s the contents of /etc/hosts from inside the container:\n'

  • cat /etc/hosts

  • [[ -n '' ]]

  • [[ -n '' ]]

  • [[ -n '' ]]

  • cat /config/192.168.150.242-8089_healthcheck-olivetin_latest.log

Actually, you're not posting the Standard Output from the Healthcheck, you're posting the Standard Error (you should close Standard Error, and open it only if requested). What I'm asking you to post should look like this. Be sure to use 3 backticks before and after blocks like this so they are easier to read, and don't take up so much space in a post:

Checking your OliveTin-for-Channels installation...
(extended_check=false)

OliveTin Container Version 2025.06.29
OliveTin Docker Compose Version 2025.03.24

----------------------------------------

Checking that your selected Channels DVR server (media-server8:8089) is reachable by URL:
HTTP Status: 200 indicates success...

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  1276  100  1276    0     0   138k      0 --:--:-- --:--:-- --:--:--  138k
HTTP Status: 200
Effective URL: http://media-server8:8089/

----------------------------------------

Checking that your selected Channels DVR server's data files (/mnt/media-server8-8089) are accessible:
Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...

total 8
drwxr-xr-x 2 1000 1000 4096 May 19 11:38 .
drwxr-xr-x 1 root root 4096 Jun 29 16:11 ..
drwxr-xr-x 2 1000 1000    0 Jul  2 03:33 Database
drwxr-xr-x 2 1000 1000    0 Jul  2 02:21 Images
drwxr-xr-x 2 1000 1000    0 Sep 25  2024 Imports
drwxr-xr-x 2 1000 1000    0 Sep 25  2024 Logs
drwxr-xr-x 2 1000 1000    0 Jun 16 20:50 Movies
drwxr-xr-x 2 1000 1000    0 Nov 18  2024 PlayOn
drwxr-xr-x 2 1000 1000    0 Jun  1 19:23 Streaming
drwxr-xr-x 2 1000 1000    0 Jun 29 09:00 TV
drwxr-xr-x 2 1000 1000    0 Jan 20 01:44 tubearchivist

Docker reports your current DVR_SHARE setting as...
/mnt/dvr

If the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:

Channels reports this path as...
G:\dvr

When using WSL with a Linux distro and Docker Desktop, it's recommended to use...
/mnt/g/dvr

----------------------------------------

Checking that your selected Channels DVR server's log files (/mnt/media-server8-8089_logs) are accessible:
Folders with the names data and latest should be visible...

total 12
drwxr-xr-x 2 1000 1000 4096 Jun  1 19:23 .
drwxr-xr-x 1 root root 4096 Jun 29 16:11 ..
drwxr-xr-x 2 1000 1000    0 Dec  7  2024 2024.12.07.0453
drwxr-xr-x 2 1000 1000    0 Dec  9  2024 2024.12.10.0055
drwxr-xr-x 2 1000 1000    0 Dec 28  2024 2024.12.27.0121
drwxr-xr-x 2 1000 1000    0 Jan 21 16:30 2025.01.18.0528
drwxr-xr-x 2 1000 1000    0 Feb 19 12:31 2025.02.19.1823
drwxr-xr-x 2 1000 1000    0 Apr 17 13:24 2025.04.17.1651
-rwxr-xr-x 1 1000 1000  829 Jun  1 19:23 Channels DVR Server.lnk
drwxr-xr-x 2 1000 1000    0 Jul  2 12:57 data
drwxr-xr-x 2 1000 1000    0 Jun  1 19:23 latest

Docker reports your current LOGS_SHARE setting as...
/mnt/channelsdvr

If the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:

Channels reports this path as...
C:\ProgramData\ChannelsDVR

When using WSL with a Linux distro and Docker Desktop, it's recommended to use...
/mnt/c/ProgramData/ChannelsDVR

----------------------------------------

Checking if your Portainer token is working on ports 9000 and/or 9443:

Portainer http response on port 9000 reports version 2.27.0
Portainer Environment ID for local is 2
Portainer https response on port 9443 reports version 2.27.0
Portainer Environment ID for local is 2

----------------------------------------

Here's a list of your current OliveTin-related settings:

HOSTNAME=olivetin
CHANNELS_DVR=media-server8:8089
CHANNELS_DVR_ALTERNATES=utheater-pc:8089 192.168.110.66:8089
CHANNELS_CLIENTS=appletv4k firestick-master
ALERT_SMTP_SERVER=smtp.gmail.com:587
ALERT_EMAIL_FROM=[Redacted]@gmail.com
ALERT_EMAIL_PASS=[Redacted]
ALERT_EMAIL_TO=[Redacted]@gmail.com
UPDATE_YAMLS=false
UPDATE_SCRIPTS=false
PORTAINER_TOKEN=[Redacted]
PORTAINER_HOST=htpc6
PORTAINER_PORT=9443
PORTAINER_ENV=2

----------------------------------------

Here's the contents of /etc/resolv.conf from inside the container:

# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.

nameserver 127.0.0.11
search localdomain tail[Redacted].ts.net
options ndots:0

# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [host(100.100.100.100)]
# Overrides: [search]
# Option ndots from: internal

----------------------------------------

Here's the contents of /etc/hosts from inside the container:

127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::	ip6-localnet
ff00::	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.21.0.3	olivetin

Sorry about that

> (extended_check=false)
> 
> OliveTin Container Version 2025.07.02
> OliveTin Docker Compose Version 
> 
> ----------------------------------------
> 
> Checking that your selected Channels DVR server (192.168.150.242:8089) is reachable by URL:
> HTTP Status: 200 indicates success...
> 
>   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
>                                  Dload  Upload   Total   Spent    Left  Speed
> 
>   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
> 100  1276  100  1276    0     0  30380      0 --:--:-- --:--:-- --:--:-- 30380
> HTTP Status: 200
> Effective URL: http://192.168.150.242:8089/
> 
> ----------------------------------------
> 
> Checking that your selected Channels DVR server's data files (/mnt/192.168.150.242-8089) are accessible:
> Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...
> 
> total 16
> drwxr-xr-x  9 root root   288 Jun 22 16:56 .
> drwxr-xr-x  1 root root  4096 Jul  2 10:38 ..
> -rw-r--r--  1 root root 10244 Apr 15 21:31 .DS_Store
> drwxr-xr-x 33 root root  1056 Jul  1 15:32 Database
> drwxr-xr-x  7 root root   224 Jun 27 07:10 Images
> drwxr-xr-x  6 root root   192 Feb  2 17:37 Imports
> drwxr-xr-x  4 root root   128 Feb 16 19:30 Logs
> drwxr-xr-x  7 root root   224 Jun 22 16:56 Streaming
> drwxr-xr-x  4 root root   128 Jun 22 16:56 TV
> 
> If the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:
> 
> Channels reports this path as...
> /Volumes/External Drive/Channels DVR
> 
> ----------------------------------------
> 
> Checking that your selected Channels DVR server's log files (/mnt/192.168.150.242-8089_logs) are accessible:
> Folders with the names data and latest should be visible...
> 
> total 16
> drwxr-xr-x  9 root root   288 Jun 22 16:56 .
> drwxr-xr-x  1 root root  4096 Jul  2 10:38 ..
> -rw-r--r--  1 root root 10244 Apr 15 21:31 .DS_Store
> drwxr-xr-x 33 root root  1056 Jul  1 15:32 Database
> drwxr-xr-x  7 root root   224 Jun 27 07:10 Images
> drwxr-xr-x  6 root root   192 Feb  2 17:37 Imports
> drwxr-xr-x  4 root root   128 Feb 16 19:30 Logs
> drwxr-xr-x  7 root root   224 Jun 22 16:56 Streaming
> drwxr-xr-x  4 root root   128 Jun 22 16:56 TV
> 
> If the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:
> 
> Channels reports this path as...
> Support/ChannelsDVR
> 
> ----------------------------------------
> 
> Checking if your Portainer token is working on ports 9000 and/or 9443:
> 
> Portainer http response on port 9000 reports version 2.16.2
> Portainer Environment ID for local is 
> Portainer https response on port 9443 reports version 
> Portainer Environment ID for local is 
> 
> ----------------------------------------
> 
> Here's a list of your current OliveTin-related settings:
> 
> HOSTNAME=olivetin
> CHANNELS_DVR=192.168.150.242:8089
> CHANNELS_DVR_ALTERNATES=
> CHANNELS_CLIENTS=192.168.150.231 192.168.150.194 146.12.197.19 192.168.150.177
> ALERT_SMTP_SERVER=smtp.gmail.com:587
> ALERT_EMAIL_FROM=[Redacted]@gmail.com
> ALERT_EMAIL_PASS=[Redacted]
> ALERT_EMAIL_TO=[Redacted]@gmail.com
> UPDATE_YAMLS=true
> UPDATE_SCRIPTS=true
> PORTAINER_TOKEN=[Redacted]
> PORTAINER_HOST=192.168.150.242
> PORTAINER_PORT=9443
> PORTAINER_ENV=
> 
> ----------------------------------------
> 
> Here's the contents of /etc/resolv.conf from inside the container:
> 
> # Generated by Docker Engine.
> # This file can be edited; Docker Engine will not make further changes once it
> # has been modified.
> 
> nameserver 127.0.0.11
> search local
> options ndots:0
> 
> # Based on host file: '/etc/resolv.conf' (internal resolver)
> # ExtServers: [host(192.168.65.7)]
> # Overrides: [search]
> # Option ndots from: internal
> 
> ----------------------------------------
> 
> Here's the contents of /etc/hosts from inside the container:
> 
> 127.0.0.1	localhost
> ::1	localhost ip6-localhost ip6-loopback
> fe00::	ip6-localnet
> ff00::	ip6-mcastprefix
> ff02::1	ip6-allnodes
> ff02::2	ip6-allrouters
> 172.18.0.3	olivetin```

This looks to be the root of the problem. You're getting a version number from Portainer, but not an Environment ID. This is likely caused by your Portainer Token being incorrect.

I would suggest creating a new one. Copy it, and save it in a safe place. Then stop your OliveTin Stack, and replace your current PORTAINER_TOKEN value with the new one. Then click the Update the stack button.

After that rerun the Healthcheck, and let's see if that takes care of the issue.

Ah, I think that's the problem I had last time. Portainer won't let me edit certain stacks, including Olivetin. I see the below on the stack with no option to edit.

Information

This stack was created outside of Portainer. Control over this stack is limited.

Stack details

olivetin