Newznab : Mise en place d'un indexeur de usenet

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
Newznab

Software version 0.2.3
Operating System Debian 6
Website Newznab Website
Last Update 28/12/2012
Others

1 Introduction

Newznab est un indexeur de newznab. Il sert par exemple à être utilisé avec SABnzbd ou encore Sick-Beard.

2 Installation

Voici les packages nécessaires :

Command aptitude
aptitude install apache2 php5 libapache2-mod-php5 php5-curl php5-mysql php5-gd php-pear

Comme il va falloir une base de type MySQL, nous allons en profiter pour mettre en place MariaDB (suivez ce lien).

Ensuite, nous allons mettre en place Newznab :

Command
cd /var/www
wget http://www.newznab.com/newznab-0.2.3.zip
unzip newznab-0.2.3.zip
mv newznab-0.2.3 newznab
chown -Rf www-data. newznab
rm -f newznab-0.2.3.zip

Enfin, nous allons activer le mode rewrite d'apache :

Command a2enmod
a2enmod rewrite

3 Configuration

3.1 PHP

Nous allons devoir configurer quelques paramètres PHP pour que Newznab fonctionne correctement :

Command
perl -pi -e 's/;date.timezone =.*/date.timezone = Europe\/Paris/' /etc/php5/cli/php.ini
perl -pi -e 's/;date.timezone =.*/date.timezone = Europe\/Paris/' /etc/php5/apache2/php.ini
perl -pi -e "s/max_execution_time = \d*/max_execution_time = 120/" /etc/php5/cli/php.ini
perl -pi -e "s/max_execution_time = \d*/max_execution_time = 120/" /etc/php5/apache2/php.ini
perl -pi -e "s/memory_limit = .*/memory_limit = 256M/" /etc/php5/apache2/php.ini

3.2 Apache

Voici une configuration classique. A vous de l'adapter à vos besoins :

Configuration File /etc/apache2/sites-available/newznab
<VirtualHost *:80>
        <Directory /var/www/newznab/www>
                Options FollowSymLinks
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
        ServerAdmin admin@example.com
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/newznab/www
        LogLevel warn
        ServerSignature Off
</VirtualHost>

Puis activez le et reloadez votre configuration Apache :

Command
a2ensite newznab
/etc/init.d/apache2 reload

3.3 MySQL

Nous allons configurer MySQL/MariaDB en créant une base de donnée, ainsi qu'un utilisateur :

Command mysql
create database newznab;
create user 'newznab'@'localhost' identified by 'password';
grant usage ON * . * TO 'newznab'@'localhost' IDENTIFIED BY 'password';
grant ALL on `newznab` .* to 'newznab'@'localhost';

Remplacez password par le mot de passe souhaité.

3.4 Newznab

Après toutes ces modifications, redémarrez votre serveur apache :

Command
/etc/init.d/apache2 restart

Puis connectez vous à votre serveur http://serveur/newznab/www et suivez les instructions. Une fois que vous aurez ajouté un groupe, il vous faudra lancer un script pour récupérer les derniers headers. Le résultat devrait être similaire à celui là :

Command php
> cd /var/www/newznab/misc/update_scripts
> php update_binaries.php
PHP Warning:  mysql_pconnect(): Headers and client library minor version mismatch. Headers:50149 Library:50311 in /var/www/newznab/www/lib/framework/db.php on line 12
 
newznab 0.2.3 Copyright (C) 2012 newznab.com
 
 
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation.
 
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
 
Updating: 1 groups - Using compression? No
Processing alt.binaries.teevee
Group alt.binaries.teevee has 50,001 new parts.
First: 334617788 Last: 454617805 Local last: 0
New group starting with 50000 messages worth.
Getting 20,001 parts (454567805 to 454587805) - 30,000 in queue
Received 20001 articles of 20001 requested, 0 blacklisted, 0 not binaries 
500 bin adds...1000 bin adds...1500 bin adds...2000 bin adds...
2,456 new, 0 updated, 20,001 parts. 4.50 headers, 6.17 update, 10.67 range.
Getting 20,001 parts (454587806 to 454607806) - 9,999 in queue
Received 20001 articles of 20001 requested, 0 blacklisted, 0 not binaries 
500 bin adds...1000 bin adds...1500 bin adds...
1,989 new, 268 updated, 20,001 parts. 4.05 headers, 6.98 update, 11.03 range.
Getting 9,999 parts (454607807 to 454617805) - 0 in queue
Received 9999 articles of 9999 requested, 0 blacklisted, 1 not binaries 
500 bin updates...
487 new, 754 updated, 9,998 parts. 2.84 headers, 4.27 update, 7.11 range.
Group processed in 29.74 seconds 
 
Updating completed in 30.09 seconds

Ensuite, il nous faudra créer les releases :

Command php
> php update_releases.php
PHP Warning:  mysql_pconnect(): Headers and client library minor version mismatch. Headers:50149 Library:50311 in /var/www/newznab/www/lib/framework/db.php on line 12
 
newznab 0.2.3 Copyright (C) 2012 newznab.com
 
 
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation.
 
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
 
 
 
Starting release update process (2012-12-16 00:42:54)
updated regexes to revision 1742
Applying regex 2 for group alt.binaries.*
Applying regex 1 for group alt.binaries.*
Stage 2
Stage 3
Found 0 nfos in 0 releases
0 nfo files processed
Site config (site.checkpasswordedrar) prevented checking releases are passworded
Processing tv for 0 releases
Lookup tv rage from the web - Yes
Tidying away binaries which cant be grouped after 2 days
Deleting parts which are older than 2 days
Deleting binaries which are older than 2 days
Processed 0 releases

Une fois que ces actions ont été exécutées à la main, nous allons les mettre de manière automatique en crontab :

Command crontab -e
0 * * * * /var/www/newznab/misc/update_scripts/cron_scripts/newznab.sh start > /dev/null

Nous allons devoir également donner les droits et modifier les paths par défaut :

Command
chmod 755 /var/www/newznab/misc/update_scripts/cron_scripts/newznab.sh
perl -pi -e 's/\/usr\/local\/www/\/var\/www/' /var/www/newznab/misc/update_scripts/cron_scripts/newznab.sh

4 Utilisation

4.1 Import d'une liste de serveurs

La liste de serveurs fournie par défaut est certe bien, mais ne réponds pas forcément à vos attentes. J'ai donc fait un petit script d'exemple qui va récupérer une liste de serveurs depuis un site web, créer une liste "propre", vérifier qu'ils ne sont pas déjà en base, puis ajouter tout d'un coup et les activer par la même occasion. Voici mon script :

Configuration File add_ngs_list.sh
#!/bin/sh
 
# Vars
ngs_list='liste_newsgroups'
mysql_batch='mysql_batch.sql'
database='newznab'
login='newznab'
password='password'
activate=1
url='http://www.binnews.in/_bin/newsgroup.php?country=fr'
 
# Getting URL
echo 'Getting newsgroups servers from URL'
wget -O $ngs_list.old "$url"
echo "Extracting all newsgroups servers"
grep title $ngs_list.old | awk -F\" '{ print $2 }' > $ngs_list
 
# Generate sql batch
echo "Generating SLQ batch file in $mysql_batch"
echo "" > $mysql_batch
for i in `cat $ngs_list` ; do
	if [ `mysql -u$login -p$password -e "select name from newznab.groups where name = '$i'" | grep -c $i` -eq 0 ] ; then
		echo "insert into $database.groups (name,backfill_target,first_record,first_record_postdate,last_record,last_record_postdate,last_updated,minfilestoformrelease,minsizetoformrelease,active,description) values ('$i',1,0,NULL,0,NULL,NULL,NULL,NULL,$activate,'$i');" >> $mysql_batch
	fi
done
 
# Import SQL
echo "Importing batch file in $database database"
mysql -u$login -p$password newznab < $mysql_batch

Il ne vous reste plus qu'à rensigner la partie vars avec les bons éléments, mettre les droits et exécuter ce script pour faire une insertion massive.