aria2 – gestionnaire de téléchargement

aria2

Aria2 est un gestionnaire de téléchargement en ligne de commande supportant HTTP/HTTPS, FTP, SFTP, BitTorrent, Metalink. Aria2 s’installe sur toutes les distribution GNU/Linux via le paquet aria2. Il se pilote en CLI via la commande aria2c ou via une interface nodeJS webui-aria2. Ce tutoriel vous détaillera pas à pas toutes les procédures pour utilises ces deux outils sur votre linux de type Debian.

Créer les répertoires et fichiers suivant nécéssaire à aria2 :

# mkdir -p /etc/aria2
# mkdir -p /var/log/aria2/
# touch /etc/aria2/aria2.conf
# touch /var/log/aria2/session.txt
# touch /etc/init.d/aria2 
# touch /etc/apache2/sites-available/webui-aria2.conf
# chmod +x /etc/init.d/aria2

Lancer l’installation du client aria2 :

apt-get install aria2

Éditez le fichier « /etc/aria2/aria2.conf » comme suit :

# Reprises des téléchargements préalablement lancés
continue
# Lancer aria2 en tâche de fond
daemon=true
enable-rpc=true
rpc-listen-all=true
rpc-secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
rpc-secure=true
rpc-certificate=/etc/ssl/certs/certs/public.crt
rpc-private-key=/etc/ssl/private/private/private.key
# Dossier pour stocker les téléchargements
dir=/data/downloads/
# Dossier pour stocker les sessions
input-file=/data/downloads/session.txt
save-session=/data/downloads/session.txt
save-session-interval=20
# Niveau d'alerte des log
log-level=warn
# Nombre de connections simultanées à un serveur
max-connection-per-server=4
# Nombre maximum de téléchargements en même temps
max-concurrent-downloads=1

Éditez le fichier de démarage du daemon aria2 « /etc/init.d/aria2 » comme suit :

#!/bin/sh
### BEGIN INIT INFO
# Provides: aria2
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: aria2c init script.
# Description: Starts and stops aria2 daemon.
### END INIT INFO

USER="votreutilisateur"
DAEMON=/usr/bin/aria2c
CONF=/etc/aria2/aria2.conf

start() {
if [ -f $CONF ]; then
    echo "Starting aria2 daemon"
    start-stop-daemon -S -c $USER -x $DAEMON -- -D --conf-path=$CONF
else
    echo "Couldn't start aria2 daemon for $USER (no $CONF found)"
fi
}

stop() {
    start-stop-daemon -o -c $USER -K -u $USER -x $DAEMON
}

status() {
dbpid=`pgrep -fu $USER $DAEMON`
if [ -z "$dbpid" ]; then
    echo "aria2c daemon for USER $btsuser: not running."
else
    echo "aria2c daemon for USER $btsuser: running (pid $dbpid)"
fi
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart|reload|force-reload)
        stop
        start
    ;;
    status)
        status
    ;;
*)
echo "Usage: /etc/init.d/aria2 {start|stop|reload|force-reload|restart|status}"
exit 1
esac

exit 0

Vous pouvez démarrer ou arrêter aria2 comme un service avec les commandes suivantes :

# service aria2 start
Starting aria2 daemon...
# service aria2 stop
Shutting down aria2 daemon...

Ou le lancer automatiquement au démarrage de votre serveur :

# update-rc.d aria2 defaults
# service aria2 start

Votre daemon aria2RPC tourne a présent sur le port par défaut 6800. Si vous souhaitez lui envoyer des fichiers à télécharger, vous pouvez le faire via une extension au navigateur Chrome ou via l’application webui-aria2 préalablement installé sur le même serveur où réside aria2.

# netstat -tupln | grep aria2
tcp        0      0 0.0.0.0:6800            0.0.0.0:*               LISTEN      5435/aria2c
tcp6       0      0 :::6800                 :::*                    LISTEN      5435/aria2c
# cd /lib/systemd/system
# vi aria2.service
[Unit]
Description=Aria2c download manager
Requires=network.target

[Service]
Type=forking
User=root
RemainAfterExit=yes
#ExecStartPre=/sbin/setcap cap_net_admin+ep /usr/bin/aria2c
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf --daemon
ExecReload=/usr/bin/kill -HUP $MAINPID
RestartSec=1min
Restart=on-failure


[Install]
WantedBy=multi-user.target

Extension navigateur Google Chrome

Télécharger l’extension ici : https://chrome.google.com/webstore/detail/aria2c-integration/edcakfpjaobkpdfpicldlccdffkhpbfk

Paramétrer l’adresse du serveur dans l’extension comme suit:

aria2c-integration

Application webui-aria2

Suite à la configuration d’aria2 pour être commandé par son RPC, il est possible de le gérer via une interface web qui va se charger de communiquer avec le daemon aria2RPC.

Récupérer l’interface web via le dépot git de ziahamza :

# cd /var/www
# git clone https://github.com/ziahamza/webui-aria2

Editer le fichier de « /var/www/webui-aria2 » avec les paramètres du daemon aria2RPC :

...
  host: location.protocol.startsWith('https') ? location.hostname : 'www.domoinfo.fr',
  path: '/jsonrpc',
  port: 6800,
  encrypt: true,
  auth: {                          // either add the token field or the user and pass field, not both.
   token: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
...

Enfin dans le fichier « /etc/apache2/sites-available/webui-aria2.conf », renseigner les paramètres suivants :

<VirtualHost *:80>
  ServerName webui-aria2.exemple.com

  DocumentRoot /var/www/webui-aria2/

  CustomLog /var/logs/apache/webui-aria2-access.log combined
  ErrorLog /var/logs/apache/webui-aria2-errors.log combined

  # Force HTTPS
  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
  ServerName webui-aria2.exemple.com

  DocumentRoot /var/www/webui-aria2/

  CustomLog /var/logs/apache/webui-aria2-access.log combined
  ErrorLog /var/logs/apache/webui-aria2-errors.log combined

  # certificates
  SSLEngine on
  SSLCertificateFile    /etc/ssl/certs/certs/public.crt
  SSLCertificateKeyFile /etc/ssl/private/private/private.key

  # Authentificate users
  <Location />
    AuthType Basic
    AuthName "webui-aria2"
    AuthUserFile  users.auth
    AuthGroupFile groups.auth
    # allow only users from the webui-aria2 group
    Require group webui-aria2
  </Location>

#  AddExternalAuth pwauth /usr/sbin/pwauth
#  SetExternalAuthMethod pwauth pipe
#  <Directory /var/www/aria2/>
#      AuthType Basic
#      AuthName "PAM Authentication"
#       AuthBasicProvider external
#      AuthExternal pwauth
#      require valid-user
#  </Directory>

ProxyRequests Off
ProxyPreserveHost Off
    <Location /jsonrpc>
        ProxyPass ws://127.0.0.1:6800/jsonrpc  retry=0
        ProxyPassReverse ws://127.0.0.1:6800/jsonrpc
        SetEnv force-proxy-request-1.0 1
        SetEnv proxy-nokeepalive 1
    </Location>

</VirtualHost>

Activer/vérifier le fichier de configuration pour apache :

# a2ensite webui-aria2.conf
# apache2ctl -t
Syntax OK
# /etc/init.d/apache2 restart

Connecter vous depuis votre navigateur web à l’interface :

webui-aria2

DEBUG

Pwauth est une authentification pour apache, on peut voir si cela fonctionne en ligne de commande pour un utilisateur particulier, ici www-data en l’occurence :

# sudo -u www-data /usr/bin/pwauth
admin
pwd123456
# echo $?
0

Ici cela fonctionne. Si vous obtenez « 1 » cherchez l’erreur.

Références :

Notes :