Setup A Streaming Media Server

Background

I retired my old mid-2010 Macbook Pro a couple of years ago. Not wanting to get rid of it I decided to try to load Linux on it and find a new use for it. That effort was successful...for the most part. While Linux will run on it there are some gotchas that keep it from being a reliable mobile device. So it sat on a shelf for the last couple of years

Recently I had been looking at the rising cost of streaming services and looking at some alternatives to bring the cost as well as the number of them I subscribe to down. Discussions with others led me to looking into a Sonarr-based solution. Naturally, this would require some hardware to act a streaming server for my home. At first I tried using my Raspberry Pi 4. Running the various components needed was no problem. However, I ran into issues trying to use a 1TB SSD via USB3; putting any kind of heavy read/write load on it caused problems. Things like the filesystem becoming read-only or unmounting and refusing to remount without a reboot. I'm not sure if the problem was hardware related or that I was taxing the Pi beyond its limits. Either way, using it was off the table. So I decided to revisit the old Macbook Pro.

I upgraded the Macbook Pro to Ubuntu 22.04 using apt. This caused most of the problems I had smoothed out to return. After some research I wiped it and loaded Linux Mint on it. That went smooth and, other than the wonky touchpad response that seems to be an ongoing issue with Linux on Macbooks, it proved to be quite stable. Note that I have not actually tested the battery life to see if issues in that area were resolved from the previous effort. This is a server so it's going to be plugged in a lot.

With stable hardware I was ready to load the jigsaw puzzle of streaming media bits I needed. Here's how it as done. The info here will apply to Linux on any Intel/AMD based hardware. There is nothing Macbook-centric about this process. There are seven basic steps to the process.

  1. Install and update the Linux OS on your computer
  2. Create a location for downloads to be stored.
  3. Install the Sonnar server
  4. Get Some Usenet Accounts
  5. Install the SABnzd server
  6. Add the indexer and dowloader to Sonarr
  7. Install the Emby server
Although it is possible to allow access from outside one's network to the streaming media server setup created here, I am not doing that for various reasons so I will not cover the steps needed to do so.

Step 1 - Load and Update The OS

Choose a Linux OS, install it on your hardware and update it with the latest available packages.

Since this is going to be a server, assign a static IP to it.

Step 2 - Create Download Location

To stream media you will need a place to put the media files. Media files are large so make sure you choose a location that has plenty of space.

For my setup I created a mount point called storage in /mnt. Since I had a 1TB drive in my Macbook I did not need to create a partition or mount it. However, if you are using a system with multiple drives or a large drive with multiple partitions, define a large enough partition and mount it with permissions that will allow the SABnzd service to download files to it.

Once you have the media download location setup, create two directories in it. One called library and one called sabnzbd. The library directory will hold the completed downloads of media. The sabnzd directory will hold the files that are actively being downloaded. For my purposes I /mnt/storage/library and /mnt/storage/sabnzbd.

Step 3 - Install Sonarr

Sonarr is the software that will handle finding and managing the media you will be streaming. It works with SABnzd (the downloader) to do this.
  1. Download and install Sonarr. Use these instructions on the Sonarr site.
  2. Once Sonarr is installed, open a browser and navigate to it (step 4 of the Sonarr instructions).

    If the Sonarr page loads, to on to the next step.

    If the Sonarr page fails to load stop here. Go back over the instructions and make sure you did all steps correctly.

  3. Click on Settings in the menu at left.
  4. Click on Media Management
  5. Scroll down and click on the Add Root Folder button.
  6. Locate the library folder created in Step 2 and add it. For example, I created my library folder in /mnt/storage/library so this will be the directory I set as the root folder.

Step 4 - Get Some Usenet Accounts

To be able to download media, Sonarr requires two things: a usenet account and a usenet indexer service. The usenet account allows you access to the USENet while the indexer service provides the mechanism for searching the USENet for media.

For my usenet account I signed up with news.newshosting.com. They have several plans, none costing more than $16 per month.

For my indexer I chose nzbgeek. Again, they have several plans to choose from and all less than $15.

Once you have signed up for your accounts keep their sites open. You'll need info from them when setting up the other components of your server.

Step 5 - Install SABnzbd

SABnzbd is used to connect to USENet and download media. It uses information provided by the indexer to locate the media you want to download.

If you are using an Ubuntu-based Linux distro the SABnzbd package will be available in the repository. Simply add it via apt. For example, on my Linux Mint I did: sudo apt install sabnzbdplus .

Once SABnzbd is installed you will need to configure it.

  1. Start SABnzbd via the desktop menus. In Linux Mint it is located in the Internet group and listed as SABnzbd+.
  2. When started an icon for SABnzbd will appear in the system tray. Click on it to show the app.
  3. In the app, click on the gear icon in the top right corner. The configuration page will load.
  4. Click on the Folders tab at the top of the window.
  5. Complete the following fields to define the needed folders.
    • Set the "Temporary Download Folder" to the location you configured in Step 2 above plus /incoming. For my setup, I created /mnt/storage/sabnzbd. So this field is set to /mnt/storage/sabnzbd/incoming.
    • Set the "Completed Download Folder" to the location you configured in Step 2 above plus /downloaded. For my setup this is set to /mnt/storage/sabnzbd/downloaded.
    Note that both the incoming and downloaded directories will be created the first time they are needed by SABnzbd. There is no need to create them yourself.
  6. Set the "Minimum Free Space for Completed Download Folder" to at least 10G. This will ensure downloads don't occur if there is not enough free space on the drive where media is being stored.
  7. Scroll down and click on the Save Changes button.
  8. Click on the Servers tab.
  9. Click on the "+ Add Server" button.
  10. Complete the following fields to define your usenet account (from Step 4):
    • Server description: The name of where you got your usenet account in Step 4; i.e. - NewsHosting.
    • Host: The name of the host for your usenet account; i.e. - news.newshosting.com
    • Port: The port for connecting to the news host.
    • Username: Your username used to access your news host.
    • Password: The password used by your username.
  11. Scroll down and click on the Test Server button. The test should succeed. If it does not stop here and go back over the settings for your usenet account.
Once SABnzbd is configured and the connection to your usenet account is working go on to the next step.

Step 6 - Add SABnzbd and Your Indexer to Sonarr

Now you need to make Sonarr aware of your downloader (SABnzbd) and your indexer (for me that's nzbgeek).
  1. In your browser, access your Sonarr server (http://localhost:8989).
  2. Click on Settings then Indexers in the menu on the left.
  3. Click on the large + icon to add an indexer.
  4. Click on the "Newznab" option. This will open the "Add Indexer - Newznab" dialog.
  5. Complete the following fields to define the indexer.
    • Name: Give the indexer entry a name; i.e. - NZBGeek.
    • URL: Enter the URL for your indexer; i.e. - for nzbgeek this would be https://api.nzbgeek.info.
    • API Key: Enter the API key from your account info.
  6. Click on the Test button. The test should succeed. If it does then proceed with Sonarr setup. If it does not stop here and ensure the information you've added here is correct.
  7. When the indexer test is successful, click on the Save button.
  8. Click on Download Clients in the menu at left.
  9. Click on the large + icon to add a downloader.
  10. Click on the "NZBGet" option. This will open the "Add Download Client - NZBGet" dialog.
  11. Complete the following fields to define the downloader.
    • Name: Give the downloader entry a name; i.e. - SABnzbd.
    • Host: Use either localhost or the IP address of your media server.
    • Port: Use 8080.
    • API Key: Enter the API key of your SABNzbd server. This can be found in SABnzbd via Settings -> General in the Security section.
    • Username: Enter the username you created when SABnzbd was setup in Step 6.
    • Password: Enter the password for the username.
  12. Click on the Test button. The test should succeed. If it does then proceed with Sonarr setup. If it does not stop here and ensure the information you've added here is correct.
  13. When the downloader test is successful, click on the Save button. Basic Sonarr configuration is completed.

Step 7 - Install Emby Server

Emby is the piece of this puzzle that streams your media to your devices. Emby also has clients for various platforms such as Windows, macOS, etc. In my case, I use the Emby client on an Apple TV to stream the media from my server.
  1. Download Emby from the Emby web site. Choose the correct Linux distro before downloading. Follow the instructions there to install it.
  2. Create an account on the Emby web site.
  3. Navigate to http://localhost:8096. The new install wizard will be displayed. these instructions for initial setup.

Once Emby is up and running your streaming media server is complete. From this point it is only a matter of adding media to download and watching it. The Sonarr Wiki contains plenty of information on adding media to download as well as taking advantage of other features of Sonarr and help troubleshooting any download issues.