Compilar TDLib en equipos con pocos recursos

Compilar TDLib en equipos con pocos recursos

Hace poco, hablabamos de cómo compilar TDLib tanto para Linux como para Windows. Hace escasas horas, hemos descubierto como compilarlo a bajo nivel y con pocos recursos de hardware a lo que memoria RAM se refiere. Obviamente, al ser un compilado a bajo nivel, el proceso será mas lento, por lo que tardará más tiempo de lo habitual en cumplir su función.

En mi caso, he utilizado una placa Raspberry Pi 3 B+ la cual cuenta con 1GB de RAM que nos permite compilarlo de esta manera.

Índice

Creación de directorios previos

Para empezar con la compilación de TDLib necesitamos un espacio de trabajo, en este caso una carpeta de nuestra Raspberry.

Yo he utilizado el escritorio, ya que tengo instalado Raspbian con la versión Desktop. Situandonos en /home/nombre_usuario/, he creado una carpeta llamada test y dentro es donde trabajaremos la compilación, quedando como resultado algo similar a:

cd Escritorio
mkdir test
cd test

Preparación de espacio de trabajo

Una vez dentro de nuestro directorio test ya podemos empezar a trabajar para instalar las herramientas necesarias en este proceso.

Actualizando repositorios

Escribimos en la terminal:

sudo apt -y update

En el caso de no hayas instalado nada previamente, no deberá actualizar ningún paquete. En definitiva, recuerda usar sudo y no debería dar ningún error.

Instalando compilador y archivos necesarios

Ahora debemos instalar el compilador y componentes necesarios de la siguiente manera:

sudo apt install -y g++ ccache openssl cmake gperf make git libssl-dev libreadline-dev zlib1g zlib1g-dev

install-library-compilation-tdlib

¡Recuerda!

Cuando termine de instalar, verifica tu versión de openSSL, ya que para compilarlo correctamente necesitaremos tener instalada una versión igual o superior a 1.1.0g.
Puedes comprobar tu versión de openSSL de la siguiente manera:
openssl version

Clonando repositorio

En el mismo directorio en el que nos encontramos y donde lo dejamos anteriormente, es decir, /home/nombre_usuario/Escritorio/test, ejecutamos el siguiente comando para clonar el repositorio que lleva todas las herramientas.

git clone https://github.com/tdlib/td.git

Una vez se clone el repositorio, debemos acceder a la carpeta que nos autogenera, llamada td y dentro de esta hay que crear otra, llamada build, quedando como resultado:

cd td
mkdir build
cd build

Dentro de este directorio, ejecutaremos los comandos indicados más abajo, que se encargarán de precompilar toda la librería.

Compilando TDLib

Precompilación

Podemos acceder a TDLib Build Instructions donde podremos especificar que tipo de sistema estamos utilizando y cuales son las instrucciones recomendadas para compilar la libreria.

En este caso, utilizaremos la configuración que permite compilar TDLib en una Raspberry Pi 3B plus. Teniendo todo listo, y un poco de ganas, comenzaremos con la comprobacion de requisitos añadiendo el siguiente comando:

cmake -DCMAKE_BUILD_TYPE=Release ..

Una vez que termine de cargar los archivos necesarios, utilizamos el siguiente comando para precompilar todo.

cmake --build . --target prepare_cross_compiling

Una vez que termina de cargar todo, debemos regresar al directorio anterior. Ahora, es cuando debemos ejecutar el archivo .php de la siguiente manera:

cd ..
php SplitSource.php

Compilación

Cuando termine de hacer su labor, debemos volver a acceder a la carpeta build y ejecutamos el siguiente comando:

cd build
cmake --build . --target tdjson

compilacion-1

Este proceso es el que mas va a tardar, ya que es el que se va a encargar de compilar todas las extensiones. Cuando termine, utilizaremos el siguiente comando para comprobar que todo ha sido compilado correctamente. Este paso es opcional.

cmake --build . --target tdjson_static

comprobation-compilation

Para finalizar con la compilación, debemos deshacer un cambio del archivo php que utilizamos anteriormente de la siguiente manera:

cd ..
php SplitSource.php --undo

Inicialización del cliente

Bien, ya hemos compilado TDLib pero aun nos falta hacerlo funcionar. Para ello, creamos una nueva carpeta en /home/nombre_usuario/Escritorio llamada cliente y para hacerlo de manera rápida, lo hacemos de la siguiente manera:

cd /home/nombre_usuario/Escritorio
mkdir cliente
cd cliente

Ahora es cuando debemos copiar los archivos que hemos compilado a la carpeta cliente. Para ello, debemos situarnos en el siguiente directorio y ejecutar los siguientes comandos, siguiendo el mismo orden en el que se muestra:

cd /home/nombre_usuario/Escritorio/test/td/build
cp libtdjson.so /home/nombre_usuario/Escritorio/cliente
cp libtdjson.so.1.4.0 /home/nombre_usuario/Escritorio/cliente
cd /home/nombre_usuario/Escritorio/cliente

Una vez dentro del directorio cliente, en el terminal escribimos:

npm init -y
npm install tdl tdl-tdlib-ffi --save

Creando el cliente

Para crear el cliente, simplemente debemos ejecutar:
nano init.js y empezar a escribir nuestro código.

Como somos buenos y nos gusta compartir nuestro conocimiento, te dejamos una pequeña plantilla para que puedas empezar a manejar esta librería.

Cuando ejecutemos el archivo init.js, nos pedirá nuestro número de teléfono, el código de verificación que nos han enviado y en el caso de que tengamos activada la verificación en dos pasos, nos pedirá el codigo de dicha verificación. Posteriormente, te enviará la lista de todos los chats de tu cuenta.

const { Client } = require('tdl');
const { TDLib } = require('tdl-tdlib-ffi');
let tdlib = new TDLib('./libtdjson.so');

// API Developments Tools
// Obtener aquí https://my.telegram.org/auth
const client = new Client(tdlib, {
    apiId: ,
    apiHash:''
})

async function login(){
    await client.connect();
    await client.login(() => ({
        phoneNumber: 'codigopais + numero_telefono'
    }));
    
    cons