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 Sign Up Now → 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

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.