[RaspBerry Pi] Faire un serveur de téléchargement économe en énergie

installation-de-base-raspberry-pi

Laisser son PC branché la nuit pour récupérer des données, ce n’est pas très écolo. Pourquoi ne pas mettre à profit un RaspBerry Pi (j’ai le 3 Model B) pour faire cela, sans écran, avec juste ce qu’il faut en puissance de calcul et RAM ? Dans ce tutoriel nous allons:

  • Configurer le Raspberry Pi pour y faire tourner une interface graphique de gestion des téléchargements, accessible à distance.
  • Partager le dossier de téléchargement des données pour les récupérer depuis les ordinateurs en réseau

1) Prérequis

  • Avoir installé Raspbian sur le Raspberry pi (tuto en anglais)
  • Pouvoir s’y connecter en SSH ou via VNCViewer (option à cocher au premier boot du Pi) sauf si vous avez un écran, clavier et souris pour travailler en direct sur le Raspberry Pi

2) Installer PyLoad, un petit soft de gestion des téléchargements en Python

On met à jours les dépots :

>sudo apt-get update

On installe les dépendances de PyLoad

sudo apt-get install python-support python-crypto python-pycurl tesseract-ocr tesseract-ocr-eng python-imaging -y

On télécharge PyLoad (changer la version par la plus récente en allant voir sur le site de Pyload)

wget --no-check-certificate https://github.com/pyload/pyload/releases/download/v0.4.9/pyload-cli_0.4.9_all.deb

On l’installe :

sudo dpkg -i pyload*

On peut supprimer les fichiers d’installation :

rm pyload*.deb

On installe les paquet OpenSSL et leurs dépendances, Rhino pour le Javascript et les sites en Clic and Load :

sudo apt-get install python-pip python-dev -y
sudo pip install pyopenssl
sudo apt-get install rhino -y

On lance PyLoad et on le configure :

pyLoadCore -s

Voici les paramètres que j’ai utilisés :

Choose your language : fr Continuer la configuration ? ([o]/n): o Modifier le dossier de configuration ? (o/[n]): n Mettre en place la configuration de base ? ([o]/n): o Nom d'utilisateur [User]: pyload Mot de passe : ton mot de passe Enable remote access ([o]/n): o Langage ([en], de, fr, it, es, nl, sv, ru, pl, cs, sr, pt_BR): fr Dossier de téléchargement [Downloads]: /home/pi/Download/ Téléchargements parallèle maximum [3]: 3 Utiliser reconnexion ? (o/[n]): n Paramétrer ssl ? (o/[n]): n Souhaitez vous configurer l'interface web ? ([o]/n): o Activer l'interface web ? ([o]/n): o Adresse [0.0.0.0]: Port [8000]: Serveur ([builtin], threaded, fastcgi, lightweight): Configuration définie avec succès. Appuyez sur entrée et redémarrer pyLoad...

Si vous avez besoin de relancer PyLoad faites :

sudo service pyload restart

On modifie les paramètres pour que PyLoad se lance au démarrage du Raspberry Pi :

sudo update-rc.d pyload defaults

Pour le désinstaller faites :

sudo dpkg -r pyload-cli

Pour lancer l’interface graphique, rendez vous dans votre navigateur web sur le RaspberryPi ou sur une machine distante si vous avez activé cette possibiltié lors de la config de PyLoad. Pour se faire rentrer localhost:8000 dans la barre d’adresse et se connecter avec les ID/mdp choisis.

RaspberryPi-PyLoad-Installer (2)

3) Monter un disque dur externe sur le RaspberryPi au démarrage

Télécharger sur la carte SD du RaspberryPi va vite devenir limitant (et cher pour les grosses capacités) et abime précocément la carte SD. On privilégie un disque dur externe autoalimenté, avec une bonne alim sur le Raspberry ça passe largement. On a préalablement formaté dans le format de votre choix. J’ai pour ma part pris NTFS pour gérer les gros fichiers et le monter sous WIndows une fois mes téléchargements terminés.

Linux ne le gérant pas en natif, on installe le paquet NTFS-3g :

apt-get install ntfs-3g

Dans la console on va chercher le UUID du disque externe,

blkid

Ca nous donne par exemple : /dev/sda1: LABEL="NICOLAS" UUID="0A3430A934309A21" TYPE="ntfs" PARTUUID="994501bc-01"

Ici le UUID est 0A3430A934309A21, on le copie pour s’en servir juste après. On va éditer le fichier gérant le montage des disques au démarrage pour s’assurer que le DD Externe ait toujours le même chemin de montage.

On ouvre le fichier fstab avec l’éditeur de texte Nano :

sudo nano /etc/fstab
Montage-Disque-dur-externe-au-demarrage-raspberrypi

et on ajoute la ligne suivante (tabulation entre chaque bloc de texte, texte en bleu à remplacer par votre UUID de disque dur) :

UUID="0A3430A934309A21" /media/Disque1  ntfs    defaults,nofail 0       2

On sauvegarde et on redémarre le RaspberryPi. Au prochain boot aller vérifier dans /media que le disque dur est bien monté dans le dossier Disque1 (vous pouvez le renommer d’ailleurs)

4) Enregistrer les téléchargements sur le disque dur externe

On relance une console pour modifier les paramètres de PyLoad (ou direct dans les options si vous utilisez l’interface web) :

pyLoadCore -s

On revalide les mêmes paramètres que lors de la première config sauf :

Dossier de téléchargement [Downloads]: /media/Disque1/DL

5) Partager le contenu du disque externe sur Samba pour récupérer ses téléchargements depuis d’autres postes

On lance l’installation de Samba :

sudo apt-get install samba samba-common-bin

On ajoute un utilisateur « guest » :

sudo adduser guest --home=/home/public --shell=/bin/false --disabled-password

On change les droits de la zone de partage correspondant à notre disque dur externe :

chown -R guest:guest /media/Disque1

On va sauvegarder le fichier config de Samba au cas où, puisque nous allons le modifier :

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.save

Aller dans /etc/samba et éditer le fichier smb.conf en y rajoutant à la fin (tout à la fin):

[Partage]
comment = Partage Samba sur Raspberry Pi
path = /home/pi/partage
writable = yes
guest ok = yes
guest only = yes
create mode = 0777
directory mode = 0777
share modes = yes

Sauvegarder et remplacer le fichier smb.conf dans etc/samba.

Redémarrer Samba :

sudo systemctl restart smbd.service

Dans Windows, on peut maintenant aller dans le réseau et trouver notre disque partagé, le mapper pour avoir un raccourci dans Poste de Travail :

Montage dd externe Samba Raspberry pi

[Sources : HTPC Guides (en), PiHomeServer (fr), Framboise314 (fr)]

17 commentaires

  1. Bonjour, super tuto mais je bloque au moment de l’acces localhost, j’ai pourtant paramétré toutes les IP avec 0.0.0.0 mais je n’y ai pas acces, ni en local ni en réseau. Cela se passe sur un RPI0W configuré en IP statique sous Pixel. Une idée de l’erreur ?

    • Bonjour Dan,

      Chez moi, 0.0.0.0 fonctionne parfaitement par défaut. Je suis avec un Raspberry Pi 3 B sous Raspbian par contre, je ne sais pas si cela change quelquechose.

  2. Bonsoir,

    je bloque sur cette commande:

    sudo pip install pyopenssl

    j ai ce message d erreur quelqu un a une idée ?
    Si je fais un -upgrade rien ne se passe non plus …
    Je ne sais pas si ca vient de la mais du coup je n arrive pas a me connecter a distance ….

    Requirement already satisfied (use –upgrade to upgrade): pyopenssl in /usr/lib/python2.7/dist-packages

    • Si problème là :
      $ sudo dpkg -i pyload*
      Ma solution :
      $ sudo dpkg –configure -a
      $ sudo apt-get install python-qt4
      $ sudo apt –fix-broken install
      $ sudo dpkg -i pyload*

      Si problème là :
      $ sudo pip install pyopenssl
      Ma solution :
      $ sudo apt-get install libssl-dev python-dev libffi-dev
      $ sudo pip install pyopenssl

  3. Bonjour,

    Je ne comprends pas. Je viens d’installer raspbian version strecth sur mon rasp et ensuite je tente l’instalation de pyload et voici les erreurs que je rencontre :

    —————

    ## Vérification du Système ##
    Version de Python : OK
    pycurl : OK
    sqlite3 : OK

    pycrypto : OK
    py-OpenSSL : OK

    py-imaging : absent
    tesseract : absent

    PyQt4 : absent

    Vous avez installé jinja2 version 2.8, elle semble trop ancienne.
    Vous pouvez continuer en toute sécurité mais si l’interface web ne fonctionne pas,
    mettez à jour ou désinstallez la, pyLoad inclus une librairie jinja2 suffisante.

    jinja2 : absent
    beaker : OK
    moteur JS : OK

    Vérification du système fini, appuyer sur entrée pour voir votre rapport de status.

    ## Status ##

    Fonctions disponibles : décryptage des conteneurs, connexion ssl, Interface web, extension Click’N’Load

    Fonctions indisponibles :

    La Reconnaissance des catchas n’est pas disponible
    Ceci est nécessaire uniquement pour certains hôtes en tant qu’utilisateur gratuit.

    Interface graphique non disponible
    L’Interface Graphique.

    ———————

    Je ne comprends pas pourquoi Jinja2 est absent d’alors qu’il détecte une version Jinja 2.8 ?

    Pourquoi l’interface graphique est indisponible ?

    Merci de votre aide

    • Même problème ! Si quelqu’un a une solution, je suis preneur!

    • Il vous manque peut etre quelques trucs :
      sudo apt-get install libssl-dev python-dev libffi-dev

  4. Bonjour,

    je ne sais pas si quelqu’un passe encore par la mais je rencontre un soucis -> sudo pip install pyopenssl me retourne l’erreur -> sudo: pip : commande introuvable

    j’ai bien suivis les étapes –

  5. Hello,
    Tout fonctionne bien c’est super merci !
    Seul souci, lorsque je D/L, ça s’enregistre sur ma carte SD et non sur mon DD externe, je ne comprends pas …
    Quelqu’un peut-il m’aider svp ?

  6. Bonjour,
    Lorsque je termine la conf de Pyload en distant (car je n’ai pas la main sur un 2nd ecran pour vérifier en local) le site ne démarre pas : connexion refused
    Lorsque je regarde le fichier de conf, je n’ai pas toute la conf (j’ai l’impression)

    Je n’ai pas la partie : Web interface pourtant que j’ai activé
    d’ailleurs j’ai également l’erreur JINJA2 absent

    Merci pour votre aide
    Séb

    download – « Download »:
    int chunks : « Max connections for one download » = 3
    str interface : « Download interface to bind (ip or Name) » = None
    bool ipv6 : « Allow IPv6 » = False
    bool limit_speed : « Limit Download Speed » = False
    int max_downloads : « Max Parallel Downloads » = 3
    int max_speed : « Max Download Speed in kb/s » = -1
    bool skip_existing : « Skip already existing files » = False

    downloadTime – « Download Time »:
    time end : « End » = 0:00
    time start : « Start » = 0:00

    general – « General »:
    bool checksum : « Use Checksum » = False
    bool debug_mode : « Debug Mode » = False
    folder download_folder : « Download Folder » = /home/pi/nas
    bool folder_per_package : « Create folder for each package » = True
    en;de;fr;it;es;nl;sv;ru;pl;cs;sr;pt_BR language : « Language » = en
    int min_free_space : « Min Free Space (MB) » = 200
    int renice : « CPU Priority » = 0

    log – « Log »:
    bool file_log : « File Log » = True
    int log_count : « Count » = 5
    folder log_folder : « Folder » = Logs
    bool log_rotate : « Log Rotate » = True
    int log_size : « Size in kb » = 100

    permission – « Permissions »:
    bool change_dl : « Change Group and User of Downloads » = False
    bool change_file : « Change file mode of downloads » = False
    bool change_group : « Change group of running process » = False
    bool change_user : « Change user of running process » = False
    str file : « Filemode for Downloads » = 0644
    str folder : « Folder Permission mode » = 0755
    str group : « Groupname » = users
    str user : « Username » = user

    proxy – « Proxy »:
    str address : « Address » = « localhost »
    password password : « Password » = None
    int port : « Port » = 7070
    bool proxy : « Use Proxy » = False
    http;socks4;socks5 type : « Protocol » = http
    str username : « Username » = None

    reconnect – « Reconnect »:
    bool activated : « Use Reconnect » = False
    time endTime : « End » = 0:00

  7. en complément, ci dessous le check de la config :

    ## System Check ##
    Python Version: OK
    pycurl: OK
    sqlite3: OK

    pycrypto: OK
    py-OpenSSL: OK

    py-imaging: OK
    tesseract: missing

    PyQt4: missing

    Your installed jinja2 version 2.11.2 seems too old.
    You can safely continue but if the webinterface is not working,
    please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary.

    jinja2: missing
    beaker: OK
    JS engine: OK

    System check finished, hit enter to see your status report.

    ## Status ##

    Features available: container decrypting, ssl connection, Webinterface, extended Click’N’Load

    Featues missing:

    ** no Captcha OCR Recognition available **
    Only needed for some hosters and as freeuser.

    ** Gui not available **
    The Graphical User Interface.

  8. Bon finalement, j’ai retrouvé la conf complète de PYLOAD par contre, le site est toujours en connex_refused
    192.168.0.130 n’autorise pas la connexion.
    Voici quelques conseils :

    Vérifier la connexion
    Vérifier le proxy et le pare-feu
    ERR_CONNECTION_REFUSED

    reconnect – « Reconnect »:
    bool activated : « Use Reconnect » = True
    time endTime : « End » = 0:00
    str method : « Method » = ./reconnect.sh
    time startTime : « Start » = 0:00

    remote – « Remote »:
    bool activated : « Activated » = True
    ip listenaddr : « Adress » = 192.168.0.130
    bool nolocalauth : « No authentication on local connections » = True
    int port : « Port » = 7227

    ssl – « SSL »:
    bool activated : « Activated » = False
    file cert : « SSL Certificate » = ssl.crt
    file key : « SSL Key » = ssl.key

    webinterface – « Webinterface »:
    bool activated : « Activated » = True
    bool basicauth : « Use basic auth » = False
    ip host : « IP » = 192.168.0.130
    bool https : « Use HTTPS » = False
    int port : « Port » = 8000
    str prefix : « Path Prefix » =
    builtin;threaded;fastcgi;lightweight server : « Server » = builtin
    classic;modern;pyplex template : « Template » = modern

  9. Bonjour,

    Lorsque je termine l’installation, configuration de Pyload et que je lance une commande status , j’obtiens le message d’erreur ci dessous . J’ai beau faire un « restart » le service démarre mais repasse en « inactive »

    Auriez vous une idée sur le sujet ? En vous remerciant par avance.
    Sébastien

    ● pyload.service – Python Downloader
    Loaded: loaded (/etc/systemd/system/pyload.service; enabled; vendor preset: enabled)
    Active: inactive (dead) since Wed 2020-04-22 12:24:09 CEST; 1h 29min ago
    Process: 388 ExecStart=/usr/bin/python /opt/pyload/pyLoadCore.py (code=exited, status=0/SUCCESS)
    Main PID: 388 (code=exited, status=0/SUCCESS)

    avril 22 12:24:09 raspberrypi python[388]: File « /opt/pyload/pyLoadCore.py », line 285, in start
    avril 22 12:24:09 raspberrypi python[388]: res = s.start()
    avril 22 12:24:09 raspberrypi python[388]: File « /opt/pyload/module/setup.py », line 40, in start
    avril 22 12:24:09 raspberrypi python[388]: lang = self.ask(u »Choose your Language / Wähle deine Sprache », « en », langs)
    avril 22 12:24:09 raspberrypi python[388]: File « /opt/pyload/module/setup.py », line 489, in ask
    avril 22 12:24:09 raspberrypi python[388]: input = raw_input(qst +  » %s:  » % info)
    avril 22 12:24:09 raspberrypi python[388]: EOFError: EOF when reading a line
    avril 22 12:24:09 raspberrypi python[388]: This is your first start, running configuration assistent now.
    avril 22 12:24:09 raspberrypi python[388]: Choose your Language / Wähle deine Sprache ([en], de, fr, it, es, nl, sv, ru, pl, cs, sr, pt_BR): Setup failed
    avril 22 12:24:09 raspberrypi systemd[1]: pyload.service: Succeeded.
    root@raspberrypi:/home/pi#

    • Bonjour, j’ai exactement le même problème, avez-vous trouvé une solution?
      Ps: Merci pour le Tuto.

  10. Bonjour Nicolas.

    Merci pour ce tuto que j’ai suivi pas à pas, newbee que je suis dans le domaine.

    J’ai quelques propositions, suite à mon expérience sur:
    – Rapsberry Pi OS (Raspbian v10, version mars 2021, avec VNC server activé dans le menu du Pi)
    – Lubuntu 20.04 (pour le PC distant qui pilote le Pi3b, via VNC-viewer).

    Voici:
    – python-imaging aurait été remplacé par python-pil
    – peut-être préciser comment « insérer » le lien depuis le site de GitHub pour récupérer la dernière version de pyload-cli pour pouvoir executer wget à l’issue…?
    – alors, c’est très con je sais, mais préciser « sudo blkid » pour trouver l’UUID du HDD branché en USB… J’ai bien cherché comme un idiot pendant 15 bonnes minutes car je ne voyais pas mon HDD USB via la commande blkid alors que mon HDD s’était automatiquement monté dans l’interface graphique du Pi (on ne se moque pas, merci).

    Pour le reste, nickel: les étapes sont bien détaillées, chronologiquement et illustrées au besoin.
    Un grand merci, je me répète.

    Bonne journée.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *