You should edit the first post with all the install details on all your threads. Not easy going post by post when things change.
Thanks.
You should edit the first post with all the install details on all your threads. Not easy going post by post when things change.
Thanks.
That's a good idea -- I'll do that.
Also you'd probably find that many projects, including this one, have their current recommended docker-compose (or command line/or both) posted on Docker Hub:
Done.
Might be worth adding the portainer install too, for those who haven't used it before.
Done deal. Thanks.
Tonight I updated my Channels DVR server, an M1 Mac mini, from macOS Ventura to the latest, macOS Sonoma 14.2.1. Everything went well and all functions appear to be working. The only issue I seem to be having are with the two "green" OliveTin buttons I previously had running:
-Fix YouTube Thumbnails
-Update TWiT.tv Guide
Looks like I'm able to run them manually but they don't stay running and the fields I'm entering (IP address of my server, and 48h interval) aren't being saved. Those fields revert when I go back and refresh. Here are the error logs, I am running this in portainer.io, what else should I check to get these working again? Looks like a permission issue but I'm not sure how to fix this with portainer. Any help appreciated. Thanks!
Generate TWiT.tv Guide Data
stdout
Background script initiated, with 48h between runs for 10.0.1.21:8089 Downloading latest iCal data for 10.0.1.21:8089... Background ical_2_xmltv process running for 10.0.1.21:8089 foreground.sh is exiting for ical_2_xmltv with exit code 0
stderr
+ dvr=10.0.1.21:8089 ++ echo 10.0.1.21:8089 ++ awk -F: '{print $1}' + channelsHost=10.0.1.21 ++ echo 10.0.1.21:8089 ++ awk -F: '{print $2}' + channelsPort=8089 + backgroundScript=ical_2_xmltv + firstChar=i + runInterval=48h + healthchecksIO=https://hc-ping.com/your_custom_uuid + [[ https://hc-ping.com/your_custom_uuid == \h\t\t\p\s\:\/\/\h\c\-\p\i\n\g\.\c\o\m\/\y\o\u\r\_\c\u\s\t\o\m\_\u\u\i\d ]] + healthchecksIO= + spinUp= ++ ps -ef ++ grep '[i]cal_2_xmltv.* 10.0.1.21:8089' ++ awk '{print $2}' + runningScriptPID= + [[ -n '' ]] + backgroundArguments='10.0.1.21:8089 48h ' + greenIcon='"icons/channels.png"' + purpleIcon='"https://community-assets.getchannels.com/original/2X/5/55232547f7e8f243069080b6aec0c71872f0f537.png"' + logFile=/config/10.0.1.21-8089_ical_2_xmltv_latest.log + runFile=/tmp/10.0.1.21-8089_ical_2_xmltv.run + [[ -f /tmp/10.0.1.21-8089_ical_2_xmltv.run ]] + rm /tmp/10.0.1.21-8089_ical_2_xmltv.run + [[ -n '' ]] + trap finish EXIT + main + scriptRun + case "$runInterval" in + [[ -n '' ]] + echo 'Background script initiated, with 48h between runs for 10.0.1.21:8089' + grep -q '(.*) #ical_2_xmltv' /config/config.yaml + nohup /config/ical_2_xmltv.sh 10.0.1.21:8089 48h + [[ 1 == \1 ]] ++ date +%d%b%y_%H:%M + sed -i '/#ical_2_xmltv title/s/#/(28Dec23_20:01) #/' /config/config.yaml sed: couldn't open temporary file /config/sedrcfYQX: Permission denied + sed -i '/#ical_2_xmltv interval default/s/default: .* #/default: 48h #/' /config/config.yaml sed: couldn't open temporary file /config/sedZpvI7C: Permission denied + [[ -n '' ]] + echo '10.0.1.21:8089 ical_2_xmltv 48h ' + sleep 2 + runningScripts + servers=($CHANNELS_DVR $CHANNELS_DVR_ALTERNATES) + for server in "${servers[@]}" ++ echo 10.0.1.21:8089 ++ awk -F: '{print $1}' + serverHost=10.0.1.21 ++ echo 10.0.1.21:8089 ++ awk -F: '{print $2}' + serverPort=8089 ++ ps -ef ++ grep '[i]cal_2_xmltv.* 10.0.1.21:8089' ++ awk '{print $2}' + activeProcess=563 + [[ -n 563 ]] + echo 'Background ical_2_xmltv process running for 10.0.1.21:8089' + exit 0 + finish + echo -e 'foreground.sh is exiting for ical_2_xmltv with exit code 0' + cp /config/config.yaml /config/temp.yaml + cp /config/temp.yaml /config/config.yaml + backgroundWait=0 + maxWait=30 + '[' 0 -lt 30 ']' + [[ -f /tmp/10.0.1.21-8089_ical_2_xmltv.run ]] + (( backgroundWait++ )) + sleep 1 + '[' 1 -lt 30 ']' + [[ -f /tmp/10.0.1.21-8089_ical_2_xmltv.run ]] + (( backgroundWait++ )) + sleep 1 + '[' 2 -lt 30 ']' + [[ -f /tmp/10.0.1.21-8089_ical_2_xmltv.run ]] + (( backgroundWait++ )) + sleep 1 + '[' 3 -lt 30 ']' + [[ -f /tmp/10.0.1.21-8089_ical_2_xmltv.run ]] + (( backgroundWait++ )) + sleep 1 + '[' 4 -lt 30 ']' + [[ -f /tmp/10.0.1.21-8089_ical_2_xmltv.run ]] + break + '[' -f /config/10.0.1.21-8089_ical_2_xmltv_latest.log ']' + cat /config/10.0.1.21-8089_ical_2_xmltv_latest.log```
Interesting convergence of the latest version of the MacOS and sed running in a container.
"sed -i" which I've used extensively in several scripts, does an inline editing of files -- but behind the scenes creates a temporary file, apparently in the same directory as the file it's modifying. In this case the directory on your host you have bound to /config.
This temporary file carries no permissions (something of a bug in sed I believe), but this hasn't been an issue until Docker Desktop for Mac starting using the VirtioFS (which was an experimental opt-in I believe, but now may be an opt-out).
Could you try disabling VirtioFS in Docker Desktop, which could be via tick-box or possibly switching from VirtioFS to gRPC, and see if that "fixes" the issue. Apparently sed 4.8 also addresses this problem, so I'm looking into options for upgrading that.
I could also re-work my 28 sed commands that use the -i option, but that's not my first choice.
@Fofer Even though I love "sed -i" like a brother, after looking more closely at the 28 times I used it in my scripts, reworking them was trivial.
So, I changed all of the scripts that use it save one (the delete old recording logs script), and pushed it with the :test tag. I believe it will sort out this issue, even if you're using VirtioFS in Docker Desktop. Let me know if it works, and I'll update that last script and push it as :latest.
Thank you so much! I left this setting as-is, in Docker Desktop:
But in portainer,I did just redeploy the container using the duplicate/edit command and the :test: tag, and now those two OliveTin buttons are saving my parameters and remaining green. I appreciate it!
P.S. along the way I found this interesting discussion, which seems applicable. Most of it went over my head though
New bnhf/olivetin:latest pushed with fix for "Docker Desktop for Mac VirtioFS permissions" issue. No pressing need to update to this container unless your OliveTin Docker host is a Mac.
what would I use to connect via a machine on the same network?
DVR_SHARE=/mnt/dvr
DVR2_SHARE=/mnt/dvr2
If it's on the same network, then typically you would connect using an NFS or SMB share. Portainer-Volumes allows you to create a named Docker volume using that share, and then you'd assign that volume name to the DVR_SHARE environment variable. So, if your volume was named "dubx99-media" for example:
DVR_SHARE=dubx99-media
If you only have one DVR, you can remove or comment out any references to DVR2.
I am running my server off my mac mini and I have a laptop with ubuntu.
I'm assuming that means you're storing your CDVR recordings on the Mac Mini too. The parent folder that contains your recordings, and has folders in it named TV, Movies, Logs, etc is what you want to share to your network.
I'm fairly sure you can do that using the SMB protocol. Once that share is created, you can setup your docker volume in Portainer as previously described to connect to it.
Yeah. I have portainer setup. I am just having issues with SMB I have it set to file share but when i connect to sbm://xxxxxx.local it errors out.
^ first make sure you're using smb and not sbm.
Also try it with the actual IP address of the server, and not xxxxxxx.local.
Lastly, it's been a while since I had to mess with SMB connections from a Mac share (and I haven't set up this button yet with my own OliveTin) but IIRC when I did this with Xbox Media Player, I had to format the URL with the username of the sharing user appended. Something like smb://x.x.x.x@fofer
I'm not sure if that will work in this case, just tossing this out there hoping it helps.
There are actually 5 (soon to be 6) OliveTin Actions that require a bind mount to your CDVR recordings folder:
And for some additional detail on this subject: If your docker host is also your CDVR server, you should just be able to do a bind mount to the parent directory that contains CDVR folders that look like this:
If your CDVR server is not your Docker host, then the above folder needs to be setup as network share (which is super handy for lots of reasons) and a Docker volume created using Portainer-Volumes.
I've added a couple of OliveTin Actions to use your own unique Plex token for Plex M3U/XML generation. The first Action generates the token using your Plex UserID (only needs to be run once), and the second sets up a recurring action to download and modify the M3U/XML data for use (via URL) with your Plex Custom Channels source.
More details can be found here:
Thanks to @john9527 for creating the script on which this is based!
I am trying to set this up on my Synology, am I doing this correctly?
version: '3.9'
services:
olivetin:
image: bnhf/olivetin:${TAG} # Add the tag like latest or test to the environment variables below
container_name: olivetin
dns_search: ${DOMAIN}
ports:
- 1337:1337
environment:
- CHANNELS_DVR=${CHANNELS_DVR}=8089
- CHANNELS_DVR_ALTERNATES=${CHANNELS_DVR_ALTERNATES}=8089
- CHANNELS_CLIENTS=${CHANNELS_CLIENTS}=appletv-livingroomappletv
- UPDATE_YAMLS=${UPDATE_YAMLS}=true
- UPDATE_SCRIPTS=${UPDATE_SCRIPTS}=true
- TZ=${TZ}=US/Arizona
volumes:
- ${HOST_DIR}/volume1/docker
- ${DVR_SHARE}:/mnt/local-server-8089
- ${DVR2_SHARE}:/mnt/remote-server-8089
restart: unless-stopped
#volumes: -/volume1/docker/channelsdvr
#external: true
Do you have Portainer installed?