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
- Creacion de directorios previos
- Preparación de espacio de trabajo
- Compilando TDLib
- Inicialización del cliente
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
¡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
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
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