[linux] script/instrucciones de instalación

Started by gecko, January 18, 2017, 03:17:37 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

gecko

Esto es un poco ironico, porque me acuerdo que fui yo mismo quien pidió en su momento un release de linux con todos los archivos por separado para poder hacer instalaciones manuales.

Ahora mi pregunta viene para el otro lado. Como hago para automatizar la instalación en linux de BennuGD?

Estoy metiendo mano, intentando hacer andar integración continua con TravisCI

  • ya lo configuré para que se descargue BennuGD desde la web
  • lo extraiga/descomprima
  • y después copiar el contenido de bin/ en /usr/local/bin y el contenido de lib/ en usr/local/lib
Pero después quiero ejecutar bgdc y me dice que no encuentra el comando.

Me estoy olvidando de algo?
Torres Baldi Studio
http://torresbaldi.com

Drumpi

Tiene gracia porque lo estuve mirando hace una semana y estaba igual que tú ^^U
De momento los he puesto en una carpeta random y mi intención era crear scripts partiendo de los de Wiz, donde importar los binarios y las librerías, porque después de leer el script instalador de la r307 me quedé a cuadros, había muchas partes que no entendía :P

Copio el código del mismo por si alguien puede traducirlo y comentarnos los pasos que faltan:

#!/bin/bash
data_start=165
TARGET_PWD=/usr/local/share/bennugd

echo "Bennu Game Development Installer"
echo "(C) 2008-2011 - SplinterGU"
echo

if [ "$1" == "--help" ];
then
    echo "usage: $0 [options]"
    echo "options:"
    echo "    --help   - show this text"
    echo "    --remove - uninstall Bennu Game Development"
    echo

elif [ "$1" == "--remove" ];
then
    echo "Uninstalling Bennu Game Development..."
    rm -f /usr/local/bin/bgdc 2>/dev/null
    rm -f /usr/local/bin/bgdi 2>/dev/null
    rm -f /usr/local/bin/moddesc 2>/dev/null
    rm -Rf $TARGET_PWD 2>/dev/null
    rm /etc/ld.so.conf.d/bennugd.conf 2>/dev/null
    rm /etc/profile.d/bennugd.sh 2>/dev/null
    ldconfig
    echo "done!"

else
    CPWD=$PWD
    echo "Use: $0 --help for help text"
    echo
    echo "Installing Bennu Game Development..."
    mkdir -p /tmp/bennugd>/dev/null 2>/dev/null
    cd /tmp/bennugd
    tail -n +$data_start $CPWD/$(basename $0) | gzip -cd | tar xvf - 2>/dev/null
    if [ $? -ne 0 ]; then
        echo "installation fail"
        exit 1
    fi
    mkdir -p $TARGET_PWD 2>/dev/null
    cp -Rf * $TARGET_PWD
    if [ $? -ne 0 ]; then
        echo "installation fail"
        exit 1
    fi
    echo "export PATH=\$PATH:$TARGET_PWD/bin" >/etc/profile.d/bennugd.sh
    if [ $? -ne 0 ]; then
        echo "installation fail"
        exit 1
    fi

    ln -s $TARGET_PWD/bin/bgdc /usr/local/bin/bgdc 2>/dev/null
    ln -s $TARGET_PWD/bin/bgdi /usr/local/bin/bgdi 2>/dev/null
    ln -s $TARGET_PWD/bin/moddesc /usr/local/bin/moddesc 2>/dev/null

    chmod +x /etc/profile.d/bennugd.sh 2>/dev/null
    if [ $? -ne 0 ]; then
        echo "installation fail"
        exit 1
    fi
    echo $TARGET_PWD/lib >/etc/ld.so.conf.d/bennugd.conf
    if [ $? -ne 0 ]; then
        echo "installation fail"
        exit 1
    fi
    /sbin/ldconfig
    if [ $? -ne 0 ]; then
        echo "installation fail"
        exit 1
    fi
    cd $CPWD
    rm -Rf /tmp/bennugd
    echo "Installing bash autocompletion feature..."
( cat <<EOF
_bgdi()
{
    local cur prev opts
    COMPREPLY=()
    cur="\${COMP_WORDS[COMP_CWORD]}"
    prev="\${COMP_WORDS[COMP_CWORD-1]}"

    case "\${prev}" in
        -i)
            _filedir '()'
            return 0
            ;;

        *)
            _filedir '@(dcb|DCB|dat|DAT|bin|BIN)'
        ;;
    esac

    if [[ \${cur} == -* ]] ; then
        COMPREPLY=( \$(compgen -W "-d -i" -- \${cur}) )
        return 0
    fi
}
complete -F _bgdi bgdi
EOF
) > /etc/bash_completion.d/bgdi

( cat <<EOF
_bgdc()
{
    local cur prev opts
    COMPREPLY=()
    cur="\${COMP_WORDS[COMP_CWORD]}"
    prev="\${COMP_WORDS[COMP_CWORD-1]}"

    case "\${prev}" in
-o)
            _filedir '@(dcb|DCB|dat|DAT|bin|BIN)'
            return 0
            ;;

-L)
            _filedir '@(dcl|DCL|lib|LIB)'
            return 0
            ;;

        -i)
            _filedir '()'
            return 0
            ;;

-f)
            _filedir '@(*)'
            return 0
            ;;

        -l)
            return 0
            ;;

-s)
            _filedir '@(*)'
            return 0
            ;;

        -D)
            return 0
            ;;

        *)
            _filedir '@(prg|PRG)'
        ;;
    esac

    if [[ \${cur} == -* ]] ; then
        COMPREPLY=( \$(compgen -W "-d -o -i -a -f -l -s -g -c -D -p -Ca -L --libmode" -- \${cur}) )
        return 0
    fi
}
complete -F _bgdc bgdc
EOF
) > /etc/bash_completion.d/bgdc

    echo "done!"

fi

exit 0
END OF INSTALLER
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

gecko

Agrego un poco de información:

Haciendo echo $PATH me dice que el directorio /usr/local/bin está dentro del path, así que no debería tener problemas en encontrar el ejecutable. Así que no tengo idea  :-\

Por las dudas, haciendo ldconfig -v me aparecen los .so de bennu dentro de /usr/local/lib, por este lado parecería que todo correcto...

(Mas info extra: por si alguien se interesa, acá se puede ver el log del último intento)




Tengo que copiar las cosas en otro lado? ejecutar algún comando intermedio? Será un tema de permisos? (Antes de copiar los bin/* descargados de Bennu, hago un sudo chmod +x bin/* para darles permiso de ejecución)
Torres Baldi Studio
http://torresbaldi.com

Drumpi

Según el script estandar de Wiz:

#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../gp2x-runtime
PATH=$PATH:../gp2x-runtime

export LD_LIBRARY_PATH
export PATH

echo 2 > /proc/cpu/alignment

bgdc juego.prg >log1.txt 2>err1.txt
bgdi juego.dcb >log2.txt 2>err2.txt


No basta con tenerlos en el PATH y en el LD_LIBRARY_PATH, hay que exportarlos o algo así. Creo que es algo relacionado con
/etc/profile.d/bennugd.sh
/etc/ld.so.conf.d/bennugd.conf
Que aparecen en el script de instalación de las versiones anteriores de Bennu, pero esos son ficheros de configuración del sistema, que son cosas que no me gusta tocar, así que no sé lo que se hace ahí ^^U
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

gecko

ok, lo logré descifrar.
El problema era el SO de 64 bits. El error que da al intentar ejecutar binarios de 32 bits es que no lo encuentra. (fuente).

Para solucionarlo instalé librerías de compatibilidad con 32 bits, ademas de instalar todas las dependencias de Bennu específicamente en 32 bits.

El listado de instrucciones final que voy a usar quedó masomenos así


sudo apt-get update -qq

# compatibilidad con 32 bits
sudo apt-get install -qq libc6:i386 libncurses5:i386 libstdc++6:i386

# dependencias de bennu
sudo apt-get install -qq zlib1g:i386 libssl1.0.0:i386 libsdl1.2debian:i386 libsdl-mixer1.2:i386

# descargo, extraigo y muevo bennu
wget http://www.bennugd.org/downloads/bgd-1.0.0-r335-linux.tar.gz
tar -zxvf bgd-1.0.0-r335-linux.tar.gz
chmod +x bin/*
sudo mv bin/* /usr/local/bin/
sudo mv lib/* /usr/local/lib/
sudo ldconfig -v

# ejecuto el juego
sudo chmod +x script_de_prueba_del_juego.sh
./script_de_prueba_del_juego.sh


Después de eso, queda todo funcionando.

Muchas gracias Drumpi por la ayuda, ver el script de instalación me guió un poco en los pasos a seguir.

No es exactamente la solución que estás buscando vos para DISTRIBUIR juegos, porque en ese caso tenés que ver como solucionar el tema de las dependencias (y los 32/64 bits). Ese script de WIZ está bastante cerca de lo que seria una solución para distribuir, pero no estoy seguro.
Torres Baldi Studio
http://torresbaldi.com

Drumpi

Me alegro que hayas podido solucionarlo, pero me parece una solución un poco "bestia" ¿no?
Ahora mismo no estoy en Linux, pero tenía un script .sh que me permitía ejecutar una versión antigua de Bennu que subió Pixel hace tiempo, sin tener que instalar librerías adicionales, y poniendo ejecutables y librerías en una carpeta dentro de la del juego/aplicación. Me ha funcionado con el Tilemap Editor v2 (de hecho, lo puedes mirar en http://forum.bennugd.org/index.php?topic=4207.0).
Lo que ya no sé es qué hizo Pixel con ese BGDI, si lo compiló el mismo o si es el oficial.

Y conste que yo ando con un Kubuntu de 64bits.
Yo quiero intentar algo más sencillo que instalar todas las librerías i386, a ver si se puede, si no, seguiré tu solución (muchas gracias por encontrarla, de verdad :) ).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Yawin

Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end