miércoles, 31 de octubre de 2012

Crea tus instaladores para Linux (Fedora, Ubuntu, etc) sencillamente



How to make a self-extracting installer for Linux (Fedora, Ubuntu and others) easily


¿Buscas facilidad para crear un instalador en Linux?

Esta entrada la tengo desde hace mucho en borrador, así que el día de hoy decidí terminarla y compartirla con ustedes. Muchas veces tenemos nuestros propios scripts, o programillas que no necesariamente se necesitan compilar o que funcione bajo gran cantidad dependencias,   y en tal caso necesitamos un instalador que funcione en todas las distribuciones. ¿Porque gastar en alternativas comerciales como Bitrock? ¿Porque complicarnos la vida creando un .deb o un .rpm?

Si alguien recuerda al famoso winrar, winzip de aquel sistema operativo privativo, para hacer programas autoextraibles déjeme contarle que en Linux podemos hacer algo similar y mejor sin utilizar software privativo, un ejemplo claro el instalador autoextraible de Yakito.

¿Porque no hacer un instalador autoextraible de nuestro fichero tar.gz con alguna gui?

A esto me refiero que este sea descomprimido en un directorio temporal y  un comando que sea ejecutado (normalmente el propio script de instalación del paquete) para realizar la copia del programa y sus partes a su respectivo destino. Si ha llegado a este articulo no es producto de la casualidad es probable que usted se haya preguntado lo mismo o este decepcionado al no poder crear un instalador similar.

Conocimientos básicos

Vamos a los pasos: Creamos nuestro script con las instrucciones para copiar y pegar las partes de nuestro programa o script, al directorio destino.


Como nuestro instalador autoextraible usará un directorio temporal en donde los archivos serán eliminados despues de haber sido copiados a su destino. El mayor énfasis es en las instrucciones que se le darán.


¿Cómo crear nuestro autoinstalador?


PASO 1

Creamos nuestro script instalador, el que le da las instrucciones; lo que debe copiar y a donde, de nuestro programa. Para ello podemos crearlo con gedit u otro editor de texto.

Desde una terminal:

gedit install.sh

Hacemos un copy y paste de lo siguiente:
Ojo.  cuando vea "#" aquí le explico los pasos a seguir, puede dejarlos para no perderse.

-----------------------------------------------------------------------------------------------------------------

#!/bin/bash

# Un titulo de bienvenida podriamos ponerle para que sea más visual, para
# ello utilizaremos zenity, yad etc .

zenity --info --title="Mi programa" --text="Bienvenido la Instalacion de Mi programa"

# Damos las instrucciones a nuestro programa; para copiar archivos,
#directorios completos, este tambien incluye la imagen para el ícono, que
#podria ser png o svg por sus capacidades de escalamiento no mayor de
#128*128.

#Si son directorios completos podemos utilizar una copia recursiva, ejemplo
#cp -R  angelica /usr/bin/   "Angelica es mi directorio no vacío que quiero copiar a la
#ruta /usr/bin/"

cp -f miprograma.sh /usr/bin/

cp -f imagendemilanzador.svg /usr/share/icons/

cp -R angelica /usr/bin/

#Crear el lanzador, este paso es muy sencillo, podemos hacerlo con un simple "echo"
#siguiendo la estructura de abajo reemplazando por nuestro programa.


echo "[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=Mi programa
Exec=/usr/local/bin/miprograma.sh
Comment=para lo que sirva tu programa este se usara por defecto
Comment[es]= para lo que sirva tu programa este se usara si detecta español
Icon=/usr/share/icons/imagendemilanzador.svg
Categories=GTK;Utility; " >> /usr/share/applications/Mi programa.desktop


# Le damos permisos a todo lo que se quiere ejecutar de nuestro programa.

chmod +rwxs /usr/bin/Mi programa.sh
chmod +x /usr/share/applications/Mi programa.desktop


# Le avisamos al usuario que ya se instalo el programa.  podríamos utilizar para que sea más visual, zenity, yad etc .

zenity --info --title="Mi programa" --text="La Instalacion a finalizado correctamente"

-----------------------------------------------------------------------------------------------------------------

PASO 2

Agregamos a nuestro comprimido tar.gz el instalador del paso 1 ya sea con "File Roller" o similar; es recomendable que nuestro comprimido no tenga un directorio principal o sea que este el tar.gz y dentro solo contenga las partes de nuestro programa y solamente si tuviera subdirectorios.




PASO 3

Creamos nuestro script Autoinstalador, puedes hacerlo con  gedit u otro editor de texto.

gedit autoinstalador.sh

-----------------------------------------------------------------------------------------------------------------

#!/bin/sh
echo ""
echo "AutoInstalador Mi programa 1"
echo ""

# Creamos un directorio temporal donde lo extraeremos, aquí no tocamos nada.
export WRKDIR=`mktemp -d /tmp/selfextract.XXXXXX`

#Cambiamos el nombre exacto de nuestro archivo comprimido tar.gz,  que podemos ver en negrilla

SKIP=`awk '/^miprograma.tar.gz/ { print NR + 1; exit 0; }' $0`


tail -n +$SKIP $0 | tar xvz -C $WRKDIR


PREV=`pwd`
cd $WRKDIR
sh install.sh


cd $PREV
rm -rf $WRKDIR

exit 0



# volvemos agregar el nombre exacto de nuestro archivo comprimido tar.gz

miprograma.tar.gz


-----------------------------------------------------------------------------------------------------------------

4 PASO

Creación del programa autoextraible, hemos llegado casi al paso final, ahora creamos el autoinstalador. Suponiendo que todo lo tienes en tu directorio personal home o haciendo cd /ruta/donde/esten, simplemente copiamos y pegamos lo siguiente.


cat autoInstalador.sh miprograma.tar.gz > instalador.sh


OJO instalador.sh se le puede cambiar el nombre, este es archivo final convertido en binario.


ULTIMO PASO

Las pruebas

Por lo general el problema se presenta en el paso 1, por mala programación de su creador, depende de usted.

Si necesita permisos de root o administrativos para copiar, instalar o ejecutar, no olvide incluirlos al script instalador.

Si el autoinstalador necesita para su ejecución permisos de administrador o root simplemente haga lo siguiente:

Fedora y similares

su -c 'sh instalador.sh'


Ubuntu y similares

sudo sh instalador.sh



Como un regalo, usted puede descargar el manual en pdf en cualquiera de los links de abajo:




DESCARGA DIRECTA

Reacciones:

6 comentarios:

  1. buenas tardes, que buen dato, oie disculpa ahi forma de descomprimirlo o sacar los archivos de el?

    ResponderEliminar
  2. wish21: Por lo que sé, tiene algún tipo de encriptacion, para evitar que alguien pueda incluirle algo (este es un instalador serio como los binarios de los controladores ati), para eso esta el código fuente, pero no veo lógico para que hacer lo que pides, si lo que necesitas es un archivo comprimido un tar.gz o 7zip etc. es lo mejor para vos, ya que podrás extraerlo o sacar los archivos.

    ResponderEliminar
  3. sabes como hacer para que el instalador muestre una ventada asi como el instalor de netbeans

    ResponderEliminar
    Respuestas
    1. Puedes hacerlo utilizando yad, que es una bifurcación de zenity con capacidad de incluir imágenes, y su respectiva barra de progreso...

      Eliminar
  4. Interesante, es como crear un instalador compatible con varias distros en vez de para una especifica. Es buena idea...

    ResponderEliminar
    Respuestas
    1. Existen otras alternativas mas adecuadas, si no que quiere algo tan genérico como fpm http://kuboosoft.blogspot.com/2014/04/crea-paquetes-rpm-y-deb-desde-cualquier.html

      Eliminar

Si comentas te pedimos por favor respeto y críticas constructivas referentes al título del articulo. Cualquier comentario para desviar el tema, spam o trolleo no será permitido. Gracias por comentar.