boxCleaner - Aide à la Maintenance
Updates
30/01/16
- Ajout d'un script de recherche de doublons
- Mise à jour du script d'installation pour la nouvelle fonctionnalité de recherche des doublons
26/12/2015
- Correction du script d'installation (oubli des .git)
- Ajout d'une commande pour les mise à jours
18/12/2015
- Mise en couleur des scripts
- Création d'un script autonome pour lancer les actions
- Création d'un script d'installation automatique
- Corrections de bugs divers
13/12/2015
- Changement de dépendance pour libxmlprc
- Ajout de l'installation de ccze au cas où
- Correction de l'installation (création du dossier)
- Ajout d'une commande pour rendre exécutable les scripts
- Traitement du cas ou /log/server/ n'existe pas
- Ajout d'une précision pour redémarrer ngnix
Bonjour tout le monde

J'étais à la recherche d'un moyen de faire le ménage proprement sur ma seedbox multiusers, j'avais posé la question sur le fofo mais sans succès, du coup je me suis posé plus longtempts et j'ai finalement réussi à faire quelque chose de pas mal (auto congrats) sachant que c'est mon premier script un peu sympa (je trouve hein c'est perso ).
C'est pour dire je me suis même mis à Git pour l'écrire
Améliorations à apporter
- Suppression des torrents dans rutorrents qui n'ont pas de fichiers associés
- Améliorer la présentation des rapports avec mise en forme HTML
- Améliorer le code
- Pourquoi pas un script d'install si je m'ennui.
- Recherche de doublons entre comptes utilisateurs.
Pour avoir plus d'information sur l'utilisation de xmlrpc avec rtorrent : https://code.google.com/p/gi-torrent/wiki/rTorrent_XMLRPC_reference

I - Introduction

Le postulat de départ est le suivant, j'héberge 7 utilisateurs sur ma seedbox et autant certains d'entre eux sont disciplinés, autant d'autres sont comment dire... un peu bordélique.
Notre seedbox fonctionne de la manière suivante :

Téléchargements de torrents :
- Manuellement en les ajoutant via rutorrent
- Automatiquement pour les séries avec SickRage et CouchPotato, les deux, en mode multiusers.

Le téléchargement se fait dans le dossier /home/<user>/torrents de chaque users :
- /home/<user>/torrents/movie pour les films
- /home/<user>/torrents/tv pour les séries
- /home/<user>/torrents/other pour tout le reste
En gros suivant l'arbo de base du script d'ex_rat.
Les étiquettes automatiques sont ajoutées en fonction des dossiers.

Une fois terminés, un Lien Symbolique avec le nom original est créé dans :
- /home/<user>/termines/vrac/movie
- /home/<user>/termines/vrac/tv
- /home/<user>/termines/vrac/other

Les Films est Séries sont renomées via Filebot (le fait que les fichiers soient placés dans un dossier par type aidant au renommage) et le Lien Dur correspondant est placé dans les dossiers suivants :
- /home/<user>/termines/movie
- /home/<user>/termines/tv/<nom_de_la_série>/
- /home/<user>/termines/other

J'utilise un Lien Dur simplement pour que celui ci soit visible dans cakebox, seul moyen que j'ai trouvé puisque Cakebox voit les Liens Symboliques créé par rutorrent mais pas ceux de filebot, allez comprendre.

A noter que Plex Media Server pointe vers les différents /home/<user>/termines/movie et /home/<user>/termines/tv/ de chaque utilisateurs pour que tout le monde puisse profiter des films et séries des autres et éviter de gaspiller de l'espace disque.

Pourquoi j'explique tout ça? simplement parce que du coup j'ai créé un post process pour la suppresion des torrents et des fichiers attachés via leurs inodes (pour tout supprimer, Liens Symboliques, Liens Durs et fichier d'origine).

Malheureusement, allez comprendre aussi, certains utilisateurs n'arrivent pas simplement à cliquer sur supprimer un torrent... ils innovent... du coup des incohérences existent parfoit entre les torrents présents dans rutorrent et les fichiers effectivement sur le disque.

II - Principe

Le principe que je voulais mettre en place était de pouvoir lister
1 - Le contenu de rutorrent de chaque utilisateurs
2 - Le contenu du dossier /home/<user>/torrents contenant les fichiers/dossiers avec les mêmes noms que les torrents
3 - Comparer les deux listes pour vérifier les incohérences
4 - Lister les torrents actifs et les classer par date de dernier accès aux fichiers relatifs
5 - Vérifier si des fichiers sont téléchargés en doubles entre les utilisateurs

Les incohérences pouvant être :
- Un torrent présent dans rutorrent mais sans fichier associé >> Pas grave dans l'absolu puisque sans consommation d'espace
- Un fichier présent sur le serveur mais sans torrent associé >> Plus embettant puisque potentiellement de l'espace gaspillé.

Pour le fonctionnement je suis parti sur du simple :
- Périodiquement le script liste les écarts suivant le principe ci dessus.
- Création d'une page html (simple au possible pour le moment) par user
- Création d'une page html (toujours aussi simple) pour l'admin regroupant tous les écarts

Pour mon usage personnel, je lance une suppression de l'ensemble des fichiers en écarts toutes les 2 semaines.

III - Installation automatique du Script

Suite aux précieux conseils d'ex, voici une méthode guidée et semi-automatique pour installer BoxCleaner

Il suffit de procéder de la sorte
cd /tmp/
git clone https://github.com/gormson/BoxCleaner.git
cd BoxCleaner
chmod +x install.sh && ./install.sh
Il suffit de se laisser guider lors de l'installation et tout devrait bien se passer normalement.
Cela comprend :
- l'installation des dépendances
- l'installation personnalisée avec configuration automatique du fichier default.conf
- la configuration des fichiers utilisateurs.list, repertoires.list, boxCleaner.conf (pour Nginx)
- la recherche automatique des configuration scgi
- la vérification (de bas niveau) que les informations renseignées sont correctes.

Petite précision, lors de la création du fichier repertoires.list, il est important de renseigner les dossiers complètement, voir dans la partie manuelle du tuto (Annexe2 partie Arborescence).

Je laisse la partie manuelle de ce tuto en annexe au cas où.

Pour vos mises à jour futures
git stash && git pull && git stash pop
Prennez soin d'être dans le répertoire d'installation que vous avez choisis.

V - Utilisation en mode guidée

Pour lancer BoxCleaner, simplement
cd /opt/boxCleaner
./boxCleaner.sh
Si vous avez installé le script ailleurs, adaptez les lignes correspondantes.

Il suffit ensuite de se laisser guider

VI - Utilisation en mode manuel

boxScanner.sh : Donne un état de correspondance,pour une liste d'utilisateur passée en paramètre, entre rutorrent/rtorrent et l'arborescence /home/<user>/torrents
./Scripts/boxScanner.sh utilisateurs.list repertoires.list
Vous pourrez accéder à vos rapports ici : http://ip_server/rutorrent/logserver/rapport_<user>.html
Un rapport admin est aussi accéssible ici : http://ip_server/rutorrent/logserver/rapport_admin.html
l'ensemble des fichiers bruts est disponible dans /opt/boxCleaner/rapports/
un cummul, tout user confondus, des fichiers sans torrents est disponible ici /opt/boxCleaner/rapports/cummul_admin

Bon pour l'instant c'est très moche mais en gros ça donne ça pour un user...


user_boxScanner.sh : idem que boxScanner.sh mais pour un utilisateur spécifique
./Scripts/user_boxScanner.sh utilisateur repertoires.list
boxEraser.sh : A partir de la liste des fichiers en trop créée par boxScanner.sh, permet d'effacer l'ensemble des fichiers/dossiers identifiés ainsi que les hardlinks liés.
./Scripts/boxEraser.sh ./rapports/cummul_admin
hardlink_delete : supprime un fichier ou un dossier à partir de son inode pour supprimer aussi les liens durs éventuellement présents. Nettoyage profond en perspective. Attention lorsque vous le lancez.
./Scripts/hardlink_delete "Chemin du fichier"
liste_torrents_user.sh : Permet de lister les torrents actifs dans rutorrent/rtorrent pour un utilisateurs passé en paramètre
./Scripts/liste_torrents_user.sh utilisateur
reboot_rtorrent.sh : relance un processus rtorrent d'un utilisateur passé en paramètre, le principe étant calqué sur la façon dont procède seedbox manager.
./Scripts/reboot_rtorrent.sh utilisateur
test_service.sh : test si user-rtorrent est actif pour un utilisateur user passé en paramètre
./Scripts/test_service.sh utilisateur
user_boxLastAccess.sh : par rapport à la liste des torrents actifs d'un utilisateur, permet de classer les fichiers par date de dernier accès dans le but de voir les torrent les moins actifs.
./Scripts/user_boxLastAccess.sh utilisateur
test_arbo.sh: test si l'arborescence de boxCleaner est conforme. Ce script est utilisé par boxCleaner pour éviter les erreurs d'exécution.

boxCheckDoublon.sh: vérifie la présence de doublons entre les comptes utilisateurs au niveau du nom des torrents téléchargés mais aussi après renommage éventuels.

VII - Conclusion

J'espère que ce script rendra service à certains d'entre vous et pourra éventuellement donner des idées à d'autres (pour lesquelles je suis preneur d'ailleurs). Il se peut que bien mieux ou plus simple existe, mais je voulais surtout le faire moi même... challenge perso inside.

Entre 2 couches et autres biberon de ma fille de 2 semaines, ça m'a permi de me détendre lol, je continuerai à l'améliorer si je peux, en plus maintenant que je commence à jouer avec git ça me permettra (d'essayer) d'être clean comme vous qui m'avez tant aidé.

J'ai codé avec mes connaissance de script rudimentaires, donc il y a certainement des améliorations à apporter...

GorMsoN
Annexe 1 - Installation Manuelle du Script

Installation des dépendances :
apt-get install libxmlrpc-core-c3-dev
Installation de CCZE pour la mise en forme
apt-get install ccze
cd /opt/
git clone https://github.com/gormson/BoxCleaner.git boxCleaner
ou autre mais vous devrez modifier le dossier d'installation dans le fichier default.conf

Ensuite on rends exécutable les scripts
chmod +x *.sh && chmod +x scripts/*.sh
Si vous avez choisi de ne par installer le script dans /opt/boxCleaner, prennez bien soint d'éditer le fichier default.conf contenu dans le dossier d'installation.

Annexe 2 - Configuration Manuelle

Avant toute chose, je parts du principe qu'on utilise tous l'arborescence standard créée par le script d'installation d'ex_rat.

Utilisateurs

Commencez par créér une liste de vos utilisateurs, une ligne par utilisateur, pas d'utilisateur vide.
nano utilisateurs.list
Vous pouvez le placer où vous voulez, il faudra juste le bon chemin lorsque vous lancerez le script.

Arborescence

Ensuite spécifiez l'aborescence à considérer, par example dans mon cas, les torrents en téléchargement sont stockés dans /home/<user>/torrents suivant l'arbo que j'ai décrit plus haut.
je souhaite donc vérifier le contenu de
/home/<user>/torrents : au cas où certains ne savent pas ranger correctement les fichiers
/home/<user>/torrents/tv
/home/<user>/torrents/movie
/home/<user>/torrents/other

donc pour la configuration, procédez de la sorte
nano repertoires.list
et renseignez le fichier de la sorte
torrents
torrents/tv
torrents/movie
torrents/other
Remarquez qu'il n'y a aucun "/" en fin de ligne ou en début.

Rutorrent/rtorrent

Pour la configuration rutorrent/rtorrent, il suffit de vérifier que dans votre fichier .rtorrent.rc vous avez bien les informations suivantes:
scgi_port = 127.0.0.1:PORT
avec PORT unique et différent pour chaque user.

Nginx.

Configurer nginx de la manière suivante :
nano /etc/nginx/sites-enabled/boxCleaner.conf
et copier le contenu suivant :
server {
    listen      80;
    server_name localhost;
    location /user {
            include scgi_params;
            scgi_pass 127.0.0.1:PORT; 
    }
    #location /user2 {
    #		include scgi_params;
    #		scgi_pass 127.0.0.1:PORT2;
    #}
}
Répéter les blocs location pour chacun de vos utilisateurs en prenant soint d'avoir renseigné les bons ports.
Attention : Conservez bien le même nom pour vos users par rapport à ceux renseignés dans votre fichier utilisateur.list.

Ne pas oublier
service nginx restart
Ps : Cette méthode peut-être peu sécurisée, mais je ne m'y connais pas assez pour améliorer ça, donc si quelqu'un a un avis, je suis preneur.

Affichage des logs

Si vous avez utilisé le script d'installation rutorrent (https://mondedie.fr/d/5399) ou suivi le tuto d'ex_rat sur la sécurisation de votre seedbox ( https://mondedie.fr/d/5318 ) vous n'avez rien à faire, sinon
mkdir /var/www/rutorrent/logserver
et on donne les droits
chown www-data:www-data /var/www/rutorrent/logserver
10 mois plus tard
Répondre…