Script para portabilizar aplicaciones linux

Hola amigos, en esta ocasión les presento este script desarrollado por mí para ayudar a portabilizar aplicaciones linux. Es una forma bastante fácil que permitirá «portabilizar» nuestras aplicaciones y poder así compartirlas un poco  en la comunidad o los amigos sin termor a que falten dependencias.

¿Cómo funciona?

Creas una carpeta con un ejecutable linux cualquiera no script sino ejecutable compilado, entras en la carpetapor la terminal o por el gestor de archivos das abrir terminal aquí y corres en esa misma carpeta copylibrerias que es el script. Luego este detectará las dependencias y las copiará en la misma carpeta, para que no falte ninguna haga varias pasadas del script, por lo menos ejecútelo 4 veces sobre la misma carpeta pues el detecta las bibliotecas de las bibliotecas copiadas.

Hecho esto toca el turno a de hacer un script bash que corra el ejecutable y busque las bibliotecas en este directorio para ello sobreescriba la variable PATH del sistema y LD_LIBRARY_PATH además de XDG_DATA_DIRS para los shares a la misma carpeta.

Luego se hace un auto estraíble o bien se distribubuye la aplicación en un tar.gz

 

!/bin/bash

function depend() {
for t in ldd "$1" |cut -d ">" -f2|tr "\t" " ";do
cp -v $t "pwd" 2>/dev/null
done
}
for x in ls;do
echo "Leyendo $x"
depend $x
done

rm ./libc.so.6
rm ./libdl.so.2
rm ./libpthread.so.0

 

Aquí hay un ejemplo de script que carga una app

 

!/bin/bash

export PATH=pwd./:$PATH
export LD_LIBRARY_PATH= `pwd`
:./:$LD_LIBRARY_PATH
`pwd`/MiApp

¿Te resultó interesante? Compártelo ...



haylem

Publicado por haylem

Facebook » Google+ » Forma parte de GUTL desde el 9 diciembre, 2013. Me gusta la programación y la electrónica. Me encanta el soft libre y los sistemas que enseñan a trabajar. Me gusta buscar en lo dificil y aprender cosas nuevas. Nací el 4 de Nov 1988 y vivo en el vedado.

Este artículo tiene 11 comentarios

    • si la conozco es muy buena y la estoy usando de hecho quiero hacer una utilidad para crear appimages de forma grafica pero de esta manera no se necesita nada mas instalado en el sistema, anto flatpak, snap como appimage si, en el caso de appimage necesita fuseiso y en algunas distros no viene por defecto instalado puesto que paraque un appimage funcione tiene que montarse sin privilegios de root como un usuario normal y eso lo hace el modulo de fuse si esta instalado, de entrada creo que un sistema base debian no preinstala fuseiso, y en linux para montar normalente es con mount como root para eso se creo fuse para que los usuarios pudieran montar dispositivos sin privilegios especiales

      • ahora estoy terinando una utilidad para crear paquetes debian que mas adelante puede que use este script y luego crea un deb

        • enonces si instalo un escritorio ligero como wmaker no me instalara fuseiso, ya hice la prueba luego de instalar el sistema base de debian para crear una instalacion ligera y asi probar los appimages asegurandome que no hay nada mas instalado, esto es necesario porque si ya tenia instalado gtk la aplicacion funcionaria pero si faltara alguna libreria no me enteraria facilmente, para crear este tipo de cosas es necesario una instalacion virgen sin nada de lib gtk ni qt ni nadade eso, solo las X un gestor de ventanas y la terinal y correr os appimages desde alli para saber si no faltan dependencias en otro sistema

      • Hola Haylem,
        FuseIso ya no es necesario solo que «Fuse» el cual si viene por defecto en la mayoria de las distribuciones o puede ser facilmente instalado. Aparte de esto no necesitas m’as nada para poder usar un AppImage. Adem’as hace tiempo (+2 a~nos ) que AppImage usa squashfs como sistema de archivo para almacenar la aplicaci’on en si.
        Respecto a crear AppImages de forma grafica, revisa el proyecto https://github.com/linuxdeploy quizas te puedas colaborar escribiendo recetas para crear AppImage para otras tecnolog’ias.

        • hasta hace un tiempo usaba appimageassistant el cual a dia de hoy si me muestra los iconos en los appimages no asi qtdeploy ni los otros, probablemente sea por algun daemon como appimaged que requiera para poder detectar los iconos correctamente… lo cierto es que appimageassistant si mem uestra los iconos quiza porque las imagenes iso ya estan bien soportadas con todas sus caracteristicas en la mayoria de filemanagers

          • Hola,
            Creo que deb’i presentarme desde un primer momento. Soy desarrollador del proyecto AppImage (por eso la insistencia 😀 ). Si deseas que todas tus AppImage tengan iconos te recomiendo uses uno de estos thumbnailers.

            https://github.com/azubieta?utf8=%E2%9C%93&tab=repositories&q=thumbnailer&type=&language=

            Si usas appimaged los thumbnails son generados de manera autom’atica, nada m’as que KDE y creo que Gnome tambien ignoran el estandar de freedesktop que ellos mismos escribieron.

            Respecto a la creaci’on de AppImage. No se recomienda utilizar appimageassistant en proyectos nuevos. Su desarrollo est’a congelado y no recive actualizaciones o correcciones. En su logar se recomienda utilizar linuxdeploy (https://github.com/linuxdeploy). Este ya provee una serie de plug-ins para generar AppImage a partir de differentes tecnologias como qt y python.

            Igual si tienes m’as preguntas eres bienvenido al canal de freenode #appimage.

            Saludos

  1. Esto es una actualizacion al script

    #!/bin/bash

    function depend() {

    for t in ldd "$1" |cut -d ">" -f2|tr "\t" " ";do
    cp -v $t «pwd» 2>/dev/null
    done
    }

    for x in ls;do
    echo «Leyendo $x»
    depend $x
    done

    rm ./libc.so.6
    rm ./libdl.so.2
    rm ./libpthread.so.0

    rm ./libtinfo*
    rm ./libm.so.6
    rm ./libm.so
    rm ./libresolv*

    • Tal como está a mi no me funciona el script:

      ./copy.sh: línea 5: error sintáctico cerca del elemento inesperado|’
      ./copy.sh: línea 5:for t in ldd "$1" |cut -d ">" -f2|tr "\t" " ";do'

      Lo modifiqué de esta forma:

      #!/bin/bash

      function depend () {

      for t in $(ldd "$1" | cut -d ">" -f 2 | tr " " "\t"); do

      #for t in $(ldd "$1" | awk '{print $3}'); do

      cp -v $t $(pwd) 2>/dev/null

      done

      }

      for x in $(ls); do

      echo “Leyendo $x”

      depend $x

      done

      rm ./libc.so.6
      rm ./libdl.so.2
      rm ./libpthread.so.0

      rm ./libtinfo*
      rm ./libm.so.6
      rm ./libm.so
      rm ./libresolv*

      Saludos.

Los comentarios están cerrados.