Newznab … un bon exercice de service : Installation

La suite du billet : Newznab … un bon exercice de service : Préparation du LAMP

Il s’agit maintenant d’installer proprement dit … NEWZNAB.

Le set de script est gratuit mais le service est payant (10$ une seule fois) pour que le serveur indexe.
(Il y a NZEDB qui lui est gratuit est pas mal du tout non plus).

On commence par ca:

mkdir -p /var/www/newznab chmod 777 /var/www/newznab
mkdir -p /var/www/newznab
chmod 777 /var/www/newznab

On installe les dépendances (dont certaines sont déjà dans le Turnkey … s’pas grave, on est certain de tout avoir du coup):

apt-get install -y php5 php5-dev php-pear php5-gd php5-mysql php5-curl
apt-get install -y lame
apt-get install -y unrar-free
apt-get install -y ffmpeg
apt-get install -y python-software-properties
apt-get install -y mediainfo
apt-get install -y subversion

 

Dans /etc/php5/apache2/php.ini  et /etc/php5/cli/php.ini

il faut changer ou ajouter ces éléments

register_globals = Off
max_execution_time = 120
memory_limit = 512MB
ou  memory_limit =  -1
date.timezone = Europe/Paris

On fait la petite manip suivante:

a2dissite default
a2ensite newznab
a2enmod rewrite

Petit redemarrage d’Apache:

/etc/init.d/apache2 restart
et on regarde dans son navigateur si le site mondomaine.com/phpinfo.php n’a pas eu de vapeur ….
MySQL est bon il fonctionne
Apache écoute en 8080
Nginx en 80 et va dans le répertoire var/www/newnzab
Jusqu’ici tout va bien !

On installe svn (subversion pour les intimes)

apt-get install subversion
Puis:
svn co svn://svn.newznab.com/nn/branches/nnplus /var/www/newznab

(les codes sont login:SVNPLUS et Password:SVNPLU5)

Après, c’est le drame 😉

chmod 777 /var/www/newznab/www/lib/smarty/templates_c
chmod 777 /var/www/newznab/www/covers/anime
chmod 777 /var/www/newznab/www/covers/console
chmod 777 /var/www/newznab/www/covers/movies
chmod 777 /var/www/newznab/www/covers/console
chmod 777 /var/www/newznab/www/covers/music
chmod 777 /var/www/newznab/www
chmod 777 /var/www/newznab/www/install
chmod 777 /var/www/newznab/nzbfiles/
chmod 777 /var/www/newznab/nzbfiles/
L’installation de NEWZNAB est terminé il faut passer au paramétrage qui ne necessite plus de tuto 🙂
http://localhost/newznab/www/install

Il reste une dernière difficulté. Faire démarrer les scripts avec le Turnkey:

Dans /etc/init.d , il faut faire un joli fichier newznabstart qui contient ça:

 ### BEGIN INIT INFO
# Provides:          newznab
# Required-Start:    
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: newznab plus update scripts.
# Description:       This script runs the scripts that periodically
#                    update the newznab indices.
### END INIT INFO
sleep 60
[ -c /dev/urandom ] || exit 0

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh

. /lib/lsb/init-functions

case "$1" in
  start)
        sudo -u nzb /usr/bin/screen -d -m -S newznab sh /var/www/newznab/misc/update_scripts/cron_scripts/newznab_screen_local.sh
    ;;
  stop)
        sudo -u nzb /usr/bin/screen -X -S newznab quit
    ;;
  status)
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  *)
    echo "Usage: nnplus [start|stop]" >&2
    exit 3
    ;;
esac

 

Et zou c’est parti !

Newznab … un bon exercice de service : Préparation du LAMP

OHhh la on s’attaque à du dur …

Petit récapitulatif sur les newsgroups : Usenet est un système en réseau de forums, inventé en 1979. En gros, ça date d’avant les inter-tubes. 😉

Normalement, ça sert donc à faire un forum. Mais Usenet semble connaitre un regain d’intérêt : avec l’HADOPI2, les systèmes d’échanges P2P étant surveillés, de nouvelles méthodes de téléchargement sont recherchées, et le réseau Usenet (principalement binaire) est de plus en plus fréquenté pour sa haute vitesse de téléchargement, la richesse des contenus et le respect de la neutralité du réseau4. (Wikipedia).

Donc il faut un fournisseur de newsgroup. Vous pouvez oublier votre FAI. « Hadopi c’est fini, c’était la ville de notre dernieeeeer amour ».
Par exemple, Giganews. Il est cher certes mais il offre plusieurs années de rétention, des VPN qui sortent sur la terre entière (qui a dit Netflix ? qu’il se dénonce !) et puis de la vitesse surtout avec un serveur Européen.

Après il faut trouver des fichiers à télécharger. C’est là que Newznab entre en jeu. C’est un peu le google des newsgroup. Un moteur de recherche qui va regarder des groups et en tirer les « releases ».

C’est bien expliqué ici chez Korben.

 

On commence avec Turnkey LAMP que l’on bidouille comme vu sur ce billet : Les Turnkeys de mon Labo

 

On va juste ajouter PHP en fast CGI sur Apache :

apt-get install apache2-mpm-worker libapache2-mod-fastcgi php5-fpm php-apc

Il faut valider MPM worker pour Apache.

a2enmod actions alias fastcgi rewrite

On edite /etc/apache2/conf.d/php5-fpm

# Configure all that stuff needed for using PHP-FPM as FastCGI
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
# application/x-httpd-php-source                 phps
<FilesMatch ".+\.phps$">
    SetHandler application/x-httpd-php-source
    # Deny access to raw php sources by default
    # To re-enable it's recommended to enable access to the files
    # only in specific virtual host or directory
    Order Deny,Allow
    Deny from all
</FilesMatch>
 # Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
    Order Deny,Allow
    Deny from all
</FilesMatch>
 # Define Action and Alias needed for FastCGI external server.
Action application/x-httpd-php /fcgi-bin/php5-fpm virtual
Alias /fcgi-bin/php5-fpm /fcgi-bin-php5-fpm
<Location /fcgi-bin/php5-fpm>
  # here we prevent direct access to this Location url,
  # env=REDIRECT_STATUS will let us use this fcgi-bin url
  # only after an internal redirect (by Action upper)
  Order Deny,Allow
  Deny from All
  Allow from env=REDIRECT_STATUS
</Location>
FastCgiExternalServer /fcgi-bin-php5-fpm -socket /var/run/php5-fpm.sock -idle-timeout 250 -pass-header Authorization

 

On édite /etc/php5/fpm/php-fpm.conf


emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10s

 

On édite /etc/php5/fpm/pool.d/www.con

 

pm = dynamic
pm.max_children = 100
pm.start_servers = 25
pm.min_spare_servers = 25
pm.max_spare_servers = 50
pm.max_requests = 500

 

Et on relance PHP-FPM :

/etc/init.d/php5-fpm reload

 

Petite bidouille d’Apache dans  /etc/apache2/conf.d/security :

 

ServerTokens Prod
ServerSignature Off
TraceEnable Off

 

Un petit reload d’Apache:

/etc/init.d/apache2 reload


Et perso je reboot:

Sudo reboot

 

Théoriquement au reboot si vous avez un phpinfo.php dans var/www, vous devez voir fast-cgi comme handler.

On est bon donc : Apache en port 8080, NGINX en port 80 et du fast-cgi avec APC.
Sauf que Nginx a besoin d’etre un peu modifier pour supporter Newznab.

Dans /etc/nginx/sites-available on va créer un fichier newznab :

 server {
    listen 80;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    root /var/www/newznab/www/;
    index index.html index.htm index.php;
    server_name mondomaine.com;
         location ~* \.(?:ico|css|js|gif|inc|txt|gz|xml|png|jpe?g) {
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";    }
         location /admin { }
        location /install { }
         location ~ \.php$ {   
         proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8080;
         }
         location / { try_files $uri $uri/ @rewrites; }
        location @rewrites {
            rewrite ^/([^/\.]+)/([^/]+)/([^/]+)/? /index.php?page=$1&id=$2&subpage=$3 last;
            rewrite ^/([^/\.]+)/([^/]+)/?$ /index.php?page=$1&id=$2 last;
            rewrite ^/([^/\.]+)/?$ /index.php?page=$1 last;
    }
          location ~ /\.ht {
                deny all;
        }
}

 

Et aussi une petite modif dans /etc/nginx/nginx.conf

user www-data;
worker_processes  1;
 error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 events {
    worker_connections  1024;
}
 http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
     access_log  /var/log/nginx/access.log  main;
     sendfile        on;
    #tcp_nopush     on;
     keepalive_timeout  65;
     #gzip  on;
     include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

 

 

(A SUIVRE)