BookinglyTech News
Software

Guix: guía para escribir un servicio propio desde cero

Un usuario que migra sus máquinas de NixOS a Guix documenta cómo construyó su primer servicio personalizado para Caddy, desde el tipo de servicio hasta el daemon en Shepherd.

2 min de lecturaLobsters0 vistas

GNU Guix no incluye Caddy como servicio, y esa carencia ha acabado en un tutorial que explica paso a paso cómo escribir un servicio propio. El texto está pensado para quien acaba de llegar a Guix y todavía no tiene claro qué es un servicio ni cómo se declara en Scheme.

El autor lo cuenta desde su propia migración: está pasando sus máquinas de NixOS a Guix y empezó por un VPS con tres funciones —servidor de correo, servidor de WireGuard y proxy inverso para no exponer la IP de casa—. En el correo usa exim y dovecot porque postfix no está en el canal oficial de Guix, y para el proxy quiere Caddy, que tampoco viene como servicio. Ahí estaba la excusa perfecta para dejar de depender del catálogo y aprender a definir el suyo.

Tipos de servicio, no solo daemons

La pieza repasa la definición que da la documentación: un servicio es algo que extiende la funcionalidad del sistema operativo. Suena vago porque abarca mucho. Puede ser un daemon en segundo plano, que es el caso más visible, pero también un proceso que se ejecuta una sola vez —crear cuentas, copiar ficheros al store— o una tarea recurrente al estilo cron. En la práctica es la primitiva con la que Guix configura el sistema de forma declarativa.

La analogía que usa para explicarlo: el tipo de servicio es el plano, y el procedimiento service lo instancia. Si no se le pasa un valor, se aplica el que venga definido por defecto en ese tipo. La parte que más le interesa al autor es que los servicios se pueden extender entre sí, tanto hacia arriba como hacia abajo, algo que considera el punto fuerte del diseño.

Cuatro pasos y un daemon

El plan que propone es deliberadamente modesto: definir un servicio vacío y conseguir habilitarlo, crear el usuario y el grupo del daemon, colocar el fichero de configuración de Caddy donde toca y configurar Shepherd para lanzarlo en segundo plano. El propio autor avisa de que el resultado no es elegante: buena parte de las opciones van escritas a mano y el servicio no está listo para distribuirse. La idea es que funcione antes que refactorizarlo.

Como requisito previo solo pide tener el paquete de Caddy disponible, algo que cuando escribió el artículo no ocurría en el repositorio de Guix —el equipo trabajaba en ello—, y un conocimiento básico de Scheme, sin necesidad de ser un experto. Para los detalles de configuración declarativa remite al manual de Guix.

Lo interesante para quien administra sistemas es el encuadre: casi todo lo que se ejecuta en una máquina acaba siendo una combinación de tres cosas —declarar usuarios, gestionar ficheros de configuración y arrancar un daemon—. Una vez que se entiende cómo se encadenan esas piezas en Guix, el catálogo oficial deja de ser un límite. El autor ya avanza que piensa refinar su servicio y que, si se anima, podría proponerlo al repositorio.