Wireguard Roadwarrior setup using Ubuntu Server 18.04, Pi-hole and Google Wifi (with some double NAT)
Wireguard has had a lot of press because of its addition to the Linux Kernel. With this in mind I look to setup a Roadwarrior setup
Plex is an awesome system which aspirations to become more than just a place to play acquired content and to become the center of your media world. Which as it grows it’s got the capability to do.
That being said, the first thing Plex could do is get entwined with the behemoth which is YouTube
Something I find poorly presented on the Android and Roku YouTube apps are subscription videos so I started looking for a way of having plex present me with the latest videos from my YouTube subscriptions along with my Media, podcasts and music giving me one application across multiple platforms I could use to watch or listen to my content.
So I know I’m not the only person to ask this, there are a few threads and some broken git code when searching github, reddit, forums and the like for getting YouTube subscription content into Plex.
What I was looking for was a "sonarr/radarr" like web app which I could download specific youtube channel content or find a plex native method.
It seemed through my searching that the glue to get any of this working was an application called youtube-dl
Something found very quickly was having the most up to date version of youtube-dl is imperative. It appears Google updates a lot of code around YouTube access often, and this can break youtube-dl and anything which subsequently uses it.
After a few days of trials, I’ve got something working which let’s me watch the latest videos from my YouTube subscriptions in Plex.
I’m doing the following on Ubuntu 19.04, and the first thing to get is youtube-dl. I read a lot of places saying
snap install youtube-dl
Would get me the latest version of the app, for me this wasnt the case and I kept getting messages like
"This video is unavailable"
Solved this by getting the latest binary from the website
sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl
This got the latest version which fixed my problems and allowed me to get rid of errors.
The next part of the puzzle was downloading my subscriptions. I could use Youtube-dl to download, however I found some code on github called YouTube-subscription-DL
The instructions refer to a version 10.15.3 of nodejs and I got 10.15.2 from the Ubuntu repositories so I used the instructions at
This installed nodejs 11 and the appropriate npm version
The next point is to setup access to the Youtube API which the readme.MD on the git page documents really well, its free and my only observation is to read and follow the instructions, not assume. (I assumed)
In reality, this is where for me the magic happens, I can direct the script where to download the files to (see NFS Mount later), i can define the metadata and thumbnail being downloaded and how youtube-dl works.
Out of the box however the unchanged config file
mv ./youtube-dl.conf ~/.config/youtube-dl.conf
will move it to the correct folder on macos/linux,
I have 3 plex servers (reasons) and as such, I’ve got my media on shared storage. To access this the most reliable protocol seems to be NFS, as I run the script from a control laptop, i mounted the NFS share as /shared/media on the laptop, and updated the config file above to reflect this, once done the youtube videos download to the shared media folder and then they are indexed automatically and available within Plex.
npm install --production to install dependencies
Make the script executable
sudo chmod +x ./yt-subs.sh
Then run the script with
When you run the command the first time it will ask you to log in, you’ll be authorizing yourself with the project you just made, when you’re done just paste the code into the console.
The first time you run it, it will download your subscriptions from the past 24 hours.
Once the script is run once, the next time it is run it will only download new videos in your subscription feed.
Within Plex it's then just a case of Adding a new Video source, using Other Videos, point to the shared folder and let plex index the content.
I’ve then setup a Cron job to run the script nightly..
4 5 * * * /run/the/script