OliveTin for Channels: An Interface for Misc Channels DVR Scripts & Tricks

This value is likely the issue:

HOST_DIR=N:olivetin

What OS is your Docker host computer running? Windows, MacOS, Linux or something else?

The host is running Windows 11

and the olivetin folder is in the root of the N drive

I'd suggest trying /mnt/n/olivetin, or a second choice would be n:/olivetin

1 Like

/mnt/n/olivetin. did the trick, I'm up and running - thank you!!

Hi!
I have been running the Olivetin action "Channel Lineup Change Notifications" set to 30 minute intervals.
Since my last lineup change earlier today, I have been receiving duplicate notifications every 30 minutes.

Channels DVR server URL: http://192.168.1.100:8089
Channels DVR version: 2026.06.26.2353

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

New source with 1 channels: "ADBTuner - app_cbs"
See file /config/192.168.1.100-8089_data/ADBTuner_-_app_cbs.log for the full lineup.

I will try disabling and restarting the action and will advise if the notifications persist.

UPDATE: still sending duplicate notifications after killing and restarting the process.

This may be something @mjitkop will need to look at, as this is his script

Just as a reference.
I have 7 of them running. One for each of my servers. 720 minute intervals and they're working fine.
OliveTin for Channels 2026.05.23

Mine was running fine, also. Until I added the source indicated in my notification today. I added the CBS Native Provider source using the Olivetin Project One-Click action "Create Native ADBTuner Channels + CDVR Custom Channels".

It's weird because I have never had issue with this notification action before. I'm on OliveTin for Channels Version 2026.06.19

I wonder if it might have anything to do with either of today's CDVR server updates. It doesn't seem like the changes should be related, but who am I to know such things?

v2026.06.26.1823
• UPDATED: YTTV login process
• IMPROVED: HLS playlist target duration is more accurate
• IMPROVED: HLS performance
v2026.06.26.2353
• FIXED: hopefully fix FS1 authentication

Are you saying that it keeps telling you every 30 minutes that you added the new ADBTuner source?

A new thread should probably be created to work on debugging this issue.

Cue the music:

keep-on-truckin-keep-on-trucking

OliveTin-for-Channels passes the 50K download mark!

pull_count	50043

Many thanks to everyone that's helped this project to keep on truckin'...

3 Likes

Trying to set up Olive Tin on Mac Mini M4 Pro and the deployment error I’m seeing is below.
Channels DVR is set up on Synology in /volume1/ChannelsDVR (10.0.1.65)

It looks like I need a shared folder on the Mac but have been unable to figure where.

Deployment error:

Failed to deploy a stack: compose up operation failed: Error response from daemon: mounts denied: The path /mnt/portainer_data/olivetin is not shared from the host and is not known to Docker. You can configure shared paths from Docker -> Preferences... -> Resources -> File Sharing. See https://docs.docker.com/go/mac-file-sharing/ for more info.

Compose:

services:
  olivetin: # This docker-compose typically requires no editing. Use the Environment variables section of Portainer to set your values.
    # 2026.08.31
    # GitHub home for this project: https://github.com/bnhf/OliveTin.
    # Docker container home for this project with setup instructions: https://hub.docker.com/r/bnhf/olivetin.
    image: bnhf/olivetin:${TAG:-latest} # Add the tag like latest or test to the environment variables below.
    container_name: ${OLIVETIN_NAME:-olivetin}${EZ_START}
    hostname: ${OLIVETIN_NAME:-olivetin}${EZ_START}
    dns_search: ${DOMAIN:+${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}:1337
    environment:
      - OLIVETIN_COMPOSE=2025.08.25${EZ_START} # Do not change this value.
      - CHANNELS_DVR=${CHANNELS_DVR_HOST}:${CHANNELS_DVR_PORT:-8089} # 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_HOST}:${CHANNELS_DVR2_PORT}}${CHANNELS_DVR3_HOST:+ ${CHANNELS_DVR3_HOST}:${CHANNELS_DVR3_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:-true} # Set this to true to update config.yaml.
      - UPDATE_SCRIPTS=${UPDATE_SCRIPTS:-true} # 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:-$CHANNELS_DVR_HOST} # Hostname or IP of the Docker host you're running Portainer on.
      - PORTAINER_PORT=${PORTAINER_PORT:-9443} # https port you're running Portainer on. 9443 is the default.
      - PORTAINER_ENV=${PORTAINER_ENV:-2} # Set this is if you're using an alternate Portainer Environment for some reason. 2 is the default.
      - PORTAINER_NAME=${PORTAINER_NAME:-local} # If you'd like to use a Portainer Environment other than "local", set this value to the environment's name (case sensitive).
      - PERSISTENT_LOGS=${PERSISTENT_LOGS:-false} # For supported Actions, log files are retained on an ongoing basis. false is the default.
    volumes:
      - ${HOST_DIR:-/unused}${HOST_DIR:+/olivetin:/config} # Add the parent directory on your Docker host you'd like to use.
      - ${DVR_SHARE:-/unused}${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:-/unused}${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:-/unused}${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:-/unused}${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:-/unused}${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:-/unused}${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.
      - ${DVR3_SHARE:-/unused}${DVR3_SHARE:+:/mnt/${CHANNELS_DVR3_HOST}-${CHANNELS_DVR3_PORT}} # Note that these volume mounts should always be to /mnt/hostname-port or /mnt/ip-port (dash rather than a colon between).
      - ${LOGS3_SHARE:-/unused}${LOGS3_SHARE:+:/mnt/${CHANNELS_DVR3_HOST}-${CHANNELS_DVR3_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.
      - ${TUBEARCHIVIST3_SHARE:-/unused}${TUBEARCHIVIST3_SHARE:+:/mnt/${CHANNELS_DVR3_HOST}-${CHANNELS_DVR3_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: ${SFS_NAME:-static-file-server}${EZ_START}
    dns_search: ${DOMAIN}
    ports:
      - ${HOST_SFS_PORT:-0}:8080
    environment:
      - FOLDER=${FOLDER:-/web}
    volumes:
      - ${HOST_DIR:-/unused}${HOST_DIR:+/olivetin/data:${FOLDER:-/web}}
    restart: unless-stopped

#0#volumes: # Remove the #x# to enable. 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 ${DVR_SHARE} to channels-dvr (DVR_SHARE=channels_dvr) in that example.
  #1#channels-dvr:
    #1#external: true
  #2#channels-dvr-logs:
    #2#external: true
  #3#tubearchivist:
    #3#external: true
  #4#channels-dvr2:
    #4#external: true
  #5#channels-dvr2-logs:
    #5#external: true
  #6#tubearchivist2:
    #6#external: true
  #7#channels-dvr3:
    #7#external: true
  #8#channels-dvr3-logs:
    #8#external: true
  #9#tubearchivist3:
    #9#external: true

Environment Variables:

TAG=latest
DOMAIN=local
HOST_PORT=1337
CHANNELS_DVR_HOST=10.0.1.65
CHANNELS_DVR_PORT=8089
CHANNELS_DVR2_HOST=
CHANNELS_DVR2_PORT=
CHANNELS_CLIENTS=
ALERT_SMTP_SERVER=
ALERT_EMAIL_FROM=
ALERT_EMAIL_PASS=
ALERT_EMAIL_TO=
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=America/Chicago
HOST_DIR=/mnt/portainer_data
DVR_SHARE=/mnt/channels-dvr
LOGS_SHARE=/mnt/channels-dvr
TUBEARCHIVIST_SHARE=/mnt/channels-dvr
DVR2_SHARE=
LOGS2_SHARE=
TUBEARCHIVIST2_SHARE=
DVR3_SHARE=
LOGS3_SHARE=
TUBEARCHIVIST3_SHARE=
HOST_SFS_PORT=8080
FOLDER=/web
PORTAINER_TOKEN=(Redacted)
PORTAINER_HOST=10.0.1.40
PORTAINER_PORT=9443
PORTAINER_ENV=2
PERSISTENT_LOGS=false

Your problem area is here.

The first issue is your HOST_DIR value. If you look at your MacOS Docker Desktop settings, you'll see that you're only allowed access to certain parent paths. You can change them, but I think it's better to color inside the lines, and use the default paths.

The second issue is accessing Samba shares. The way this is done in Docker, is to create a Docker Volume (using Portainer) that is configured to access each of your Samba shares. Then use that Docker Volume name in your env var overrides. I recommend setting up a channels-dvr Docker Volume (to access your CDVR recordings), and a channels-dvr-logs Docker Volume (to access your CDVR executables/logs).

So I set up a channels-dvr volume to this path:
/var/lib/docker/volumes/channels-dvr/_data

It added the _data on the end. I had put /volume1/ChannelsDVR. Should I have used 10.0.1.65/volume1/ChannelsDVR for the path? If we can get the DVR correct, I’ll just need to add /Logs to that path (I think).

I have a portainer persistant data folder that I created by docker at the start.

Should I create a Portainer volume pointing to a shared folder named data.

I’m very weak on Mac. I’m just glad I was able to install Portainer with little issue.

Your OliveTin data should go in /Users/jagrim (or whatever your MacOS username is).

The Samba shares need to be setup as Docker Volumes. Look in the Portainer WebUI, and you'll see a section for Volumes. You need to create a Docker Volume for each of your Samba shares. This volume needs to point to a valid Samba (aka CIFS) share on your Synology, and will contain the username and password for that Samba share.

So this is the channels-dvr volume that I created. Does it look correct or what changes should I make. Once it’s correct, I’ll create the logs mount.

Workin to create a local foldeer now

Do you have a WIndows computer where you can test the Samba shares. The way you have it setup, //10.0.1.65 is the host, volume1 is the share, and ChannelsDVR is folder in that share. This could be correct, but it'd be handy if you could confirm using Windows File Explorer.

Should be Synology220/Volume1/ChannelsDVR

I just had to change the ip to the hostname

Using CIFS/SAMBA it would be \\host\SynoSharedFolderName
So \\10.0.1.65\ChannelsDVR
or \\Synology220\ChannelsDVR

You don't specify volume1 for a Synology share, all the shares are shared folders in volume1

1 Like

Just a thought, maybe add support for generating a adbtuner/apituner json for fios tv+ seeing as how verizon won't give out cablecards anymore.