rtorrent-cleaner

Je vous présente un outil en ligne de commande qui nettoie dans le dossier de téléchargement tous les fichiers qui ne sont pas rattachés à un torrent. Il se peut que rutorrent parfois ne supprime pas votre sélection, ou d'autre cas comme la décompression de vos archives via rutorrent dans le répertoire courant du torrent en question.

Tout cela au fil du temps engendre une accumulation de fichier inutile à rtorrent pour son bon fonctionnement, mais surtout occupe de l'espace disque pour rien.

Principe de fonctionnement

Pour le fonctionnement, rtorrent-cleaner demande à rtorrent tous les fichiers qu'il seed et construit une liste des fichiers en seed. De le même temps une liste des fichiers présents dans votre répertoire de téléchargement est créé. rtorrent-cleaner en déduit les fichiers qui sont superflus au bon fonctionnement de rtorrent et qui prennent de la place par la même occasion.

Installation

Toutes les informations pour installer rtorrent-cleaner sont disponible dans le readme

Utilisation

Cette exemple crée un rapport des fichiers en trop et des fichiers manquants.

rtorrent-cleaner report 127.0.0.1:5000

Cette exemple supprime les fichiers en trop.

rtorrent-cleaner rm 127.0.0.1:5000

Cette exemple déplace les fichiers en trop dans le dossier /downloads/old.

rtorrent-cleaner mv 127.0.0.1:5000 /downloads/old

Pour plus d'information sur l'utilisation de rtorrent-cleaner lire le readme

Vous pouvez poser vos questions ici et faire vos suggestions/propositions.
Dépôt github : https://github.com/Magicalex/rtorrent-cleaner

    14 jours plus tard

    C'est top, tu penses pouvoir facilement adapté ce script pour un système sans docker ?

    12 jours plus tard

    Magicalex

    Désolé j'avais pas vu que tu avais répondu... Merci pour ton aide.

    Je bloque dès la première étape... J'ai l'impression que xmlrpc n'est pas disponible sur debian 8.1 🙁

    Bon j'ai quand même changé la conf comme suit :

    export URL="http://rtorrent:${RPC_PORT}/RPC"
    export HOME_USER_TORRENTS="/home/user/torrents/"
    #export HOME_USER_TORRENTS="/data"
    

    Mais sans xmlrpc le script me remonte tous mes torrents en "unnecessary" 🙁 🙁

    9 mois plus tard

    J'ai totalement réécris le script en php, j'en avais marre que le script sh bug une fois sur deux. Les performances sont meilleurs et j'ai plus de bug dans les noms des fichiers 😅

    Pour ceux qui utilise pas docker : comme j'ai écris le script tout en php y aura sans doute moyen d'installer via composer le script en global. Vous pourrez je pense utiliser rtorrent-cleaner comme une commande normale.
    Si y a des cobayes je veux bien qu'ils se présentent. Et si ça marche bien je ferais un paquet composer.

    Le nom du dépôt a changé : https://github.com/Magicalex/rtorrent-cleaner


    Salut !
    Bah justement moi je suis tombé sur ce script hier : https://github.com/gartentisch/rtchecker
    qui a l'air de faire à peu près la même chose, et j'ai passé mon aprem à essayer de le faire marcher sans succès avec la config rtorrent du script d'exrat. J'arrive pas à configurer le scgi correctement dans rtchecker. Généralement en mettant `"scgi://localhost:5001" ou "scgi://127.0.0.1:5001"dans la conf rtchecker ça me donne ça :

    Refreshing list. This may take some time depending on the number of torrents...

    Traceback (most recent call last):
    File "./rtchecker.py", line 59, in <module>
    refresher()
    File "./rtchecker.py", line 41, in refresher
    torrents = rtc.download_list('')
    File "/home/koko/rtchecker/rtchecker/xmlrpc2scgi.py", line 178, in call
    xmlresp = SCGIRequest(self.url).send(xmlreq)
    File "/home/koko/rtchecker/rtchecker/xmlrpc2scgi.py", line 111, in send
    scgiresp = self.send(self.add_required_scgi_headers(data))
    File "/home/koko/rtchecker/rtchecker/xmlrpc2scgi.py", line 90, in
    send
    assert len(addrinfo) == 1, "There's more than one? %r"%addrinfo
    AssertionError: There's more than one? [(2, 1, 6, '', ('127.0.0.1', 5001)), (2, 1, 6, '', ('127.0.0.1', 5001))]

    Si j'avais vous pouvez m'éclairer je suis super preneur.

      @Magicalex bah avec plaisir, tant que ça me permet de savoir quels fichiers sont en seed et quels fichiers ne le sont pas sur mon dédié ça me va 🙂 Après ce qui est frustrant, c'est que rtchecker fonctionne toujours chez un pote qui utilise un fichier .scgi_local, donc j'aimerais bien comprendre pourquoi j'arrive pas à faire comprendre au script où regarder..

      En tout cas oui, si tu peux m'expliquer comment utiliser ton script sans docker je suis chaud !

      EDIT : ah et petite précision : je suis un gros noob, je ne parle pas php et je n'avais jamais entendu parler de composer avant ton post. Mais j'apprends vite :x

      Je reviens vers toi avec une solution. J'ai pas tout le protocole pour que ça marche du premier coup.
      Y a surement du code à changer un peu 😅

      Ok ça roule. Mon installe debian9 + script d'ex rat est toute fraîche en plus, j'ai pas encore eu le temps de trop foutre la merde donc ça devrait pas bugguer de ce côté là !

        kokogakayui donc ton XMLRPC endpoint c'est http://localhost:80/USERNAME
        Je sais pas si il faut indiquer un mot de passe.

        En tout cas tu peux commencer par installer composer.
        https://mondedie.fr/d/7407
        Fait que la partie installer composer, rendre les paquets exécutable ça sera pas nécessaire.
        ⚠ vérifies avant il est peut-être déjà installé

        Ensuite télécharge le script php

        cd /tmp
        git clone https://github.com/Magicalex/rtorrent-cleaner.git
        cd rtorrent-cleaner/rootfs/rtorrent-cleaner
        composer install

        et pour le moment attend ce soir parce que tu peux pas l'utiliser comme ça.

        todo list pour moi :

        • il faut que j'ajoute une option pour changer le home du user
        • il faut que change l'option rpc-port

        ça parait compliqué à faire fonctionner, mais j'ai une idée quand le script sera rodé pour simplifier tout ça.
        Par contre il faudra les droits root dans un premier temps pour exécuter le script...

          Magicalex a renommé le titre en rtorrent-cleaner un script pour libérer de la place sur votre seedbox !.

          Magicalex Ok c'est fait ! J'attends la suite 🙂 Pour le XMLRPC endpoint, c'est sur le port 80 même si j'ai 127.0.0.1:5001 dans ma conf rtorrent ?

            kokogakayui non ça c'est le serveur scgi on va passer par nginx. J'arrive pas à me connecter directement en php sur le serveur scgi (si quelqu'un a une solution je veux bien au passage)

            @Magicalex j'aimerai bien tester aussi. Ma config : débian 7 et install via script de @ex_rat 😉
            PS : il faudrait que j'arrive à te MP pour un truc mais je ne sais pas trop où ?

              kris06800 envoie-moi un mail à magicalex at mondedie.fr je check tous les jours cette boite

              kokogakayui pas de soucis moi je vais faire des tests de mon côté, je vous tiens au courant ici

              Juste pour info, je vais créer une archive phar exécutable.
              Vous n'aurez plus qu'à exécuter l'archive, j'espère que ça va fonctionner 😅

              edit: du coup j'ai tout cassé 😅 je reviens vers vous avec une solution ++

              Juste pour tenir au courant

              J'essayes de faire une archive php (.phar) à la manière de composer pour rendre le script exécutable en un seul fichier. Mais pour l'instant mes tests ne fonctionnent pas. J'utilise https://github.com/humbug/box pour générer l'archive mais ça veut pas...

              Je continue mes investigations mais ça risque de traîner le temps que je trouve le problème.

                Bon j'avais un peu de temps cette après-midi, j'ai testé le script.
                Normalement il fonctionne pour tous les types d'installation rutorrent qui ont un point de montage xmlrpc.
                Je fais un petit tuto pour les personnes qui veulent bien tester.
                Le script ne risque pas de mettre la pagaille dans vos fichiers, il supprime rien sans vous demander avant 😅

                Installation de rtorrent-cleaner

                Bon pour commencer il faut php 7 au minimum pour qu'il fonctionne avec 2 extensions (php-bcmath et php-dom)
                Les commandes ci-dessous sont correctes pour debian 9
                Si vous avez déjà php d'installé, vous pouvez vérifier votre version avec cette commande php -v

                Installation de php 7

                apt-get install php php-bcmath php-dom

                ⚠ si php-dom ne fonctionne pas, essayez avec php-xml

                Installation de composer pour l'utilisateur root

                curl -s https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
                chmod +x /usr/local/bin/composer
                mkdir /root/.composer && composer install -d /root/.composer
                echo 'export PATH="$PATH:/root/.composer/vendor/bin"' >> /root/.bashrc
                source /root/.bashrc

                Installation de rtorrent-cleaner

                composer global require magicalex/rtorrent-cleaner

                Utilisation

                Il y a deux options importante obligatoire --url-xmlrpc et --home

                Un exemple cette commande vous fait un rapport sur les fichiers en trop (généralement mal supprimés par rutorrent, mais aussi les fichiers qui manquent sur les torrents alors qu'ils sont en seed.

                rtorrent-cleaner report --url-xmlrpc=https://username:password@domain.tld/URI --home=/home/username/torrents

                Cette commande rm supprime les fichiers en trop, elle vous demande confirmation pour chaque fichier
                Il existe une option --assume-yes pour supprimer les fichiers en trop sans confirmation.

                rtorrent-cleaner rm --url-xmlrpc=https://username:password@domain.tld/URI --home=/home/username/torrents

                ⚠ Le script peut mettre du temps en fonction de l'url que vous appelez, notamment les urls distantes.
                Il faut préférer utiliser http://localhost si votre serveur web vous le permet.
                Au pire, Il y a une barre de progression 😁
                Si vous avez beaucoup de torrents ça mettre du temps de toute manière 😅

                Performance

                Pour les personnes qui ont beaucoup de torrent le script peut mettre beaucoup de temps pour récupérer la liste des fichiers via rtorrent. Plusieurs heures apparement pour @kokogakayui
                Cela dépend des urls que vous appelez. Une url avec une auth basic + nom de domaine distant.
                Exemple https://user:pass@rutorrent.domain.tld/USER cette url pour les personnes qui ont beaucoup de torrent ça risque d'être interminable. Une solution existe, c'est de passer en local. Voici la marche à suivre.

                nano /etc/nginx/sites-enabled/cleaner.conf
                server {
                    listen 127.0.0.1:8888;
                    charset utf-8;
                
                    location = /RPC {
                        include scgi_params;
                        scgi_pass 127.0.0.1:5000;
                    }
                }

                ensuite redémarre nginx

                service nginx restart

                Par contre il faut bien indiquer le port scgi de votre user rtorrent. ici c'est le port 5000 scgi_pass 127.0.0.1:5000;
                Cela va créer un point de montage http://localhost:8888/RPC accessible que en local sur votre serveur.

                ensuite

                rtorrent-cleaner report --url-xmlrpc=http://localhost:8888/RPC --home=/home/username/torrents -v

                ça serait intéressant de voir la différence de temps. Ajoute l'option -v ça ajoute le temps écoulé sur la barre de progression.

                Pour moi l'install se passe à priori bien, mais je tombe sur un command not found quand je veux lancer rtorrent-cleaner... Il est censé s'installer où ?

                  kokogakayui t'as installé php-bcmath?

                  T'as fait quoi exactement?
                  tu peux mettre ici le résultat de la commande echo $PATH

                  Bon par contre ça me donne ça : The "--url-xmlrcp" option does not exist.
                  EDIT : Bon alors pour le PATH, je pense qu'il y avait un souci dans la commande que tu donnes, parce que chez moi en suivant tes instructions ça s'est installé sous
                  ~/.composer/vendor/bin
                  et pas
                  ~/.config/composer/vendor/bin

                  Rien de bien méchant. Par contre ouais "The "--url-xmlrcp" option does not exist". J'ai essayé sans le = pour voir mais même résultat.

                  Pour info j'ai testé avec plusieurs commandes :
                  rtorrent-cleaner report --url-xmlrcp=https://koko:mdp@chezmoi.com/rutorrent --home=/home/username/torrents/music
                  rtorrent-cleaner report --url-xmlrcp=https://koko:mdp@localhost:5001 --home=/home/username/torrents/music

                  Mais aussi report --xmlrcp https://koko:mdp@localhost:5001 --home=/home/username/torrents/music
                  Pour voir si ça venait pas du "="....

                    Magicalex haha oui j'ai fini par capter la coquille.

                    Bon par contre :
                    Avec rtorrent-cleaner report --url-xmlrpc=https://koko:mdp@chezmoi.com/rutorrent --home=/home/username/torrents/music
                    ça me donne :
                    In Client.php line 234: Not Allowed
                    et avec rtorrent-cleaner report --url-xmlrpc=https://koko:mdp@localhost:5001 --home=/home/username/torrents/music
                    ça me donne :
                    In Socket.php line 332: Unable to enable crypto on TCP connection localhost: make sure the "sslcafile" or "sslcapath" option are properly set for the environment.
                    In Socket.php line 303: stream_socket_enable_crypto(): SSL: Success

                      kokogakayui

                      Alors pour l'option --url-xmlrpc
                      pour -> /URI il faut mettre l'uri de votre mount point pour le tuto de @ex_rat générelement c'est le nom de votre utilisateur en majuscule /<USERNAME>

                      soit par exemple

                      rtorrent-cleaner report --url-xmlrpc=https://koko:mdp@chezmoi.com/KOKO --home=/home/koko/torrents

                        Magicalex

                        Haha ok. En effet c'est mieux. Ça a l'air de marcher. La barre de progression reste à 0%, mais je te tiens au jus quand ça aura avancé 🙂 Merci à toi encore une fois !

                          Magicalex

                          Via mon image docker le script s'exécute en 33sec
                          via mon serveur web (proxy) 9min

                          La différence est énorme...
                          ps ma seedbox est sous docker avec l'image de @xataz

                            Magicalex
                            Sur un dossier de combien de torrents ? La j'ai relancé après update sur un dossier plus petit, mais ça mets quand même une éternité haha. j'en suis à 6%...
                            EDIT : en fait je pense même que la taille du dossier n'a rien à voir, mais la quantité de torrents dans rutorrent peut-être... Et la je suis mal haha

                              kokogakayui c'est pas le nombre de fichier le problème c'est le nombre de requête à faire.

                              J'ai essayé de réduire le nombre de requête vers rtorrent mais quand y a beaucoup de torrents on peut pas faire autrement. Et si l'url de l'option --url-xmlrpc met du temps à répondre à ba ça traine.

                              Magicalex

                              J'ai volontairement testé avec un dossier qui contient moins de 10 fichiers.... J'en ai plus donc à mon avis c'est de ce côté là que ça traine. J'en suis à 10% là...

                                kokogakayui
                                J'ai une idée que tu peux tester

                                nano /etc/nginx/sites-enabled/cleaner.conf
                                server {
                                    listen 127.0.0.1:8888;
                                    charset utf-8;
                                
                                    location = /RPC {
                                        include scgi_params;
                                        scgi_pass 127.0.0.1:5000;
                                    }
                                }

                                ensuite redémarre nginx

                                service nginx restart

                                Par contre il faut bien indiquer le port scgi de ton user rtorrent ici scgi_pass 127.0.0.1:5000;
                                ça va créer un point de montage http://localhost:8888/RPC accessible que en local sur ton serveur.

                                ensuite

                                rtorrent-cleaner report --url-xmlrpc=http://localhost:8888/RPC --home=/home/koko/torrents -v

                                ça serait intéressant de voir la différence de temps. Ajoute l'option -v ça ajoute le temps écoulé sur la barre de progression.