Greboca  

Suport technique et veille technologique

Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.

C’est alors la barrière de la prise en main qui fait peur, et pourtant...

Les logiciels libres

L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.

Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.

Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.

Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.

LinuxFr.org : les journaux  -  Répliquer ses vidéos Peertube − premiers pas

 -  Juillet 2018 - 

Sommaire

Bonjour nal, et bonjour à tou⋅te⋅s,

Tu connais Peertube, la super plateforme fédérée pour s'échanger des vidéos en (web)torrent. Si c'est pas le cas, je te renvoie à une dépêche parue récemment.

Une des questions qui secoue pas mal la communauté Peertube, c'est comment répliquer les vidéos de mon instance pour les seeder depuis un autre ordinateur ? Si les développeureuses de Peertube comptent intégrer un système de réplication à leur plateforme, ça fait pas de mal de bidouiller ça dans son coin en mode KISS en attendant.

La situation

Peertube diffuse ses vidéos en webtorrent, où l'instance Peertube est également annoncée dans le torrent comme "webseed", c'est à dire qu'elle peut streamer le contenu en HTTP(S) au client webtorrent si jamais le client ne supporte pas WebRTC.

Nous, de notre côté, on pourra pas offrir cette possibilité car il faudrait que le serveur modifie le fichier torrent pour nous enregistrer comme webseed. On se contentera donc de partager en webtorrent.

De son côté, Peertube propose des flux RSS, Atom et JSON pour suivre les dernières publications sur l'instance. Du coup on va pouvoir s'interfacer avec les outils de notre choix !

Trouver un client

Malheureusement, peu de clients Webtorrent existent à ce jour. La plupart des clients Bittorrent qu'on chérie ne supporte pas encore les webtorrents. Du coup, en attendant de trouver mieux, on va utiliser Webtorrent Desktop pour seeder les vidéos.

Webtorrent Desktop dispose d'ailleurs d'une option très pratique (et assez commune) pour automatiquement télécharger et partager les torrents qu'on ajoute dans un dossier. On va donc créer un dossier dédié, par exemple ~/seedbox.

Implémentation

Maintenant qu'on a un client équippé et configuré, il nous reste à écrire un programme pour télécharger régulièrement les torrents associés aux nouvelles vidéos sur notre instance Peertube préférée !

peertube-replication.sh

J'ai du coup créé un petit script en bash en une centaine de lignes. Il a pour dépendances :

  • bash ← j'ai pas testé avec d'autres shell mais je crois que j'utilise des idiosyncrasies bashistes (je débute en programmation shell)
  • curl ← pour récupérer les fichiers en HTTPS
  • jq ← pour extraire des informations du flux JSON
  • awk ← pour des manipulations de chaînes de caractères
  • oi.sh ← pour gérer les niveaux d'information (DEBUG, INFO, ERROR) et la colorisation des sorties

Installation

Sur Debian, apt install cron jq fera l'affaire. Ensuite, il faut rajouter peertube-replication.sh et oi.sh dans ton $PATH, c'est à dire dans la variable qui dit à ton shell où aller chercher les programmes. Sur Debian (et dérivées) tu pourras copier ça dans /usr/local/bin par exemple :

sudo cp oi.sh peertube-replication.sh /usr/local/bin && sudo chmod +x /usr/local/bin/*.sh

Utilisation

La syntaxe de peertube-replication.sh est très simple. Elle prend en premier paramètre l'adresse du flux JSON de ton instance Peertube, et en second paramètre le dossier dans lequel enregistrer les torrents et garder en mémoire la dernière vidéo qu'on connaît sur le serveur.

Par exemple, on peut faire:

peertube-replicate.sh "https://www.yiny.org/feeds/videos.json?sort=-publishedAt&filter=local" ~/seedbox/

Note: il est tout à fait possible de répliquer les vidéos de plusieurs instances dans le même dossier. En effet, la dernière vidéo connue de l'instance www.yiny.org est stockée dans le fichier ~/seedbox/www.yiny.org.latest. Pas de collisions en vue avec d'autres instances, donc (ouf).

Checker les nouveautés

On va maintenant voir comment configurer ton système pour checker automatiquement si des nouvelles vidéos ont été publiées. cron est un outil permettant de plannifier des tâches récurrentes sur ta machine.

Si le système est configuré pour (c'est le cas par défaut), chaque utilisateurice sur la machine a un fichier dans lequel iel peut enregistrer ses tâches récurrentes : c'est le crontab. Pour éditer ton fichier crontab, il y a la commande crontab -e.

Je vais pas faire un cours sur cron, parce que y'en a déjà plein des très biens (par exemple ici), mais voici un exemple pour checker l'apparition de nouvelles vidéos toutes les heures et enregistrer la sortie du programme dans un fichier de log :

0 * * * * /usr/local/bin/peertube-replication.sh "https://www.yiny.org/feeds/videos.json?sort=-publishedAt&filter=local" /home/yolo42/seedbox/ >> /home/yolo42/seedbox/peertube-replication.log

D'autres implémentations ?

Toutes les remarques sont bienvenues, mais je ne souhaite pas particulièrement recevoir de contributions extérieures sur peertube-replication.sh. Par contre, n'hésite pas à pomper le code (c'est du copyleft en GPL) pour en faire autre chose, ou à juste écrire ta solution dans ton coin pour la repartager avec tout le monde !

À quand une implémentation en Rust ? En BrainFuck ? En Haskell ? En Lisp ? Bientôt plus d'implémentations que TapTempo ? Bon ptet pas quand même !

Sinon si tu trouves d'autres clients compatibles webtorrents avec lesquels on peut s'interfacer ça m'intéresse grave. N'hésite pas à me dire en commentaire. Mon idéal serait un programme en ligne de commande avec un daemon, qu'on puisse déployer ça sans installer un environnement de bureau pour faire tourner les surcouches Electron de Webtorrent Desktop.

Algorithme

Si jamais tu veux faire une implémentation compatible, voici les grandes lignes :

  1. On checke qu'on a deux arguments ; sinon (ou si la personne le demande), on affiche l'aide
  2. Le premier argument est l'URL du flux (JSON/RSS/Atom) à checker, le second le dossier où stocker les données
  3. Checker le format de l'URL pour déterminer le type de flux (et où stocker sa dernière vidéo connue)
    1. Si le flux est un flux d'instance, on sauvegarde la dernière vidéo dans le fichier instance.tld
    2. Si le flux est un⋅e user, on sauvegarde dans @user@instance.tld (← pas encore implémenté)
  4. Vérifier qu'on a les droits en lecture et écriture sur le dossier
  5. Si cette information existe, récupérer la dernière vidéo connue localement
  6. Récupérer le flux distant
  7. Comparer les dernières vidéos (locale et distante) : si elles sont identiques, on n'a pas de vidéos à importer
  8. Pour chaque vidéo publiée après la dernière vidéo connue (dans l'ordre chronologique)
    1. Récupérer dans le flux l'URL correspondante
    2. Télécharger le torrent dans le dossier, sous le nom original du fichier (IDENTIFIANT-UNIQUE.torrent)
    3. Sauvegarder le nom de la vidéo comme dernière vidéo rencontrée pour ce flux

Limitations et améliorations

Webseed

On pourra pas faire webseed. Donc pour les clients qui ne supportent pas webrtc, c'est toujours l'instance peertube qui va balancer la sauce. Ça coûte cher en bande passante et surtout si t'es à l'autre bout du monde ça risque de moins bien marcher. Mais bon j'imagine que c'est mieux que pas de vidéo du tout :O

 Suppression des vidéos

Si une vidéo est supprimée sur le serveur, je ne connais pas de mécanisme pour être mis⋅e au courant. Peut-être y a-t-il un flux dans l'API de Peertube pour les dernières vidéos supprimées ?

Ça pose problème si tu répliques le contenu d'une instance publique et que tu te retrouves malgré toi à héberger du contenu pas cool (genre une vidéo de propagande pour l'armée ou un groupuscule fasciste). Du coup j'ai pas de solution à proposer à part de répliquer les vidéos d'instances à qui tu fais confiance.

Gérer les flux des utilisateurices

On pourrait répliquer également les flux d'un⋅e utilisateurice bien précis⋅e. Après tout, pourquoi répliquer toute une instance quand peut-être il n'y a qu'une personne qui nous intéresse dessus ?

Les adresses de flux des utilisateurices ressemblent beaucoup au flux de l'instance, mais elles comprennent un paramètre accountId. On pourrait passer un coup de regex sur l'URL fournie pour détecter s'il s'agit d'un flux d'instance, de user, ou bien à l'avenir peut-être d'une playlist ou d'un groupe.

Les flux utilisateurice pourraient ainsi être stockés dans le format @user@instance. C'est décrit dans l'algorithme, mais j'ai pas encore implémenté ça.

Quota

On devrait pouvoir configurer le programme pour limiter le stockage maximum. En cas de spam ou de grosse activité sur un serveur, ça ne devrait pas remplir tes partitions à 100%. Dans tous les cas j'espère que tu feras pas tourner ce petit script sur ta partition racine.

Il faudrait du coup enregistrer la taille de chaque flux en cumulant les informations individuelles sur chaque torrent fournies par l'API de Peertube. On pourrait ensuite paramétrer ça avec des variables d'environnement tels que REPLICATION_MAXSIZE=40G ou alors par flux REPLICATION_PERFLUX=5G.

Perso je pense pas implémenter ça. Ça me paraît trop chiant à faire pour mon utilisation précise. Après je t'encourage à développer ça dans ton coin et à partager ton code pour inspirer plus de monde :)

Conclusion

La fédération c'est chouette, mais avec la réplication c'est encore mieux. Vivent les projets libres et décentralisés ! Longue vie à Peertube et au fediverse ! Feu aux prisons (dorées ou pas) ! Mort à toutes les polices, du ouèbe et d'ailleurs !

Commentaires : voir le flux atom ouvrir dans le navigateur

par yolo42

LinuxFr.org : les journaux

LinuxFr.org : Journaux

Quand votre voiture vous espionne… et vous le fait payer

 -  23 avril - 

Ceci se passe aux États-Unis, pour l’instant, aucune preuve qu’une telle fuite existe en Europe. Mais… si votre assurance augmente brutalement, (...)


firefox, nouvelle fenêtre dans une session isolée

 -  15 avril - 

Les fenêtres de navigation privées de firefox partagent leurs cookies de session or je souhaitais avoir des fenêtres de navigation isolées, (qui ne (...)


Pretendo tente de déprogrammer l'obsolescence des consoles Nintendo

 -  9 avril - 

Ah Nal,Gros N vient de faire un gros doigt aux utilisateurs de ses consoles 3DS et Wii U en annonçant la fermeture des services en ligne pour (...)


[Trolldi] Vulgarisation sur l'IA pour décideur pressé

 -  5 avril - 

Cher 'Nal,Je fais un article-marque-page sur un post tout frais de Ploum où il est question d'un fantasme vieux comme le Talmud avec le Golem. (...)


Super Marian and Robin: les roms en collant

 -  3 avril - 

Bonjour Nal,Je t'écris pour te proposer de tester mon nouveau jeu: Super Marian and Robin.Il s'agit d'un jeu de plateformes pour un ou deux (...)