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

Tried a couple channels from his (Matt) playlist in VLC and they work

I know I'm missing some simple things, but I keep getting error in the Post-Install Healthcheck.

I'm running in windows and everything is running local. mostly looking at the FIFO pipe error, but anything else you see in the logs lol very much a Noob here

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

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

Checking that your selected Channels DVR server (192.168.8.131: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.8.131:8089/

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

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


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

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


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

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

HOSTNAME=olivetin
CHANNELS_DVR=192.168.8.131:8089
CHANNELS_DVR_ALTERNATES=
CHANNELS_CLIENTS=192.168.8.243
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.8.131

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

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 desktop-9kpe8s0.tail[Redacted].ts.net
options ndots:0

# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [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::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.23.0.2	olivetin

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

Your WSL Docker-host is running:

 FIFO pipe not found. Is the host helper script running?
Run sudo -E ./fifopipe_hostside.sh "$PATH" from the directory you have bound to /config on your host computer

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

Your WSL Docker-host's /etc/resolv.conf file contains:

FIFO pipe not found. Is the host helper script running?
Run sudo -E ./fifopipe_hostside.sh "$PATH" from the directory you have bound to /config on your host computer

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

Your WSL Docker-host's /etc/hosts file contains:

FIFO pipe not found. Is the host helper script running?
Run sudo -E ./fifopipe_hostside.sh "$PATH" from the directory you have bound to /config on your host computer

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

Your WSL Docker-host's /etc/wsl.conf file contains:

FIFO pipe not found. Is the host helper script running?
Run sudo -E ./fifopipe_hostside.sh "$PATH" from the directory you have bound to /config on your host computer

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

Your Windows PC's %USERPROFILE%\.wslconfig file contains:

FIFO pipe not found. Is the host helper script running?
Run sudo -E ./fifopipe_hostside.sh "$PATH" from the directory you have bound to /config on your host computer


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

Your Windows PC's etc/hosts file contains:

FIFO pipe not found. Is the host helper script running?
Run sudo -E ./fifopipe_hostside.sh "$PATH" from the directory you have bound to /config on your host computer

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

Your Windows PC's DNS server resolution:

FIFO pipe not found. Is the host helper script running?
Run sudo -E ./fifopipe_hostside.sh "$PATH" from the directory you have bound to /config on your host computer

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

Your Windows PC's network interfaces:

FIFO pipe not found. Is the host helper script running?
Run sudo -E ./fifopipe_hostside.sh "$PATH" from the directory you have bound to /config on your host computer

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

Your Tailscale version is:

FIFO pipe not found. Is the host helper script running?
Run sudo -E ./fifopipe_hostside.sh "$PATH" from the directory you have bound to /config on your host computer

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

You need to figure out what the path is from your WSL installation to your CDVR recordings and log files.

This can be done a few different ways:

If your WSL username is the same as your Windows username, and that user is an administrator -- you can typically use an Linux style path(s) starting with /mnt/c (which is the equivalent of C:\ in Windows). From there, figure out where your recordings and logs subdirectories are relative to that Linux-style parent.

You can also use Windows path(s) starting with C:\, and including the full paths to your recordings and logs.

Lastly, it's also possible to do it using network shares, if you're already sharing your recordings directory on your LAN.

My channels is stored on my A: drive and my dockers are stored in my C: drive

Here is what that looks like.

I want to smh, but idk what I'm missing.

It all comes down to terminology and everyone using different terms that confuse things.

Channels DVR needs an executable directory (where the executable programs and log file are kept).
This has been called executable, program, app, data and log directory.
Looking at the Channels DVR log it will show where this directory is when Channels DVR starts.

2024/07/14 11:47:44.738586 [SYS] Starting Channels DVR v2024.07.14.1540 (linux-x86_64 pid:14578) in /var/packages/ChannelsDVR/target/channels-dvr/data

Channels DVR needs a DVR Recording directory (where it records TV Shows and Movies).
Your Channels DVR web admin UI shows this directory in
Settings > General > Basic Setup > :white_check_mark: Server Enabled
Screenshot 2024-07-14 at 12-19-23 Channels Settings

I'm pretty sure this all falls apart if you're running Portainer on a different host than CDVR, and your DVR_SHARE and LOGS_SHARE values are both network shares. These then need to be added as Docker Volumes created through Portainer.

Are you sure your CDVR recordings are stored on your A: drive? A: and B: have been reserved for removable media (floppy drives in particular) since the dawn of time as I recall. Could you post a screenshot from Windows File Explorer confirming this please?

True, just seems some users heads spin when talking about shares, volume mounts, Portainer Stacks, environment variables, docker, etc. and trying to figure out how to map it all into an OliveTin for Channels Portainer Stack, let alone a command line docker statement. So I removed my previous post you laughed at.

Not anymore You can Use A & B

image

Don't think you can even add a floppy drive to Windows anymore. Are they still being sold?

Sorry about that, it was a poor choice of reactions.

I hear you. I have thought about creating an "OliveTin Light" of sorts, that would have near-zero variables, where the sole purpose would be to help a user determine the values needed for standard OliveTin.

There would still be questions that need to be answered, but perhaps using examples from your now deleted post, some of the more standard installation scenarios could be dissected.

Maybe an Action covering each one of the values people find tricky to determine, with a final Action to output a suggested list of env vars.

You can assign hard drives manually to A: and B:, but is that ever done automatically by Windows?

Never assigns drives
Since Windows never assigns drives to A or B unless you specifically direct it to, you can use these drive letters to map a removable drive with complete confidence that the drive letter mapping will be maintained over multiple removals and inserts.

That's what I was thinking.
Kind of a Two Stage install that showed users what to plug in where.
The terminology is confusing for many that don't understand how if fits together.
I can do most of what OliveTin for Channels does with my scripts and can install/run docker containers from the command line. Most users can't. We weren't born knowing everything and in the not so distant past, I didn't even know what Docker was.

1 Like

Yeah, you got me right there. :grimacing: :laughing:

2 Likes

I'm assuming you don't have this working yet based on this screenshot. It looks like you modified the path inside the container, which is a no-no. As you can see you have two dashes in /mnt/192.168.8.131--8089_logs and /mnt/192.168.8.131--8089, and there should only be one in each case.

Are you using this docker compose? Which you should not need to edit:

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

Along with these environment variables, where your specific values should be used in place of the sample 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
[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

New bnhf/olivetin:latest (aka bnhf/olivetin:2024.07.17) pushed with updated Actions, including:

screenshot-htpc6-2024.07.17-11_33_10

Updated to version 3.4.0 of the script, which adds the ability to set a start time for the channel lineup change checks. Once the start time is reached, checks will happen at the interval requested.

screenshot-htpc6-2024.07.17-11_33_45

Updates to the latest CDVR pre-release now have improved logging, including timestamps.

screenshot-htpc6-2024.07.17-11_34_32

The Stirr-for-Channels container is not currently functional, though the Stirr site continues to operate with a changed API. For now, Project One-Click will no longer loop indefinitely waiting for the container to start properly. I'll delete this Action if/when the site goes dark.

1 Like

I'm starting to get things working. I can perform the post-install basic health check, but getting this error:

curl: (6) Could not resolve host

I suspect I have an ENV setting wrong somewhere

In addition to help with that, can someone refresh me on how I can see the underlying script for the health check?

Could you post the standard out from the basic healthcheck here please. Sensitive data is automatically redacted.

All the scripts are stored on your Docker host computer in the directory you have bound to /config in the container. I have HOST_DIR set to /data, so in my case, the scripts can be found in /data/olivetin.