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

Got it. Will use those going forward. Thanks.

That stack is slightly outdated, though I don't think that's the problem, go ahead and update the stack and any env var changes:

version: '3.9'
services:
  olivetin: # This docker-compose requires little or no editing. Set the Environment variables section of Portainer.
    # GitHub home for this project: https://github.com/bnhf/OliveTin.
    # Docker container home for this project with setup instructions: https://hub.docker.com/repository/docker/bnhf/olivetin.
    image: bnhf/olivetin:${TAG} # Add the tag like latest or test to the environment variables below.
    container_name: olivetin
    hostname: olivetin
    dns_search: ${DOMAIN} # For Tailscale users using Magic DNS, add your Tailnet (tailxxxxx.ts.net) to use hostnames for remote nodes, otherwise use your local domain name.
    ports:
      - ${HOST_PORT}:1337
    environment:
      - CHANNELS_DVR=${CHANNELS_DVR_HOST}:${CHANNELS_DVR_PORT} # Add your Channels DVR server in the form CHANNELS_DVR_HOST=<hostname or ip> and CHANNELS_DVR_PORT=<port>.
      #- CHANNELS_DVR_ALTERNATES=${CHANNELS_DVR2_HOST}:${CHANNELS_DVR2_PORT} # Space separated list of alternate Channels DVR servers to choose from in the form hostname:port or ip:port.
      - CHANNELS_CLIENTS=${CHANNELS_CLIENTS} # Space separated list of Channels DVR clients you'd like notifications sent to in the form hostname or IP.
      - ALERT_SMTP_SERVER=${ALERT_SMTP_SERVER} # SMTP server to use for sending alert e-mails. smtp.gmail.com:587 for example.
      - ALERT_EMAIL_FROM=${ALERT_EMAIL_FROM} # Sender address for alert e-mails.
      - ALERT_EMAIL_PASS=${ALERT_EMAIL_PASS} # SMTP "app" password established through GMail or Yahoo Mail. Do not use your everyday e-mail address.
      - ALERT_EMAIL_TO=${ALERT_EMAIL_TO} # Recipient address for alert e-mails.
      - UPDATE_YAMLS=${UPDATE_YAMLS} # Set this to true to update config.yaml.
      - UPDATE_SCRIPTS=${UPDATE_SCRIPTS} # Set this to true to update all included scripts.
      - TZ=${TZ} # Add your local timezone in standard linux format. E.G. US/Eastern, US/Central, US/Mountain, US/Pacific, etc.
      - PORTAINER_TOKEN=${PORTAINER_TOKEN} # Generate via <username> dropdown (upper right of WebUI), "My account", API tokens.
      - PORTAINER_HOST=${PORTAINER_HOST} # Hostname or IP of the Docker host you're running Portainer on.
    volumes:
      - ${HOST_DIR}/olivetin:/config # Add the parent directory on your Docker you'd like to use.
      - ${DVR_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT} # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR network share.
      - ${LOGS_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_logs # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR logs network share.
      #- ${DVR2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT} # Note that these volume mounts should always be to /mnt/hostname-port or /mnt/ip-port (dash rather than a colon between).
      #- ${LOGS2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT}_logs # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR logs network share.
    restart: unless-stopped

  static-file-server:
    image: halverneus/static-file-server:latest
    container_name: static-file-server
    dns_search: ${DOMAIN}
    ports:
      - ${HOST_SFS_PORT}:8080
    environment:
      - FOLDER=${FOLDER}
    volumes:
      - ${HOST_DIR}/olivetin/data:${FOLDER}
    restart: unless-stopped

#volumes: # Use this section if you've setup docker volumes named channels-dvr and channels-dvr-logs, with CIFS or NFS, to bind to /mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT} and  /mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_logs inside the container. Set DVR_SHARE=channels-dvr and LOGS_SHARE=channels-dvr-logs in this example.
  #channels-dvr:
    #external: true
  #channels-dvr-logs:
    #external: true
TAG=latest
DOMAIN=tailxxxxx.ts.net
HOST_PORT=1337
CHANNELS_DVR_HOST=local-server
CHANNELS_DVR_PORT=8089
CHANNELS_DVR2_HOST=another-server
CHANNELS_DVR2_PORT=8089
CHANNELS_CLIENTS=appletv4k-den firestick-bedroom
ALERT_SMTP_SERVER=smtp.gmail.com:587
[email protected]
ALERT_EMAIL_PASS=xxxxxxxxxxxxxxxx
[email protected]
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=US/Mountain
HOST_DIR=/data
DVR_SHARE=/mnt/dvr
LOGS_SHARE=/mnt/channelsdvr
HOST_SFS_PORT=8080
FOLDER=/web
PORTAINER_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PORTAINER_HOST=docker-host

Also, once the stack is running again, if you could run the OliveTin Post-Install Healthcheck and post the results here.

1 Like

I had to change the Host_SFS_Port b/c it was not working with 8080 so i changed it to 8500 to get it to deploy the stack. Not sure if this is part of the problem. I tried using your updated stack and still have same error trying to create the plex for channels stack. Here is the health check:

Checking your OliveTin installation...
(extended_check=false)

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

Checking that your selected Channels DVR server (192.168.68.55: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  1246k      0 --:--:-- --:--:-- --:--:-- 1246k
HTTP Status: 200
Effective URL: http://192.168.68.55:8089/

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

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

total 4
drwxr-xr-x 2 root root   40 Aug 31 13:22 .
drwxr-xr-x 1 root root 4096 Aug 31 15:24 ..

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

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

total 4
drwxr-xr-x 2 root root   40 Aug 31 13:22 .
drwxr-xr-x 1 root root 4096 Aug 31 15:24 ..

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

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

HOSTNAME=olivetin
CHANNELS_DVR=192.168.68.55:8089
CHANNELS_DVR_ALTERNATES=
CHANNELS_CLIENTS=shield pixel 7a Susie's 2nd Fire TV Susie's Fire TV Susie's 3rd Fire TV P30 Susie's 4th Fire TV
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.68.55

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

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

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

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

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

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

@bnhf Thanks so much for your creativity and effort with this project.

Today, I installed Portainer and OliveTin on the same Raspberry Pi that is my Channels DVR server. I can run Healthcheck, but all my other commands in OliveTin get no response. I'm stuck! I must have done something wrong. Any help would be greatly appreciated!

One thing I can't figure out is where I'm supposed to run this line that Healthcheck tells me to run:

sudo -E ./fifopipe_hostside.sh "$PATH"

I also can't figure out where to find exactly what should go on this line. What I entered here is a guess.

CHANNELS_CLIENTS=Living-Room-TV

Here is my OliveTin Stack:

version: '3.9'
services:
  olivetin: # This docker-compose requires little or no editing. Set the Environment variables section of Portainer.
    # GitHub home for this project: https://github.com/bnhf/OliveTin.
    # Docker container home for this project with setup instructions: https://hub.docker.com/repository/docker/bnhf/olivetin.
    image: bnhf/olivetin:${TAG} # Add the tag like latest or test to the environment variables below.
    container_name: olivetin
    hostname: olivetin
    dns_search: ${DOMAIN} # For Tailscale users using Magic DNS, add your Tailnet (tailxxxxx.ts.net) to use hostnames for remote nodes, otherwise use your local domain name.
    ports:
      - ${HOST_PORT}:1337
    environment:
      - CHANNELS_DVR=${CHANNELS_DVR_HOST}:${CHANNELS_DVR_PORT} # Add your Channels DVR server in the form CHANNELS_DVR_HOST=<hostname or ip> and CHANNELS_DVR_PORT=<port>.
      #- CHANNELS_DVR_ALTERNATES=${CHANNELS_DVR2_HOST}:${CHANNELS_DVR2_PORT} # Space separated list of alternate Channels DVR servers to choose from in the form hostname:port or ip:port.
      - CHANNELS_CLIENTS=${CHANNELS_CLIENTS} # Space separated list of Channels DVR clients you'd like notifications sent to in the form hostname or IP.
      - ALERT_SMTP_SERVER=${ALERT_SMTP_SERVER} # SMTP server to use for sending alert e-mails. smtp.gmail.com:587 for example.
      - ALERT_EMAIL_FROM=${ALERT_EMAIL_FROM} # Sender address for alert e-mails.
      - ALERT_EMAIL_PASS=${ALERT_EMAIL_PASS} # SMTP "app" password established through GMail or Yahoo Mail. Do not use your everyday e-mail address.
      - ALERT_EMAIL_TO=${ALERT_EMAIL_TO} # Recipient address for alert e-mails.
      - UPDATE_YAMLS=${UPDATE_YAMLS} # Set this to true to update config.yaml.
      - UPDATE_SCRIPTS=${UPDATE_SCRIPTS} # Set this to true to update all included scripts.
      - TZ=${TZ} # Add your local timezone in standard linux format. E.G. US/Eastern, US/Central, US/Mountain, US/Pacific, etc.
      - PORTAINER_TOKEN=${PORTAINER_TOKEN} # Generate via <username> dropdown (upper right of WebUI), "My account", API tokens.
      - PORTAINER_HOST=${PORTAINER_HOST} # Hostname or IP of the Docker host you're running Portainer on.
    volumes:
      - ${HOST_DIR}/olivetin:/config # Add the parent directory on your Docker you'd like to use.
      - ${DVR_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT} # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR network share.
      - ${LOGS_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_logs # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR logs network share.
      #- ${DVR2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT} # Note that these volume mounts should always be to /mnt/hostname-port or /mnt/ip-port (dash rather than a colon between).
      #- ${LOGS2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT}_logs # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR logs network share.
    restart: unless-stopped

  static-file-server:
    image: halverneus/static-file-server:latest
    container_name: static-file-server
    dns_search: ${DOMAIN}
    ports:
      - ${HOST_SFS_PORT}:8080
    environment:
      - FOLDER=${FOLDER}
    volumes:
      - ${HOST_DIR}/olivetin/data:${FOLDER}
    restart: unless-stopped

#volumes: # Use this section if you've setup docker volumes named channels-dvr and channels-dvr-logs, with CIFS or NFS, to bind to /mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT} and  /mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_logs inside the container. Set DVR_SHARE=channels-dvr and LOGS_SHARE=channels-dvr-logs in this example.
  #channels-dvr:
    #external: true
  #channels-dvr-logs:
    #external: true

And environmental variables:

TAG=latest
DOMAIN=dvr-raspberrypi.local
HOST_PORT=1337
CHANNELS_DVR_HOST=192.168.7.236
CHANNELS_DVR_PORT=8089
CHANNELS_CLIENTS=Living-Room-TV
ALERT_SMTP_SERVER=smtp.gmail.com:587
ALERT_EMAIL_FROM=redacted
ALERT_EMAIL_PASS=redacted
ALERT_EMAIL_TO=redacted
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=US/Eastern
HOST_DIR=/home/pi/channels-dvr/data
DVR_SHARE=/home/pi/channels-dvr/data
LOGS_SHARE=/home/pi/channels-dvr
HOST_SFS_PORT=8080
FOLDER=/web
PORTAINER_TOKEN=redacted
PORTAINER_HOST=docker-host

And my Healthcheck results:

Checking your OliveTin installation...
(extended_check=false)

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

Checking that your selected Channels DVR server (192.168.7.236: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   623k      0 --:--:-- --:--:-- --:--:-- 1246k
HTTP Status: 200
Effective URL: http://192.168.7.236:8089/

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

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

total 162516
drwxr-xr-x 28 1000 1000     4096 Aug 31 23:51 .
drwxr-xr-x  1 root root     4096 Sep  1 00:36 ..
drwxr-xr-x 32 1000 1000     4096 Sep  1 00:50 Database
drwxr-xr-x  3 1000 1000     4096 Aug 31 11:06 Images
drwxr-xr-x  5 1000 1000     4096 Dec 24  2023 Imports
drwxr-xr-x  4 1000 1000     4096 Dec 24  2023 Logs
drwxr-xr-x 11 1000 1000     4096 Aug 31 22:53 Streaming
drwxr-xr-x  3 1000 1000     4096 Aug 31 11:06 TV
drwx------  3 1000 1000     4096 Dec 24  2023 USA-OTA34655.airings
drwx------  3 1000 1000     4096 Dec 24  2023 USA-OTA34655.groups
drwx------  3 1000 1000     4096 Dec 24  2023 X-TVE.airings
drwx------  3 1000 1000     4096 Dec 24  2023 X-TVE.groups
drwx------  3 1000 1000     4096 Jul 26 23:31 XMLTV-BigBrotherLiveFeeds.airings
drwx------  3 1000 1000     4096 Jul 26 23:31 XMLTV-BigBrotherLiveFeeds.groups
-rw-r--r--  1 1000 1000 13354972 Aug 31 23:41 XMLTV-BigBrotherLiveFeeds.xml
drwx------  3 1000 1000     4096 Dec 24  2023 XMLTV-PBS.airings
drwx------  3 1000 1000     4096 Dec 24  2023 XMLTV-PBS.groups
drwx------  3 1000 1000     4096 Dec 24  2023 XMLTV-Plex.airings
drwx------  3 1000 1000     4096 Dec 24  2023 XMLTV-Plex.groups
drwx------  3 1000 1000     4096 Dec 24  2023 XMLTV-PlutoTVNonDocker.airings
drwx------  3 1000 1000     4096 Dec 24  2023 XMLTV-PlutoTVNonDocker.groups
-rw-------  1 1000 1000 13354972 Aug 31 23:41 XMLTV-PlutoTVNonDocker.xml
drwx------  3 1000 1000     4096 Dec 24  2023 XMLTV-SamsungTVPlus.airings
drwx------  3 1000 1000     4096 Dec 24  2023 XMLTV-SamsungTVPlus.groups
drwx------  3 1000 1000     4096 Dec 24  2023 XMLTV-Stirr.airings
drwx------  3 1000 1000     4096 Dec 24  2023 XMLTV-Stirr.groups
drwxr-xr-x  3 1000 1000     4096 Dec 24  2023 cache
-rw-r--r--  1 1000 1000     1094 Dec 24  2023 cert.pem
-rw-r--r--  1 1000 1000  2097140 Aug 25 13:33 channels-dvr-http-2024-08-25T13-33-11.704.log
-rw-r--r--  1 1000 1000  2097074 Aug 28 22:42 channels-dvr-http-2024-08-28T22-42-23.721.log
-rw-r--r--  1 1000 1000  1457164 Sep  1 01:52 channels-dvr-http.log
-rw-r--r--  1 1000 1000 17850037 Sep  1 01:50 channels-dvr.log
-rw-r--r--  1 1000 1000  2096644 Aug 27 09:43 channels-http-cache-2024-08-27T09-44-05.057.log
-rw-r--r--  1 1000 1000      166 Jul 31 10:03 channels-http-cache-trace.log
-rw-r--r--  1 1000 1000  1449369 Sep  1 01:11 channels-http-cache.log
drwxr-xr-x  3 1000 1000     4096 Jan 22  2024 chromedata
-rw-r--r--  1 1000 1000       21 Aug 31 22:53 chromedp-version
-rw-r--r--  1 1000 1000 10485641 Aug 25 16:26 hls-2024-08-25T16-26-20.036.log
-rw-r--r--  1 1000 1000 10485112 Aug 25 22:36 hls-2024-08-25T22-36-39.571.log
-rw-r--r--  1 1000 1000 10485732 Aug 27 12:59 hls-2024-08-27T12-59-17.913.log
-rw-r--r--  1 1000 1000 10485710 Aug 28 17:30 hls-2024-08-28T17-30-56.981.log
-rw-r--r--  1 1000 1000 10485357 Aug 29 22:39 hls-2024-08-29T22-39-21.950.log
-rw-r--r--  1 1000 1000 10485290 Aug 29 23:21 hls-2024-08-29T23-22-00.736.log
-rw-r--r--  1 1000 1000 10485587 Aug 30 00:04 hls-2024-08-30T00-04-33.752.log
-rw-r--r--  1 1000 1000 10484821 Aug 30 00:46 hls-2024-08-30T00-46-59.927.log
-rw-r--r--  1 1000 1000 10485646 Aug 30 01:29 hls-2024-08-30T01-29-20.677.log
-rw-r--r--  1 1000 1000 10485555 Aug 31 11:16 hls-2024-08-31T11-16-11.255.log
-rw-r--r--  1 1000 1000  3999227 Aug 31 22:53 hls.log
-rw-------  1 1000 1000     1679 Dec 24  2023 key.pem
drwxr-xr-x  4 root root     4096 Sep  1 00:47 olivetin
-rw-r--r--  1 1000 1000  1867776 Sep  1 00:50 recorder.db
drwx------  7 1000 1000     4096 Dec 24  2023 recorder.idx
-rw-------  1 1000 1000  2097152 Sep  1 01:24 settings.db
-rw-r--r--  1 1000 1000    32768 Dec 24  2023 settings.db.old
-rw-r--r--  1 1000 1000   312777 Aug 31 22:53 tve_chrome.log
-rw-r--r--  1 1000 1000   244117 Aug 28 17:24 tve_error_screenshot.html
-rw-r--r--  1 1000 1000    18346 Aug 28 17:24 tve_error_screenshot.png

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

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

total 44
drwxr-xr-x  9 1000 1000 4096 Jul 18 16:21 .
drwxr-xr-x  1 root root 4096 Sep  1 00:36 ..
drwxr-xr-x  2 1000 1000 4096 Jan  8  2024 2024.01.08.1431
drwxr-xr-x  2 1000 1000 4096 Feb  8  2024 2024.02.08.0626
drwxr-xr-x  2 1000 1000 4096 Feb 11  2024 2024.02.11.0311
drwxr-xr-x  2 1000 1000 4096 Mar 27 22:13 2024.03.27.1935
drwxr-xr-x  2 1000 1000 4096 May  7 21:38 2024.05.07.1442
drwxr-xr-x  2 1000 1000 4096 Jul 18 16:20 2024.07.18.0352
drwxr-xr-x 28 1000 1000 4096 Aug 31 23:51 data
-rwxr-xr-x  1 1000 1000 4036 Dec 24  2023 install.sh
lrwxrwxrwx  1 1000 1000   15 Jul 18 16:20 latest -> 2024.07.18.0352
-rwxr-xr-x  1 1000 1000 1192 Dec 24  2023 uninstall.sh

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

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

HOSTNAME=olivetin
CHANNELS_DVR=192.168.7.236:8089
CHANNELS_DVR_ALTERNATES=
CHANNELS_CLIENTS=Living-Room-TV
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=docker-host

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

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 dvr-raspberrypi.local
options ndots:0

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

That should be run from this directory based on your env vars:

This would either be the IP address of your Channels client or the LAN hostname, but if you use hostname it must be resolvable (pingable) on your network.

You do have an issue here that could causing you problems:

This should be the local domain name for your LAN, or your Tailscale domain name, or both. So, if your LAN's domain name is local -- then this value should simply be local. If you use Tailscale, you can put both values in this variable separated by a space.

Neither your ChannelsDVR logs directory, nor your recordings directory are reachable in your above healthcheck -- so you need to check the paths for those.

The bigger issue though is that you don't seem to be reaching Portainer from inside a Docker container. One thing you could try is using Docker's internal gateway, since your CDVR and Portainer installations are on the same machine.

Here's what I suggest you try for environment variables:

TAG=latest
DOMAIN=local
HOST_PORT=1337
CHANNELS_DVR_HOST=172.17.0.1
CHANNELS_DVR_PORT=8089
CHANNELS_DVR2_HOST=
CHANNELS_DVR2_PORT=
CHANNELS_CLIENTS=shield pixel 7a Susie's 2nd Fire TV Susie's Fire TV Susie's 3rd Fire TV P30 Susie's 4th Fire TV
ALERT_SMTP_SERVER=smtp.gmail.com:587
ALERT_EMAIL_FROM=my gmail address
ALERT_EMAIL_PASS=gmail password
ALERT_EMAIL_TO=my gmail address
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=US/Pacific
HOST_DIR=/data
DVR_SHARE=/mnt/dvr
LOGS_SHARE=/mnt/channelsdvr
HOST_SFS_PORT=8500
FOLDER=/web
PORTAINER_TOKEN= the token number that i created in portainer
PORTAINER_HOST=172.17.0.1

Do try to fix the DVR_SHARE and LOGS_SHARE values based on where you store your CDVR recordings and where your CDVR executables are stored. Also, your CHANNELS_CLIENTS values need to either be the IP addresses of those clients or resolvable (pingable) hostnames.

I tried the setting you recommended and this did not work. I also tried finding the directory on my nas where the dvr records go, which is /share/dvr so i tried changing that directory from /mnt/dvr to /share/dvr. The way my nas folders are set up is that there is a folder titled "DVR" and within that folder there is a subfolder for movies, tv, images, logs, etc:


Despite this change, it is still not finding my recordings or logs directory.
Here is where channels settings show my recordings to go:

I also tried the local ip address you recommended as well as finding my the local ip address my nas is on which is 172.29.0.1. Neither of those changes worked. i tried changing the host dir to "container" b/c as you can see on the first photo, my nas created a folder named "container" to handle this and inside "container" is a folder named "container-station-data" so i tried putting in that folder instead of the /data so i changed /data to /container-station-data.

I'm not sure what else to try. One thing i wanted to ask is that for the portainer token, I created one before ever trying an olivetin installation but in the dozens of other times I have tried a new olivetin installation, I have used the same token. Should i be creating a new token every time i try a new olivetin installation?

I appreciate your help. I have spent a ton of time trying to lean how to do these things. i would really like to get it working after all the time and effort. Thank you.

Windows user here. Planning on keeping this deployment small and on a local 2TB drive. What do I need to do to expose my Windows D:\channels-data path to this stack?

You should be able to do it one of two ways. You can reference the Windows path by using a forward slash instead of backslash: D:/channels-data. Or you can use the Linux approach, which would be /mnt/d/channels-data. I like the Linux approach, as this also serves as a cross-check that your WSL integration is setup and working properly.

1 Like

In Linux /share/dvr is not the same as /share/DVR, so try making that change to your env var.

No problem to use the same Portainer token multiple times.

How did you install Docker and Portainer? Did you use the command line, or did you do it using some method offered by QNAP?

@Bunn

Could you also post screenshots from Portainer with your Container list and Network list please?

1 Like

I installed container station on the qnap nas and then installed portainer through that using docker compose which is the only thing that container station would accept. I used chatgpt to translate docker commands into docker compose. Do you think this is what's wrong? Should i install docker onto the nas through an installation download somewhere instead?

Here is my portainer container list:


Here is my portainer network list:

By changing the folder "dvr" to "DVR," I think was able to get olivetin to find the directory where my CDVR recordings are located. Here is what the health check says:

Checking your OliveTin installation...
(extended_check=false)

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

Checking that your selected Channels DVR server (192.168.68.55: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  1246k      0 --:--:-- --:--:-- --:--:-- 1246k
HTTP Status: 200
Effective URL: http://192.168.68.55:8089/

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

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

total 208
drwxrwxrwx 12 root root   4096 Sep  1 11:38 .
drwxr-xr-x  1 root root   4096 Sep  1 16:07 ..
drwxr-xr-x  2 root root   4096 Aug 15  2022 @Recently-Snapshot
drwxrwxrwx  2 root root   4096 Aug 11 15:10 @Recycle
drwxr-xr-x 32 root root   4096 Sep  1 15:04 Database
drwxr-xr-x  4 root root 163840 Sep  1 10:30 Images
drwxr-xr-x  5 root root   4096 Aug 16  2022 Imports
drwxr-xr-x  4 root root   4096 Aug 16  2022 Logs
drwxrwxrwx  3 root root   4096 Sep  1 10:30 Movies
drwxr-xr-x  4 root root   4096 Aug 19  2022 PlayOn
drwxr-xr-x 19 root root   4096 Sep  1 06:45 Streaming
drwxr-xr-x 25 root root   4096 Aug 27 07:59 TV

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

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

total 112
drwxr-xr-x    4 root root  4096 Aug 16  2022 .
drwxr-xr-x    1 root root  4096 Sep  1 16:07 ..
drwxr-xr-x 2107 root root 36864 Sep  1 00:30 comskip
drwxr-xr-x 2866 root root 61440 Sep  1 03:44 recording

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

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

HOSTNAME=olivetin
CHANNELS_DVR=192.168.68.55:8089
CHANNELS_DVR_ALTERNATES=
CHANNELS_CLIENTS=192.168.68.50
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.68.55

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

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

search local
nameserver 127.0.0.11
options ndots:0

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

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

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

Better, but you still need to figure out where your OliveTin executables are located for the LOGS_SHARE variable. We can deal with that next though.

I see your Docker gateway address is non-standard on the QNAP:

So try setting the IP address for your Portainer host to 10.0.3.1

Thanks but it still gives the error of not being able to connect:

exit status 1

+ dvr=10.0.3.1:8089
++ basename /config/plex-for-channels.sh
+ extension=plex-for-channels.sh
+ extension=plex-for-channels
+ cp /config/plex-for-channels.env /tmp
+ envFile=/tmp/plex-for-channels.env
+ [[ -n 10.0.3.1 ]]
+ extensionURL=10.0.3.1:7779
+ [[ 9500 == \# ]]
+ cdvrStartingChannel=9500
+ [[ -n 9500 ]]
+ cdvrIgnoreM3UNumbers=ignore
+ curl -s -o /dev/null http://10.0.3.1:7779
+ envVars=("TAG=$2" "HOST_PORT=$3" "PLEX_PORT=$4" "PLEX_CODE=$5" "CDVR_STARTING_CHANNEL=$6")
+ printf '%s\n' TAG=latest HOST_PORT=7779 PLEX_PORT=7777 PLEX_CODE=local CDVR_STARTING_CHANNEL=9500
+ sed -i /=#/d /tmp/plex-for-channels.env
+ /config/portainerstack.sh plex-for-channels
+ stackName=plex-for-channels
+ portainerHost=10.0.3.1
+ curl -s -o /dev/null http://10.0.3.1:9000
+ portainerURL='https://10.0.3.1:9443/api/stacks?type=2&method=string&endpointId=2'
+ portainerToken=ptr_04ckjy0u1H17MFv6OcyZAqRHc80fPqBFh6dJnfNTIqs=
+ cp /config/plex-for-channels.yaml /tmp
+ stackFile=/tmp/plex-for-channels.yaml
+ envFile=/tmp/plex-for-channels.env
++ grep DVR_SHARE= /tmp/plex-for-channels.env
++ grep -v /
++ awk -F= '{print $2}'
+ dockerVolume=
++ grep VOL_EXTERNAL= /tmp/plex-for-channels.env
++ grep -v '#'
++ awk -F= '{print $2}'
+ volumeExternal=
++ grep VOL_NAME= /tmp/plex-for-channels.env
++ grep -v '#'
++ awk -F= '{print $2}'
+ volumeName=
+ [[ -n '' ]]
++ sed 's/\\/\\\\/g' /tmp/plex-for-channels.yaml
++ sed 's/"/\\"/g'
++ awk '{printf "%s\\n", $0}'
+ stackContent='version: '\''3.9'\''\nservices:\n  # GitHub home for this project with setup instructions: https://github.com/jgomez177/plex-for-channels\n  # Docker container home for this project: https://ghcr.io/jgomez177/plex-for-channels\n  plex-for-channels:\n    image: ghcr.io/jgomez177/plex-for-channels:${TAG}\n    container_name: plex-for-channels\n    ports:\n      - ${HOST_PORT}:${PLEX_PORT}\n    environment:\n      - PLEX_PORT=${PLEX_PORT}\n    restart: unless-stopped\n\n  # Default Environment variables can be found below under stderr -- copy and paste into Portainer-Stacks Environment variables section in Advanced mode\n'
+ stackEnvVars='['
+ IFS==
+ read -r key value
+ stackEnvVars='[{"name": "TAG", "value": "latest"},'
+ IFS==
+ read -r key value
+ stackEnvVars='[{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},'
+ IFS==
+ read -r key value
+ stackEnvVars='[{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PLEX_PORT", "value": "7777"},'
+ IFS==
+ read -r key value
+ stackEnvVars='[{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PLEX_PORT", "value": "7777"},{"name": "PLEX_CODE", "value": "local"},'
+ IFS==
+ read -r key value
+ stackEnvVars='[{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PLEX_PORT", "value": "7777"},{"name": "PLEX_CODE", "value": "local"},{"name": "CDVR_STARTING_CHANNEL", "value": "9500"},'
+ IFS==
+ read -r key value
+ stackEnvVars='[{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PLEX_PORT", "value": "7777"},{"name": "PLEX_CODE", "value": "local"},{"name": "CDVR_STARTING_CHANNEL", "value": "9500"}]'
++ cat
+ stackJSON='{
  "Name": "plex-for-channels",
  "SwarmID": "",
  "StackFileContent": "version: '\''3.9'\''\nservices:\n  # GitHub home for this project with setup instructions: https://github.com/jgomez177/plex-for-channels\n  # Docker container home for this project: https://ghcr.io/jgomez177/plex-for-channels\n  plex-for-channels:\n    image: ghcr.io/jgomez177/plex-for-channels:${TAG}\n    container_name: plex-for-channels\n    ports:\n      - ${HOST_PORT}:${PLEX_PORT}\n    environment:\n      - PLEX_PORT=${PLEX_PORT}\n    restart: unless-stopped\n\n  # Default Environment variables can be found below under stderr -- copy and paste into Portainer-Stacks Environment variables section in Advanced mode\n",
  "Env": [{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PLEX_PORT", "value": "7777"},{"name": "PLEX_CODE", "value": "local"},{"name": "CDVR_STARTING_CHANNEL", "value": "9500"}]
}'
+ echo 'JSON response from https://10.0.3.1:9443/api/stacks?type=2&method=string&endpointId=2:'
++ curl -k -X POST -H 'Content-Type: application/json' -H 'X-API-Key: ptr_04ckjy0u1H17MFv6OcyZAqRHc80fPqBFh6dJnfNTIqs=' -d '{
  "Name": "plex-for-channels",
  "SwarmID": "",
  "StackFileContent": "version: '\''3.9'\''\nservices:\n  # GitHub home for this project with setup instructions: https://github.com/jgomez177/plex-for-channels\n  # Docker container home for this project: https://ghcr.io/jgomez177/plex-for-channels\n  plex-for-channels:\n    image: ghcr.io/jgomez177/plex-for-channels:${TAG}\n    container_name: plex-for-channels\n    ports:\n      - ${HOST_PORT}:${PLEX_PORT}\n    environment:\n      - PLEX_PORT=${PLEX_PORT}\n    restart: unless-stopped\n\n  # Default Environment variables can be found below under stderr -- copy and paste into Portainer-Stacks Environment variables section in Advanced mode\n",
  "Env": [{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PLEX_PORT", "value": "7777"},{"name": "PLEX_CODE", "value": "local"},{"name": "CDVR_STARTING_CHANNEL", "value": "9500"}]
}' 'https://10.0.3.1:9443/api/stacks?type=2&method=string&endpointId=2'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:05 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:06 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:07 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:08 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:09 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:10 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:11 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:12 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:13 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:14 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:15 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:16 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:17 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:18 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:19 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:20 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:21 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:22 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:23 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:24 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:25 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:26 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:27 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:28 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:29 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:30 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:31 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:32 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:33 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:34 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:35 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:36 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:37 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:38 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:39 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:40 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:41 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:42 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:43 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:44 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:45 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:46 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:47 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:48 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:49 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:50 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:51 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:52 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:53 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:54 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:55 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:56 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:57 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:58 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:59 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:00 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:01 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:02 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:03 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:04 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:05 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:06 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:07 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:08 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:09 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:10 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:11 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:12 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:13 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:14 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:15 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:16 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:17 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:18 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:19 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:20 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:21 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:22 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:23 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:24 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:25 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:26 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:27 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:28 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:29 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:30 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:31 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:32 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:33 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:34 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:35 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:36 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:37 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:38 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:39 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:40 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:41 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:42 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:43 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:44 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:45 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:46 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:47 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:48 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:49 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:50 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:51 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:52 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:53 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:54 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:55 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:56 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:57 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:58 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:01:59 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:00 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:01 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:02 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:03 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:04 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:05 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:06 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:07 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:08 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:09 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:10 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:02:11 --:--:--     0
curl: (28) Failed to connect to 10.0.3.1 port 9443: Connection timed out
+ portainerResponse=
+ [[ -z '' ]]
+ exit 1
+ [[ 1 == 1 ]]
+ exit 1

Here is the health check:

Checking your OliveTin installation...
(extended_check=false)

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

Checking that your selected Channels DVR server (10.0.3.1: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  1246k      0 --:--:-- --:--:-- --:--:-- 1246k
HTTP Status: 200
Effective URL: http://10.0.3.1:8089/

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

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

total 208
drwxrwxrwx 12 root root   4096 Sep  1 11:38 .
drwxr-xr-x  1 root root   4096 Sep  1 20:19 ..
drwxr-xr-x  2 root root   4096 Aug 15  2022 @Recently-Snapshot
drwxrwxrwx  2 root root   4096 Aug 11 15:10 @Recycle
drwxr-xr-x 32 root root   4096 Sep  1 15:04 Database
drwxr-xr-x  4 root root 163840 Sep  1 19:30 Images
drwxr-xr-x  5 root root   4096 Aug 16  2022 Imports
drwxr-xr-x  4 root root   4096 Aug 16  2022 Logs
drwxrwxrwx  3 root root   4096 Sep  1 17:43 Movies
drwxr-xr-x  4 root root   4096 Aug 19  2022 PlayOn
drwxr-xr-x 19 root root   4096 Sep  1 19:30 Streaming
drwxr-xr-x 25 root root   4096 Aug 27 07:59 TV

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

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

total 112
drwxr-xr-x    4 root root  4096 Aug 16  2022 .
drwxr-xr-x    1 root root  4096 Sep  1 20:19 ..
drwxr-xr-x 2107 root root 36864 Sep  1 00:30 comskip
drwxr-xr-x 2867 root root 61440 Sep  1 16:59 recording

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

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

HOSTNAME=olivetin
CHANNELS_DVR=10.0.3.1:8089
CHANNELS_DVR_ALTERNATES=
CHANNELS_CLIENTS=192.168.68.50
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=10.0.3.1

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

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

search local
nameserver 127.0.0.11
options ndots:0

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

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

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

Thanks for checking into this for me. Any other ideas? Should I just start all over with a docker installation that is not from the qnap store?

By changing the folder "dvr" to "DVR," I think was able to get olivetin to find the directory where my CDVR recordings are located.

I too have been having less than complete success getting things to work, and the difficulties have to do with case sensitivity of network shares. I haven't yet solved everything for my setup but I have found that in some environments case sensitivity can be an issue. I'm not an expert but simply provide some references I have found that might suggest this can be a real issue in some cases (no pun intended).

Case-sensitivity of file and directory names in a multiprotocol environment

Can't connect on network share because it is case sensitive

The case sensitive of CIFS share name

[Cosmetic only] Upper-case shares shown in Windows 10 as lower-case

@bnhf
Do you want to tackle creating one for a Channels DVR docker container?
The posts were specific to replacing a Synology package install with a TVE docker container install and so had to use host mode networking. But could easily be modified.

P.S. The very first docker container I used was for Channels DVR

2 Likes

I think that's a great idea. It could be nice for newbies, but also could be slick for people wanting to quickly spin-up additional CDVR servers for production or experimentation.

And... it's done... I think. I could use a couple of testers on this one, given that I don't have Intel Quick Sync hardware transcoding readily available atm, so I can't test that option (mostly just to confirm the stack deploys). Plus, there are lots of ways people handle their CDVR recordings.

@chDVRuser, if you could please give this twirl on the dance floor, and anybody else that's up for it. The stack and container name are both channels-dvr, so if you want to try this out, both those names need to be available in Docker/Portainer. In a near future update, I'll make this so that those names can have a digit appended to them, but that doesn't easily fit my current scheme.

It's pushed as bnhf/olivetin:latest, and bnhf/olivetin:2024.09.14:

EDIT: "Sub-directory will be filebot." changed to "Sub-directory will be channels-dvr."

Wow, that was quick!

Before I can test it, I'll have to bring down one of my containers, rename it and the host directory since they're both channels-dvr.

Questions;

  1. For the Channels DVR executables/log directory, Will this create that directory on a Synology NAS, or should the user create that first {HOST_DIR}/channels-dvr (/volume1/docker/channels-dvr). On a Synology, the /volume1/docker shared folder is created when the user installs the Docker or Container Manager Synology Package.
  2. For the Channels DVR recording directory, Will this create that shared folder (directory) on a Synology NAS, or should the user create that first {DVR_SHARE} (/volume1/ChDVRpoc)

Since I only use OliveTin for channel lineup change notifications, I haven't set it up to use this Project One-Click, so it may be tomorrow before I can get that setup and trial this.