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?
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
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 (https://travis-ci.org/TorresBaldi/bgd-tilescroll/builds/193366942) 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)
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
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 (http://askubuntu.com/questions/133389/no-such-file-or-directory-but-the-file-exists)).
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.
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 :) ).
Yo utilizo el repositorio de Josebita xD