Installer NzbDrone sur Debian
Cette article présente l’installation de l’applicatif NzbDrone sur Debian Wheezy 7.5 64 bits. NzbDrone est un Smart PVR pour les utilisateurs de newsgroups. Il permet de récupérer automatiquement ses séries préférées libres de droits heu, bon bref… Voici comment l’installer.
Pré-Requis à NzbDrone
Les pré-requis de NzbDrone se limitent à quelques packages et mono, une implémentation open-source de .Net de Microsoft.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | root@server:~# apt-get install mediainfo sqlite3 Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libmediainfo0 libtinyxml2-0.0.0 libzen0 Suggested packages: sqlite3-doc The following NEW packages will be installed: libmediainfo0 libtinyxml2-0.0.0 libzen0 mediainfo sqlite3 0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. Need to get 2,038 kB of archives. After this operation, 5,116 kB of additional disk space will be used. Do you want to continue [Y/n]? |
Debian Wheezy 7.5 vient avec une version obsolète de Mono (2.10.8) et il faudra malheureusement compiler à partir du tar ball comme expliqué dans un précédent article. A noter qu’une version 3.6+ est maintenant recommandée, la 3.2 ayant des problèmes de stabilité et la 3.4 présentant des bugs avec sqlite. Le tuto reste néanmoins parfaitement valide en utilisant la dernière version 3.10 de mono.
La prochaine version Jessie de Debian devrait fournir une version 3.2.8, autant dire que, même à ce moment là, il faudra toujours passer par la case compilation.
Installation de NzbDrone avec tar.gz
L’installation est assez simple. Il suffit de récupérer un tar.gz et déplacer l’exécutable à l’endroit de son choix, ici /opt/NzbDrone
pour rester dans la norme.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | root@server:~# wget http://update.nzbdrone.com/v2/master/mono/NzbDrone.master.tar.gz --2014-11-03 15:36:40-- http://update.nzbdrone.com/v2/master/mono/NzbDrone.master.tar.gz Resolving update.nzbdrone.com (update.nzbdrone.com)... 104.28.4.70, 104.28.5.70 Connecting to update.nzbdrone.com (update.nzbdrone.com)|104.28.4.70|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 4784254 (4.6M) [application/octet-stream] Saving to: `NzbDrone.master.tar.gz' 100%[==================================================================================================>] 4,784,254 9.58M/s in 0.5s 2014-11-03 15:36:41 (9.58 MB/s) - `NzbDrone.master.tar.gz' saved [4784254/4784254] root@server:~# tar xvzf ./NzbDrone.master.tar.gz root@server:~# mv ./NzbDrone /opt/ |
Installation de NzbDrone avec repository
On peut aussi s’appuyer sur le repository mis à disposition par l’équipe de NzbDrone. Il faut juste déclarer ce dernier sur son serveur et rajouter la clé correspondante.
1 2 3 4 5 6 7 8 | root@server:~# cat /etc/apt/sources.list.d/nzbdrone.list deb http://update.nzbdrone.com/repos/apt/debian master main root@server:~# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /tmp/tmp.5Cza2M5QA4 --trustdb-name /etc/apt//trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-jessie-stable.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-squeeze-automatic.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-squeeze-stable.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-wheezy-automatic.gpg --keyring /etc/apt/trusted.gpg.d//debian-archive-wheezy-stable.gpg --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC gpg: requesting key FDA5DFFC from hkp server keyserver.ubuntu.com gpg: key D9B78493: public key "NzbDrone <contact@nzbdrone.com>" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) |
Un simple apt-get update && apt-get install nzbdrone
suffit alors. Le seul problème est qu’il propose au passage d’installer 143 paquets supplémentaires sur mon serveur, alors que la version avec le tar.gz semble très bien fonctionner pour le moment. J’ai donc préféré rester sur la méthode précédente du tar.gz.
Script de Démarrage Automatique
On peut maintenant récupérer un script de démarrage de NzbDrone pas trop mal. Celui fourni sur le site de NzbDrone pose pas mal de problèmes. Adapté à environnement, cela donne :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | root@server:~# cat /etc/init.d/nzbdrone #!/bin/bash ### 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 . /lib/lsb/init-functions #set -e NAME=nzbdrone DESC="NZBDrone" MONO=$(which mono) DAEMON=/opt/NzbDrone/NzbDrone.exe DAEMONOPTS="" DATADIR=~nzbdrone/ PIDDIR=/var/run/${NAME} PIDFILE=${PIDDIR}/${NAME}.pid RUNASUSER=nzbdrone RUNASGROUP=nogroup RUNAS=$RUNASUSER:$RUNASGROUP if ! [ -r ${DAEMON} ]; then echo "Can't read: ${DAEMON}" 2>&1; exit 1; fi if ! [ -x ${MONO} ]; then echo "Not executable: ${MONO}" 2>&1; exit 1; fi if ! [ -d ${DATADIR} ]; then echo "No such directory: ${DATADIR}" 2>&1; exit 1; fi get_pid() { pgrep -of "^${MONO} ${DAEMON}" } check_pid() { if [ ! -d ${PIDDIR} ]; then mkdir -p ${PIDDIR}; chown ${RUNASUSER}:root ${PIDDIR}; chmod 0750 ${PIDDIR}; fi if [ -e ${PIDFILE} ]; then if ! kill -0 $(cat ${PIDFILE}) &> /dev/null; then rm -f $PIDFILE fi fi if [ ! -e ${PIDFILE} ] && get_pid >/dev/null; then get_pid > ${PIDFILE} chown ${RUNASUSER}:root ${PIDFILE} fi } do_start() { RETVAL=1 log_daemon_msg "Starting ${DESC}" "${NAME}" if get_pid >/dev/null; then log_progress_msg "(already running?)" else start-stop-daemon -q -d ${DATADIR} -c $RUNAS --start --background --make-pidfile --pidfile ${PIDFILE} --exec $MONO -- $DAEMON $DAEMON_OPTS RETVAL=$? fi log_end_msg $RETVAL } do_stop() { RETVAL=1 log_daemon_msg "Stopping ${DESC}" "${NAME}" if ! get_pid >/dev/null; then log_progress_msg "(not running?)" else start-stop-daemon -q --stop --pidfile $PIDFILE --retry 15 RETVAL=$? fi log_end_msg $RETVAL } # Check status of PID check_pid case "$1" in start) do_start ;; stop) do_stop ;; status) status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $? ;; restart|force-reload) do_stop; do_start; ;; *) N=/etc/init.d/$NAME echo "Usage: $0 {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0 |
Il ne reste plus qu’à créer un utilisateur nzbdrone (ce dernier ne doit pas s’exécuter en root!), rendre le script exécutable et ajouter les liens au démarrage.
1 2 3 | root@server:~# useradd --gid nogroup nzbdrone -m -d /var/lib/nzbdrone/ -r -s /usr/sbin/nologin root@server:~# chmod a+x /etc/init.d/nzbdrone root@server:~# update-rc.d nzbdrone defaults |
Attention, le répertoire de l’utilisateur nzbdrone contiendra ensuite les fichiers de configuration et la base de données. Il vaut mieux choisir un répertoire séparé des fichiers programmes.
Quelques Vérifications et Conclusion
Voilà ! Il ne reste plus qu’à démarrer le service, et tester que tout fonctionne bien :
1 2 3 4 5 6 | root@server:~# service nzbdrone start [ ok ] Starting NZBDrone: nzbdrone. root@server:~# service nzbdrone status [ ok ] nzbdrone is running. root@server:~# netstat -ntpul | grep mono tcp 0 0 0.0.0.0:8989 0.0.0.0:* LISTEN 804/mono |
En se connectant sur le port 8989 de son serveur avec son navigateur préféré, on devrait maintenant voir ça
Pour la suite, il faudra encore configurer NzbDrone, installer un « client de download », nzbget, sécuriser la configuration, etc. Le tout sera expliqué dans de prochains articles.