Kodi y Mame Avanzado en ODROID-XU4 - Parte 1

Esta es una guía para configurar Kodi con Mame en el SBC ODROID-XU4, lo cual lo convierte en un buen centro multimedia y de juegos. Incluye todos los pasos para instalar el software necesario en Ubuntu Linux. La instalación de Mame es opcional, así como la configuración de la unidad USB, el joystick, etc. Puede detenerte en Kodi o ir más allá y montar una máquina de video, música y juegos completamente funcional. No todos los pasos son sencillos. Algunos pueden requerir consultar información online. He hecho toda la investigación por ti y te proporciono enlaces a los recursos, de modo que contarás con toda la información para entender los conceptos necesarios. La primera parte está centrada en la instalación y configuración de Kodi que es independiente. La parte de Mame requerirá recursos adicionales externos. El resto es igualmente independiente.

Instalar Linux y Kodi

Para instalar todo esto, sigue los siguientes pasos:

1. El primer paso ha de realizarse en otra máquina Linux. Si aún no tiene una, es bueno migrar a Linux lo antes posible. Descárgate una imagen de:  https://wiki.odroid.com/ODROID-XU4/os_images/linux/ubuntu_4.14/20181203

2. Asegúrate de que la imagen sea válida con md5sum y compara el resultado con el correspondiente archivo md5sum de  https://odroid.in/ubuntu_18.04lts/XU3_XU4_MC1_HC1_HC2/.

$ md5sum ubuntu-18.04.1-4.14-mate-ODROID-XU4-20181203.img.xz
3. Suponiendo que estés haciendo todo esto en Linux, expande el archivo que has descargado:
$ xz -d ubuntu-18.04.1-4.14-mate-ODROID-XU4-20181203.img.xz
4. Conecta tu tarjeta SD en un puerto USB de tu maquina Linux.

5. Busca el dispositivo con lsblk.

$ lsblk
Nota: Supongamos que tu tarjeta SD está en “/dev/sdX”. Ten mucho cuidado de elegir el dispositivo correcto o te arriesgarás a borrar el contenido de otro disco.

6. Escribe la imagen en la tarjeta SD.

$ sudo dd if=ubuntu-18.04.1-4.14-mate-ODROID-XU4-20181203.img.xz of=/dev/sdX bs=1M conv=fsync
$ sudo sync
7. Desmonta tu tarjeta SD desde el entorno de escritorio o desde la línea de comandos:
$ sudo umount /dev/sdX
8. Inserta tu tarjeta SD en tu ODROID-XU4 y reinícialo. Luego inicie sesión en el escritorio con las credenciales que se indican en: https://bit.ly/30syIGW

Llegados a este punto, deberás tener un escritorio ODROID-XU4 completamente funcional. El siguiente paso será instalar Kodi y eliminar el acceso directo al escritorio para que tu dispositivo arranque directamente con la interfaz de Kodi, algo así como un televisor normal.

9. Abre un terminal (busca en el menú d la parte superior izquierda de la pantalla).

10. Actualiza los paquetes:

$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade
Durante la actualización, la primera vez que inicies tu máquina, puede aparecer un error relacionado con un archivo lock con dpkg (`/var/lib/dpkg /lock`). Esto significa que uno de los procedimientos de actualización automaticos todavía se está ejecutando, lo cual es probable que sea importante para la nueva instalación. Simplemente déjalo ejecutarse hasta el final y vuelve a intentar los comandos. Si aparece un mensaje en el que se indica que boot.ini ha sido reemplazado, simplemente selecciona 'OK'. Si recibes una pregunta sobre “/etc/apt-fast.conf”, responde Y (para Sí).

11. Instala Kodi:

$ sudo apt install kodi kodi-bin kodi-data libcec4 python-libcec openbox
12. El driver gráfico de Mali se instala por defecto y funciona bastante bien. En un terminal, ejecuta “glmark2-es2” con el que deberías ver una demo (una imagen de un caballo). Los FPS deberían estar alrededor de 300 imagen/segundo. Ejecuta `glmark2` y deberías ver la misma demo. El FPS debería estar alrededor de 30 cuadros/segundo - horrible. El motivo es que el driver de Mali solo es compatible con OpenGL ES (sistema integrado) y no con OpenGL simple. La solución es usar una librería llamada “gl4es" (https://github.com/ptitSeb/gl4es), que puedes encontrar en Github.

13. Instala "gl4es"

En un terminal, instala las siguientes herramientas de desarrollo:

$ sudo apt install git cmake xorg-dev gcc g++ build-essential
Consigue el código fuente de gl4es. Gl4es es una implementación de OpenGL utilizando OpenGL ES (en lugar de implementar la librería directamente). Por lo tanto, en sistemas como ODROID-XU4 con un driver que solo admite OpenGL ES, también es posible utilizar software basado en OpenGL con aceleración de hardware:
$ git clone https://github.com/ptitSeb/gl4es.git
$ cd gl4es
Compilado
$ mkdir build
$ cd build
$ cmake .. -DODROID=1
$ make
Se compilará y mostrará su progreso con una gran cantidad de mensajes. Al final, si la compilación sale bien, deberías ver lo siguiente:
...
[ 96%] Building C object src/CMakeFiles/GL.dir/glx/utils.c.o
[ 98%] Linking C shared library ../lib/libGL.so.1
[100%] Built target
...
Guarda la versión Mesa de OpenGL (la que está instalada por defecto):
$ sudo mv /usr/lib/arm-linux-gnueabihf/libGL.so.1 /usr/lib/arm-linux-gnueabihf/save.libGL.so.1
$ sudo mv /usr/lib/arm-linux-gnueabihf/libGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/save.libGL.so.1.0.0
y copia tu nueva versión compilada:
$ sudo cp lib/libGL.so.1 /usr/lib/arm-linux-gnueabihf/
$ sudo ldconfig
Ahora comprueba que todo está bien ejecutando:
$ glxinfo | head -6
Si ves lo siguiente, estás listo para continuar (por supuesto, la fecha de la segunda línea es diferente a la tuya):
LIBGL: Initialising gl4es
LIBGL: v1.1.1 built on Mar 28 2019 06:22:26
LIBGL: Using GLES 2.0 backend
LIBGL: loaded: libGLESv2.so
LIBGL: loaded: libEGL.so
LIBGL: Using GLES 2.0 backend
Ahora puedes ejecutar glmark2 de nuevo:
$ glmark2
Esta vez deberías ver entre 300 y 600 FPS. En este momento, tu ODROID-XU4 también es compatible con OpenGL. Incluso puedes utilizar software como Blender (https://www.blender.org/).

14. Por razones de seguridad, Kodi y sus programas asociados serán ejecutados por un usuario con privilegios limitados, sin contraseña y con inicio de sesión automático. Llamaremos a este usuario “kodi”:

$ sudo adduser --disabled-password --gecos "" kodi
El resultado será:
Adding user `kodi' ...
Adding new group `kodi' (1000) ...
Adding new user `kodi' (1000) with group `kodi' ...
Creating home directory `/home/kodi' ...
Copying files from `/etc/skel' ...
15. Asigna algunos privilegios a este usuario:
$ sudo usermod -a -G cdrom,video,plugdev,users,dialout,dip,input,netdev,audio,pulse,pulse-access,games kodi
16. Añade las opciones para que Kodi puede iniciar su propio servidor X:
$ sudo sed -ie 's/allowed_users=console/allowed_users=anybody/g' /etc/X11/Xwrapper.config
$ sudo sed -ie "\$aneeds_root_rights = yes" /etc/X11/Xwrapper.config
17. Agrega el servicio Kodi a “systemd” (es mejor copiar y pegar lo siguiente en lugar de escribirlo):
$ cat << EOF | sudo tee /etc/systemd/system/kodi.service
 [Unit]
 Description = Kodi Media Center
 After = systemd-user-sessions.service network.target sound.target mysql.service dbus.service polkit.service upower.service
 Wants = mysql.service
 [Service]
 User = kodi
 Group = kodi
 Type = simple
 #PAMName = login # you might want to try this one, did not work on all systems
 ExecStart = /usr/bin/xinit /usr/bin/dbus-launch --exit-with-session openbox --startup /usr/bin/kodi-standalone -- :0 -nolisten tcp vt7
 Restart = on-abort
 RestartSec = 5

 [Install]
 WantedBy = multi-user.target
 EOF
Una nota rápida sobre la primera línea: el comando “sudo” funciona sobre “tee” para escribir con derechos de superusuario en el archivo, porque si lo hiciera con “cat” y siguiera el mismo patrón que el resto comandos de este documento, la redirección al archivo no funcionaría. De hecho, la redirección se realiza por shell (que pertenece al usuario `odroid`) y no por el comando. Así que “sudo cat” no funcionaría.

18. Activa Kodi en el momento del arranque:

$ sudo systemctl enable kodi
$ sudo systemctl set-default multi-user.target
19. En la Wiki de Hardkernel (https://bit.ly/2Qjvcdf), se dice que un paquete reciente de Canonical EGL bloqueó el acceso a la GPU Mali. Es cierto, la solución es la siguiente:
$ sudo apt install mali-x11 --reinstall
Cuando estaba escribiendo esta publicación, esto corrigió el error de acceso a la GPU Mali. Así que es muy recomendable aplicar esta solución. De hecho, si actualizas el sistema como dije antes, aparecerá un error y tendrás que solucionarlo con la reinstalación “mali-x11” como se ha indicado con anterioridad.

20. Ahora tienes un sistema Kodi completamente funcional. Si quieres reiniciar, tu ODROID-XU4 se iniciará directamente con Kodi. Si deseas añadir más funciones, como MAME (https://www.mamedev.org, https://en.wikipedia.org/wiki/MAME), una unidad USB externa, un joystick, un firewall, puede continuar con el resto del artículo.

Si quieres parar y disfrutar de tu ODROID-XU4 ahora, puedes reiniciarlo:

$ sudo reboot
Todo lo que aparece a continuación se puede hacer ya sea conectándote a tu ODROID-XU4 por “ssh” o directamente en la pantalla (necesitarás un teclado). Si desea conectarte directamente a la pantalla, después de reiniciar tu ODROID-XU4 en Kodi, puedes presionar “Ctrl + Alt + F1” para cambiar a un terminal (pantalla de texto). En cualquier momento, puedes volver a Kodi presionando “Alt + F7”.

Instalar una unidad externa USB

1. Cambia a un terminal o inicia sesión con “ssh”.

2. Instala “usbmount” para montar las unidades USB:

$ sudo apt install usbmount
Existe un problema con la versión 0.0.22 de “usbmount” en la versión estándar de Ubuntu Linux al conectar 2 unidades USB al mismo tiempo. El error se ha solucionado con “usbmount 0.0.24” que aún no se encuentra en el repositorio de Ubuntu. Puede actualizarlo manualmente, si quieres.

Si tu segunda unidad (o incluso la primera) no se monta correctamente al conectarla, puedes intentar actualizar “usbmount” de la siguiente manera:

$ git clone https://github.com/rbrito/usbmount.git
$ cd usbmount
$ sudo apt-get update && sudo apt-get install -y debhelper build-essential fakeroot
$ dpkg-buildpackage -us -uc -b
$ cd ..
$ sudo dpkg -i usbmount_0.0.24_all.deb
3. Por defecto, usbmount montará la unidad USB externa con la opción “sync”. “sync” significa que todo el acceso de escritura al disco se vaciará inmediatamente en todo el disco. Esto puede ralentizar radicalmente todas las operaciones que se hagan en el disco.
$ sudo sed -ie 's/^MOUNTOPTIONS=.*/MOUNTOPTIONS="noexec,nodev,noatime,nodiratime"/' /etc/usbmount/usbmount.conf
Supongo que es seguro usar la opción “sync” puesto que se supone que no desconectaremos este disco en ningún momento. Cuando hice esto, la velocidad de escritura de mi disco duro externo se multiplico por 10.

Instalar MAME para ejecutar juegos arcade desde Kodi

Esta sección es algo extensa y requiere recursos externos si quieres disponer de una instalación MAME al completo con todas las funciones. De vez en cuando, haremos referencia a guías externas.

1. Instala MAME

$ sudo apt install mame mame-data mame-doc mame-extra mame-tools libsdl2-gfx-1.0-0 libsdl2-image-2.0-0 libsdl2-mixer-2.0-0 libsdl2-net-2.0-0 libsdl2-net-2.0-0 python-pil
Crea un nuevo archivo de configuración con las rutas correctas, utilizando OpenGL ES 2, el driver de audio ALSA, adecuando la velocidad y utilizando todos los núcleos:
$ cat << EOF | sudo tee /etc/mame/mame.ini
 inipath $HOME/.mame;/etc/mame
 rompath /home/kodi/AML-ROMs/
 samplepath /home/kodi/AML-assets/samples/
 ctrlrpath /home/kodi/AML-assets/ctrlr
 hashpath /usr/share/games/mame/hash
 cfg_directory $HOME/.mame/cfg
 nvram_directory $HOME/.mame/nvram
 memcard_directory $HOME/.mame/memcard
 input_directory $HOME/.mame/inp
 state_directory $HOME/.mame/sta
 snapshot_directory $HOME/.mame/snap
 diff_directory $HOME/.mame/diff
 comment_directory $HOME/.mame/comments
 video auto
 render opengles2
 audiodriver alsa
 samplerate 32000
 numprocessors 8
 mouse 1
 uimodekey INSERT
 autoframeskip 1      
EOF
$ sudo chmod ugo+r /etc/mame/mame.ini
A continuación, debemos eliminar el mensaje de inicio “gl4es” para poner contento a MAME. En pocas palabras: un complemento de Kodi extraerá la base de datos de juegos `MAME.xml` con el típico resultado ejecutando “mame”. Cuando se inicie “mame”, “gl4es” se inicia y muestra un mensaje agradable, como el de arriba. Sin embargo, el complemento Kodi captura el resultado que se supone que es un archivo XML, excepto el mensaje de bienvenida de “gl4es”. Entonces, cuando Kodi intenta leer el archivo XML (de hecho, una librería Python también lo intenta), falla:
$ cat << EOF | sudo tee /usr/local/bin/mame
 #!/bin/sh
 export LIBGL_SILENTSTUB=1
 export LIBGL_NOBANNER=1
 /usr/games/mame "$@"
 EOF
$ sudo chmod ugo+x /usr/local/bin/mame
Al configurar el complemento AML en Kodi, usaremos este nuevo comando mame que acabamos de crear.

2. Instala y configura el complemento Advanced Mame Launcher desde Kodi

Vamos a seguir la guía oficial del complemento de Kodi llamado Advanced Mame Launcher (AML) (https://forum.kodi.tv/showthread.php?tid=304186) y adaptaremos algunos pasos de acuerdo a nuestra configuración. Suponemos que tenemos una unidad USB externa conectada al ODROID-XU4. Será útil para almacenar datos para MAME.

Suponiendo que te encuentras en un terminal de texto (consulta más arriba cómo cambiar a un terminal de texto desde Kodi), el primer paso es crear los directorios para almacenar datos MAME. La unidad USB externa está montada en “/media/usb0” y por defecto en “/media/usb”, también. Esta es la configuración con la que seguiremos de aquí en adelante.

$ cd /media/usb
$ sudo mkdir mame
$ sudo chown kodi.kodi mame
$ sudo su - kodi
$ cd /media/usb/mame
$ mkdir -p AML-ROMs AML-CHDs AML-SL-ROMs AML-SL-CHDs AML-assets/samples/
$ cd AML-assets
$ mkdir artpreviews artwork cabinets clearlogos covers_SL cpanels fanarts fanarts_SL flyers manuals manuals_SL marquees PCBs snaps snaps_SL titles titles_SL videosnaps videosnaps_SL
$ cd
$ ln -s /media/usb/mame/* .
$ exit
Luego debemos completar los directorios con los últimos datos de Mame, tal como se describe en https://forum.kodi.tv/showthread.php?tid=304186. Usamos el siguiente script para descargar e instalarlo todo automáticamente:
$ sudo su - kodi
$ cd /media/usb/mame/AML-assets
# catlist.ini catver.ini genre.ini genre_OWS.ini mature.ini not_mature.ini
$ wget http://www.progettosnaps.net/catver/ -q -O - | grep 'download?tipo=catver' | sed "s#.*href=\"\(.*\.zip\)\".*#wget -q 'http://www.progettosnaps.net\1' -O file.zip#"|sh
$ unzip -jq file.zip '*.ini'
$ rm file.zip
# nplayers.ini
$ wget http://nplayers.arcadebelgium.be/ -q -O - | grep -E 'nplayers[[ :digit: ]]{4}\.zip' | sed "s#.*href=\"\(http://nplayers.*zip\)\">.*#wget -q '\1' -O file.zip#" | sh
$ unzip -jq file.zip nplayers.ini
$ rm file.zip

# bestgames.ini
$ wget http://www.progettosnaps.net/bestgames/ -q -O - | grep 'download?tipo=bestgames' | sed "s#.*href=\"\(.*\.zip\)\".*#wget -q 'http://www.progettosnaps.net\1' -O file.zip#"|sh
$ unzip -jq file.zip '*.ini'
$ rm file.zip

# series.ini
$ wget http://www.progettosnaps.net/series/ -q -O - | grep 'download?tipo=series' | sed "s#.*href=\"\(.*\.zip\)\".*#wget -q 'http://www.progettosnaps.net\1' -O file.zip#"|sh
$ unzip -jq file.zip '*.ini'
$ rm file.zip

# history.dat
$ wget https://www.arcade-history.com/?page=download -q -O - | grep -o 'href="[^"]*\.zip"' | sed 's#href=\"\.\.\(.*zip\)\"#wget https://www.arcade-history.com\1 -q -O file.zip#'|sh
$ unzip -jq file.zip history.dat

# mameinfo.dat
$ wget 'http://mameinfo.mameworld.info' --header="User-Agent: Firefox/70.0" -q -O - |grep -o 'href=\"[^"]*Mameinfo.*\.zip"'|sort|tail -1| sed 's#href=\"\(.*zip\)\"#wget --header=\"User-Agent: Firefox/70.0\" \1 -q -O file.zip#'|sh
$ unzip -qjp file.zip *.7z > mameinfo.7z
$ 7z e '-i!mameinfo.dat' mameinfo.7z > /dev/null
$ rm file.zip mameinfo.7z

# gameinit.dat
$ wget http://www.progettosnaps.net/gameinit/ -q -O - | grep 'download?tipo=gameinit' | sed "s#.*href=\"\(.*\.zip\)\".*#wget -q 'http://www.progettosnaps.net\1' -O file.zip#"|sh
$ unzip -jq file.zip english/gameinit.dat
$ rm file.zip

# command.dat
$ wget http://www.progettosnaps.net/command/ -q -O - | grep 'download?tipo=command' | sed "s#.*href=\"\(.*\.zip\)\".*#wget -q 'http://www.progettosnaps.net\1' -O file.zip#"|sh
$ unzip -jq file.zip Longhand/command.dat
$ rm file.zip
$ exit
3. Modifica “mame.ini” para indicar la nueva estructura del directorio:
$ sudo sed -i 's#^rompath \+.*$#rompath /home/kodi/AML-ROMs/#' /etc/mame/mame.ini
$ sudo sed -i 's#^samplepath \+.*$#samplepath /home/kodi/AML-assets/samples/#' /etc/mame/mame.ini
4. Añade los recursos.

Vuelva a Kodi: escribe “Ctrl + D” en tu terminal, luego “Atl + F7” para volver a Kodi.

En https://forum.kodi.tv/showthread.php?tid=304186, puedes seguir el párrafo llamado "Setting up MAME assets and Software List assets" para agregar más recursos y activos. Esta es la forma de obtener imágenes adicionales, logotipos, etc. Puede leer la página http://forum.pleasuredome.org.uk/index.php?showtopic=30715 sobre los paquetes extra de MAME para conocer todos los tipos de recursos que puedes encontrar en la red para Mame.

En la página mencionada anteriormente, puedes encontrar enlaces a los recursos de Mame en Internet. Vienen en enormes paquetes, simplemente debes moverte a “/media/usb/mame”, que hemos creado antes. Permíteme proporcionarte algunos ejemplos de estos paquetes, que pueden serte muy útiles durante el proceso.

Si encuentras un paquete llamado `MAME 0.xxx EXTRAs` donde` xxx` es un número de versión de Mame, ve al directorio donde lo has descargado. En ese directorio, encontrarás más directorios. Mueve su contenido al directorio correspondiente en “/media/usb/mame/AML-asset/”

Otro paquete similar podría ser algo así como “MAME 0.xxx Multimedia”. Deberías proceder de la misma forma.

Sin embargo, también encontrarás archivos “.zip”. Simplemente puedes descomprimirlos y moverlos al directorio final como hemos hecho anteriormente. Algunos directorios no tienen el mismo nombre, así que manten los nombres que creamos con anterioridad. En este caso, transfiere el contenido del directorio en lugar del directorio en sí.

Si encuentras paquetes con “bios-devices” en su nombre, no los necesitas si has descargado los paquetes más grandes con “ROMs” en su nombre. Son solo un subconjunto para una situación diferente. Puede leer más sobre todos estos paquetes en: http://forum.pleasuredome.org.uk/index.php?showtopic=34705. Estos paquetes se crean cuando quieres una versión mínima de las ROM; por ejemplo, si te estás quedando sin espacio en el disco.

También hay paquetes llamados Rollbacks Roms (https://bit.ly/2HL6Bdt). Solo los necesita si tiene un administrador de ROM para Mame que pueda gestionar varias versiones. No los necesitarás en este tutorial.

También están las listas de software ROM y CHDs. Obviamente, su contenido irá a los directorios “/media/usb/mame/AML-SL-ROMS” y “/media/usb/mame/AML-SL-CHD” que hemos creado anteriormente. “SL” significa “Software List”.

Finalmente, es posible que hayas cometido algún error con el permiso de los usuarios al descargar y mover los archivos. Así que haz las cosas bien asignando el usuario “kodi” al directorio “mame”:

$ sudo chown -R kodi.kodi /media/usb/mame
5. Instala y configura el complemento AML. Lo encontrarás en los complementos de programas. Se llama _Advanced Mame Launcher_.

En Kodi, ve a ** Configuración **, ** Configuración de complemento **, ** Instalar desde el repositorio **. En ** Complementos del programa **, busca ** Advanced Mame Launcher ** e instálalo. Mira estas imagenes:

Instalando Advanced Mame Launcher

Después de instalarlo, haga clic con el botón derecho en el logotipo del complemento y ve a _Settings_:

Configuración de Advanced Mame Launcher.

Cambia la ruta al archivo ejecutable y a los directorios de datos como se muestra en esta imagen:

Actualizando las rutas en la configuración de Advanced Mame Launcher.

Vuelve a la pantalla inicial de Kodi y busca el complemento AML, en general ** Complementos **, ** Complementos del programa **, ** Advanced Mame Launcher **. Selecciona cualquier fila, abre el menú contextual con un clic derecho y selecciona ** Complemento de instalación **. Ejecute una configuración completa y la configuración del complemento seleccionando las opciones _All in one step_ en el menú contextual del complemento.

Elegiendo la opción All In One Step en el complemento Advanced Mame Launcher

Este paso puede durar de varios minutos a una hora. Verás un montón de barras de progreso. Si hiciste todo bien antes, debería funcionar sin mensajes de error. El complemento ya está configurado y listo, y Mame ahora está listo para ser utilizado.

En la próxima entrega de este artículo, veremos cómo instalar un joystick. Para comentarios, preguntas y sugerencias, visita el artículo original en  https://forum.odroid.com/viewtopic.php?f=52&t=34760.

Be the first to comment

Leave a Reply