PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

blog-libre : GitHub et la dernière release

samedi 9 mai 2020 à 07:01

Vous avez déjà essayé de récupérer la dernière release (version) d’un outil sur GitHub en ligne de commande ? Aujourd’hui c’est ce qu’on va tenter, aiguisez votre CLI, sortez votre chapeau d’explorateur, prévoyez des bandages ça va crapahuter dur (mais restez chez vous 😁️).

La carte

Dans toute chasse aux trésors, il y a une carte, la nôtre est l’API GitHub. On a même l’endroit exact où est le trésor. Dans un monde parfait tous les développeurs sur GitHub feraient ainsi.

Un magnifique « Latest release » et surtout **aucun numéro de version dans Assets**, à partir de là pour télécharger « toujours » la dernière release :
wget https://github.com/cheat/cheat/releases/latest/download/cheat-linux-amd64.gz

Vous venez de découvrir votre premier trésor, un kinder surprise. Vous sentez pas encore la sueur.

Les coordonnées

Pour récupérer un trésor, il faut connaître son emplacement, ici le numéro de version. On va prendre 3 exemples : ripgrep (api), fd (api), fzf-bin (api).

curl -s https://api.github.com/repos/sharkdp/fd/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\\1/' # v8.0.0
curl -s https://api.github.com/repos/sharkdp/fd/releases/latest | grep -Po '"tag_name": "\\K.*?(?=")' # v8.0.0
curl -s https://api.github.com/repos/sharkdp/fd/releases/latest | sed -n 's/.*tag_name":\\s"\\(.*\\)".*/\\1/p' | head -1 # v8.0.0
basename $(curl -Ls -o /dev/null -w %{url_effective} https://github.com/sharkdp/fd/releases/latest) # v8.0.0
curl -s https://api.github.com/repos/sharkdp/fd/releases/latest | jq -r '.tag_name' # v8.0.0
curl -s https://api.github.com/repos/junegunn/fzf-bin/releases/latest | jq -r '.tag_name' # 0.21.1
curl -s https://api.github.com/repos/BurntSushi/ripgrep/releases/latest | jq -r '.tag_name' # 12.0.1

Ouais mon gars on bourlingue et on croise les premiers obstacles, quel est le con qui a mis un v (pour version) dans v8.0.0 bordel ! Bon un coup de sed 's/^[[:alpha:]]//' et terminé mais heureusement qu’on est outillé.

L’Aventure

De nombreux aventuriers, débrouillards, casse-cous ont déjà tenté l’aventure. Tous ont laissé une trace, une idée à suivre. Évidemment on se plante, on arrive dans des culs-de-sac, les voyages forment la jeunesse.

curl -s https://api.github.com/repos/sharkdp/fd/releases/latest | jq -r '.assets[0].browser_download_url' # https://github.com/sharkdp/fd/releases/download/v8.0.0/fd-musl_8.0.0_amd64.deb
curl -fsSLI -o /dev/null -w %{url_effective} https://github.com/sharkdp/fd/releases/latest && echo # https://github.com/sharkdp/fd/releases/tag/v8.0.0

Plusieurs chemins, un même trésor. On peut le trouver de nombreuses manières et justement on va débroussailler à coup de grep, sed, awk, cut, jq, curl, wget. Pas que ce soit nécessaire de connaître tous les chemins mais un aventurier sans cicatrice c’est Dora l’exploratrice.

curl -s https://api.github.com/repos/sharkdp/fd/releases/latest | jq -r '.assets[] | select(.name | contains("fd_") and contains("amd64.deb")) | .browser_download_url' | wget -qi -
curl -s https://api.github.com/repos/BurntSushi/ripgrep/releases/latest | awk -F'["]' '/browser_download_url.*ripgrep_.*_amd64.deb/{print $(NF-1)}' | wget -qi -
curl -s https://api.github.com/repos/BurntSushi/ripgrep/releases/latest | grep "browser_download_url.*ripgrep_.*_amd64.deb" | cut -d '"' -f 4 | wget -qi -
curl -s https://api.github.com/repos/junegunn/fzf-bin/releases/latest | grep "browser_download_url.*fzf.*linux_amd64.tgz" | cut -d '"' -f 4 | wget -qi -
curl -s https://api.github.com/repos/sharkdp/fd/releases/latest | grep "browser_download_url.*fd_.*amd64.deb" | cut -d '"' -f 4 | wget -qi -

Le mieux est peut-être encore d’avoir une carte interactive avec livraison à la maison… non je déconne, on veut en baver, pas de repos pour les braves.

curl -s https://api.github.com/repos/sharkdp/fd/releases/latest | grep "browser_download_url" | cut -d '"' -f 4 | fzf | wget -qi -

Exploration

Je vous apprends rien en disant que les purs partent sans carte et sans coordonnées, seulement avec leur bite et leur couteau.

wget -q https://github.com"$(curl -s https://github.com/sharkdp/fd/releases | sed -n 's/.*href="\\([^"]*\\).*/\\1/p' | grep -m1 'fd_.*_amd64.deb')"
wget -q https://github.com"$(curl -s https://github.com/sharkdp/fd/releases | sed -n 's/.*href="\\(.*fd_.*_amd64.deb\\).*/\\1/p' | head -1)"
wget -q https://github.com"$(curl -s https://github.com/sharkdp/fd/releases | awk -F'"' '/fd_.*_amd64.deb/{print $2;exit}')"
wget -q https://github.com"$(curl -s https://github.com/sharkdp/fd/releases | grep -m1 'fd_.*_amd64.deb' | cut -d '"' -f 2)"

Un sudo apt install lynx et on est prêts à chevaucher un animal sauvage qui s’apprivoise aisément toutefois. Lynx est un navigateur web en mode texte. lynx -dump -listonly affiche la liste des liens (par défaut numérotés) d’une page, pour désactiver la numérotation des liens -nonumbers.

lynx -dump -listonly https://github.com/sharkdp/fd/releases | awk '/fd_.*_amd64.deb/{print $2;exit}'
lynx -dump -listonly -nonumbers https://github.com/junegunn/fzf-bin/releases | grep -m1 'fzf.*linux_amd64.tgz'
wget -q $(lynx -dump -listonly -nonumbers https://github.com/BurntSushi/ripgrep/releases | grep -m1 'ripgrep_.*_amd64.deb')

Magie blanche

grep -m1 # On sort de la recherche au premier résultat, sur les pages releases la version la plus récente est la première en partant du haut de la page
cut -d '"' -f 4 # On récupère le 4ème champ, le délimiteur est "
wget -qi - # On télécharge silencieusement -q depuis l’entrée standard -i -
awk -F'"' '/fd_.*_amd64.deb/{print $2;exit}' # On récupère le second champ print $2 des lignes matchant fd_.*_amd64.deb (fd_nimportequoi_amd64.deb), on sort de la recherche au premier résultat exit, le délimiteur est "
jq -r '.assets[] | select(.name | contains("fd_") and contains("amd64.deb")) | .browser_download_url' # Certains mystères ne doivent pas être dévoilés

La fin du voyage

Perso j’ai une préférence pour lynx (clair, simple, court et efficace avec le grep) donc j’utilise ces one-liners.

wget -q $(lynx -dump -listonly -nonumbers https://github.com/BurntSushi/ripgrep/releases | grep -m1 'ripgrep_.*_amd64.deb') && sudo dpkg -i ripgrep*.deb && rm ripgrep*.deb
wget -q $(lynx -dump -listonly -nonumbers https://github.com/sharkdp/fd/releases | grep -m1 'fd_.*_amd64.deb') && sudo dpkg -i fd*.deb && rm fd*.deb
wget -q $(lynx -dump -listonly -nonumbers https://github.com/junegunn/fzf-bin/releases | grep -m1 'fzf.*linux_amd64.tgz') && tar -xzf fzf*.tgz && rm fzf*.tgz && sudo mv fzf /usr/bin/fzf && sudo chown root: /usr/bin/fzf

À noter que parfois la release la plus récente peut être une alpha, beta, rc (release candidate)…, il suffit de rajouter | grep -v 'alpha\\|beta\\|rc' par exemple si on désire la dernière release stable.

Vous me direz pourquoi tout ça ? Pour l’aventure, pour s’amuser et apprendre, parce que je me demandais comment faire depuis un moment.

Gravatar de blog-libre
Original post of blog-libre.Votez pour ce billet sur Planet Libre.

Articles similaires

Paul Ezvan : Mise à jour de PostGIS problématique et Fedora

samedi 9 mai 2020 à 00:00

Pour quelques uns de mes projets de développement, j'utilise PostGIS, une extension de la base de données PostgreSQL qui permet de gérer des données géographiques. PostgreSQL et PostGIS sont régulièrement mises à jour, ce qui m'occasionne parfois de sacrés maux de tête. Danc cet article j’explique comment j’ai réussi à me sortir d’une mise à jour difficile à l’aide des outils fournis par Fedora et des conteneurs.

Ciel, une mise à jour

Un changement de version majeure de PostgreSQL n'est pas une opération triviale, car elle nécessite toujours de convertir les bases de données du système, la compatibilité du schéma étant cassée entre chacune de versions majeures.

L'utilitaire pg_upgrade est utilisé pour cela, mais il est un peu compliqué à utiliser. Heureusement certaines distributions proposent des outils pour simplifier cette mise à jour. Par exemple sous Debian, la mise à jour du paquet d'une version majeure vers une autre entraîne une conversion automatique de la base de données. Sous Fedora, ça n'est pas automatique, mais un utilitaire est fourni pour aider à la mise à jour.

Cela se complexifie avec PostGIS, comme on va le voir tout de suite. J'ai donc récemment mis à jour ma Fedora de la version 31 vers la version 32. Je décide de travailler un peu sur mon projet qui utilise PostGIS. Je tente de démarrer PostgreSQL.

% sudo systemctl start postgresql

Les soucis commencent

Mais j'obtiens une erreur.

-- L'unité (unit) postgresql.service a commencé à démarrer.
mai 08 14:14:05 gen3 postgresql-check-db-dir[50660]: An old version of the database format was found.
mai 08 14:14:05 gen3 postgresql-check-db-dir[50660]: Use 'postgresql-setup --upgrade' to upgrade to version '12'
mai 08 14:14:05 gen3 postgresql-check-db-dir[50660]: See /usr/share/doc/postgresql/README.rpm-dist for more information.
mai 08 14:14:05 gen3 systemd[1]: postgresql.service: Control process exited, code=exited, status=1/FAILURE
-- Subject: Unit process exited

Fedora 31 fournit la version 11 de PostgreSQL, et Fedora 32 la version 12. Le schéma de la version 11 étant incompatible avec la version 12, je dois mettre à jour le format de la base de données. Je m’exécute donc à l’aide de l’utilitaire postgresql-setup.

% sudo postgresql-setup --upgrade

Mais j’obtiens une erreur !

pg_dump: erreur : échec de la requête : ERROR:  could not access file "$libdir/postgis-2.5": Aucun fichier ou dossier de ce type
pg_dump: erreur : la requête était : SELECT

Le problème est le suivant. L'utilitaire fait un dump de la base. Comme celle-ci utilise la version 2.5 de PostGIS, PostgreSQL doit utiliser cette même version pour réaliser le dump. Malheureusement la version 3.0 est installée sur le système, et donc PostgreSQL ne peut pas réaliser l’opération.

Il nous faut donc installer la version 2.5 de PostGIS. On peut essayer de trouver si cette version antérieure de PostGIS n’est pas fournie par un autre paquet ?

% dnf provides "*postgis-2.5"

postgis-upgrade-3.0.1-2.fc32.x86_64 : Support for upgrading from the previous major release of Postgis
Dépôt               : @System
Correspondances trouvées dans  :
Autre  : *postgis-2.5

postgis-upgrade-3.0.1-2.fc32.x86_64 : Support for upgrading from the previous major release of Postgis
Dépôt               : fedora
Correspondances trouvées dans  :
Autre  : *postgis-2.5

On voit en effet que cette version est fournie par le paquet postgis-upgrade. Pratique ! Installons-le et recommençons.

% sudo dnf install postgis-upgrade
% sudo postgresql-setup --upgrade

De pire en pire

L’erreur initiale n’est plus là, mais cela échoue de nouveau, avec une erreur encore plus cryptique !

pg_restore: error: could not execute query: ERROR:  column s.consrc does not exist
LINE 28:             "replace"("split_part"("s"."consrc", ''''::"text...
                                            ^
HINT:  Perhaps you meant to reference the column "s.conkey" or the column "s.conbin".

Après quelques recherches, je réalise que c'est dû à un changement de schéma dans PostgreSQL, et que la solution est de mettre à jour PostGIS avant de mettre à jour PostgreSQL. Oui mais comment faire alors que je n’ai plus l’ancienne version de disponible ?

Les conteneurs à la rescousse

Une solution serait de lancer un conteneur de la version précédente de Fedora, d’y attacher le répertoire contenant les bases de données PostgreSQL, et d’y réaliser la mise à jour du module PostGIS.

Pour cela j’utilise podman de la façon suivante.

% sudo podman run -it --name pgsql-upgrade --rm --volume /var/lib/pgsql/:/var/lib/pgsql/ --security-opt label=disable fedora:31 bash

L'option security-opt permet au conteneur d'accéder au répertoire /var/lib/pgsql qui sinon serait bloqué par SELinux.

J'installe les paquet nécessaires.

# dnf install -y postgresql-server postgis

Il me faut une version plus récente de PostGIS que celle fournie dans Fedora 31 (2.5.1). J’ai de la chance, la version 2.5.4 est disponible sur Koji, le système de construction de paquets de Fedora.

Je la télécharge donc et l’installe.

# curl https://kojipkgs.fedoraproject.org//packages/postgis/2.5.4/1.fc31/x86_64/postgis-2.5.4-1.fc31.x86_64.rpm -o postgis-2.5.4-1.fc31.x86_64.rpm

# dnf install postgis-2.5.4-1.fc31.x86_64.rpm

Nouvelle astuce, il me faut installer les données de langue supplémentaires du système, car sinon le client psql va refuser de se connecter à ma base de données qui utilise la locale fr_FR.UTF-8.

# dnf -y swap glibc-minimal-langpack glibc-all-langpacks

Je change ensuite d’utilisateur vers l’utilisateur système utilisé par PostgreSQL.

# su - postgres

Je dois éditer la configuration du serveur PostgreSQL qui contient des entrées qui bloquent le démarrage de la base car certaines locales sont toujours manquantes sur le système.

% cp /var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/postgresql.conf.0

Je démarre le serveur de base de données.

% pg_ctl -D /var/lib/pgsql/data/ start

Je me connecte à la base à corriger, et je mets à jour l’extension postgis. À noter qu’il faut faire cette opération pour chaque base qui utilise PostGIS.

% psql yourdb
ALTER EXTENSION postgis update;
\\q

J'arrête le serveur et je restaure la configuration d'origine.

% pg_ctl -D /var/lib/pgsql/data/ stop
% cp /var/lib/pgsql/data/postgresql.conf.0 /var/lib/pgsql/data/postgresql.conf

Tout est bien qui finit bien

Je quitte mon conteneur. Je peux de nouveau lancer l’utilitaire de mise à jour de la base, cette fois avec succès !

% sudo postgresql-setup --upgrade
% sudo systemctl start postgresql
-- L'unité (unit) postgresql.service a commencé à démarrer.
mai 08 17:45:11 gen3 postmaster[200071]: 2020-05-08 17:45:11.174 CEST [200071] LOG:  démarrage de PostgreSQL 12.2 on x86_64-redhat-linux-gnu, co>
mai 08 17:45:11 gen3 postmaster[200071]: 2020-05-08 17:45:11.174 CEST [200071] LOG:  en écoute sur IPv6, adresse « ::1 », port 5432
mai 08 17:45:11 gen3 postmaster[200071]: 2020-05-08 17:45:11.174 CEST [200071] LOG:  en écoute sur IPv4, adresse « 127.0.0.1 », port 5432
mai 08 17:45:11 gen3 postmaster[200071]: 2020-05-08 17:45:11.178 CEST [200071] LOG:  écoute sur la socket Unix « /var/run/postgresql/.s.PGSQL.54>
mai 08 17:45:11 gen3 postmaster[200071]: 2020-05-08 17:45:11.182 CEST [200071] LOG:  écoute sur la socket Unix « /tmp/.s.PGSQL.5432 »
mai 08 17:45:11 gen3 postmaster[200071]: 2020-05-08 17:45:11.196 CEST [200071] LOG:  redirection des traces vers le processus de récupération de>
mai 08 17:45:11 gen3 postmaster[200071]: 2020-05-08 17:45:11.196 CEST [200071] ASTUCE :  Les prochaines traces apparaîtront dans le répertoire «>
mai 08 17:45:11 gen3 systemd[1]: Started PostgreSQL database server.
-- Subject: L'unité (unit) postgresql.service a terminé son démarrage

Le mot de la fin

Pour conclure, on peut noter que la mise à jour d'une base de données est une opération délicate, même sur une machine de développement !

Les conteneurs sont un outil efficace afin de pouvoir utiliser une version différente du système et corriger des potentielles erreurs avant la migration. Le paquet postgis-upgrade est aussi nécessaire pour réaliser une mise à jour d’une base de données PostGIS sous Fedora.

Gravatar de Paul Ezvan
Original post of Paul Ezvan.Votez pour ce billet sur Planet Libre.

Articles similaires

genma : Hygiène numérique - des outils Firefox fournis par Mozilla

jeudi 7 mai 2020 à 09:00

Firefox, c'est avant tout le nom du navigateur de la fondation Mozilla. C'est le nom de feu Firefox OS, le système d'exploitation pour smartphone. C'est aussi le nom pour différents outils en lignes d'hygiène numérique mis à disposition par Mozilla. Je reprends ici en une seule page la présentation succincte de ces éléments composants l'écosystème Firefox.

Firefox Browser

Firefox tel qu'on le connaît, dans la galaxie Firefox, devient dont le navigateur Firefox, Firefow Browser. Est-il utile de le présenter ;) ?

Firefox Monitor

Firefox Monitor vous prévient si vos comptes en ligne ont été concernés par des fuites de données connues. Vérifiez si vos informations ont été exposées à une fuite de données, sachez comment agir pour mieux protéger vos comptes en ligne et recevez une notification si vos données apparaissent dans une nouvelle fuite. Vous pouvez inscrire plusieurs adresses électroniques aux alertes de fuites avec un seul compte Firefox.https://monitor.firefox.com/user/dashboard
web">

Un Mode d'emploi de Firefox Monitor est disponible en ligne.

Firefox Monitor est une sorte de clone du site have i been pwned ?. Le but est d'indiquer les sites pour lesquels un mot de passe, associé à une adresse mail, est disponible dans la nature. Comme il est habituel d'utiliser le même mot de passe partout, que l'identifiant est la même adresse mail, si un tel couple "mail - mot de passe" est dans la nature, il y a de fortes chances de voir ses comptes compromis (piratés). C'est pour cela que l'hygiène numérique incite à avoir un mot de passe différent aléatoire par site, pour limiter ce type de risques...

Firefox Lockwise

Le gestionnaire de mots de passe Firefox Lockwise affiche des alertes sur des mots de passe potentiellement vulnérables car ayant été exposés lors d'une fuite de données. S'il est possible qu'un de vos identifiants enregistrés ait été exposé au cours d'une fuite de données, vous verrez cette alerte avec son identifiant associé. https://www.mozilla.org/fr/firefox/lockwise/

Il y a une documentation associée en ligne : Firefox Lockwise alerte des fuites de données des sites.

Lockwise est donc un coffre-fort numérique de mot de passe, un peu comme Keepass, qui présente l'avantage d'être synchronisé entre différents Firefox (sur son PC perso, sa tablette, son smartphone) via l'usage d'un compte Firefox et d'un mot de passe maître (une phrase de passe).

Firefox Send

Firefox Send, avec le chiffrement de fichier et la protection par mot de passe, vous permet d'envoyer des fichiers (de 1 Go à 2,5 Go) en toute sécurité. Lorsque vous mettez en ligne un fichier, Firefox Send génère un lien que vous pouvez partager avec votre destinataire. Vous avez également la possibilité de définir un mot de passe et de modifier les paramètres d'expiration pour plus de sécurité. Vos fichiers ne sont pas enregistrés dans le nuage (le cloud) – ils n'appartiennent qu'à vous. https://send.firefox.com/

C'est assez intuitif, il existe toutefois une page de support / présentation du service si besoin.

C'est une alternative pour un partage de fichier ponctuel à des outils non libre comme WeTransfer ou libre comme Lufi de Framasky, présenté sur la page du wiki Chatons.org - Le partage temporaire de fichiers. Ce n'est pas un outil comme non libre Dropbox, Google Drive, OneDrive ou libre comme Nextcloud, car il n'y a pas de synchronisation, ce n'est pas le but. Le but étant simplement l'envoi de gros fichiers volumineux, plutôt que de les envoyer par mail (que la taille permette de le faire ou non).

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Guillaume Kulakowski : firewalld VS docker

mercredi 6 mai 2020 à 22:52

Avec l’arrivée de Fedora 32, il y a eu des changements sur Firewalld. En effet, ce dernier passe maintenant par nftables. Le problème, comme évoqué dans le change, c’est qu’il y a des soucis avec Docker. Depuis ma migration sous Fedora 32, plus moyen de builder des containers car je n’arrive pas à atteindre les […]

Cet article firewalld VS docker est apparu en premier sur Guillaume Kulakowski's blog.

Gravatar de Guillaume Kulakowski
Original post of Guillaume Kulakowski.Votez pour ce billet sur Planet Libre.

Simon Vieille : Festival Le 1er jour d'après - Le numérique

mardi 5 mai 2020 à 15:13

Le "Festival 100% local et virtuel pour inventer Le 1er jour d'après", c’est réfléchir ensemble, imaginer et inventer un autre monde ainsi que recenser ce qui existe déjà, à notre échelle locale. C’est trouver et valoriser des solutions collectives, adaptées, à développer et mettre en place sans attendre. Événement organisé par l'association La Furiseuse, gérante du café-resto associatif et culturel Le Pixel à Besançon.

Festival 100% local et virtuel pour inventer Le 1er jour d'après - Organisé par La Furiseuse et Le Pixel

Le numérique est un enjeu sociétal important. Nous réalisons plusieurs constats qui doivent mener à une prise de conscience collective et permettre de changer en profondeur notre compréhension et nos usages du numérique.
Nous proposons quelques pistes de réflexions pour créer un numérique plus éthique et plus juste.

Participants : Alexis Gabry, Benjamin Lavigne, Fabien Normand, Simon Vieille

L'ensemble du festival est disponible sur Youtube.

Gravatar de Simon Vieille
Original post of Simon Vieille.Votez pour ce billet sur Planet Libre.