Compilar scripts de Nullsoft Scriptable Install System – NSIS en Linux

Muchos conoceréis NSIS, un sistema open source de creación de instaladores para aplicaciones de Windows mediante scripts.

Es un sistema cómodo, ya que una vez tenemos definido el script de nuestro instalador es muy rápido generar los binarios, pero al estar dirigido a sistemas operativos Windows, los únicos binarios que se distribuyen desde su sitio web son aquellos compilados para dicho sistema operativo.

A priori podría no suponer un problema, pero ¿qué pasa si queremos automatizar la creación de dichos instaladores en un servidor de integración continua y este tiene instalado un sistema operativo Linux?

En este artículo explicaremos los pasos a seguir para poder instalar NSIS en Linux permitiéndonos así compilar cualquiera de los scripts que tengamos ya creados.

Las pruebas se han realizado en un Debian 6 de 64 bits, pero deberían funcionar igualmente en otras distribuciones.

DESCARGAR NSIS:

Lo primero que vamos a hacer es descargar el paquete zip y el código fuente de la última versión de NSIS. Ambos dos se pueden conseguir en su página de sourceforge: https://sourceforge.net/projects/nsis/files/?source=navbar

En el momento de escribir este artículo, la última versión estable es la 2.46, así que habrá que descargar nsis-2.46.zip y nsis-2.46-src.tar.bz2. Los ponemos los dos en una carpeta en la que los usuarios que lo necesiten vayan a tener acceso. Nosotros lo vamos a poner en /home/calat/nsis.

Una vez en esa carpeta los descomprimimos los dos.

REQUISITOS:

Ya tenemos el código fuente y los archivos precompilados para Windows. Ahora, para compilarlo en Linux, la documentación de NSIS indica que necesitaremos las siguientes herramientas.

  • Python versión 1.6 o superior. Nosotros usamos la 2.6.6
  • Scons versión 0.96.93 o superior. Esta aplicación puede ser descargada de su página oficial: http://www.scons.org/download.php
  • Un compilador de C, en nuestro caso gcc y g++

Todas estas herramientas pueden ser instaladas fácilmente desde repositorio, y probablemente alguna de ellas ya esté en el sistema.

El instalador de scons viene en formato RPM, por lo que podría ser un poco problemático (tampoco mucho) instalarlo en sistemas que no estén basados en Ubuntu. Para Debian usamos la herramienta alien (aptitude install alien) que permite convertir paquetes RPM en paquetes DEB mediante la ejecución de un sencillo comando: alien -k nombre_del_fichero.rpm

COMPILAR NSIS:

Una vez todos los requisitos están claros nos disponemos a compilar el binario de NSIS que se encarga de interpretar los scripts, el llamado makensis.

Nos situamos dentro del directorio de código fuente, en nuestro caso /home/calat/nsis/nsis-2.46-src y ejecutamos el siguiente comando:

scons SKIPSTUBS=all SKIPPLUGINS=all SKIPUTILS=all SKIPMISC=all NSIS_CONFIG_CONST_DATA=no PREFIX=/directorio/donde/se/ha/extraido/el/zip install-compiler

Es importante fijarse que install-compiler es un parámetro que va al final, y no es parte de la ruta del directorio deonde se ha descomprimido el zip.

Si usamos las rutas del ejemplo, nuestro comando quedaría así:

scons SKIPSTUBS=all SKIPPLUGINS=all SKIPUTILS=all SKIPMISC=all NSIS_CONFIG_CONST_DATA=no PREFIX=/home/calat/nsis/nsis-2.46 install-compiler

La ejecución de este comando compilará el código, generando el binario de makensis en el directorio bin dentro del directorio en el que estamos, es decir, en /home/calat/nsis/nsis-2.46/bin

Si al ejecutar el comando se produjera el error sh: o: command not found eso es porque no hay un compilador de C correctamente instalado.

CREAR UN INSTALADOR:

Ahora que ya tenemos makensis correctamente instalado para Linux es hora de probara compilar un script de NSIS. La sintaxis es la misma que en Windows, por lo que si nos situamos en el directorio bin donde se ha generado el binario (en nuestro caso /home/calat/nsis/nsis-2.46/bin) la ejecución sería de la siguiente manera.

./makensis /ruta/al/script.nsi

¡Atención! Al ejecutar el comando anterior podría producirse este error:

Error: opening stub "/home/calat/nsis/nsis-2.46/share/nsis/Stubs/zlib
Error initalizing CEXEBuild: error setting default stub

Esto se debe a un fallo en las rutas, pero la solución es bastante simple, basta con situarse en el directorio raíz de NSIS (en nuestro caso /home/calat/nsis/nsis-2.46) y crear la carpeta share (mkdir share), entrar en esa carpeta y dentro crear un enlace ejecutando el comando ln -s /home/calat/nsis/nsis-2.46 nsis.

Esto resolverá el problema.

Con estos sencillos pasos tendremos un sistema de creación de instaladores para Windows en un servidor Linux y podremos programar el paquetizado y despliegue desde nuestro servidor de integración continua.

Anímate a compartir con nosotros tus inquietudes y experiencias.

A %d blogueros les gusta esto: