Install Sonarr Banana Pi with Bananian

banana-pi-sonarr-nzbdroneSonarr is a badass TV Show PVR that works with usenet and torrents. Create a list of shows and Sonarr will find the relevant .torrent and/or nzb files for you. For torrents it will work with uTorrent, Transmission, Deluge and a watch directory ‘blackhole' for other torrent clients. With usenet download clients you can use Sabnzbd or NZBGet. Sonarr renames and organizes your TV shows beautifully so they can easily be recognized by XBMC or Plex Media Server when you want to stream your media around your home.

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

In order to use SSL with Sonarr you need another package which is not included in this guide. You can still access it through SSL outside your home network with a reverse proxy.

Here is a quick overview of the hardware advantages of the Banana Pi compared to the Raspberry Pi. You can see my detailed benchmarks (Raspberry vs Banana Pi Benchmarks: Do SATA and Gigabit Matter?) for more information.

Install Sonarr Banana Pi with Bananian

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

Enable apt-get to install from https sources on the Banana Pi 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 Bananian

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) on the Banana Pi

sudo apt-get install nzbdrone -y

Take ownership of the Sonarr installation with your Banana Pi user so updates will work properly

sudo chown -R pi:pi /opt/NzbDrone

Test if Sonarr runs

mono /opt/NzbDrone/NzbDrone.exe

If you can access Sonarr at http://ip.address:8989 all is well

Kill the Sonarr (NzbDrone) process with Ctrl+C or Ctrl+Z

Remove the sonarr repository to avoid future issues with libmono-dev

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

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 Sonarr init.d script file

sudo nano /etc/init.d/nzbdrone

Paste this long code, adjust the user if it is not pi

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

If the above command gives an error try

sudo update-rc.d nzbdrone defaults

Reboot and then configure Sonarr.

It is a good idea to remove the Sonarr repository afterwards since it can cause future dependency issues when upgrading distros.

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