Table des matières
Bonjour à tous,
Cet article fait notamment suite à celui-ci où le but était de partager des outils/logiciels Open Source. Aujourd’hui, nous allons parler de 2 logiciels: Shaarli et ArchiveBox.
Shaarli
Présentation
Nombre d’entre vous connaissent sûrement ce logiciel créé par sebsauvage. Shaarli vient de shaaring your links, il fallait bien un nom après tout :) Cet outil en PHP, HTML et JavaScript permet tout simplement de publier des liens sur une page. Il est minimaliste, ultra-rapide et n’utilise pas de base de données. Il s’installe super simplement sur un serveur et est conçu pour être mono-utilisateur (le prix de la simplicité). Son code source est disponible ici (miroir ici).
Installation
Cette étape ne peut pas être plus simple. La dernière version étant la v0.11.1, la manière la plus rapide pour installer est la suivante:
wget https://github.com/shaarli/Shaarli/releases/download/v0.11.1/shaarli-v0.11.1-full.zip
unzip shaarli-v0.11.1-full.zip
mv Shaarli /path/to/shaarli/
Faîtes ensuite pointer votre serveur web sur le dossier /path/to/shaarli/
.
Mon instance
Mon instance disponible à cette adresse, est (si j’en crois le premier article partagé) en ligne depuis le 17 juin 2019. Ça ne l’aura pas échappé aux plus curieux d’entre vous (sauf ceux sur mobiles), mais un lien vers l’instance se trouve derrière cette icône.
Depuis Shaarli, vous pouvez retrouver en haut à droite le flux RSS si ça vous intéresse.
Shaarli permet la mise en place de plugins, j’ai notamment mis en place le service de commentaires isso (le même que sur ce site) si l’envie vous prend de commenter un shaare (c’est accessible en cliquant sur permalink ou sur l’icône commentaire pour chaque shaare).
Les articles sont issus notamment de ma veille technologique mais aussi de NextINpact et Le Monde que je suis globalement au quotidien.
Sur certains articles que je trouve les plus pertinents, j’y ajoute l’étiquette top
, en voici quelques-uns depuis juin:
- You (probably) don’t need ReCAPTCHA | kevv.net
- OVH avance d’un pied ferme - OVH Blog
- Ce qu’il se passe quand on envoie un mail // /home/lord
- Mon (futur) service de veille Marien Fressinaud
- Faut-il utiliser les ORM ou continuer d’écrire simplement des requêtes SQL ? Eli Bendersky donne son avis
- how to deprecate an interface
- Skype, Slack, other Electron-based apps can be easily backdoored | Ars Technica
- Don’t trust a password management system you design yourself! | 1Password
- Git, le système distribué de gestion de versions, vient de passer à la version 2.23 et propose deux commandes expérimentales pour réduire l’usage de la commande « git checkout »
- Pourquoi je n’achèterai plus ces magazines - TkPx - Tiers-Lieu Ephemere
- 2 astuces pour vraiment accélérer le chargement des sites sous Chrome Korben
- Feature request: Delete untracked files from status view · Issue #393 · jonas/tig · GitHub
- Installer la dernière version de wiringpi sur Raspbian Buster - Framboise 314, le Raspberry Pi à la sauce française….
- Le paiement mobile gagne rapidement du terrain
- Qwant : en finir avec l’omerta
- Trouver les informations de votre navigateur - le hollandais volant
- Dis tonton, comment ça fonctionne la sécurité d’un gestionnaire de mots de passe ? Introduction cryptographique Carnet de notes
- French Nuclear Concern Pushes Up European Gas and Power Prices - Bloomberg - Le Hollandais Volant
- Déframasoftisons Internet ! Framablog
- Développeurs, vous devriez avoir honte Règles de mots de passe Carnet de notes
Les liens ci-dessus redirigent vers mon instance de Shaarli afin que vous puissiez profiter de mes commentaires (désobligeants ou pour créer la polémique pour certains bien sûr, je ne peux pas m’en empêcher).
Voir plus loin
J’hésite encore à intégrer un peu plus ces articles partagés sur mon site.
- Est-ce que je les partage à la fin de certains articles (tous les 3-4 mois par exemple) ?
- Est-ce que je les laisse sur l’instance Shaarli sans les rapatrier ?
- Est-ce que je fais une petite section (sous le sommaire ?) dans laquelle je mets les liens (marqués comme top ?) un peu à la manière de Lord et son Blogroll ?
Je partirai bien sur la troisième idée en ne mettant que les derniers liens marqués comme top depuis le dernier article publié. Qu’en pensez-vous ?
ArchiveBox
Avant d’aborder l’autre moitié de l’article, il faut savoir que je suis assez maniaque sur certain points. Par exemple sur mon site, je ne pourrai supporter d’avoir un lien mort dans un article. Vous allez me dire qu’il existe plusieurs solutions: le cache de Google ou bien Archive.org. Mais que se passe-t-il si le lien n’est pas/plus dans le cache de Google ou bien que Archive.org soit down, bloqué ou censuré dans un pays ? On retombe dans le piège du lien mort.
Présentation
Ceux qui connaissent Archive.org vont très vite comprendre le fonctionnement d’ArchiveBox bien que ce soit légèrement différent. Concrètement, ArchiveBox prend une liste d’URL que l’on souhaite archiver et crée un clone HTML local, statique et navigable de ces pages Web. Il enregistre à la fois HTML, JavaScript, fichiers multimédias, PDF, images, etc.
La différence avec Archive.org est qu’il fonctionne à partir d’une liste d’URL (il n’y a pas de champ où renseigner une URL depuis le service), c’est à la fois un avantage et un inconvénient: ça évite le troll ou le spam des utilisateurs mal intentionnés, mais on ne peut pas ajouter une page à archiver directement depuis le service.
Son code source est disponible ici (miroir ici). Vous pouvez remarquer ma parano en ayant quasiment toujours un miroir du code source des outils que j’utilise.
ArchiveBox est écrit en python 3.5 et utilise des outils tels que:
- wget: un programme en ligne de commande de téléchargement de fichiers depuis le Web
- Chromium headless: littéralement Chromium sans tête comme le dirait Wikipédia, c’est en fait Chromium sans interface graphique
- youtube-dl: un programme en ligne de commande pour télécharger des vidéos depuis YouTube mais également de nombreuses autres plateformes
- pywb: un framework d’archivage et de capture en python
Son avantage est de stocker les données de façons statique, c’est-à-dire qu’il ne requiert pas d’avoir un serveur qui tourne en permanence et qu’il peut servir uniquement en ligne de commande pour sauvegarder/archiver le Web.
Installation
Je ne vais pas ici parler de l’installation avec Docker, mais sachez qu’une image Docker existe.
Commençons par installer les quelques dépendances: apt install python3 python3-pip git curl wget youtube-dl chromium-browser
.
Nous allons ensuite télécharger le logiciel: git clone https://github.com/pirate/ArchiveBox.git && cd ArchiveBox
. Libre à vous de rester sur la branche master ou d’aller sur le dernier tag posé (il date un peu cela dit).
Passons ensuite au sujet qui fâche: la configuration. Je ne suis vraiment pas fan de la façon dont la configuration de ce logiciel est gérée. En effet, celui-ci fonctionne à partir de variables d’environnements, un fichier de configuration serait pour moi bien plus simple à utiliser mais passons.
Je vous laisse donc gérer la configuration à partir de la documentation officielle. Le but est ensuite d’appeler le script ./archive
en lui donnant la liste des liens que l’on souhaite sauvegarder et il crée ou mets à jour le dossier statique /output/
(pour info, j’ai actuellement 245 pages sauvegardées pour 2.1 Go de données).
Si on utilise la configuration via variables d’environnements, pour archiver une seule page, la commande serait du type:
source ~/.ArchiveBox.conf && echo 'https://www.pofilo.fr/post/20190428-open-source-tools/' | ./archive
Nous verrons plus tard comment l’utiliser avec des flux RSS ou des listes d’URL.
Customisation
Les 2 points suivants sont des dirty fix que j’utilise moi-même pour me simplifier la vie, peut-être que ça peut également vous intéresser.
Archiver uniquement les nouveaux liens
Pour mon besoin personnel, j’ai besoin de faire une capture à un instant donné, mais je n’ai pas besoin d’avoir les versions modifiées de la page. Les raisons sont multiples: ne pas parser systématiquement toutes les pages sauvegardées, économiser un peu d’espace disque et ne pas multiplier les requêtes vers les sites à sauvegarder (économie de bande passante pour les sites à archiver notamment).
Théoriquement, le paramètre ONLY_NEW est là pour choisir de tout parser à chaque fois ou que les liens qu’il ne connaissait pas, mais il semblerait que cette option ne marche pas. J’avais alors créé une issue en précisant que j’avais un fix et que je pouvais créer une merge request si besoin. Finalement, il s’avérait que le mainteneur d’ArchiveBox l’avait probablement déjà corrigé dans une grosse mise à jour (passage à Django), je ne l’ai donc pas partagé.
Bref, voici un dirty fix qui byepassera la configuration mais qui ne sauvegardera que les liens qu’il ne connaissait pas, je vous laisse faire un cherry-pick si ça vous intéresse.
Configuration
Pour ne pas avoir de soucis d’environnement en cas d’archivage en tâche cron ou autre, j’ai hard-codé ma configuration dans le fichier ./archivebox/config.py
. J’en conviens que ce n’est pas propre, mais c’est plus pratique :)
Archiver c’est bien, mais quoi archiver ?
Personnellement, j’ai une liste sur mon Nextcloud dans lequel je répertorie les liens que je veux garder à tout jamais. Mais je souhaite également archiver les liens que je partage via l’outil Shaarli dont je vous ai précédemment parlé.
Voici donc la version simplifiée du script que j’appelle (pour l’instant manuellement mais ça marcherait sans soucis via une tâche cron):
#!/bin/bash
ARCHIVEBOX_PATH="~/ArchiveBox"
ARCHIVEBOX_BIN="./bin/archivebox"
# Nextcloud link containing the list of URL you want to archive
URL_MANUAL="replace-by-your-url"
# Shaarli RSS feed
URL_SHAARLI="https://links.pofilo.fr/?do=atom"
echo "--> Entering ${ARCHIVEBOX_PATH}"
pushd ${ARCHIVEBOX_PATH}
echo "--> Archiving ${URL_MANUAL}"
${ARCHIVEBOX_BIN} ${URL_MANUAL}
echo "--> Archiving ${URL_SHAARLI}"
${ARCHIVEBOX_BIN} ${URL_SHAARLI}
popd
echo "--> Done"
J’ai ensuite un lien symbolique entre /var/www
et le dossier ./output
généré. De plus, quand je donne la page RSS de Shaarli, il voulait par défaut archiver les pages Shaarli, j’ai pour pallier à cela (et à l’archive des pages YouTube) configuré la blacklist pour les exclure:
URL_BLACKLIST = r'http(s)?:\/\/(.+)?(youtube\.com)\/.*|http(s)?:\/\/links\.pofilo\.fr\/.*'
Voir plus loin
Pour chaque article publié sur Shaarli, vous pouvez voir une icône qui redirige vers l’archive de l’article vers archive.org. Pourquoi ne pas créer un plugin qui ferait la même chose vers une instance d’ArchiveBox ? De cette façon, chaque article que je partage serait automatiquement archivé et le lien serait accessible directement. Je ferai ça quand j’aurai un petit peu de temps :)
Conclusion
Bref, j’ai quitté les réseaux sociaux il y a quelques mois mais pour avoir un espace de partage (avec vous mais aussi le moi du futur), j’ai installé une petite instance de Shaarli. Et pour ma parano des liens morts ou des articles qualitatifs qui pourraient être indisponibles sur le Web (censure, fermeture du site …), j’ai mis en place une instance d’ArchiveBox qui grossit jour après jour (ça pourrait être un problème dans 10 ans, mais on se reposera la question).
Sur ce, je vous dis à la prochaine !