Contenedor telegram con Buildah y Podman
Por razones que explica muy bien Oliver Liebel en su magnífica biblia sobre contenedores, la cual estoy digiriendo poco a poco (1700 páginas) Docker bien podría formar parte del pasado.
Podman es una herramienta para crear contenedores sin daemon (Docker necesita un proceso daemon), que permite contenedores rootless, y basado en el estándar Open Container Initiative.
Solo aquéllo que está basado en estándares acordados por todos los actores implicados tendrá vocación de perdurar. Nunca me gustó especialmente Docker, por razones que tampoco podría argumentar en profundidad. Indudablemente es un actor muy importante y son los que lanzaron definitivamente los contenedores «al estrellato», pero parece que otros están tomando el relevo.
En cuanto a Kubernetes (el orquestador por excelencia), ya que admite contenedores OCI por defecto usando CRI-O, creo que Podman ha venido para quedarse.
Buildah es una herramienta que facilita la creación de imágenes OCI, y por tanto imágenes que se van a poder ejecutar con Podman.
En mi servidor virtual tengo un proceso que viene a representar el ejemplo perfecto de un microservicio. Se trata de un cliente telegram en modo consola que estoy usando como puente entre Conversations/Prosody y Telegram. Actualmente se está ejecutando en un contenedor LXC, pero estaba interesado en algo más ligero, un auténtico contenedor y no una «máquina virtual ligera» como al final es LXC.
El proceso Telegram hace varias cosas:
- Escucha en un puerto, de manera que con netcat puedo enviarle comandos de forma remota para enviar mensajes a los contactos.
- Redirige, gracias a una librería LUA, los mensajes recibidos a Prosody/Conversations (o por supuesto cualquier otro cliente XMPP).
- Recibe elementos multimedia telegram y los pone a disposición de Prosody (al menos funcionan las imágenes)
- Permite recibir imágenes desde XMPP para enviárselas a los contactos de Telegram
Todas estas funcionalidades conllevan tanto extensiones de Prosody como de Telegram-cli que iré configurando poco a poco en el nuevo contenedor, pero por ahora me interesaba crear un contenedor con Telegram que pudiera usar de forma interactiva (para ir abriendo boca, solo estoy explorando Podman).
La mejor manera que he encontrado de jugar con Podman y Buildah es usando Red Hat Enterprise 8 usando una licencia gratuita de desarrollador. RedHat es un actor muy bien posicionado en Kubernetes y contenedores y usando RHEL 8 todo funciona perfecto. Otra opción sería utilizar Debian 11, ya que en esta versión Podman y Buildah vienen en los repositorios (aunque esto no lo he probado).
Como se explica en Getting started with Buildah, esta herramienta me ofrece la posibilidad de utilizar cualquier lenguaje de scripting para crear las imágenes, en este caso simplemente Bash. Esto me permite expresar la construcción de una imagen de un contenedor con Telegram en Debian 8. Aquí va el primer intento:
#!/usr/bin/env bash
set -o errexit
telegram_user=telegramd
telegram_home=/home/$telegram_user/tg
container=$(buildah from debian:jessie)
buildah config --label maintainer="Danielside <danielside@posteo.net>" $container
buildah run $container apt update
buildah run $container apt install -y --no-install-recommends ca-certificates git apt-utils libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev build-essential git dropbear sendxmpp
buildah run $container useradd --create-home --system --shell /bin/bash $telegram_user
buildah run $container git clone --recursive https://github.com/vysheng/tg.git $telegram_home
buildah config --workingdir $telegram_home $container
buildah run $container ./configure
buildah run $container make
buildah config --entrypoint $telegram_home/bin/telegram-cli $container
buildah commit --format docker $container telegram:latest
Este script utiliza los subcomandos de buildah para crear un contenedor basado en debian jessie (la versión más reciente de Debian en la que he conseguido compilar telegram-cli), instalar las dependencias necesarias para la compilación, bajarse el código y compilarlo. El punto de entrada del contendor será el propio cliente de telegram.
El comando final buildah commit
permite generar una nueva imagen basada en debian jessie, a la que llamaremos telegram, etiquetada como latest. Crear la imagen es ahora tan sencillo como ejecutar ./buildah_telegram.sh
.
Y esta imagen nueva será la que usemos como base para el contenedor telegram. Después de terminar el script y haber realizado el commit deberíamos ver la imagen:
Vemos la imagen original de debian jessie y la imagen creada a partir de la primera. Esta imagen podría llevarla a un registro de imágenes (público o privado) y usarla en cualquier otro servidor para crear el contenedor a partir de la misma.
Ahora creamos el contenedor con podman run -i -t --name telegram1 localhost/telegram
y vemos como enseguida tenemos la pantalla de autenticación de telegram-cli:
Y después de autenticarme ya estoy usando el cliente:
Perpetrado el 23 de agosto de 2021 por una IN (Inteligencia Natural), la mia, con cierto esfuerzo.
Archivado en categoría(s) Contenedores, XMPP
Deja una respuesta