Danielside

informática softwarelibre divagaciones música

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:


Archivado en categoría(s) Contenedores, XMPP

Enlace permanente



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.