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)