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

+ 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.03.05
+ echo -e 'Version 2025.03.05\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   415k      0 --:--:-- --:--:-- --:--:--  415k
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   415k      0 --:--:-- --:--:-- --:--:--  415k
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...'
++ curl -s 'http://192.168.150.242:8089/log?n=100000'
++ grep -m 1 'Starting Channels DVR'
++ awk '{print $NF}'
++ tee -a /config/192.168.150.242-8089_healthcheck-olivetin_latest.log
++ awk '{sub(/[\\/]?data$/, ""); print}'
+ 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 -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 -H 'X-API-Key: ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' http://192.168.150.242:9000/api/endpoints
++ jq '.[] | select(.Name=="local") | .Id'
jq: error (at <stdin>:1): Cannot index string with string "Name"
+ echo 'Portainer Environment ID for local is '
++ curl -s -k -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 -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 jason.andrew.trippe@gmail.com
+ awk -F@ '{print "ALERT_EMAIL_FROM=[Redacted]@" $2}'
+ [[ -n ALERT_EMAIL_PASS ]]
+ echo 'ALERT_EMAIL_PASS=[Redacted]'
+ echo jatrippe77@gmail.com
+ 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```

I don't get either number when I hover over "environments." Rather, I get localhost:9000/#!/endpoints

Did I fix my posts correctly above?

This needs to be done from the page shown in the screenshot. Click on Home in Portainer, and then hover over the local environment block.

Way better -- thanks! :slight_smile:

1 Like

I get the number "2"

Check if you're using the latest OliveTin Docker Compose (as shown in Post #1 of this thread), and check if your env vars include the new:

PORTAINER_ENV=2

If not, add it.

I think I know what to do, but I cannot remember where in Portainer to go to change the variables.

The OliveTin Docker Compose does not get automatically updated, and I generally only change it a few times per year. Here's the latest one from post #1 (dated 2025.02.25):

version: '3.9'
services:
  olivetin: # This docker-compose typically requires no editing. Use the Environment variables section of Portainer to set your values.
    # 2025.02.25
    # 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.
      - PORTAINER_PORT=${PORTAINER_PORT} # https port you're running Portainer on. 9443 is the default.
      - PORTAINER_ENV=${PORTAINER_ENV} # Set this is if you're using an alternate Portainer Environment for some reason. 2 is the default.
    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.
      #- ${TUBEARCHIVIST_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_ta # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your TubeArchivist videos 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.
      #- ${TUBEARCHIVIST2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT}_ta # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your TubeArchivist videos network share.
      - /var/run/docker.sock:/var/run/docker.sock
    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 a docker volume named channels-dvr, with CIFS or NFS, to bind to /mnt/dvr inside the container. Set ${HOST_DIR} to channels-dvr (HOST_DIR=channels_dvr) in that example.
  #channels-dvr:
    #external: true
  #channels-dvr-logs:
    #external: true
  #tubearchivist:
    #external: true

And, the sample env vars, which need to be updated with your values:

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
ALERT_EMAIL_FROM=username@gmail.com
ALERT_EMAIL_PASS=xxxxxxxxxxxxxxxx
ALERT_EMAIL_TO=username@gmail.com
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=US/Mountain
HOST_DIR=/data
DVR_SHARE=/mnt/dvr
LOGS_SHARE=/mnt/channelsdvr
TUBEARCHIVIST_SHARE=/mnt/dvr
HOST_SFS_PORT=8080
FOLDER=/web
PORTAINER_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PORTAINER_HOST=docker-host
PORTAINER_PORT=9443
PORTAINER_ENV=2

It's likely you only need to add the last one (PORTAINER_ENV=2) to your current list.

In Portainer-Stacks. Stop the OliveTin stack, and paste the new compose into the editor. Check the env vars and add PORTAINER_ENV.

I'm sorry but this does not make sense to me. I do not know how to get to the editor

Do I have to remember all of my previous variables for the new compose? I'm sorry to be such a pain but this is not easy for me.

I found what I think is an edit and added the portainer evv and 2 as the value. I get the same error for Plex

No, they'll be there. You're not deleting the stack, just modifying the existing one

That's the problem. I don't know where to edit. I know I've done it in the past but I've clicked on just about everything and cannot find where to add the latest compose

Update: I see where to duplicate/edit but there is nowhere to enter the compose

Update 2: I still cannot find where to add the new compose, but I have it set for latest. I was able to add PORTAINER_ENV with a value of 2, though. I reran the OliveTin for Plex and still get the same error.

Go into Portainer-Stacks and click on the OliveTin stack.

I does not give me the editor option. It says this stack was created outside of Portainer. Control over this stack is limited.

I googled the issue, and some say that my stack and container names should match. They do, though.

How did you do this if you weren't able to get into the stack editor?

I went to duplicate/edit and it had the area to add a value under ENV. Maybe that was the wrong place. I used to have the Editor to add the compose but now its gone.

That was the wrong place. I'll have to give this some thought, and get back to you later today.

Makes sense. Thank you.


Here is what I get when I go to the Stack:

I removed the wrong addition. Above is what I get when I go to the compose.

The duplicate/edit option is for containers not stacks. A stack is one or more containers spun-up using Docker compose. We're in some unchartered territory here, and I'm trying to figure out if there's a way to recover.