Synology Debian Chroot et Deluge

mickus

Nouveau membre
14 Janvier 2015
20
0
0
Bonjour à tous !

Je me propose d'écrire un tutoriel sur comment installer une Debian Chroot et Deluge car j'ai eu quelques petit soucis moi même pour le faire.

Avant de me lancer dans la rédaction j'aimerais savoir si c'est autoriser de parler de client torrent sur Cachem et si ce tutoriel peut intéresser des membres du forum ;)

Bonne journée :)
 
Salut Mickus, un tuto est toujours le bienvenue donc n'hésite pas ;)
Perso je prépare pour le site aussi un tuto mais ...surprise :p
A côté de cela, je ne suis pas partit sur Deluge justement car il me semblait très compliqué à faire tourner quand Transmission tourne comme un charme :D tu l'auras compris...ça m'intéresse ;)
 
Okay alors allons-y :cool:

D'abord pour ceux qui pourrait ce demander pourquoi Deluge alors que Transmission et ruTorrent sont déjà inclus dans des paquets SynnoCommunity, hé bien tout simplement parce que j'ai besoin de certain features de Deluge et que j’apprécie grandement ce client. Il a beaucoup de plugins qui sont intéressante comme le scheduler, les labels, etc...

Maintenant, place au tutoriel en 9 étapes : (attention un peu long)
  1. Activer le service d'accueil des utilisateur (dossier home pour chaque user)
    Panneau de configuration > Utilisateur > Avancé , “Activer le service d'accueil des utilisateur”

  2. Ajouter SynoCommunity comme source dans le gestionnaire de paquets
    Centre de paquets > Paramètres > Source de paquet > Ajouter
    Nom : SynoCommunity
    Emplacement : https://synocommunity.com/packages


  3. Installer Python et Debian Chroot (depuis communauté)

  4. Se connecter au Syno en SSH en tant que root
    Code:
    ssh root@<your.ip.address>
    Se connecter avec root en login et le mot de passe est celui du compte admin (marche même si le compte admin est désactivé)

  5. Lancer le chroot
    Code:
    /var/packages/debian-chroot/scripts/start-stop-status chroot

  6. Lancer les commandes suivantes sous Debian :
    Code:
    aptitude update
    aptitude upgrade
    aptitude install -t jessie locales
    dpkg-reconfigure locales
    dpkg-reconfigure tzdata
    aptitude install less vim curl rsync screen openssh-server

  7. Installer Deluge (daemon + webui)
    Code:
    add-apt-repository 'deb http://ppa.launchpad.net/deluge-team/ppa/ubuntu precise main'
    apt-get update
    apt-get install -t precise deluge-common deluged deluge-web
    NB: J'utilise l'option "-t jessie" pour installer Deluge 1.3

  8. Ajouter un user spécifique dans Debian pour lancer deluge (je ne voulais pas le lancer en root pour des raisons de sécurité)
    Code:
    adduser --system  --gecos "Deluge Service" --disabled-password --group --home /home/deluge deluge

  9. Configurer deluge pour se lancer au démarage du synology
    Modifier le fichier /etc/default/deluge-daemon comme ceci :
    Code:
    # Configuration for /etc/init.d/deluge-daemon
    
    # The init.d script will only run if this variable non-empty.
    DELUGED_USER="deluge" # Ici j'utilise l'user deluge créé précédemment 
    
    # Should we run at startup?
    RUN_AT_STARTUP="YES"

    Puis, créé le fichier /etc/init.d/deluge-daemon avec le contenu suivant :
    Code:
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          deluge-daemon
    # Required-Start:    $local_fs $remote_fs
    # Required-Stop:     $local_fs $remote_fs
    # Should-Start:      $network
    # Should-Stop:       $network
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Daemonized version of deluge and webui.
    # Description:       Starts the deluge daemon with the user specified in
    #                    /etc/default/deluge-daemon.
    ### END INIT INFO
    
    # Author: Adolfo R. Brandes 
    # Updated by: Jean-Philippe "Orax" Roemer
    
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    DESC="Deluge Daemon"
    NAME1="deluged"
    NAME2="deluge"
    DAEMON1=/usr/bin/deluged
    DAEMON1_ARGS="-d"             # Consult `man deluged` for more options
    DAEMON2=/usr/bin/deluge-web
    DAEMON2_ARGS=""               # Consult `man deluge-web` for more options
    PIDFILE1=/var/run/$NAME1.pid
    PIDFILE2=/var/run/$NAME2.pid
    UMASK=022                     # Change this to 0 if running deluged as its own user
    PKGNAME=deluge-daemon
    SCRIPTNAME=/etc/init.d/$PKGNAME
    
    # Exit if the package is not installed
    [ -x "$DAEMON1" -a -x "$DAEMON2" ] || exit 0
    
    # Read configuration variable file if it is present
    [ -r /etc/default/$PKGNAME ] && . /etc/default/$PKGNAME
    
    # Load the VERBOSE setting and other rcS variables
    [ -f /etc/default/rcS ] && . /etc/default/rcS
    
    # Define LSB log_* functions.
    # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
    . /lib/lsb/init-functions
    
    if [ -z "$RUN_AT_STARTUP" -o "$RUN_AT_STARTUP" != "YES" ]
    then
       log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it."
       exit 0
    fi
    
    if [ -z "$DELUGED_USER" ]
    then
        log_warning_msg "Not starting $PKGNAME, DELUGED_USER not set in /etc/default/$PKGNAME."
        exit 0
    fi
    
    #
    # Function to verify if a pid is alive
    #
    is_alive()
    {
       pid=`cat $1` > /dev/null 2>&1
       kill -0 $pid > /dev/null 2>&1
       return $?
    }
    
    #
    # Function that starts the daemon/service
    #
    do_start()
    {
       # Return
       #   0 if daemon has been started
       #   1 if daemon was already running
       #   2 if daemon could not be started
    
       is_alive $PIDFILE1
       RETVAL1="$?"
    
       if [ $RETVAL1 != 0 ]; then
           rm -f $PIDFILE1
           start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --make-pidfile \
           --exec $DAEMON1 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON1_ARGS
           RETVAL1="$?"
       else
           is_alive $PIDFILE2
           RETVAL2="$?"
           [ "$RETVAL2" = "0" -a "$RETVAL1" = "0" ] && return 1
       fi
    
       is_alive $PIDFILE2
       RETVAL2="$?"
    
       if [ $RETVAL2 != 0 ]; then
            sleep 2
            rm -f $PIDFILE2
            start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --make-pidfile \
            --exec $DAEMON2 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON2_ARGS
            RETVAL2="$?"
       fi
       [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 2
    }
    
    #
    # Function that stops the daemon/service
    #
    do_stop()
    {
       # Return
       #   0 if daemon has been stopped
       #   1 if daemon was already stopped
       #   2 if daemon could not be stopped
       #   other if a failure occurred
    
       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE2
       RETVAL2="$?"
       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE1
       RETVAL1="$?"
       [ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2
    
       rm -f $PIDFILE1 $PIDFILE2
    
       [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1
    }
    
    case "$1" in
      start)
       [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME1"
       do_start
       case "$?" in
          0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
          2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
       esac
       ;;
      stop)
       [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME1"
       do_stop
       case "$?" in
          0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
          2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
       esac
       ;;
      restart|force-reload)
       log_daemon_msg "Restarting $DESC" "$NAME1"
       do_stop
       case "$?" in
         0|1)
          do_start
          case "$?" in
             0) log_end_msg 0 ;;
             1) log_end_msg 1 ;; # Old process is still running
             *) log_end_msg 1 ;; # Failed to start
          esac
          ;;
         *)
            # Failed to stop
          log_end_msg 1
          ;;
       esac
       ;;
      *)
       echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
       exit 3
       ;;
    esac
    
    :

    Rendre le script exécutable :
    Code:
    chmod 755 /etc/init.d/deluge-daemon

    Lancer le script lors du démarage du syno :
    Code:
    update-rc.d deluge-daemon defaults

    Puis créer le fichier /usr/syno/etc/rc.d/S92delugeweb.sh avec le contenu suivant
    Code:
    case $1 in
    start)
    chroot /usr/local/debian-chroot/var/chroottarget su - root -c "invoke-rc.d deluge-daemon start"
    mount --bind /volume1/downloads /volume1/@appstore/debian-chroot/var/chroottarget/volume1/downloads
    ;;
    stop)
    pkill deluge*
    ;;
    *)
    echo "Usage: $0 [start|stop]"
    ;;
    esac

    Un dernier petit chmod pour la route
    Code:
    chmod 755 /usr/syno/etc/rc.d/S92delugeweb.sh

Et voila !!! Un peu long mais la vous avez tout pour que deluge fonctionne parfaitement :D

EDIT: si vous avez des warnings sur le fichier locales :
Code:
locale-gen en_US.utf8
dpkg-reconfigure locales
 
Je crois qu'aucun package n'a jamais été fait parce que deluge est différent selon l'architecture ce qui le rend donc difficile à générer pour toutes les archi !
 
J'édit mon post tutoriel car j'ai oublié une partie pour que Deluge démarre correctement au démarage du NAS :oops:
 
le plus lourding dans deluge si je me souviens bien c'est la cross compilation de libboost, j'en avais ch.... à l'époque sur Thecus

question bête mais tes downloads, tu y accèdes à l’extérieur de ton chroot ? tu fais un mount bind ?
 
QoolBox a dit:
question bête mais tes downloads, tu y accèdes à l’extérieur de ton chroot ? tu fais un mount bind ?
Ce n'est pas une question bête du tout et elle est même plutôt intéressante !


Actuellement je fais un mount lors du lancement du chroot
Code:
grep -q "${CHROOTTARGET}/volume1 " /volume1 || mount -o bind /volume1 ${CHROOTTARGET}/volume1

Mais je suis en train de réfléchir à changer cela avec un mount --bind que je ne connais pas hyper bien.
Je vais faire des tests aujourd'hui voir si je peux faire
Code:
mount --bind /volume1/downloads /volume1/@appstore/debian-chroot/var/chroottarget/volume1/downloads

Si tu as 5 minutes pour m'expliquer précisément le fonctionnement du bind je suis preneur ;)

EDIT : ok j'ai fais quelques tests ça marche bien, si j'ai compris le fonctionnement c'est un dossier partagé entre le syno et le chroot, je modifie donc mon tutoriel :)
 
Bind du verbe binder (je binde, tu bindes...)

le mount -o bind et équivalent à mount --bind (du moins il me semble, ca doit dépendre des version mount [ package util-linux ] )

bind permet d'accèder au contenu d'un même dossier à deux endroits a la fois, tout simplement ;)