Aller au contenu
English
Cloud medium

Installer feint : release vérifiée, Homebrew, mise ou conteneur

Read this page in English

11 min de lecture

Trois chemins mènent à feint, et ils ne servent pas le même besoin. L'image de conteneur ne demande rien à installer et convient à une CI ; le binaire vérifié est le chemin recommandé sur un poste, et le seul qui donne accès aux machines réelles ; l'action GitHub installe ce binaire dans un pipeline en vérifiant sa somme de contrôle avant de l'exécuter. Cette page détaille les trois, et la vérification d'intégrité qui va avec.

À la fin de cette page, feint version répondra v0.13.0 sur votre machine, installé par le canal qui correspond à votre exigence de vérification, et vous saurez le lancer comme service dans un pipeline.

  • Choisir le canal d'installation adapté à votre usage.
  • Vérifier qui a publié le binaire avant de lui faire confiance.
  • Lancer l'émulateur comme service dans GitHub Actions ou GitLab CI.
  • Savoir quand une nouvelle version est publiée, sans appel réseau imposé.
BesoinCheminMachines réelles
Essayer en une commandeImage de conteneurnon
Pipeline CI avec un serviceImage de conteneurnon
Pipeline GitHub Actions sans conteneurAction setup-feintnon
Poste personnel, en une commandeBinaire par Homebrewoui, avec Incus
Outils épinglés par projetBinaire par miseoui, avec Incus
Poste sensible ou machine partagéeBinaire de la release vérifiéeoui, avec Incus
Machines réelles, SSH, isolation OVNBinaire, quel que soit le canaloui

L'image ne fait tourner aucune machine, et c'est assumé : elle exécute feint serve --vm off, parce que les machines réelles sont une propriété du binaire sur un hôte Incus. Une image qui prétendrait le contraire serait la demi-vérité que ce projet refuse ailleurs.

Trois chemins mènent au même binaire, et ils ne vérifient pas la même chose. Le tableau ci-dessous dit ce que chacun contrôle avant de vous laisser exécuter le programme, parce que c'est le seul critère qui les sépare vraiment : ils installent tous la même version publiée.

CheminCe qui est vérifiéPour qui
Release vérifiéesignature Sigstore de la liste, puis somme de contrôle des octetsun poste sensible, une machine partagée, un runner
Homebrewla somme SHA-256 que la formule porte, pas la signatureun poste personnel, en une commande
miseles attestations de provenance GitHub, vérifiées à l'installationqui épingle déjà ses outils par projet

Téléchargez le binaire de la version, vérifiez qui l'a publié, puis vérifiez les octets. L'ordre compte : une somme de contrôle ne prouve rien si vous ne savez pas qui a produit la liste qui la contient.

  1. Récupérer les artefacts de la version.

    Fenêtre de terminal
    base=https://github.com/stephrobert/feint/releases/download/v0.13.0
    curl -fsSLO "$base/feint-linux-amd64"
    curl -fsSLO "$base/checksums.txt"
    curl -fsSLO "$base/checksums.txt.cosign.bundle"
  2. Vérifier la signature de la liste de sommes, avant de faire confiance à une seule ligne de son contenu.

    Fenêtre de terminal
    cosign verify-blob --bundle checksums.txt.cosign.bundle \
    --certificate-identity-regexp '^https://github\.com/stephrobert/feint/\.github/workflows/release\.yml@refs/tags/v' \
    --certificate-oidc-issuer https://token.actions.githubusercontent.com \
    checksums.txt

    La sortie attendue tient en deux mots : Verified OK. Toute autre réponse doit arrêter l'installation. Notez la précision du motif d'identité : il nomme le workflow de publication et le préfixe de tag, là où un motif large accepterait n'importe quel workflow du dépôt. Un dépôt compromis dont un workflow secondaire signerait un binaire ne passerait pas ce contrôle.

  3. Vérifier les octets contre la liste signée.

    Fenêtre de terminal
    sha256sum -c checksums.txt --ignore-missing

    Le résultat attendu est feint-linux-amd64: OK. Sans --ignore-missing, la commande échoue sur toutes les plateformes que vous n'avez pas téléchargées, ce qui ressemble à tort à un binaire corrompu.

  4. Installer le binaire et confirmer la version.

    Fenêtre de terminal
    install -m 0755 feint-linux-amd64 ~/.local/bin/feint
    feint version

    La sortie doit afficher v0.13.0.

Si vous préférez la provenance à la signature, gh vérifie quel workflow et quel commit ont produit le binaire :

Fenêtre de terminal
gh attestation verify feint-linux-amd64 --repo stephrobert/feint

Une image est publiée à chaque version, et elle sert le plan de contrôle seul. C'est le chemin le plus court : un service, un port, aucun binaire à installer sur la machine.

Fenêtre de terminal
docker run --rm -p 127.0.0.1:4599:4599 \
ghcr.io/stephrobert/feint:v0.13.0@sha256:d46639ac7c7a0fa2b6b69d0c5d74bdca0757e3124675563209e8ada58e6a6040
curl -s http://127.0.0.1:4599/_feint/health | jq -c '{status, machines}'
{"status":"ok","machines":"none"}

Dans un pipeline, l'image se déclare comme un service ordinaire, et aucun secret n'est à ajouter : c'est tout l'intérêt pour une équipe qui refuse de poser des identifiants cloud dans sa CI.

services:
feint:
image: ghcr.io/stephrobert/feint:v0.13.0@sha256:d46639ac7c7a0fa2b6b69d0c5d74bdca0757e3124675563209e8ada58e6a6040
ports:
- 4599:4599

Le runner retient les étapes jusqu'à ce que le contrôle de santé de l'image réponde, donc la première étape peut parler à l'émulateur immédiatement.

L'image se vérifie comme les binaires, avec la même identité de workflow :

Fenêtre de terminal
cosign verify ghcr.io/stephrobert/feint:v0.13.0 \
--certificate-identity-regexp '^https://github\.com/stephrobert/feint/\.github/workflows/release\.yml@refs/tags/v' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com

feint version --check demande à GitHub si une version plus récente existe, et affiche la commande pour l'installer. Deux principes gouvernent cette commande : rien ne part sur le réseau tant que le drapeau n'est pas tapé, et le binaire ne se met jamais à jour tout seul.

Fenêtre de terminal
feint version --check

Quand une version plus récente est publiée, la sortie donne la commande d'installation épinglée sur cette version précise. Elle nomme la version, jamais latest : une référence mutable télécharge ce qui est le plus récent au moment de l'appel, et ce contenu ne peut plus être confronté à la somme de contrôle écrite juste en dessous. Si vous êtes déjà à jour, la commande rappelle votre version puis conclut en une ligne :

v0.13.0
this is the latest release

Un binaire compilé depuis les sources porte dev, et une installation par go install porte une pseudo-version horodatée. Ni l'un ni l'autre ne se compare à une étiquette de version, donc l'outil annonce la dernière release sans prétendre que votre exemplaire est périmé.

  • Trois chemins : l'image pour essayer et pour la CI, le binaire pour un poste, l'action pour GitHub Actions.
  • L'image ne fait tourner aucune machine : les machines réelles restent une propriété du binaire sur un hôte Incus.
  • La vérification précède l'exécution : signature de la liste, puis sommes de contrôle, puis installation.
  • Le motif d'identité nomme le workflow de publication, pas seulement le dépôt.
  • Aucun latest : épinglez le tag, et le digest dans un pipeline.
  • feint version --check ne sort sur le réseau que si vous le demandez, et ne met jamais à jour tout seul.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn