Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

download_archive

Introduction

Gestion centralisée des fichiers et de leurs signatures, à utiliser pour tous les fichiers qui seraient normalement téléchargés sur différentes machines.

L'idée est de ne télécharger le fichier qu'une fois (sur la tower), tout en vérifiant sa signature, et en offrant un cache persistant.

Ce role n'est pas destiné à être utilisé directement dans un playbook mais utilisé dans un role.

Ce rôle cherche le fichier demandé dans le dépôt situé sur la tower et le télécharge si nécessaire. Aucune hypothèse n'est faite sur la nature du téléchargement; le fichier est sauvegardé tel quel.

Il expose ensuite la variable application_file_location qui contient le chemin du fichier sur la tower.

Dans les deux cas, la signature est vérifiée et le rôle échoue en cas de corruption. Les signatures supportées sont le hash sha256 et minisig.

Variables génériques

Le rôle s'attend à recevoir les variables suivantes :

  • application : nom de l'application (arbitraire mais doit être unique);
  • version : version de l'application (idem);
  • download_url : URL de téléchargement du fichier;
  • variant : [sha256|minisig] (défaut : sha256)

sha256

Variable spécifique :

  • application_checksum : hash sha256 à confronter au hash du fichier téléchargé.

minisign

Variables spécifiques :

  • download_url_sig : URL du fichier .minisig à télécharger.
  • key : clé publique associée à la signature.

⚠️ Si le nom du fichier à télécharger est file, le nom du fichier de signature doit être file.minisig.

⚠️ La signature inline n'est pas supportée (sera implémentée selon les besoins).

💡 Le système de signature s'appelle minisign, mais l'extension de signature est .minisig.

Exemple d'utilisation

- name: Download and verify reaction package
  # Vérifie le cache et la signature, (re-)télécharge si besoin
  import_role:
    name: download_archive
  vars:
    application: reaction
    version: "{{ reaction_version }}"
    # À préciser obligatoirement pour `minisign`
    variant: minisign
    download_url: "https://static.ppom.me/reaction/releases/{{ reaction_version }}/reaction_{{ reaction_version_deb }}_amd64.deb"
    download_url_sig: "https://static.ppom.me/reaction/releases/{{ reaction_version }}/reaction_{{ reaction_version_deb }}_amd64.deb.minisig"
    # La clé est normalement donnée par l'auteur·ice
    key: RWSpLTPfbvllNqRrXUgZzM7mFjLUA7PQioAItz80ag8uU4A2wtoT2DzX

- name: Fetch reaction package from tower
  copy:
    # Le playbook est supposé lancé depuis la tower, ainsi
    # on peut utiliser le chemin retourné, qui est de fait local
    src: "{{ application_file_location }}"
    # Chemin sur l'hôte distant 
    dest: "/tmp/reaction.deb"
    # Cas où le fichier existe déjà à l'identique : permet
    # de pousser le cache jusqu'au bout
    force: false
    mode: "0640"