My Own Memory Hole
Blog♯NAS

Partage Samba / CIFS depuis NAS D-Link DNS-320

Un déménagement m'ayant amené à réinstaller l'ensemble de mon « système multimédia » constitué d'un NAS et d'un Raspberry Pi, je me suis trouvé une nouvelle fois à avoir le plus grand mal à mettre en place le partage des partitions de mon NAS vers l'ensemble de mes terminaux... et impossible de réutiliser de manière satisfaisante le montage NFS et ses options que j'utilisais jusqu'alors.
Je me suis rabattu alors vers une solution de partage unique via le protocole CIFS proposé par défaut par le NAS.

On commence par créer un nouvel utilisateur dans la section Management > Account Management à qui l'on donne les droits de lecture et d'écriture si les partages ont déjà été défini dans Management > Network Shares ; sinon, les permissions seront définies lors de la création des partages.

Ensuite, on crée, sur les clients un fichier ~/.nascredentials qui va contenir les identifiants de connexion de cet utilisateur :

username=USER
password=PASSWORD

On fait en sorte que seul le propriétaire de ce fichier puisse le lire et l'écrire :

$ chmod 600 ~/.nascredentials

On crée des points de montage pour les partages du NAS :

$ mkdir ~/NAS ~/NAS_DOWN

Enfin, on édite le fichier /etc/fstab (en spécifiant bien l'emplacement du fichier .nascredentials) :

//192.168.1.42/Contents /home/bbrice/NAS        cifs    _netdev,vers=1.0,credentials=/home/bbrice/.nascredentials,rw,iocharset=utf8 0 0
//192.168.1.42/torrent /home/bbrice/NAS_DOWN    cifs    _netdev,vers=1.0,credentials=/home/bbrice/.nascredentials,rw,iocharset=utf8 0 0

Puis on monte nos partitions :

$ sudo mount -a

Par contre, il est sans doute nécessaire d'installer le paquet cifs-utils :

$ sudo apt install cifs-utils

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