Mettre en place un client de téléchargement sur les newsgroups automatique et autonome sous linux
Publié par Mick27 dans G33k, Linux, NewsgroupDepuis quelques temps, je n’ai plus comme station de travail que mon portable, suite à la mort de mon pc fixe. Mon portable étant ce qu’il est, je n’ai que 60go de disque dessus, ce qui est fort limitant quand, comme moi, on a de grosses applis et qu’en plus on a un dual boot.
J’ai donc décidé de déporter certaines utilisation que je faisais de mon pc sur un serveur linux qui trainait chez moi. Parmis ces utilisations il y a le téléchargement sur les newsgroups ( là où je télécharge mes belles images povray, des films libre voir des démos de jeux=).
Il y a quelques temps j’étais tombé sur un news grabber qui s’occupait tout à partir du moment où on lui donner un fichier nzb à manger. Ce n’est pas sans difficulté que je l’ai retrouvé, il s’agît de hellanzb. C’est un script en python qui permet de télécharger automatiquement vos fichiers une fois le nzb chargé. Mais il ne s’arrete pas là, il vérifie aussi l’intégrité de vos données et les répare en cas de besoin puis les décompresse dans un dossier de votre choix (au pif, un joli partage samba).
Nous avons donc un logiciels automatisé à partir du moment où l’on dépose le nzb jusqu’au moment où l’on récupère les fichiers téléchargés.
C’est bien mais ca ne me suffisait pas dans la configuration actuelle. Je voulais aussi simplifier l’acheminement du fichiers nzb, de sa source à sa destination.
Pour avoir un fichier nzb il y a plusieurs façons de s’y prendre, soit on le récupère sur la myriade de sites existants, soit on le fait nous même avec un logiciel comme newsleecher qui permet de les exporter.
Une fois le fichier en notre possession, il faut encore le mettre sur le serveur. Classiquement on penserai à utiliser un serveur ftp pour uploader le fichier et basta. Mais cela ne me convenait pas, je voulais réellement pouvoir lancer un téléchargement quelque soit l’endroit ou jétais et la connexion internet sur laquelle j’étais. Typiquement, à mon boulot, on est extremement bridé, il m’est donc impossible de me connecter via un ftp ou autre. Les seuls accès autorisés sont le web et le mail.
J’aurais donc pu me contenter d’ouvrir le port 80 et de faire passer mes nzb par la via une interface comme HellaWorld, mais, bien que très pratique pour checker l’état de ses downloads en live, ce n’est pas très sécurisé. Il se pourrait même que je n’ai pas la possibilité d’ouvrir des port (un lan de campus par exemple). A garder pour le réseau local donc.
Il me reste donc le mail, c’est là que je me suis dit, et si je trouvais un système qui permette au serveur de se connecter à une boite mail, de recuperer les mails et d’en extraire les pièces jointes qui, vous vous en doutez, sont des fichiers nzb !
Après de longues recherches, j’ai fini par trouver une classe php qui permettait justement de faire cela, recevoir un mail, en extraire la pièce jointe et la sauvegarder dans dossier défini (puis supprimer le mail).
Ni une ni deux je met en place le script, et encore après quelques heures de galère à cause d’un cron foireux / de pièces jointes de thunderbird bizarre, je peux envoyer des mails à une adresse qui sera checkée par ce script afin de lancer automatiquement mes downloads, me permettant ainsi de regarder mes images povray directement en rentrant du boulot sans avoir à attendre des longues heures de téléchargement !
Après l’explication, voici la technique :
Etant sur une debian et aimant les choses simples, j’ai décidé d’installer la version repository d’hellanzb plus quelques utilitaires bien utiles pour la suite : (en root bien sur)
-
aptitude install hellanzb par2 unrar
(paraît’il qu’il faut oublier le apt-get :p)
Hop, avec ça vous avez un hellanzb installé, mais qu’il vous faut encore configurer :
Pour ma part, j’ai décidé de faire tourner le programme avec mon utilisateur principal, parce que le root cay mal. De cette manière j’ai décidé de créer un dossier news dans mon home afin d’éviter de me retrouver avec des dossiers un peux partout, et c’est la dedans que tout ce passera :
-
mick27@servor:~$ mdkir news
Maintenant il nous faut configurer le fichiers de conf de hellanzb, pour cela on copie l’exemple fourni dans le dossier news et on l’édite :
-
mick27@servor:~$ cd news
-
mick27@servor:~/news$ mv /usr/etc/hellanzb.conf.sample hellanzb.conf
-
mick27@servor:~/news$ vim hellanzb.conf
Il faut apporter les modifications suivante :
-
defineServer(id = ‘NonDuServeur’,
-
hosts = [ ‘votrenewsserveur.fr:443′ ], # :119 si pas de SSL sur votre serveur
-
username = ‘utilisateur’,
-
password = ‘pass’,
-
#username = None, # no auth
-
#password = None,
-
connections = 4, # à changer en fonction du nombres de connections max que vous pouvez mettre
-
ssl = True # False si pas de SSL sur votre serveur
-
)
C’est ici que l’on entre les infos pour la configuration du serveur. Si vous avez un serveur gratuit comme news.free.fr, les infos d’auth sont à remplacer par celle commentées.
-
Hellanzb.PREFIX_DIR = ‘/home/mick27/news/’
Ce paramètre est TRES important, c’est lui qui détermine le répertoire de travail de hellanzb. Remplacez mick27 par le nom de votre user.
-
Hellanzb.XMLRPC_SERVER = ‘Votrenomdeserveur’
On configure ici le hostname que l’on veut utiliser pour les connections XMLRPC avec les applications tiers.
-
Hellanzb.XMLRPC_PORT = 8760
Si vous comptez utiliser des applis à travers le web, il peut être utile de changer le port afin d’éviter un éventuel scan (cependant, le but de cet article est d’éviter ce genre de cas).
-
Hellanzb.XMLRPC_PASSWORD = ‘VOTREPASS’
Permet d’avoir accès au logiciel via RPC avec les nombreux add-ons existant (cela fera l’objet d’un autre article prochainement)
-
Hellanzb.NEWZBIN_USERNAME = ‘USER’
-
Hellanzb.NEWZBIN_PASSWORD = ‘PASS’
Si vous avez un compte Newzbin rentrez vos infos ici.
Voilà nous avons fini la configuration. Cependant nous avons un nouveau problème, hellanzb ce lance dans un terminal et non comme un service. No problemo, il y a une solution : screen.
Screen est un utilitaire qui permet de créer des terminaux virtuels que l’on peux envoyer en arrière plan sans pour autant en casser le fonctionnement et les faire revenir quand bon nous chante.
Pour cela j’ai créer un script qui permet de lancer le screen contenant hellanzb au démarrage, sous le compte de votre utilisateur, tout en permettant de le stopper ou redémarrer à souhait.
Sous debian :
-
mick27@servor:~$ su - #on passe root
-
servor:~# cd /etc/init.d/
-
servor:/etc/init.d#vim hellanzb
Copiez y le code suivant :
-
#!/bin/sh
-
#############################################
-
Script de lancement du screen et de hellanzb #############################################
-
-
## Début des variables ##
-
-
#############################################
-
-
# Nom de l’utilisateur
-
-
HELL_USER="mick27"
-
-
# Nom du screen
-
-
HELL_NAME="hellanzb"
-
-
# Binaire du serveur
-
-
HELL_BIN="hellanzb.py"
-
-
# Repertoire du serveur
-
-
HELL_PATH="/home/$HELL_USER/news"
-
-
#############################################
-
-
## Fin des variables ##
-
-
#############################################
-
-
usage() {
-
-
echo "———————————————————————"
-
-
echo "Usage: ${HELL_NAME} (stop|start|restart)"
-
-
echo "———————————————————————"
-
-
exit 2
-
-
}
-
-
if [ -z $1 ]; then
-
-
usage
-
-
fi
-
-
hell_start() {
-
echo "———————————————————————"
-
-
echo "Lancement du screen et de hellanzb : Debut de la sequence"
-
-
echo "———————————————————————"
-
-
OWD=`pwd`
-
-
cd $HELL_PATH
-
-
su ${HELL_USER} -c "screen -AmdS ${HELL_NAME} ${HELL_BIN}"
-
-
cd $OWD
-
-
echo "———————————————————————"
-
-
echo "Lancement du screen et de hellanzb : Fin de la sequence"
-
-
echo "———————————————————————"
-
-
}
-
-
hell_stop() {
-
-
echo "———————————————————————"
-
-
echo "Arret du screen et de hellanzb : Debut de la sequence"
-
-
echo "———————————————————————"
-
-
su ${HELL_USER} -c "screen -dr ${HELL_NAME} -X quit"
-
-
echo "———————————————————————"
-
-
echo "Arret du screen et de hellanzb : Fin de la sequence"
-
-
echo "———————————————————————"
-
-
}
-
-
hell_restart() {
-
-
echo "———————————————————————"
-
-
echo "Reboot du screen et de hellanzb : Debut de la sequence"
-
-
echo "———————————————————————"
-
-
hell_stop
-
-
hell_start
-
-
echo "———————————————————————"
-
-
echo "Reboot du screen et de hellanzb : Fin de la sequence"
-
-
echo "———————————————————————"
-
-
}
-
-
case $1 in
-
-
stop)
-
-
hell_stop
-
-
;;
-
-
start)
-
-
hell_start
-
-
;;
-
-
restart)
-
-
hell_restart
-
-
;;
-
-
*)
-
-
usage
-
-
esac
-
-
exit 0
Il faut maintenant le rendre éxécutable et l’insérer dans le processus de démarrage :
-
servor:/etc/init.d# chmod +x hellanzb
-
servor:/etc/init.d# update-rc.d hellanzb defaults
Arrivé à ce point nous avons un hellanzb fonctionnel, et qui se lance seul au démarrage.
-
servor:/etc/init.d# hellanzb start
En mode utilisateur (et non en root), un “screen -r” doit vous permettre de faire revenir le terminal dans votre console et de le voir en action (ou en non-action). Un simple Ctrl + a + d le renvoi en arrière plan.
Si nous retournons dans notre dossier news, un ls nous donne ceci :
-
thomas@Nomansland:~/news$ ls
-
daemon downloads hellanzb.conf nzb
Nous placerons donc les fichiers nzb dans le repertoire nzb et récupérerons les downloads dans le dossier downloads. Le dossier daemon est un dossier de travail et ne doit pas être touché.
Simple comme bonjour, encore faut-il pouvoir placer de fichiers et en récuperer. Pour cela, pourquoi ne pas utiliser un partage windows tout simple, qui s’integrerait parfaitement dans l’explorateur windows.
Pour ma part j’ai simplement utilisé le partage des comptes utilisateur avec samba dans une configuration proche de celle par défaut sous débian. La configuration de samba sort du cadre de cet article (et je suis loin d’être un expert), mais voici tout de même la partie du fichier smb.conf que j’utilise :
-
[homes]
-
comment = Home Directories
-
browseable = yes
-
writable = yes
-
create mask = 0700
-
directory mask = 0700
-
valid users = %S
Il suffit ensuite de monter les dossiers downloads et nzb dans Windows et l’on a accès à ces dossiers comme si c’était des disques locaux, pas besoin de s’embêter avec un client ftp ou scp.
C’est d’autant plus un vrai régal que sous Vista, si l’on place les raccourcis dans la barre latérale, il est très rapide de faire des glisser-déposer de nzbs, rendant la tâche encore plus rapide.
Quand au dossier download, si votre réseau local tiens la route, vous pouvez lire vos documents directement à partir de là . Il n’y a pas toujours nécéssité de les transférer sur votre poste.
Si je voulais m’arreter au réseau local, j’en aurai fini avec cet article, or dans la configuration actuelle, le sytème n’est valable que dans un réseau local. Comment puis-je lancer des téléchargements depuis le bureau afin qu’il soit prêt pour quand je rentre alors que je n’ai accès qu’au web et aux mails sur mon lieu de travail ?
La première idée qui m’est venue à l’esprit a été de me mailer les fichiers nzb. Oui, mais comment lire ces mails automatiquement et surtout enregistrer les pièces jointes automatiquement. Bien que la première action soit réalisable de beaucoup de manière, pour la deuxième c’est une autre paire de manche.
Après de LONGUES recherche, je suis enfin tombé sur une classe php qui faisait exactement cela.
Je me suis donc lancé dans la création du script qui permetrait de checker mes mails automatiquement et d’en retirer les pièces jointes afin de les déplacer dans le dossier nzb.
Pour ne pas me mélanger les pinceaux, je créé un dossier others dans news :
-
mick27@servor:~/news$ mkdir others
-
mick27@servor:~/news$ cd others
-
mick27@servor:~/news/others$ vim recupnzb.php
Il faut ensuite insérer le code suivant :
Note : pour une raison obscure je ne peut pas insérer le code, le voici dans un fichier texte : recupnzb
Il faut ensuite rendre le script executable :
-
mick27@servor:~/news/others$ chmod +x recupnzb.php
Pour être sur de pouvoir executer du php en ligne de commande :
-
aptitude install php5-cli
Afin de récupérer régulièrement les mails, nous lançons cette commande via un cron :
-
mick27@servor:~/news/others$ crontab -e
Insérez cette ligne :
-
*/10 * * * * cd "/home/mick27/news/nzb" && php -f /home/mick27/news/others/recupnzb.php >/dev/null 2>&1
Cela aura pour effet d’envoyer le script checker vos mails tous les 10 mn, transférant les pièces jointes de ceux trouvé dans le dossier nzb ce qui aura pour effet de lancer la machine hellanzb.
Maintenant nous avons un système vraiment autonome qui peut être lancé de n’importe où.
Attention cependant, à l’usage j’ai noté que les mails envoyés via Thunderbird n’était pas correctement décrypté d’où une impossibilité de faire fonctionner le système avec ce logiciel. A contrario Outlook ou Gmail marchent.
J’espère avoir couvert tout mon sujet, si vous avez des question n’hésitez pas ! abusez des commentaires.
[ratings]
Fatal error: Call to undefined function digg_this_button() in /home/.moot/mick27/blog.mick27.info/wp-content/themes/mandigo2/single.php on line 38