lunes, 12 de abril de 2021

Instalación de paquetes de Debian modificados

En algunas ocasiones algún paquete de Debian que necesitemos instalar puede tener algún fallo o alguna limitación. También es posible que no esté compilado con alguna función necesaria. En estos casos podemos descargar el código fuente, modificarlo, compilarlo e instalarlo. Mientras escribía el artículo Comunicación con Null Modem me encontré con que mgetty no podía funcionar a los 3 Mbaudios - 3 Mb/s que permiten algunos adaptadores USB/Serie porque la máxima velocidad que tiene en su lista de velocidades permitidas es 460800 baudios. Otros programas de comunicaciones serie como agetty o minicom permiten hasta 4 Mbaudios.

# mgetty -r -s 3000000 /dev/ttyUSB0
# cat /var/log/mgetty/mg_ttyUSB0.log

04/10 18:46:17 invalid port speed: 3000000: Invalid argument

No había nada más que impidiera que funcionara a la máxima velocidad de los adaptadores USB/Serie. Así que procedí a añadir esa velocidad a la lista. Lo primero que hay que hacer es comprobar que en el archivo de repositorios /etc/apt/sources.list está el repositorio de paquetes de código fuente.

deb-src http://deb.debian.org/debian/ buster main

A continuación se debe actualizar el listado de paquetes e instalar los paquetes necesarios para la compilación de paquetes de código fuente.

# apt-get update
# apt-get install build-essential fakeroot devscripts

Seguidamente se crea un directorio de trabajo donde descargar el paquete de código fuente y hacer la compilación.

# mkdir mgetty-source
# cd mgetty-source

Por último se descarga el paquete de código fuente y se instalan las dependencias necesarias para compilarlo.

# apt-get source mgetty
# apt-get build-dep mgetty

En el directorio se descargan dos archivos, un .tar.gz con el código fuente y un .dsc con información sobre el paquete. El archivo .tar.gz es automáticamente descomprimido en un directorio con el nombre y versión del paquete.

# ls -lh

total 1,2M
drwxr-xr-x 19 root root 4,0K oct  6  2018 mgetty-1.2.1
-rw-r--r--  1 root root 1,5K abr 10 19:23 mgetty_1.2.1-1.dsc
-rw-r--r--  1 root root 1,2M nov  3  2018 mgetty_1.2.1-1.tar.gz

Ahora se puede entrar en la carpeta del código fuente y hacer las modificaciones necesarias. Yo añadí la velocidad 3000000 a los archivos tio.c y gettydefs.c.

# cd mgetty-1.2.1

# vi tio.c

#ifdef B3000000
        { B3000000,3000000,"3000000"},
#endif

# vi gettydefs.c 

#ifdef B3000000
    { "B3000000", B3000000, CBAUD },
#endif

Una vez modificados los archivos se compila el paquete con el siguiente comando:

# debuild -b -uc -us

A partir de un paquete de código fuente se compilan varios paquetes binarios y se escriben en el directorio superior.

# cd ..
# ls -lh *.deb

-rw-r--r-- 1 root root 505K Apr 10 22:30 mgetty-docs_1.2.1-1_all.deb
-rw-r--r-- 1 root root 3.5K Apr 10 22:31 mgetty-fax-dbgsym_1.2.1-1_i386.deb
-rw-r--r-- 1 root root 139K Apr 10 22:31 mgetty-fax_1.2.1-1_i386.deb
-rw-r--r-- 1 root root  26K Apr 10 22:31 mgetty-pvftools-dbgsym_1.2.1-1_i386.deb
-rw-r--r-- 1 root root 128K Apr 10 22:31 mgetty-pvftools_1.2.1-1_i386.deb
-rw-r--r-- 1 root root  66K Apr 10 22:31 mgetty-viewfax_1.2.1-1_i386.deb
-rw-r--r-- 1 root root  19K Apr 10 22:31 mgetty-voice-dbgsym_1.2.1-1_i386.deb
-rw-r--r-- 1 root root 146K Apr 10 22:31 mgetty-voice_1.2.1-1_i386.deb
-rw-r--r-- 1 root root 176K Apr 10 22:31 mgetty_1.2.1-1_i386.deb

Solo instalé el paquete que me interesaba, mgetty_1.2.1-1_i386.deb.

# dpkg -i mgetty_1.2.1-1_i386.deb

Al instalar el paquete nos puede indicar que depende de otros paquetes que no están instalados. Si estos paquetes se encuentran entre los compilados los podemos instalar de igual forma con el comando dpkg. Si no están entre los compilados o preferimos que se bajen de los repositorios de paquetes binarios podemos ejecutar el siguiente comando:

# apt-get -f install

Después de instalarlo pude ejecutar mgetty con la velocidad de 3000000 baudios = 3 Mbaudios.

# mgetty -r -s 3000000 /dev/ttyUSB0

Al conectar con minicom se muestra la velocidad de 3000000 baudios.

Bienvenido a minicom 2.8

OPCIONES: I18n 
Puerto /dev/ttyUSB0, 23:09:06

Presione CTRL-A Z para obtener ayuda sobre teclas especiales

Debian GNU/Linux ttyUSB0 3000000 (DIRECT)
              
servidor2 login: usuario1
Contraseña: 
Último inicio de sesión:sáb abr 10 23:05:03 CEST 2021en ttyUSB0
Linux servidor2 4.19.0-16-686-pae #1 SMP Debian 4.19.181-1 (2021-03-19) i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
usuario1@servidor2:~$

Enviando un archivo usando ZMODEM comprobé que la velocidad de transmisión era de 289950 B/s = 2319600 b/s = 2,32 Mb/s. A lo que hay que sumar los datos de los protocolos de comunicación usados. En total la velocidad se acerca bastante al máximo teórico de 3 Mb/s que permitía el adaptador USB/Serie.

+--------[zmodem subida - Presione CTRL-C para salir]--------+                                  
|Sending: archivo-prueba                                     |                                  
|Bytes Sent:3422164   BPS:289950                             |                                  
|                                                            |                                  
|Transfer complete                                           |                                  
|                                                            | 
| LISTO: presione alguna tecla para continuar...             |                                  
|                                                            |                                  
+------------------------------------------------------------+

Esto es lo básico que hace falta saber para modificar paquetes. Se puede encontrar más información en la documentación de Debian. Informé del bug sugiriendo la ampliación de velocidad y espero que en las siguientes versiones las añadan y ya no sea necesario modificar el código.

No hay comentarios:

Publicar un comentario