My Own Memory Hole
Blog♯fun_plug

Transmission sur NAS D-Link DNS-320 avec fun_plug

Si je gère toujours mes téléchargements de torrents sur mon NAS « augmenté » de fun_plug, je n'utilise plus rTorrent en daemon mais Transmission. Plusieurs raisons à ce changement : la plus importantes étant la non disponibilité de certaines dépendances du fait de la disparition de plusieurs dépôts pour fun_plug ; et puis, rTorrent présentait certaines limitations, notamment l'absence de file d'attente...

Installation

L'installation de Transmission ne peut se faire par le biais de slacker, l'outil de gestion de paquets de fun_plug, encore une fois pour des questions de dépendances non satisfaites...
Il faut commencer par installer Optware, qui fournit de nombreux logiciels :

$ wget http://wolf-u.li/u/233 -O /ffp/start/optware.sh
$ chmod a+x /ffp/start/optware.sh
$ /ffp/start/optware.sh start

L'on dispose alors de la commande ipkg 

# ipkg update
# ipkg list
# ipkg list transmission
# ipkg install transmission

Préparation

On commence par créer les répertoires de téléchargement et de configuration&nbp;:

# mkdir -p /mnt/HD/HD_b2/torrent/{.transmission,complete,incomplete}

Ensuite, pour bénéficier du script de lancement de transmission-daemon, nous installons puis désinstallons dans la foulée via slacker le paquet transmission :

# slacker -a transmission
# slacker -r transmission

Puis on édite le fichier /ffp/start/transmission.sh en modifiant les chemins des exécutables (qui se trouvent dans /opt/bin) et des fichiers de configuration de Transmission :

# nano /ffp/start/transmission.sh 

Voici mon script :

#!/ffp/bin/sh

# PROVIDE: Transmission

. /ffp/etc/ffp.subr

TRANSMISSION_HOME=/mnt/HD/HD_b2/torrent/.transmission

name="transmission-daemon"
command="/opt/bin/$name"
start_cmd="transmission_start"
stop_cmd="transmission_stop"
status_cmd="transmission_status"
user=root
su_cmd="/ffp/bin/su"

transmission_start()
{
   if [ ! -d ${TRANSMISSION_HOME} ]; then
      $su_cmd $user -c "mkdir ${TRANSMISSION_HOME}"
   fi
   echo "Starting $name"
      $su_cmd $user -c "$command -g ${TRANSMISSION_HOME} -e ${TRANSMISSION_HOME}/$name.log"
}

transmission_stop()
{
   echo "Stopping $name"
      /ffp/bin/killall -SIGINT $name
}

transmission_status()
{
   _pids=$(pidof $name)
   if test -n "$_pids"; then
      echo "$name is running, pid:"
      pidof $name
   else
      echo "$name not running"
   fi
}

run_rc_command "$1"

On le rend exécutable :

# chmod a+x /ffp/start/transmission.sh

Premier lancement

Afin de générer le fichier de configuration, il convient de lancer une première fois transmission-daemon avec les arguments suivants :

  • -g : le chemin vers le répertoire de configuration et autres fichiers générés par Transmission ;
  • -w : le répertoire où seront stockés les fichiers téléchargés ;
  • -T : je n'ai pas besoin d'authentification puisque je me limite à mon réseau local (option -a).
# /opt/bin/transmission-daemon -f -g /mnt/HD/HD_b2/torrent/.transmission -w /mnt/HD/HD_b2/torrent/complete -T -a 127.0.0.1,192.168.1.*

On peut interrompre le daemon (Ctrl+C) puis éditer le fichier de configuration qui a été créé :

# nano /mnt/HD/HD_b2/torrent/.transmission/settings.json 

Ensuite, on peut lancer Transmission simplement avec :

# /ffp/start/transmission.sh

Références :

rTorrent en daemon

Pour mes téléchargements, notamment de séries, j'utilise le logiciel rTorrent installé sur mon NAS (un D-Link DNS-320 avec fun_plug par-dessus).
Cependant il convient de pouvoir le laisser tourner en tâche de fond, d'autant plus que je récupère les torrents des derniers épisodes de séries avec FlexGet.

Configuration de rTorrent

Il s'agit ici de présenter simplement les éléments de configuration nécessaires au téléchargement des nouveaux torrents, au déplacement des fichiers vers un dossier surveillé par mon serveur media MediaTomb (désormais Gerbera)...

Surveillance des nouveaux fichiers torrent

# Watch a directory for new torrents, and stop those that have been deleted.
schedule = watch_directory,5,5,load_start=/mnt/HD/HD_b2/torrent/*.torrent
schedule = untied_directory,5,5,stop_untied=

Déplacement des fichiers téléchargés

# Répertoire pour téléchargement
directory = /mnt/HD/HD_b2/torrent/incomplete/

# On déplace les fichiers dont le téléchargement est fini
system.method.set_key = event.download.finished,move_complete,"execute=mv,-u,$d.get_base_path=,/mnt/HD/HD_b2/torrent/complete/;d.set_directory=/mnt/HD/HD_b2/torrent/complete/"

Daemon rTorrent

Il s'agit de pouvoir lancer rTorrent "encapsulé" dans un "multiplexeur de terminaux" comme screen ; le script est basé sur celui proposé dans la documentation d'ubuntu-fr et celui-ci. Cependant, j'ai décidé de ne pas lancer rTorrent au démarrage du NAS mais à la demande.

J'ai donc créé le fichier /bin/drtorrent :

$ sudo nano /bin/drtorrent

avec ce script :

#!/ffp/bin/sh
# Start/Stop rtorrent sous forme de daemon.

NAME=drtorrent
SCRIPTNAME=/ffp/bin/$NAME
PATH=/ffp/bin:/ffp/sbin:/usr/sbin:/usr/bin:/bin:/opt/bin:/opt/sbin

case $1 in
        start)
                echo "Starting rtorrent... "
                /ffp/bin/screen -fn -dmS rtd /opt/bin/rtorrent
                echo "Terminated"
        ;;
        stop)
                if [ "$(ps aux | grep -e '.*rtorrent$' -c)" != 0  ]; then
                {
                        echo "Shutting down rtorrent... "
                        killall -r "^.*rtorrent$"
                        echo "Terminated"
                }
                else
                {
                        echo "rtorrent not yet started !"
                        echo "Terminated"
                }
                fi
        ;;
        restart)
                if [ "$(ps aux | grep -e '.*rtorrent$' -c)" != 0  ]; then
                {
                        echo "Shutting down rtorrent... "
                        killall -r "^.*rtorrent$"
                        echo "Starting rtorrent... "
            /ffp/bin/screen -fn -dmS rtd /opt/bin/rtorrent
                        echo "Terminated"
                }
                else
                {
                        echo "rtorrent not yet started !"
                        echo "Starting rtorrent... "
            /ffp/bin/screen -fn -dmS rtd /opt/bin/rtorrent
                        echo "Terminated"
                }
                fi
        ;;
        *)
                echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
                exit 2
        ;;
esac

Attention : il vous faudra sans doute modifier quelques lignes, notamment pour ce qui est des chemins vers les exécutables (remplacer /ffp/bin/ par /bin/ par exemple).

Une fois enregistré, il doit falloir le rendre exécutable :

sudo chmod +x /bin/drtorrent

Usage

Pour lancer rTorrent en background, il suffit de lancer la commande :

$ drtorrent start

Vous devriez avoir ce message :

Starting rtorrent... 
Terminated

Pour suivre nos téléchargement, il faut alors ouvrir le screen dans lequel le script a lancé rTorrent :

$ screen -x

Si vous avez plusieurs sessions screen, il convient de préciser le nom de la session utilisée par le script, rtd :

$ screen -x rtd

[En savoir plus sur screen sur la documentation d'ubuntu-fr].

Pour "quitter" cet écran, ou plutôt pour le "détacher", il faut utiliser la combinaison de touches Ctrl+a d. Pour véritablement quitter, c'est-à-dire arrêter rTorrent, on peut utiliser la combinaison Ctrl+q ou après l'avoir détaché, lancer la commande :

$ drtorrent stop