Transformar un script casero en una aplicación con dpkg (*.deb)

[h]Como crear sencillamente un paquete “*.deb” para nuestros scripts caseros[/h]

https://www.wifi-libre.com/img/members/3/deb6.png

Al transformar un script casero en un paquete .deb; haremos que sea mucho mas parecido a un “programa”. :cool:
Se instalará en el sistema con su entrada en el menú de aplicaciones y con su pequeño icono para lanzar-lo con le ratón etc…
Hay otra gran ventaja a pasar por los paquetes *.deb: podemos automatizar la resolución de las dependencias.
Me explico : Cuando un script empaquetado ** .deb **necesita una librería o un paquete que no esta presente en el sistema huésped, el paquete ausente se instala automáticamente.
Esto dicho no vamos a ocuparnos de este aspecto en este tema ya que vamos a usar un script sencillo que no requiere dependencias.
No he hecho los deberes y no he leído nada al respecto a parte de este tema de 2008 : How to make a basic .deb
Muy fácil y suficiente con un poco de imaginación (y sobre todo mirando como están hechos un par de paquetes .deb :wink: )… nos vamos a apañar.
Si no habéis leído este tema - Crear una entrada en el menú Kali para integrar un script (y más) - podríais echarle un ojo : 90% de lo que se necesita para nuestro paquiete *.deb esta ya explicado ahí.

En ejemplo vamos a hacer ahorita mismo un paquete *.deb para el script bash tdn.sh y miraremos como esta hecho el paquete .deb de linSSID para copiarlo.

Descomprimo el paquete *.deb de linSSID con dtrx y este es el resultado :
https://www.wifi-libre.com/img/members/3/deb1.jpg

[h]Clonando la estructura de fichero[/h]

Hacemos nuestro paquete** deb** sobre la marcha apoyándonos en lo que tenemos bajo los ojos… [list=1]
]tenemos que crear una primera carpeta con el nombre del paquete (lo mismo que la primera carpeta del paquete linSSID). El nombre debería estar compuesto así : _<versión_mayor>.<versión_minor>-<revisión>. Asi que creo un directorio llamado tdn_1.0-0/]
]La carpeta contiene otra carpeta: usr (flecha roja en la imagen) Corresponde a la carpeta “usr” que tenemos en nuestra sistema. La ponemos porque lo que vamos a instalar se pondrá en la carpeta usr (“clonamos” la arborescencia de ficheros que necesitaremos). Así que creo una carpeta llamada “usr” en la carpeta tdn1.0-0 que acabo de crear/]
]Luego tenemos a dos carpetas (flechas verdes): share y bin. “bin” solo contiene el código de linssid. Nosotros no tenemos “binarios” pero un script bash, Así que no vamos a hacer una carpeta bin ya que no vamos a instalar nada en bin. Esta vez solo haremos una carpeta share/]
*]La carpeta share del paquete de linSSID contiene 4 carpetas : - applications : esta carpeta es fundamental porque contiene el fichero .desktop. Lo redactaremos enseguida para nuestro ejemplo (leer el tema Crear una entrada en el menú Kali para integrar un script (y más) para mas detales). Creamos entonces en nuestra carpeta “share” una carpeta llamada “applications
- doc : Como lo habéis imaginado esta carpeta sirve para integrar documentación, lo que no vamos a hacer,
así que pasamos de crear esta carpeta
- linssid : Haremos una carpeta tdn en su lugar que usaremos para poner el script tdn.sh y la licencia
- pixmaps : Es un directorio que tenemos en nuestra sistema y que sirve para alojar imagines para iconos.
Hacemos entonces un directorio pixmaps para poner el icono de tdn.sh/
]
[/list]
En resumen : tdn_1.0-0 > usr > share > Applications,tdn y pixmapshttps://www.wifi-libre.com/img/members/3/deb2.jpg

pasamos a la fase dos del proyecto : rellenar las carpetas creadas.

[h]Añadir el script, el icono y el fichero *.desktop[/h]

Ponemos el script tdn.sh en la carpeta tdn. (1)
Ponemos el icono en la carpeta pixmaps (2)
Ponemos el fichero tipo desktop en la carpeta “applications” (*)

[Desktop Entry] Version=1.0 Name=tdn GenericName=tdn Comment=Default WPS PIN Generator for TRENDnet TEW-818RU v1 (ac1900) and v2 (ac3200) Comment[es]=Generador de PIN WPS por defecto de los TRENDnet TEW-818RU v1 (ac1900) y v2 (ac3200) Comment[fr]=Générateur de PIN WPS par défaut des TRENDnet TEW-818RU v1 (ac1900) et v2 (ac3200) Type=Application Exec=bash -c "bash tdn.sh -h;${SHELL:-bash}" Icon=/usr/share/pixmaps/tdn_icone.png Path=/usr/share/tdn/ Terminal=true StartupNotify=false Categories=Network;
Y estamos listos para empaquetar : https://www.wifi-libre.com/img/members/3/deb3.jpg

[h]empaquetar en *.deb con dpkg[/h]

Tenemos que crear un directorio llamado “DEBIAN” en nuestra carpeta ráiz “tdn_1.0-0
Y redactamos un fichero de control básico que llamamos “control” en el directorio “DEBIAN” recién creado.

Package: tdn Version: 1.0-1 Section: base Priority: optional Architecture: all Maintainer: kcdtv <kcdtv78@gmail.com> Description: Generate the default WPS PIN for TRENDnet TEW-818RU v1 (ac1900) and v2 (ac3200)
Son “metadatas” que no tienen realmente muchísima importancia si hacemos esto para un uso personal.
Ahora creamos nuestro paquete *.deb con la herramienta dpkg.
Antes pasamos los permisos de ficheros a root para que se pueda instalar en otros sistemas que el nuestro :
Abrimos una terminal en el directorio que contiene nuestra carpeta tdn_1.0-0

sudo chown -R root:root tdn_1.0-0

Y creamos finalmente nuestro paquete *.deb así : dpkg-deb --build tdn_1.0-0
¡Misión cumplida! :cool:

[h]verificando el trabajo hecho [/h]

Para ver si ha bien funcionado lanzamos la instalación del paquete *.deb :

dpkg -i tdn_1-0.0

https://www.wifi-libre.com/img/members/3/deb4.jpg
No tenemos mensajes de errores y esto es una buena señal.,.
…Otra buena señal : nuestro icono aparece ahora en el menú “Internet” :slight_smile: : https://www.wifi-libre.com/img/members/3/deb5.jpg
Hacemos clic en el icono y no hay fallos. :)…

Esto es solo una forma minimista de hacer un paquete *.deb para algo casero y simple.
Unos pasos sencillos que dan otro toque a nuestras producciones personales.
Nuestro script casero que se lanzaba desde consola es ahora una verdadera aplicación al lado de firefox y wireshark :smiley: