Software como servicio

Arrancar un software como servicio en Debian

En estos últimos capítulos hemos dedicado algún tiempo a algún software sobre la distribución de Linux Debian, primero hablamos de Wireguard, el fantástico servicio de VPN y luego de Nebula, un software para poder disponer de nuestra propia SDN.

No se si os acordaréis pero en la instalación de Nebula teníamos que arrancar a mano tanto en el servidor como en el cliente el propio Nebula, lo cual es terrible. Seguro que os gustaría muchísimo más que al arrancar ya estuviera Nebula corriendo solito, sin tener que hacer absolutamente nada.

Mi forma preferida de tener un software corriendo siempre es definirlo como servicio utilizando systemd en Debian que es la distribución que utilizo.

Así que el capítulo de hoy va a ir justo de eso, de definir servicios en systemd y vamos a definir el servicio de Nebula para poder hacerlo con algo concreto.

Pero antes de empezar quiero comentaros un pequeño cambio que he hecho en el podcast y que creo que puede ser muy interesante a nivel de usabilidad del contenido. A partir de este capítulo vais a poder encontrar capítulos que os van a permitir saltar a la parte del contenido que más os interese o saltaros aquello que no os interese en lo más mínimo.

Entiendo que vuestro tiempo vale mucho y no quiero obligar a nadie a navegar por el audio hasta que encuentre justo aquello que le interesa.

Los marcadores no están disponibles para todos aquellos que utilicéis iVoox tanto como podcatcher o a aquellos que estén suscritos al feed de iVoox, simplemente por una limitación de la propia plataforma, así que si queréis poder utilizar los marcadores os tendréis que suscribir directamente al feed de https://www.eduardocollado.com/podcast/feed, de todos modos tenéis un enlace en la parte derecha de la web donde poner «Suscríbete al podcast«.

Los podcatchers o clientes de podcast que lo soportan son muchos como Podcast Addict, Pocket Casts, Antennapod para Android u Overcast y el propio Pocket Casts para iOS, y muchos otros que no he podido ni probar o que ni se de su existencia, así que lo mejor es que miréis en vuestro podcatcher si disponéis de esta opción.

Donde seguro que no está la opción es en la app de iVoox y en cualquier app que utilice el feed de iVoox que aunque lo tengo oculto hay algo menos de 500 personas que lo usan según lo que me dice Podcast Addict. Además, el feed de iVoox sirve los audios a 64kbps mientras que en eduardocollado.com los sirvo a 128kbps y con capítulos. Ahora, el contenido es el mismo, así que si estáis contentos con iVoox seguid con la app, lo único que no podréis ir a la parte del audio que más os interese gracias a los capítulos ni podréis disfrutar de los 128kbps, aunque mi voz tampoco es que mejore enormemente al subir el bit rate.

Ahora no quiero entreteneros más o vamos a charlar sobre cómo crear servicios en Debian utilizando systemd, para ello crearemos el servicio nebula.

Si os interesa el tema y os queréis quedar conmigo un ratito recordad que esto es eduardocollado.com y que este es el capítulo 202, por cierto, hoy es 15 de Diciembre de 2019.

El otro día realizamos una instalación de Nebula que consistía básicamente en copiar un ejecutable en Debian y a crear un pequeño fichero de configuración.

El problema es que para ejecutarlo teníamos que poner en cada uno de los ordenadores que componían nuestra SDN:

./nebula -config /path/to/config.yaml

Y dejar el terminal abierto, algo terrorífico, lo ideal sería que pudiéramos poner algo del estilo

service nebula start

Eso sería lo idea, que funcionase como si fuera por ejemplo un servidor Apache, e incluso mejor, nos gustaría que arrancase solo, sin tener que hacer nada, pues eso se consigue gracias a los servicios.

Crear servicios en Debian no es tan complicado como mucha gente pueda pensar.

Lo que tendremos que hacer es crear un fichero llamado nebula.service, ahora si me estáis escuchando mirad el móvil, crearemos el fichero en el directorio /etc/systemd/system con el siguiente contenido:

[Unit]
Description=nebula
Wants=basic.target
After=basic.target network.target

[Service]
SyslogIdentifier=nebula
StandardOutput=syslog
StandardError=syslog
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/nebula -config /etc/nebula/config.yaml
Restart=always

[Install]
WantedBy=multi-user.target

Si estáis utilizando un podcatcher con capítulos ahora mismo estaréis viendo en vuestra pantalla el fichero en cuestión, si es un móvil en el móvil el fichero del que os hablo. La verdad es que esto de los capítulos es una pasada y nos permite hacer cosas como esta. Los que no estéis con un podcatcher, la app de escuchar podcasts, compatible ahora estaréis viendo seguramente la portada del podcast y tendréis que ir a las notas del programa en eduardocollado.com o en el propio podcatcher para poder ver el fichero que os digo.

Hay una cosa que he hecho para que quede más bonito y elegante, y es ejecutar Nebula desde /usr/local/bin, aunque el software realmente lo tenga en /etc/nebula, para ello simplemente un enlace simbólico:

ln -s /etc/nebula/nebula /usr/local/bin/nebula

Es importante crear el enlace simbólico y no copiar directamente el fichero nebula porque en el momento en el que se actualice nebula, que ese día llegará, es probable que no os acordéis de actualizar la copia de /usr/local/bin.

Y ahora simplemente nos quedará habilitar el servicio para que arranque a partir de ahora solo que lo haremos con:

systemctl enable nebula

Y arrancar el servicio por primera vez

service nebula start

Obviamente entiendo que antes de hacer esto habéis repasado que la configuración de nebula esté bien y lo habéis probado de la forma tradicional.

Sólo comentaros que hay un error que a mi me trajo de cabeza durante un rato largo y fue que me salía el error:

FATA[0000] no pki.ca path or PEM data provided 

Esto no era un error de nebula, como dice mi amigo Adrián no es la flecha sino el indio y este error era porque estaba tratando de ejecutar:

/usr/local/bin/nebula -config /etc/nebula/config.yml

Y claro estaba ejecutándolo mal porque el fichero config.yml no existe es config.yaml, así que a veces pequeños errores de typo como estos pueden hacernos perder la cabeza durante un buen rato.

Hasta aquí el programa de hoy, espero que os haya servido este pequeño recordatorio de administración de Linux y que os funcione correctamente todo el tema de los capítulos en el mp3 porque creedme que es un trabajo, creo que está bien invertido y le sacamos entre todos partido.

Sin más, despedirme de vosotros y nos volvemos a escuchar en el próximo capítulo.

Foto de Cosmin Paduraru en Pexels