Install Sonarr Raspberry Pi 2 with Latest Stable Mono

raspberry_pi_nzbdrone

Install Sonarr Raspberry Pi 2 with latest stable mono thanks to the Xamarin packages. Sonarr is an alternative to SickBeard and SickRage for Usenet and torrent periodic video automation. It works well with NZBGet and Sabnzbd for usenet and Transmission for torrents. Sonarr also works with Jackett for additional torrent providers but you will have to build an older Jackett for public trackers. Mono is a heavy package and it can take some time to load Sonarr so be mindful of this when you are starting the service or waiting for it to start on boot. This was tested on Raspbian Wheezy and Jessie as well as Minibian.

Usenet Provider
Backbone
Retention
Speed
Connections
VPN
Monthly
Annual
UsenetServer
UsenetServer
3199
Unlimited
30
Yes
$10
$95.40
Newshosting
Newshosting
3199
Unlimited
30
Yes
$10
$99
Frugal
Frugal
3000
Unlimited
20
No
$4.16
$50
Usenetlink
Cloudgate
2000
100 Mbit
30
No
$15
$140

If you are trying to figure out which hardware would work best for you, consider reading the Pi benchmarks.

Install Sonarr Raspberry Pi 2 with Latest Stable Mono

Add the Xamarin mono repository to make sure we get the latest stable mono (source)

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update

Install Sonarr Raspberry Pi 2

Enable apt-get to install from https sources or you will get this error

The method driver /usr/lib/apt/methods/https could not be found.

To solve it install the https package

sudo apt-get install apt-transport-https -y --force-yes

Add sources to install Sonarr on Raspbian

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

Update repository list of packages

sudo apt-get update

Install Sonarr (NzbDrone)

sudo apt-get install nzbdrone -y

Take ownership of the Sonarr installation so updates will work properly

sudo chown -R pi:pi /opt/NzbDrone

Autostart Sonarr

Init.d scripts work on all Raspbian versions like Wheezy, Jessie and later

Sonarr init.d Script

Create the Sonarr init.d script file

sudo nano /etc/init.d/nzbdrone

Paste the Sonarr init.d startup script

#! /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=pi

# 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

Ctrl+X, Y and Enter to save
Make the Sonarr init.d script executable

sudo chmod +x /etc/init.d/nzbdrone

Update the Sonarr init.d to start on boot

sudo update-rc.d nzbdrone defaults 98

Reboot and wait for Sonarr to start, it can take a minute or two so be patient

Then configure Sonarr

sudo reboot

Sonarr on OSMC Update and Raspbian Fix

If you are using OSMC you should remove the sonarr repo from the sources.list (source here). The repository is not necessary for updating Sonarr and can cause dependency issues.

sudo rm /etc/apt/sources.list.d/sonarr.list

Note that Sonarr takes a minute or two to start up on boot so if you can't access the Sonarr web interface, be patient, it will be accessible when the Pi finishes loading it. This has been tested on a Raspbian fresh install at least 5 times and it does work. On the first run it can take 5 minutes, after the first run it will automatically start faster on boot.

You can access Sonarr on its default port at http://ip.address:8989

Now you can configure NzbDrone. An updated guide to include Sonarr's torrent abilities will be published when the updates make it to the master branch.