Install Sonarr Raspberry Pi with Mono 3.10

raspberry_pi_nzbdrone

Sonarr is an alternative to SickBeard and SickRage for Usenet video automation. It works well with NZBGet and Sabnzbd. Sonarr has changed name because it will be supporting torrents in the near future so NzbDrone was no longer an appropriate name. It is written in C# which requires Mono on Linux based systems. Using this guide will get automatically install Mono 3.2.8 on Raspbian. The recommended Mono version is 3.10 but building mono on the Raspberry Pi is not recommended because of its low spec hardware.


Best Price
Get UsenetServer for only $7.95/mo. and save 60% lifetime discount
  • Free Zero-Log VPN Included
  • Free Unlimited Usenet Search
  • 4319 Days Binary & Text Retention
No, Thanks

I managed to compile a working mono 3.10 armhf deb package so all you have to do is download it and install it. If you already have Sonarr installed on your Raspberry Pi and Pi 2 you can either remove the old mono or try and install the deb package over the existing installation. When you are done Sonarr (NzbDrone) will use mono 3.10.

I recommend only using this on headless machines, if you are on Raspbmc you will notice Sonarr is a bit slow, that is because Raspbmc is using a lot of GPU and RAM to create the graphical interface. That said, Sonarr will still work on Raspbmc, but expect the interface to not be super snappy.

Raspberry Pi 2 and Pi 3 users use the Raspberry Pi 2 guide

Our Top Pickhtpcgtbl-table__imageUsenetServer
  • Retention: 3199
  • Monthly: $10
  • Annual: $95.40
VIEW LATEST PRICE →
htpcgtbl-table__imageNewshosting
  • Retention: 3199
  • Monthly: $10
  • Annual: $99
VIEW LATEST PRICE →
htpcgtbl-table__imageFrugal Usenet
  • Retention: 3000
  • Monthly: $4.16
  • Annual: $50
VIEW LATEST PRICE →
htpcgtbl-table__imageUsenetlink
  • Retention: 2000
  • Monthly: $15
  • Annual: $140
VIEW LATEST PRICE →

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

Install Sonarr Raspberry Pi with Mono 3.10

Update packages

sudo apt-get update

Upgrade packages

sudo apt-get upgrade -y

Install libmono-cil-dev (Thanks to Raijmond)

sudo apt-get install libmono-cil-dev -y

If you get a libmono-cil-dev will not be installed you hold broken packages do this extra step

Lower the pin preference

sudo nano /etc/apt/preferences

Add these lines, if you are on wheezy replace jessie with wheezy

Package: *
Pin: release n=jessie
Pin-Priority: 998

Save with Ctrl+X, Y and Enter

Now update packages and install

sudo apt-get update
sudo apt-get install libmono-cil-dev -y

Install Mono 3.10 Raspberry Pi armhf Package

Download the precompiled mono 3.10 arm deb package

wget http://sourceforge.net/projects/bananapi/files/mono_3.10-armhf.deb

If Sourceforge is down you can use a mirror (thanks Hermi)

wget http://www.frickelzeugs.de/mono_3.10-armhf.deb

Here is yet another mono mirror

wget https://www.dropbox.com/s/k6ff6s9bfe4mfid/mono_3.10-armhf.deb

Install the Mono 3.10 package for Raspbian

sudo dpkg -i mono_3.10-armhf.deb

You can check your mono version

mono --version

It should read

Mono JIT compiler version 3.10.0 (mono-3.10.0-branch/ce003f4 Wed Nov 26 20:10:31 CET 2014)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com

Even if it doesn't show 3.10.0 don't worry, there is a workaround for the init.d script

Install Sonarr Raspberry Pi

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 packages

sudo apt-get update

Install Sonarr (NzbDrone)

sudo apt-get install nzbdrone sqlite3-dev -y

Take ownership of the Sonarr installation so updates will work properly

sudo chown -R pi:pi /opt/NzbDrone

Autostart Sonarr

There are two methods, the init.d script and upstart script. Upstart can conflict with your system so attempt the init.d method first.

Sonarr init.d Script

Create the init.d script file

sudo nano /etc/init.d/nzbdrone

Paste this long code, change DAEMON to DAEMON=/usr/local/bin/mono if mono shows 3.2.8 instead of 3.10

#! /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 /etc/init.d/nzbdrone defaults 98

If the above command gives an error try

sudo update-rc.d nzbdrone defaults 98

Reboot and then configure Sonarr.

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 mono 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.

Get UsenetServer for only $7.95/mo. and save 60% lifetime discount