• Docker
  • Maintien d'une image docker rutorrent pour la communauté mondedie

christophebe Et bien non. Ce n'est que des dossiers qui sont passés en paramètre. Le nom de la variable est très explicite. ut_dir dir pour directory

Si tu lances le script
docker exec -it rutorrent postdl /data/downloads nimportequoi.mkv

Tu verras que le script amc va check tous les fichiers si tu as supprimé le cache avant.

Hello,
Aller on poursuit le sujet de bon matin et de bonne humeur.
Etant arrivé tôt au boulot, j'ai fouiné sur le site de filebot et suis allé à la pêche aux infos.
J'ai trouvé un topic qui aborde le point ut_dir et surtout avec une réponse de Rednoah le concepteur de filebot:
Discussion sur le forum filebot

qBT will replace %F with the input folder/file of the completed download and call FileBot on that:

--def "ut_dir=%F"_

If you pass your entire Downloads folder as input folder every time, then you will end up processing incomplete downloads A, B and C after D is finished and triggers filebot.

Du coup voilà ce que je comprends:
rtorrent renvoie le nom du torrent que l'on stocke dans la variable TORRENT_PATH
ensuite on lance filebot avec en paramètre ut_dir=$TORRENT_PATH
Alors filebot est censé traiter uniquement le torrent qui vient de se terminer.
Cela permet d'éviter le traitement de fichiers qui seraient encore en cours de téléchargement.

Ce que j'ai pu retester ce matin sur le container de la communauté, c'est que le paramètre ut_dir ne s'applique pas et donc systématiquement tout le répertoire downloads est retraité (en excluant tous les torrents référencés dans le fichier amc_exclude).
En soit ce n'est pas bien grave, même dans le cas suivant:
imaginons que l'on lance 2 downloads, 1 se finit rapidement , le 2ieme prend 1 journée
lorsque le 1ier se finit, filebot traite alors le torrent 1 (celui fini) et le torrent 2 (celui en cours de download)
et il vient ensuite renseigné ces 2 torrents dans le fichier amc_exclude.
Le 2ieme torrent se finit plus tard, filebot se lance mais comme le torrent 2 est référencé dans amc_exclude , aucune action n'est effectuée.
la problématique que je vois c'est que l'on crée un symlink sur un fichier non fini et donc si tu es un peu impatient et que tu veux accéder au fichier via ton symlink tu vas avoir une mauvaise surprise.

Du coup j'ai regardé le script postdl (je suis très loin d'être un expert et mes compétences en scripting sont très limitées) pour essayer de voir pourquoi le paramètre ut_dir ne s'applique pas.

le début me semble bon:

TORRENT_PATH="$1"

par contre ici j'ai quelques doutes:

--def ut_dir="${TORRENT_PATH}"

est ce que ce ne devrait pas plutot être:

--def ut_dir=$TORRENT_PATH
ou

--def "ut_dir=$TORRENT_PATH"

Après comme je le disais je ne suis pas très doué et ne sais pas si les {....} ou mettre les "..." à cet endroit impactent ou pas. Mais c'est la seule dfférence que je vois avec le script de xataz (pour lequel je trouve le résultat souhaité et expliqué par Rednoah).

a+

    christophebe alors "${TORRENT_PATH}" passe bien. C'est la syntaxe qui est recommandé.

    Tu accordes trop de valeur à la variable TORRENT_PATH. Cette variable provient de la commande $d.directory= via xmlrpc.
    Et la commande d.directory me renvoie la plupart du temps le dossier /data/downloads

    Pour faire ce que tu veux il faudrait concaténer les variables et donc avoir le dossier du torrent en particulier, il faudrait faire ça.

    FULL_PATH="${TORRENT_PATH}/${TORRENT_NAME}"

    Le problème avec cette solution c'est que ça ne renvoie pas toujours un dossier mais aussi parfois un fichier.
    Et si on donne un fichier à filebot il plante. Donc on revient au problème initiale.

    Donc le mieux que l'on pourrait éventuellement faire serait de passer le dossier du torrent quand il existe.

    #!/usr/bin/env sh
    
    TORRENT_PATH="${1}"
    TORRENT_NAME="${2}"
    
    if [ -d "${TORRENT_PATH}/${TORRENT_NAME}" ]; then
      FULL_PATH="${TORRENT_PATH}/${TORRENT_NAME}"
    else
      FULL_PATH="${TORRENT_PATH}"
    fi
    
    /filebot/filebot.sh \
      --lang "${FILEBOT_LANG}" \
      -script fn:amc \
      --output "/data/media" \
      --action "${FILEBOT_RENAME_METHOD}" \
      --conflict "${FILEBOT_CONFLICT}" \
      -non-strict \
      --log-file /tmp/filebot-amc.log \
      --def @/filebot/args_amc.txt \
      --def ut_dir="${FULL_PATH}" \
      --def ut_title="${TORRENT_NAME}" 2>> /tmp/filebot-error.log

    Mais sinon mon script fonctionne exactement de la même manière que celui de xataz.

    Ok, j'ai bien pris note.
    Un grand merci d'avoir creusé le sujet et d'avoir pris le temps de éclairer.

    a+

    Chris.

      christophebe Donc au final ça ne change pas grand chose si on passe que cette variable à filebot TORRENT_PATH
      Le principale c'est que avec cette variable filebot se débrouille toujours.

      popov_2 Je demandais sur quel machine tu veux l'installer pas l'architecture. je me doute bien que c'est aarch64. C'est pas grave normalement tu peux réessayer ça fonctionne.

      spider1163 Cyprien J'ai poussé une modification. Maintenant on peut ajouter une authentification basic.
      Je vous invite à lire le readme pour mettre en place l'authentification. https://github.com/mondediefr/docker-rutorrent#add-http-authentication
      J'ai mis dans l'image un petit utilitaire pour générer un fichier avec le mot de passe gen-http-passwd

      Parfait @Magicalex ! Merci ! Par contre c'est possible de faire un ajout de ligne avec ">>" au lieu de ">" lors de l'ajout d'un utilisateur via openssl ?
      echo "${username}:${passwd}" >> /config/nginx/passwd/rutorrent_passwd

      Ça permet d'avoir plusieurs accès pour la même instance: ça peut paraître inutile mais j'ai pas forcément envie de partager mon mot de passe avec quelqu'un d'autre XD.

        Cyprien J'ai fait une petite maj hier soir et je viens de pousser un fix.

        Maintenant le script gen-http-passwd peut créer un mot de passe pour un utilisateur mais on peut aussi changer un mot de passe pour un utilisateur qui existe déjà.

          5 jours plus tard

          Magicalex Hello,
          encore l'emmerdeur et je pense que tu dois te dire qu'est ce qu'il me les casse avec son filebot et le traitement des fichiers.
          J'ai poursuivi mon investigation car je ne comprenais pas pourquoi le container de xataz ne se comportait pas de la meme maniere que le tien au niveau du script postdl.
          Et je pense avoir trouve la difference qui explique le comportement different: les variables renvoyees par rtorrent au script.
          Xataz recupere les variables d.get_base_path ,d.get_name, d.get_custom1 -> transforme en d.base_path d.name et d.custom1 depuis la verison 0.9.2
          de ton cote tu recuperes d.directory ,d.name
          On oublie la variable custom qui est pour le label.
          On va faire un focus sur la variable d.base_path qui te renvoie lorsque le telechargement est fini le chemin complet du fichier ou repertoire telecharge (media/downloads/fichier.mkv ou media/downloads/repertoirefilm/) la ou d.directory te renvoie le repertoire media/downloads/
          Du coup en ajoutant au script filebot ut_kind=multi, filebot traite ut_dir comme un repertoire ou fichier et du coup il ne s occupe que du fichier/repertoire concerne et non plus du repertoire media/downloads au complet (si on efface amc_exclude... evidemment).
          J'ai teste et du coup c est 100% fonctionnel.
          Voila la difference entre l'implementation de xataz et la tienne. Apres tout depend de ton cas d'usage, l'important est la finalite et souvent peu importe le moyen. Mais bon je voulais comprendre pourquoi cela fonctionnait differemment.

          desole pour l'absence des accents, je suis sur un clavier qwerty aujourd'hui

          Merci encore pour le boulot fourni

          a+

            Du coup pour mon usage, j'ai modifie .rtorrent.rc afin de recuperer le chemin complet du fichier et son label. Je me suis cree un script postdl plus pousse avec utilisation des labels: en fonction des labels execution d'une action qui peut etre lancer filebot (pour series et films) , une autre action pour les ebooks, et encore une autre pour les applications.
            Bref hyper content du fonctionnement et un grand merci pour le boulot.

            christophebe Salut,

            Effectivement tu as raison. Je viens de tester de mon coté. En réalité j'ai confondu d.directory_base (qui pose des problèmes quand un torrent est à l'arrêt) et d.base_path

            Je vais modifier ça sur le prochain commit. Merci pour les investigations 🙂

            Pour info, je bidouille pas mal buildx de docker en ce moment. Je vais pouvoir vous sortir bientôt plusieurs architectures.
            A savoir linux/386, linux/amd64, linux/arm/v7, linux/arm64/v8 pour les tag latest et filebot.

              Encore une petite question.
              J'ai viré le container de xataz pour passer sur celui là.
              Juste une interrogation concernant son intégration avec radarr ou sonarr.
              Je dois surement mal m'y prendre mais impossible de refaire communiquer sonarr avec rtorrent.
              D'où ma question est ce un souci de plugin (que je dois rajouter) ou moi qui configure mal.
              lorsque j'utilisais le container de xataz, voici la conf que j'avais sur sonarr:
              dans host, je mettais le nom de mon container (rtorrent)
              dans port: 8080
              dans Url path: RPC2
              et hop ca roulait, aucune modif/paramétrage côté rtorrent
              mais la impossible de le faire marcher.
              une idée?
              merci

                christophebe question peut être bête mais tu mets bien un link du container rtorrent dans le container sonarr ? Après je sais pas si y a besoin de configurer NGINX dans le container rtorrent pour rediriger l'url RPC2. Je donne just edes piste je connais pas bien cela.

                  Cyprien Merci pour ton retour.
                  Qu'appelles tu un link rtorrent dans le container sonarr? jusqu'à présent je configurais le host et c'est tout.
                  et le host se limitait au nom du container.
                  Après concernant NGINX dans le container, là cela dépasse ma compréhension et mes cordes, je sais à quoi cela sert mais par contre au delà ca devient du chinois pour moi.

                    christophebe Si tu mets le nom du container Rtorrent sur ta config sonarr ou radarr, il a besoin de faire le lien entre le nom et l'adresse ip du container. Donc quand tu lances ton docker radarr, il faut lui renseigner cela. Par exemple docker run Machin/radarr --link NomContainerRtorrent:NomQueTuMetsDansLaCOnfigRadar

                    ou en docker compose:
                    links:

                    • NomContainerRtorrent:NomQueTuMetsDansLaCOnfigRadar
                      Désolé si c'est pas très clair

                    Cyprien Merci, t'es un chef.
                    Effectivement en modifiant l'url path en RPC et non RPC2 cela fonctionne parfaitement.
                    Un grand merci