New version of OliveTin-for-Channels pushed as bnhf/olivetin:latest (aka bnhf/olivetin:2024.03.20). This adds a new Healthcheck Action, that should prove useful to diagnose setup issues related to Docker, Portainer, WSL, Tailscale and OliveTin.
Here's some background on the motivation for creating this, and samples of the ouput:
I've worked with several people, particularly Windows Docker Desktop users, where their setups haven't been "quite right". Rather than continuing to attempt to address these issues one-by-one, I've created a new OliveTin Action that's intended to root out some common problems with both Windows and Linux docker installations.
This may also work with Mac Docker Desktop installations, but I have no way to test that -- help there would be appreciated.
It also serves as a quick way to confirm that one's OliveTin environment variables are set correctly. It's intended that this data is safe to post, as anything sensitive is automatically redacted by the script.
Here's what the output looks like when your Docker host is running Windows:
First the basic test, which can be run without using the "helper script" on the host:
Windows basic healthcheck details
Checking your OliveTin installation...
----------------------------------------
Checking that your selected Channels DVR server (media-server6: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
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1276 100 1276 0 0 1696 0 --:--:-- --:--:-- --:--:-- 1694
HTTP Status: 200
Effective URL: http://media-server6:8089/
----------------------------------------
Checking that your selected Channels DVR server's data files (/mnt/media-server6-8089) are accessible:
Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...
total 12
drwxr-xr-x 2 root root 8192 Dec 31 01:52 .
drwxr-xr-x 1 root root 4096 Mar 20 11:16 ..
drwxr-xr-x 2 root root 0 Dec 24 11:45 .config
drwxr-xr-x 2 root root 0 Dec 24 03:07 .pki
drwxr-xr-x 2 root root 0 Mar 20 10:18 Database
drwxr-xr-x 2 root root 0 Mar 20 09:42 Images
drwxr-xr-x 2 root root 0 Apr 8 2023 Imports
drwxr-xr-x 2 root root 0 Apr 9 2023 Logs
drwxr-xr-x 2 root root 0 Feb 10 18:55 Movies
drwxr-xr-x 2 root root 0 Dec 15 02:54 PlayOn
drwxr-xr-x 2 root root 0 Mar 19 18:43 Streaming
drwxr-xr-x 2 root root 0 Mar 19 16:35 TV
----------------------------------------
Here's a list of your current OliveTin-related settings:
CHANNELS_DVR=media-server6:8089
CHANNELS_DVR_ALTERNATES=utheater-pc:8089
CHANNELS_CLIENTS=appletv4k firestick-master
UPDATE_YAMLS=false
UPDATE_SCRIPTS=false
----------------------------------------
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.30.0.2 olivetin
And then with the helper script running on the host, which creates a temporary "pipe" between the container and the host. This script can be easily inspected, if desired, to confirm it's safe to run. In particular, you can see that only specific commands can be executed on the host. In addition, the pipe is automatically terminated after the test run:
Here's what that script looks like:
fifopipe_hostside.sh script
#!/bin/bash
parentPath="$1"
[[ -n $parentPath ]] && export PATH="$parentPath"
fifoPipe="./fifopipe"
[ ! -p "$fifoPipe" ] && mkfifo "$fifoPipe"
echo -e "\nThis script will be terminated from the container side once the OliveTin healthcheck has finished running..."
finish() {
rm $fifoPipe
}
trap finish EXIT
while true; do
if read -r hostCommand < "$fifoPipe"; then
case "$hostCommand" in
"tailscale netcheck")
tailscale netcheck > "$fifoPipe"_latest.log 2>&1
;;
"tailscale status")
tailscale status > "$fifoPipe"_latest.log 2>&1
;;
"WSL_DISTRO_NAME")
echo "$WSL_DISTRO_NAME" > "$fifoPipe"_latest.log 2>&1
;;
"LINUX_DISTRO_NAME")
cat /etc/os-release > "$fifoPipe"_latest.log 2>&1
;;
"resolv.conf")
cat /etc/resolv.conf > "$fifoPipe"_latest.log 2>&1
;;
"hosts")
cat /etc/hosts > "$fifoPipe"_latest.log 2>&1
;;
"wsl.conf")
cat /etc/wsl.conf > "$fifoPipe"_latest.log 2>&1
;;
".wslconfig")
cat /mnt/c/Users/$(whoami)/.wslconfig > "$fifoPipe"_latest.log 2>&1
;;
"windows_hosts")
cat /mnt/c/Windows/System32/drivers/etc/hosts > "$fifoPipe"_latest.log 2>&1
;;
nslookup*)
cmd.exe /c $hostCommand > "$fifoPipe"_latest.log 2>&1
;;
"windows_ipconfig")
cmd.exe /c ipconfig /all > "$fifoPipe"_latest.log 2>&1
;;
"END_OF_RUN")
exit 0
;;
*)
echo "Unrecognized command: $hostCommand" > "$fifoPipe"_latest.log
;;
esac
else
echo "Error reading from FIFO pipe" > "$fifoPipe"_latest.log
fi
sleep 1
done
When that script is executed on your Docker host, from the directory you have bound to /config, it'll look like this while it's waiting for the Action to be executed:
Helper script command line execution example
slayer@Convertible-PC3:/data2/olivetin$ sudo -E ./fifopipe_hostside.sh "$PATH"
This script will be terminated from the container side once the OliveTin healthcheck has finished running...
And the extended output, which includes a few key files on the host, looks like this:
Windows extended healthcheck details
Checking your OliveTin installation...
----------------------------------------
Checking that your selected Channels DVR server (media-server6: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 1743 0 --:--:-- --:--:-- --:--:-- 1743
HTTP Status: 200
Effective URL: http://media-server6:8089/
----------------------------------------
Checking that your selected Channels DVR server's data files (/mnt/media-server6-8089) are accessible:
Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...
total 12
drwxr-xr-x 2 root root 8192 Dec 31 01:52 .
drwxr-xr-x 1 root root 4096 Mar 20 11:16 ..
drwxr-xr-x 2 root root 0 Dec 24 11:45 .config
drwxr-xr-x 2 root root 0 Dec 24 03:07 .pki
drwxr-xr-x 2 root root 0 Mar 20 10:18 Database
drwxr-xr-x 2 root root 0 Mar 20 09:42 Images
drwxr-xr-x 2 root root 0 Apr 8 2023 Imports
drwxr-xr-x 2 root root 0 Apr 9 2023 Logs
drwxr-xr-x 2 root root 0 Feb 10 18:55 Movies
drwxr-xr-x 2 root root 0 Dec 15 02:54 PlayOn
drwxr-xr-x 2 root root 0 Mar 19 18:43 Streaming
drwxr-xr-x 2 root root 0 Mar 19 16:35 TV
----------------------------------------
Here's a list of your current OliveTin-related settings:
CHANNELS_DVR=media-server6:8089
CHANNELS_DVR_ALTERNATES=utheater-pc:8089
CHANNELS_CLIENTS=appletv4k firestick-master
UPDATE_YAMLS=false
UPDATE_SCRIPTS=false
----------------------------------------
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.30.0.2 olivetin
----------------------------------------
Your WSL Docker-host is running:
Debian
----------------------------------------
Your WSL Docker-host's /etc/resolv.conf file contains:
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.22.192.1
----------------------------------------
Your WSL Docker-host's /etc/hosts file contains:
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1 localhost
127.0.1.1 Convertible-PC3. Convertible-PC3
192.168.110.130 encoder_48007
192.168.110.49 encoder_23393
192.168.110.224 battery-warmer
192.168.110.66 omr-vps
192.168.110.9 raspberrypi11
192.168.110.167 raspberrypi12
192.168.100.161 host.docker.internal
192.168.100.161 gateway.docker.internal
127.0.0.1 kubernetes.docker.internal
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
----------------------------------------
Your WSL Docker-host's /etc/wsl.conf file contains:
[boot]
systemd=true
----------------------------------------
Your Windows PC's %USERPROFILE%\.wslconfig file contains:
cat: /mnt/c/Users/root/.wslconfig: No such file or directory
----------------------------------------
Your Windows PC's etc/hosts file contains:
## Added by WSU for hostname resolution over Tailscale
192.168.110.130 encoder_48007
192.168.110.49 encoder_23393
192.168.110.224 battery-warmer
192.168.110.66 omr-vps
192.168.110.9 raspberrypi11
192.168.110.167 raspberrypi12
# Added by Docker Desktop
192.168.100.161 host.docker.internal
192.168.100.161 gateway.docker.internal
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section
----------------------------------------
Your Windows PC's DNS server resolution:
'\\wsl.localhost\Debian\data2\olivetin'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
Server: magicdns.localhost-tailscale-daemon
Address: 100.100.100.100
Name: media-server6.tail[Redacted].ts.net
Address: 100.[Redacted]
----------------------------------------
Your Windows PC's network interfaces:
'\\wsl.localhost\Debian\data2\olivetin'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
Windows IP Configuration
Host Name . . . . . . . . . . . . : Convertible-PC3
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . : tail[Redacted].ts.net
lan
Unknown adapter Tailscale:
Connection-specific DNS Suffix . : tail[Redacted].ts.net
Description . . . . . . . . . . . : Tailscale Tunnel
Physical Address. . . . . . . . . : [Redacted]
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
IPv6 Address. . . . . . . . . . . : [Redacted]
Link-local IPv6 Address . . . . . : [Redacted]
IPv4 Address. . . . . . . . . . . : 100.[Redacted]
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : ::
0.0.0.0
DNS Servers . . . . . . . . . . . : 100.100.100.100
NetBIOS over Tcpip. . . . . . . . : Disabled
Connection-specific DNS Suffix Search List :
tail[Redacted].ts.net
Ethernet adapter Ethernet 2:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter
Physical Address. . . . . . . . . : [Redacted]
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : [Redacted]
Autoconfiguration IPv4 Address. . : 169.254.73.40(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : [Redacted]
DHCPv6 Client DUID. . . . . . . . : [Redacted]
NetBIOS over Tcpip. . . . . . . . : Enabled
Unknown adapter Local Area Connection:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : TAP-Windows Adapter V9
Physical Address. . . . . . . . . : [Redacted]
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Wireless LAN adapter Local Area Connection* 3:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter #3
Physical Address. . . . . . . . . : [Redacted]
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Wireless LAN adapter Local Area Connection* 4:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter #4
Physical Address. . . . . . . . . : [Redacted]
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
Wireless LAN adapter Wi-Fi:
Connection-specific DNS Suffix . : lan
Description . . . . . . . . . . . : Intel(R) Wi-Fi 6E AX210 160MHz
Physical Address. . . . . . . . . : [Redacted]
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : [Redacted]
IPv4 Address. . . . . . . . . . . : 192.168.8.161(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Lease Obtained. . . . . . . . . . : Monday, March 18, 2024 7:22:30 AM
Lease Expires . . . . . . . . . . : Wednesday, March 20, 2024 7:47:03 PM
Default Gateway . . . . . . . . . : 192.168.8.1
DHCP Server . . . . . . . . . . . : 192.168.8.1
DHCPv6 IAID . . . . . . . . . . . : [Redacted]
DHCPv6 Client DUID. . . . . . . . : [Redacted]
DNS Servers . . . . . . . . . . . : 192.168.8.1
NetBIOS over Tcpip. . . . . . . . : Enabled
Ethernet adapter Bluetooth Network Connection:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Bluetooth Device (Personal Area Network)
Physical Address. . . . . . . . . : [Redacted]
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Ethernet adapter vEthernet (Default Switch):
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter
Physical Address. . . . . . . . . : [Redacted]
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : [Redacted]
IPv4 Address. . . . . . . . . . . : 172.27.192.1(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Default Gateway . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : [Redacted]
DHCPv6 Client DUID. . . . . . . . : [Redacted]
NetBIOS over Tcpip. . . . . . . . : Enabled
Ethernet adapter vEthernet (WSL (Hyper-V firewall)):
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #2
Physical Address. . . . . . . . . : [Redacted]
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : [Redacted]
IPv4 Address. . . . . . . . . . . : 172.22.192.1(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Default Gateway . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : [Redacted]
DHCPv6 Client DUID. . . . . . . . : [Redacted]
NetBIOS over Tcpip. . . . . . . . : Enabled
Ethernet adapter vEthernet (WSLCore):
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #3
Physical Address. . . . . . . . . : [Redacted]
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : [Redacted]
IPv4 Address. . . . . . . . . . . : 172.30.240.1(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.240.0
Default Gateway . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : [Redacted]
DHCPv6 Client DUID. . . . . . . . : [Redacted]
NetBIOS over Tcpip. . . . . . . . : Enabled
Here's what the output looks like when your Docker host is running Linux:
Linux basic healthcheck details
Checking your OliveTin installation...
----------------------------------------
Checking that your selected Channels DVR server (media-server6: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 249k 0 --:--:-- --:--:-- --:--:-- 249k
HTTP Status: 200
Effective URL: http://media-server6:8089/
----------------------------------------
Checking that your selected Channels DVR server's data files (/mnt/media-server6-8089) are accessible:
Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...
total 12
drwxr-xr-x 2 1000 1000 8192 Dec 31 01:52 .
drwxr-xr-x 1 root root 4096 Mar 20 11:36 ..
drwxr-xr-x 2 1000 1000 0 Dec 24 11:45 .config
drwxr-xr-x 2 1000 1000 0 Dec 24 03:07 .pki
drwxr-xr-x 2 1000 1000 0 Mar 20 10:18 Database
drwxr-xr-x 2 1000 1000 0 Mar 20 09:42 Images
drwxr-xr-x 2 1000 1000 0 Apr 8 2023 Imports
drwxr-xr-x 2 1000 1000 0 Apr 9 2023 Logs
drwxr-xr-x 2 1000 1000 0 Feb 10 18:55 Movies
drwxr-xr-x 2 1000 1000 0 Dec 15 02:54 PlayOn
drwxr-xr-x 2 1000 1000 0 Mar 19 18:43 Streaming
drwxr-xr-x 2 1000 1000 0 Mar 19 16:35 TV
----------------------------------------
Here's a list of your current OliveTin-related settings:
CHANNELS_DVR=media-server6:8089
CHANNELS_DVR_ALTERNATES=utheater-pc:8089
CHANNELS_CLIENTS=appletv4k firestick-master
UPDATE_YAMLS=false
UPDATE_SCRIPTS=false
----------------------------------------
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
192.168.16.3 356c775c52a1
And, the extended output when the helper script is running on the host:
Linux extended healthcheck details
Checking your OliveTin installation...
----------------------------------------
Checking that your selected Channels DVR server (media-server6: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 249k 0 --:--:-- --:--:-- --:--:-- 249k
HTTP Status: 200
Effective URL: http://media-server6:8089/
----------------------------------------
Checking that your selected Channels DVR server's data files (/mnt/media-server6-8089) are accessible:
Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...
total 12
drwxr-xr-x 2 1000 1000 8192 Dec 31 01:52 .
drwxr-xr-x 1 root root 4096 Mar 20 11:36 ..
drwxr-xr-x 2 1000 1000 0 Dec 24 11:45 .config
drwxr-xr-x 2 1000 1000 0 Dec 24 03:07 .pki
drwxr-xr-x 2 1000 1000 0 Mar 20 10:18 Database
drwxr-xr-x 2 1000 1000 0 Mar 20 09:42 Images
drwxr-xr-x 2 1000 1000 0 Apr 8 2023 Imports
drwxr-xr-x 2 1000 1000 0 Apr 9 2023 Logs
drwxr-xr-x 2 1000 1000 0 Feb 10 18:55 Movies
drwxr-xr-x 2 1000 1000 0 Dec 15 02:54 PlayOn
drwxr-xr-x 2 1000 1000 0 Mar 19 18:43 Streaming
drwxr-xr-x 2 1000 1000 0 Mar 19 16:35 TV
----------------------------------------
Here's a list of your current OliveTin-related settings:
CHANNELS_DVR=media-server6:8089
CHANNELS_DVR_ALTERNATES=utheater-pc:8089
CHANNELS_CLIENTS=appletv4k firestick-master
UPDATE_YAMLS=false
UPDATE_SCRIPTS=false
----------------------------------------
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
192.168.16.3 356c775c52a1
----------------------------------------
Your Docker-host is running:
"Debian GNU/Linux 11 (bullseye)"
----------------------------------------
Your Docker-host's /etc/resolv.conf file contains:
# resolv.conf(5) file generated by tailscale
# For more info, see https://tailscale.com/s/resolvconf-overwrite
# DO NOT EDIT THIS FILE BY HAND -- CHANGES WILL BE OVERWRITTEN
nameserver 100.100.100.100
search tail[Redacted].ts.net
----------------------------------------
Your Docker-host's /etc/hosts file contains:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# --- BEGIN PVE ---
192.168.110.111 htpc6.tail[Redacted].ts.net htpc6
# --- END PVE ---