Sonarr Installation [HTPC-Sonarr]

Note

These directions are way out of date. Do not use these! I have since switched to a different process or tool since writing this particular article, but keeping it up for posterities sake, until I can properly replace it.

What have I changed to you ask? Anything building I’ve tried switching over to Ansible to handle in a much more programatic way. Others might be tools that I just don’t use at all anymore, due to changing DNS hosts.

Sonarr (old name was NzbDrone, which you will still see everywhere. Even in their startup file…) is, honestly, my favorite of all of the HTPC Apps. Even moreso than Plex because Plex can really be a huge resource hog.

The day that Sonarr really hopped into my all time fav basket was when I had began downloading a TV show outside of Sonarr. Then, when I had started adding it to Sonarr, it started searching through my directories I had inputted into its settings as a possible final download location, found the files, moved them into their correct, final spot, renamed and everything. Without missing a beat.

Its not without its issues, of course. But they often get fixed quickly, or they aren’t with this program, but another site or service.

Base Requirements

Make sure apt-transport-https is installed:

sudo apt-get install apt-transport-https

Add the Apt Source and Install

Luckily, here, they have a repo we can add to our apt-get lists (of which I always have seperate list files for the “outside of ubuntu/debian” standards) so we get to have easy updates and whatnot.

First, gotta add the key, then the repo, and then update and install.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC
echo "deb https://apt.sonarr.tv/ master main" | sudo tee -a /etc/apt/sources.list.d/sonarr.list

sudo apt-get update && sudo apt-get install nzbdrone -y

Now, you’ll notice there was a TON of apps installing here… Don’t panic. This is because Sonarr - aka NzbDrone here - is actually ran using an .exe file! Can you believe it?!? But, there is an open source program called mono that, I believe if the program is compiled for it only, can we run .exe’s here! So that was all the Mono modules installing.

But, now we need to run Sonarr, with it outputting the actual output to your shell. This way, you can easily spot any errors, read when it tells you to fix something. Plus, its honestly cool to watch that output live as you click around in a program.

First Run

sudo mono /opt/NzbDrone/NzbDrone.exe

Now, to stop the program, ctrl-C sends the SIGHUP signal to try to gracefully quit the program.

Create Autostart init.d File

Now, we need to make the autostart file, of which, one is not supplied by the installer. I also didn’t have much luck with the ones listed on their github site. But the text below was coped from HTPCGuides.com site , [HTPC-Sonarr] which has served me very well.

First, edit the init.d file.

sudo nano /etc/init.d/nzbdrone

Then, copy and paste the text from below. You’ll notice the big EDIT ME text in there. Take a looksee, make your edits as you see fit.

#! /bin/sh
### BEGIN INIT INFO
# Provides: NzbDrone
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Should-Start: $NetworkManager
# Should-Stop: $NetworkManager
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts instance of NzbDrone
# Description: starts instance of NzbDrone using start-stop-daemon
### END INIT INFO

############### EDIT ME ##################
# path to app
APP_PATH=/opt/NzbDrone

# user
RUN_AS=<Your UserName>

# path to mono bin
DAEMON=$(which mono)

# Path to store PID file
PID_FILE=/var/run/nzbdrone/nzbdrone.pid
PID_PATH=$(dirname $PID_FILE)

# script name
NAME=nzbdrone

# app name
DESC=NzbDrone

# startup args
EXENAME="NzbDrone.exe"
DAEMON_OPTS=" "$EXENAME

############### END EDIT ME ##################

NZBDRONE_PID=`ps auxf | grep NzbDrone.exe | grep -v grep | awk '{print $2}'`

test -x $DAEMON || exit 0

set -e

#Look for PID and create if doesn't exist
if [ ! -d $PID_PATH ]; then
    mkdir -p $PID_PATH
    chown $RUN_AS $PID_PATH
fi

if [ ! -d $DATA_DIR ]; then
    mkdir -p $DATA_DIR
    chown $RUN_AS $DATA_DIR
fi

if [ -e $PID_FILE ]; then
    PID=`cat $PID_FILE`
    if ! kill -0 $PID > /dev/null 2>&1; then
        echo "Removing stale $PID_FILE"
        rm $PID_FILE
    fi
fi

echo $NZBDRONE_PID > $PID_FILE

case "$1" in
    start)
    if [ -z "${NZBDRONE_PID}" ]; then
        echo "Starting $DESC"
        rm -rf $PID_PATH || return 1
        install -d --mode=0755 -o $RUN_AS $PID_PATH || return 1
        start-stop-daemon -d $APP_PATH -c $RUN_AS --start --background --pidfile    $PID_FILE --exec $DAEMON -- $DAEMON_OPTS
    else
        echo "NzbDrone already running."
    fi
    ;;
    stop)
        echo "Stopping $DESC"
        echo $NZBDRONE_PID > $PID_FILE
        start-stop-daemon --stop --pidfile $PID_FILE --retry 15
    ;;
    restart|force-reload)
        echo "Restarting $DESC"
        start-stop-daemon --stop --pidfile $PID_FILE --retry 15
        start-stop-daemon -d $APP_PATH -c $RUN_AS --start --background --pidfile $PID_FILE --exec $DAEMON -- $DAEMON_OPTS
    ;;
    status)
        # Use LSB function library if it exists
        if [ -f /lib/lsb/init-functions ]; then
            . /lib/lsb/init-functions
            if [ -e $PID_FILE ]; then
                status_of_proc -p $PID_FILE "$DAEMON" "$NAME" && exit 0 || exit $?
            else
                log_daemon_msg "$NAME is not running"
                exit 3
            fi
        else
            # Use basic functions
            if [ -e $PID_FILE ]; then
                PID=`cat $PID_FILE`
                if kill -0 $PID > /dev/null 2>&1; then
                    echo " * $NAME is running"
                    exit 0
                fi
            else
                echo " * $NAME is not running"
                exit 3
            fi
        fi
    ;;
    *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
        exit 1
        ;;
    esac

exit 0

Note

See User Management for notes on adjusting user permissions with regards to programs and allowing the web access to your machines.

Add to Autostart Program

Then, make the script executable and add to your autostart program. In the below example, its using Ubuntu’s system <program> start program.

sudo chmod +x /etc/init.d/nzbdrone
sudo update-rc.d nzbdrone defaults

Final Steps

Then, start the program with sudo service nzbdrone start and if you see no error codes - which for some reason Ubuntu 16 wont always show on init.d scripts… Check your HTOP processes to see if its running. If not, sudo service nzbdrone status - then the program should be running.

You can see it at http://localhost:8989 if its running on the same machine as your browser. Otherwise put in the machines IP address instead of localhost.

[HTPC-Sonarr] (1,2)

These directions were liberally copied from HTPCGuides.com