perri.to: Un mejunje de cosas

Los snaps son fáciles

  2016-10-14


Los snaps son fáciles y eso me gusta.

Ahora bien, ya sé lo que estás pensando: este tipo trabaja para Canonical, está sesgado. Pero si preguntás por ahí te vas a enterar de que en realidad no lo estoy; he sido muy crítico de Canonical en el pasado y soy el primero en admitirlo. Por ejemplo, aunque me gustan los ppas, odio launchpad.

Hace un tiempo decidĂ­ que querĂ­a probar caddy y que la mejor manera de hacerlo, como todo lo demás en mi servidor, era “a la manera de debian”™, asĂ­ que me embarquĂ© en la ingrata tarea del empaquetado y tuve que dejar correr bastante agua bajo el puente antes de llegar a la tarea de mantenerlo. Hace poco escribĂ­ una herramienta que me permite tener un entorno fácilmente aislado para caddy y asĂ­ generar el cĂłdigo base que necesito para publicar cada versiĂłn como el nuevo fuente del archivo deb.

Como parte de mi continua autoeducación, y porque era muy fácil, decidí probar un snap para sentir cuánta era la diferencia real entre construir un snap y un deb. Para construirlo usé snapcraft, que es básicamente la forma más fácil de hacer snaps, y aproveché el plugin de go existente. Por el momento, todo lo que provee mi snap es el binario base de caddy, pero acá está mi lista de pendientes:

  • Construir desde un tag (requiere algĂşn paso extra porque caddy no hace vendoring).
  • Construir todos los plugins (no tengo idea de cĂłmo hacer esto).
  • Incluir scripts de systemd.

Ahora bien, tras probar ambos métodos, voy a exponer los hechos y dejar que juzgues.

Lo que llevĂł (y lleva) construir el ppa.

Nota: esto es para la forma particular de empaquetar que elegí; con más debian-fu podés crear paquetes de una manera distinta que no se lleva demasiado bien con go

  • Investigar un buen par de dĂ­as sobre cĂłmo se hace un paquete de debian.
  • Descargar el cĂłdigo del proyecto y todas sus dependencias y exportarlo dentro de la estructura de archivos de debian.
  • Escribir archivos especĂ­ficos de Debian para todo lo extra que necesitaba, como archivos de systemd y demás.
  • Probarlo en una herramienta horrible, pesada y lenta que hace esto para los archivos de debian (básicamente hace un debootstrap de todo un entorno, creo).
  • Pelearme con “la manera de debian”™, que requiere el empaquetado más demencial para go y sus paquetes, y tener el deb correcto de go.
  • Empujar a launchpad.
  • Descubrir cĂłmo lograr que mi ppa se construyera ahĂ­ correctamente.
  • Un par de fallas salpicadas por ahĂ­ y cosas de launchpad para configurar.

Lo que llevĂł construir el snap.

  • correr snapcraft init
  • Expresar mis deseos en el siguiente archivo.
    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
  • correr snapcraft (en este punto ya tengo un paquete snap instalable)
  • correr snapcraft push caddy-hduran_0.9.3_amd64.snap (en este punto tengo mi snap en el sitio de snaps bajo mi nombre registrado en un proceso de dos clics.
  • agregar el archivo yaml al repo de archivos de debian mencionado antes, en la raĂ­z
  • empujarlo.
  • dar vueltas por launchpad descubriendo cĂłmo activar el snap y habilitarlo (en este punto launchpad está subiendo las builds de mi snap para muchas arquitecturas a mi namespace en la tienda de apps.

Así que, si solo quisiera crear el paquete snap para mi arquitectura y correr caddy en un entorno restringido, con los primeros 3 pasos alcanza. No tenés que creerme: simplemente descargá el yaml y corré snapcraft en la misma carpeta; obtenés el snap en el tiempo que lleva bajar el código y compilar, probalo, cambialo, apropiátelo, disfrutalo, yo sé que lo voy a hacer, mis archivos .deb están llegando a su fin:

El mundo ha cambiado.

Lo siento en el agua.

Lo siento en la tierra.

Lo huelo en el aire (traducción del élfico).

Mucho de lo que una vez fue, se ha perdido;

pues ya nadie vive que lo recuerde.

– Cate Blanchett interpretando a Galadriel (sinceramente no tengo idea a quiĂ©n atribuir la autorĂ­a de la cita)