perri.to: Un méli-mélo de choses

Les snaps, c'est facile

  2016-10-14


Les snaps, c’est facile et j’aime ça.

Bon, je sais ce que tu penses : ce type travaille pour Canonical, il est partial. Mais si tu demandes autour de toi, tu apprendras qu’en réalité je ne le suis pas ; j’ai été très critique envers Canonical par le passé et je suis le premier à l’admettre. Par exemple, même si j’aime les ppas, je déteste launchpad.

Il y a quelque temps, j’ai décidé que je voulais essayer caddy et que la meilleure façon de le faire, comme tout le reste sur mon serveur, était « à la manière de debian »™, alors je me suis lancé dans la pénible tâche de l’empaquetage et il a fallu laisser couler pas mal d’eau sous les ponts avant d’en arriver à la tâche de le maintenir. Récemment, j’ai écrit un outil qui me permet d’avoir un environnement facilement isolé pour caddy et donc de générer la base de code dont j’ai besoin pour publier chaque version comme nouvelle source du fichier deb.

Dans le cadre de mon auto-formation continue, et parce que c’était très facile, j’ai décidé d’essayer un snap pour sentir quelle était réellement la différence entre construire un snap et un deb. Pour le construire, j’ai utilisé snapcraft, qui est en gros la façon la plus simple de faire des snaps, et j’ai tiré parti du plugin go existant. Pour le moment, tout ce que fournit mon snap est le binaire caddy de base, mais voici ma liste de choses à faire :

  • Construire à partir d’un tag (nécessite une étape supplémentaire parce que caddy ne fait pas de vendoring).
  • Construire tous les plugins (je n’ai aucune idée de comment faire ça).
  • Inclure les scripts systemd.

Maintenant, après avoir essayé les deux méthodes, je vais exposer les faits et te laisser juger.

Ce que la construction du ppa a pris (et prend).

Note : ceci vaut pour la façon particulière d’empaqueter que j’ai choisie ; avec plus de debian-fu tu peux créer des paquets d’une autre manière qui ne se marie pas très bien avec go

  • Chercher un bon deux jours durant comment se fait un paquet debian.
  • Récupérer le code du projet et de toutes ses dépendances et l’exporter dans la structure de fichiers debian.
  • Écrire des fichiers spécifiques à Debian pour tout le reste dont j’avais besoin, comme les fichiers systemd et compagnie.
  • L’essayer dans un outil affreux, lourd et lent qui fait ça pour les fichiers debian (il fait en gros un debootstrap de tout un environnement, je crois).
  • Me battre avec « la manière de debian »™, qui exige l’empaquetage le plus insensé pour go et ses paquets et d’avoir le bon deb de go.
  • Pousser vers launchpad.
  • Découvrir comment obtenir que mon ppa s’y construise correctement.
  • Quelques échecs éparpillés et des choses de launchpad à configurer.

Ce que la construction du snap a pris.

  • lancer snapcraft init
  • Exprimer mes souhaits dans le fichier suivant.
    name: caddy-hduran
    version: '0.9.3'
    summary: The HTTP/2 web server with automatic HTTPS
    description: |
     Caddy is a lightweight, general-purpose web server for Windows, Mac, Linux, BSD and Android. 
     It is a capable alternative to other popular and easy to use web servers. (@caddyserver on Twitter)
     The most notable features are HTTP/2, Let's Encrypt support, Virtual Hosts, TLS + SNI, and easy 
     configuration with a Caddyfile. In development, you usually put one Caddyfile with each site. 
     In production, Caddy serves HTTPS by default and manages all cryptographic assets for you.
    
    grade: stable
    confinement: strict
    
    apps:
      caddy:
        command: bin/caddy
        plugs: [network, network-bind]
    
    parts:
      caddy:
        plugin: go
        go-importpath: github.com/mholt/caddy
        source: https://github.com/mholt/caddy
        source-type: git
        snap:
        - bin/caddy
  • lancer snapcraft (à ce stade j’ai déjà un paquet snap installable)
  • lancer snapcraft push caddy-hduran_0.9.3_amd64.snap (à ce stade j’ai mon snap sur le site des snaps sous mon nom enregistré en un processus à deux clics.
  • ajouter le fichier yaml au dépôt de fichiers debian mentionné plus haut, à la racine
  • le pousser.
  • cliquer un peu partout dans launchpad pour découvrir comment activer le snap et l’activer (à ce stade launchpad téléverse les builds de mon snap pour de nombreuses architectures vers mon namespace dans la boutique d’applications.

Donc, si je voulais seulement créer le paquet snap pour mon architecture et faire tourner caddy dans un environnement contraint, les 3 premières étapes suffisent. Tu n’as pas à me croire : télécharge simplement le yaml et lance snapcraft dans le même dossier ; tu obtiens le snap le temps qu’il faut pour récupérer le code et compiler, essaie-le, modifie-le, approprie-le-toi, savoure-le, moi je sais que je vais le faire, mes fichiers .deb touchent à leur fin :

Le monde a changé.

Je le sens dans l’eau.

Je le sens dans la terre.

Je le hume dans l’air (traduction de l’elfique).

Beaucoup de ce qui existait autrefois est perdu ;

car plus personne ne vit qui s’en souvienne.

– Cate Blanchett interprétant Galadriel (honnêtement je n’ai aucune idée à qui attribuer la paternité de la citation)