Batocera, ou l'économie de place sur le meuble du salon ( en Feat avec mon Nextcloud )

Batocera, ou l'économie de place sur le meuble du salon ( en Feat avec mon Nextcloud )

Bonjour à tous, aujourd'hui projet pour l'été !! 

Il est prévu d'aller sur un vrai pc, mais n'ayant pas encore le pc sous la main, et pour faiciliter l'écriture de cet article, ce sera fait sur une machine virtuelle ( et plus tard je le mettrais sur un vrai pc )

Donc l'objectif est d'installer Batocera, ( ce qui me parait plutôt simple ) , puis de le connecter à mon Nextcloud, sur un stockage de 128go maximum, donc faire un script ( si Batocera n'a pas cette fonctionnalité ) de retirer les roms les plus anciennes automatiquement. 

Donc l'objectif dans cet article est de relier mon Nextcloud à Batocera, donc nous parlerons seulement de la liaison, mais pas de la configuration des émulateurs ou de batocera qui ne sert pas à relier un Nextcloud à Batocera.


Donc nous allons le faire sur Virtualbox pour cette article, mais tout sera testé pour être fonctionnel sur un pc portable qui aura un processeur Intel. 

Pour commencer, nous avons un petit souci :

le fichier donné par le site est un .img, or Virtualbox ne sait pas les lire. Donc nous allons le convertir en .vdi pour virtualbox

Mais virtualBox ne nous laisse pas sans solution.
Pour cela, nous nous dirigeons vers le dossier où est installé VirtualBox. 
Puis nous rentrons la commande

.\VBoxManage convertfromraw --format VDI [filename].img [filename].vdi

[filename] étant le nom de votre fichier.

Comme vous pouvez le voir, ça fonctionne. Mais comme le montre les deux premières lignes, ça peut ne pas fonctionner, virtualbox n'ayant pas les permissions pour écrire à certains endroits. Donc je l'ai mis ailleurs.

On peut maintenant aller sur Virtualbox.

J'ai une VM déja prête, avec 4go de ram et deux coeurs, pour avoir à peu près les même perfs que le pc que j'aurais. ( j'ai mis 256mo de mémoire vidéo, mais j'en aurais plus sur la vrai machine
Donc nous nous rendons dans "stockage", puis nous ajoutons un disque. Dans le "hard disk selector", nous ajoutons un disque puis choisissons notre VDI nouvellement créé.

Puis vous pouvez retirer le vdi de base. 

Et en lançant la VM 

ça marche ( il faut activer l'acceleration 3D pour que ça affiche de mon coté ).

Mais bon, maintenant que c'est installé, il va falloir relier à mon nextcloud, et c'est là, la vrai partie interessante.

On commence par essayer à trouver une CMD. Pour cela, nous appuyons sur F1, pour accéder aux fichiers, puis aller dans applications et ouvrir "Xterm". 

Et nous avons une interface de commande. 
Ou sinon par ssh, en rentrant la commande :

ssh root@IP_machine

Le mot de passe par défaut c'est "linux"

Maintenant comment installer Nextcloud. Ici va être répertorié tout mes tests, qui ont pour objectif que batocera soit relié à mon nextcloud. Etant sur VM, je peux retourner en arrière facilement avec les instantanés.

 

 

Déja, oublions les debian et ubuntu, nous sommes sur du unix, donc les commandes de bases. Mais quand même suffisant pour nos besoins... (C'est ce que je pensais au début, mais après avoir lu davantage la doc, nous sommes sur une base Archlinux. Mais on utilisera quand même de simples commandes ).
Nous avons un wget et nous pouvons executer des applications. Donc commençons par tenter d'installer le client Nextcloud. 
Avec un wget, télécharger le client Nextcloud Linux ( qui est en appimage ) et voyons ce que ça donne : 

Bon. ça va être peut-etre plus compliqué que prévu.

Après des reflexions, chat GPT, les recherches googles, les recherches youtube, et la liste de course pour les soldes qui arrivent le mercredi 24 juin, soit après la fête des pères, j'ai peut-etre trouvé une solution de contournement :

Rclone

Batocera étant une distribution très allégée, et Rclone ayant moins besoin de dépendance qu'un Nextcloud, il aura plus de chance de démarrer sans souci. L'inconvénient que je vois, est qu'il passe en WebDav, donc un système un peu plus lent. Mais c'est la seule solution que je vois et ça ne sera pas si dérangeant que ça.

Il y a aussi la dernière solution possible qui est de passer par VPN. Un serveur VPN sur mon OPNsense qui donne accès au WEBDAV ou SMB pour Batocera. Ce qui fait que Batocera serait dans mon réseau local de VM.
Mais ça s'éloigne un peu de l'objectif qui est d'avoir les roms de jeux en local et donc jouable même si le serveur tombe. 


Donc l'installation de Rclone :

Donc nous téléchargeons Rclone grâce à ce lien : https://downloads.rclone.org/v1.74.3/rclone-v1.74.3-linux-amd64.zip ( récupéré ici : https://rclone.org/downloads/ )

Puis nous le dezipons et nous donnons les permissions d'éxecutions. Et oui, nous n'avons pas de systemd ici pour le démarrer au démarrage de la machine. 

Je pensais l'avoir fait dans le dossier root

Puis pour les permission, nous rentrons la commande  :

chmod +x rclone

puis nous l'exécutons, voir si il démarre et semble fonctionner

Cela semble être un bon début.

Maintenant faisont un :

./rclone config

Cela fonctionne. Nous allons donc créer un dossier pour qu'il stocke les fichiers quelque part, et un pour les fichiers virtuels

Donc je vais créer le dossier dans le userdata/Cloneroms, pour les fichiers virtuels, et /userdata/Clonecache pour les fichiers téléchargés.

Le WEBdav de mon nextcloud à été retouché par le passé et donc ne va peut-etre pas réagir pareil que chez vous (normalement ça ne devrait avoir aucun impact pour mieux ou moins bien fonctionner )

Donc faisons la configuration : 

Ensuite il nous demande de quelle manière doit se connecter Rclone

Donc je rentre le chiffre 63 pour le webdav

Vient ensuite l'url de connexion en Webdav. Pour avoir l'url sur nexcloud, nous nous rendons sur le site web, puis dans "paramètres de fichiers". Puis nous aurons le lien webDAV du compte dès le haut de la fenêtre qui s'ouvre.


Et dans la section "webDAV" nous avons le lien permettant cette connexion avec ce protocole. Nous le copions, puis le collons.

Nous rentrons le chiffre 2 pour nextcloud.

Vient ensuite les identifiants de connexions :

Nous rentrons le user. Pour nextcloud pas besoin de préciser le domaine, n'étant pas sur une authentification NTLM

Vient ensuite le mot de passe que nous devons rentrer. Donc nous appuyons sur la lettre "y", puis entrée, et il nous demande le mot de passe du compte. nous le rentrons puis le confirmons.

Il nous demande un bearer_token. Dans mon cas je n'en ai pas, mais si vous avez configuré un token sur votre connexion à votre stockage, vous pouvez le rentrer ici. SI vous n'avez rien, appuyez simplement sur votre touche Entrée.

Et pour finir, il nous demande si on veut éditer encore plus loin

Je répond non, je pense que la configuration de base nous suffira, sinon, on ira la configurer. Et donc nous arrivons à l'étape final, si tout est bon : 

Je rentre un "Y", confiant de ma configuration.

Maintenant, il faut la faire fonctionner. Actuellement, elle est configuré, mais n'est pas active. Pour l'activer il faut rentrer une commande. C'est cette commande qui précise où ira notre "cache", les cycles d'actualisation et tout autre détail.

Donc nous rentrons la commande suivante : 

rclone --config /userdata/system/.config/rclone/rclone.conf mount Nextcloud: /userdata/Cloneroms \
    --allow-other \
    --dir-cache-time 5000h \
    --poll-interval 10s \
    --vfs-read-ahead 512M \ 
    --vfs-cache-mode full \
    --vfs-cache-max-size 14G \
    --vfs-cache-max-age 30d \
  --cache-dir /userdata/Clonecache \
  &

je l'écris de cette manière pour que ce soit plus compréhensible. Sinon tout peut être écrit à la ligne. 

rclone --config /userdata/system/.config/rclone/rclone.conf : On précise que son fichier de configuration est là. Sinon ça va poser souci au démarrage.   
mount Nextcloud: /userdata/Cloneroms \ 
:  on monte la connexion webDAV dans le dossier souhaité.
    --allow-other \                       : on autorise l'accès des fichiers à tout le monde sur la machine.
    --dir-cache-time 5000h \      : Rclone va toutes les 5000h recharger les fichiers 
    --poll-interval 10s \               : toute les 10s Rclone va vérifier si il y a eu des modifications sur le Nextcloud
    --vfs-read-ahead 512M \      : Ce que Rclone va télécharger du fichier pendant son utilisation
    --vfs-cache-mode full \         : la fonctionnalité attendu. Quand un fichier sera appelé, il va le télécharger entièrement
    --vfs-cache-max-size 14G \   : la taille qu'a Rclone pour télécharger des fichiers. Sur ma VM, il peut jusqu'a 14go, mais sur la vrai machine, il aura plus, comme 100go
    --vfs-cache-max-age 30d \   : Les fichiers non utlisés sont supprimé au bout de 30 jours
    --cache-dir /userdata/Clonecache   : dossier où rclone stocke les fichiers téléchargés
     &                                                        : permet qu'il tourne en arrière plan

 

Mais de fortes chance que ça ne marche pas donc la manière compressée :

rclone mount Nextcloud: /userdata/Cloneroms --allow-other --dir-cache-time 5000h --poll-interval 10s --vfs-read-ahead 512M --vfs-cache-mode full --vfs-cache-max-size 14G --vfs-cache-max-age 30d --cache-dir /userdata/Clonecache --daemon

Et ça marche pas.
Enfin pour moi. Vous ça a sûrement fonctionné. 
Sur le coup, je n'ai pas remarqué, mais j'ai copié le lien du webDAV, mais de mon compte admin. Et non celui de l'utilisateur pour batocera.
pour corriger ça, vous pouvez modifier le fichier de configuration : /userdata/system/.config/rclone/rclone.conf , et mettre le bon lien.

Maintenant il reste les scripts à faire. Mais je voudrais faire remarquer quelque chose. J'espère que vous lisez toujours un document entièremement avant de l'appliquer. 
Car en faisant des experiences pour que Rclone démarre au démarrage, je voulais le changer d'emplacement.
Puis j'ai remarqué qu'il était déjà installé par défaut sur Batocera. Donc depuis le début, j'avais la solution sous les yeux.... ( oui j'ai passé pas mal de temps à chercher comment faire la liaison avec mon Nextcloud ).

 

Mais bon, c'est pas grave, ça veut dire que Rclone démarre de base et donc il nous suffit de savoir comment démarrer les scripts au démarrage, pour qu'il lance notre commande Rclone, puis de faire les link entre les dossiers de roms dans les dossiers Rclone et les dossiers dans roms de Batocera...

Et nous avons la solution dans la doc !  Je viens de me faire avoir pour Rclone, maintenant j'ai lu l'entièreté de la documentation... ) Nous pouvons faire des scripts au démarrage, mais aussi pour plein d'autres moments

Donc dans mon cas, je veux qu'il s'exécute avant que emulstation se lance, mais après que tous les services, dont le Wifi, soit lancé
Donc je dois nommer mon fichier /boot/postshare.sh . Et oui le mettre dans le dossier boot

Sur ma machine virtuelle, le dossier boot est en "read only". Donc je dois le démonter, puis le remonter. Pour cela, nous utilisons la commande :

mount -o remount,rw /boot

Cela va permettre d'avoir le dossier en écriture et donc d'importer le script. 
Avant de mettre le script final, je veux vérifier que le Wifi ( internet ) est bien actif pendant l'exécution de mon script. Pour cela je vais exécuter le script suivant : 


#!/bin/bash
echo "canard" >> /userdata/test.txt
ping -c 10 perdu.com >> /userdata/test.txt

Pour savoir si le script fonctionne ( le "canard" ), puis si internet fonctionne 

[root@BATOCERA ~]# cat /userdata/test.txt
canard
PING perdu.com (172.67.133.176) 56(84) bytes of data.
64 bytes from 172.67.133.176: icmp_seq=1 ttl=56 time=15.1 ms
64 bytes from 172.67.133.176: icmp_seq=2 ttl=56 time=15.6 ms
64 bytes from 172.67.133.176: icmp_seq=3 ttl=56 time=15.2 ms
64 bytes from 172.67.133.176: icmp_seq=4 ttl=56 time=19.3 ms
64 bytes from 172.67.133.176: icmp_seq=5 ttl=56 time=22.9 ms
64 bytes from 172.67.133.176: icmp_seq=6 ttl=56 time=15.1 ms
64 bytes from 172.67.133.176: icmp_seq=7 ttl=56 time=15.7 ms
64 bytes from 172.67.133.176: icmp_seq=8 ttl=56 time=15.8 ms
64 bytes from 172.67.133.176: icmp_seq=9 ttl=56 time=14.9 ms
64 bytes from 172.67.133.176: icmp_seq=10 ttl=56 time=17.0 ms
--- perdu.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9128ms
rtt min/avg/max/mdev = 14.918/16.667/22.904/2.417 ms
canard

C'est bon ça fonctionne, nous pouvons faire notre script pour lancer la commande Rclone puis la création de liens.

Donc mon script est le suivant : 

 

#!/bin/bash

A=0
echo "debut $(date)" >> /userdata/date.txt
for I in 1 2 3
do
if ping -c1 perdu.com >/dev/null 2>&1
then
A=1
break
fi
sleep 5
done

if [ "$A" -eq 1 ]
then
rclone --config /userdata/system/.config/rclone/rclone.conf mount Nextcloud: /userdata/Cloneroms --allow-other --dir-cache-time 5000h --poll-interval 10s --vfs-read-ahead 512M --vfs-cache-mode full --vfs-cache-max-size 14G --vfs-cache-max-age 30d --cache-dir /userdata/Clonecache &

ln -sf "/userdata/Cloneroms/jeux/3DS" /userdata/roms/3ds
ln -sf "/userdata/Cloneroms/jeux/DS" /userdata/roms/nds
ln -sf "/userdata/Cloneroms/jeux/Gameboy" /userdata/roms/gb
ln -sf "/userdata/Cloneroms/jeux/Gameboy Advance" /userdata/roms/gba
ln -sf "/userdata/Cloneroms/jeux/Gameboy Color" /userdata/roms/gbc
ln -sf "/userdata/Cloneroms/jeux/Gamecube" /userdata/roms/gamecube
ln -sf "/userdata/Cloneroms/jeux/N64" /userdata/roms/n64
ln -sf "/userdata/Cloneroms/jeux/PSP" /userdata/roms/psp
ln -sf "/userdata/Cloneroms/jeux/Snes" /userdata/roms/snes
ln -sf "/userdata/Cloneroms/jeux/VirtualBoy" /userdata/roms/virtualboy
ln -sf "/userdata/Cloneroms/jeux/WII" /userdata/roms/wii
ln -sf "/userdata/Cloneroms/jeux/Dreamcast" /userdata/roms/dreamcast

echo "fin $(date)" >> /userdata/date.txt

else
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/3DS" /userdata/roms/3ds
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/DS" /userdata/roms/nds
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/Gameboy" /userdata/roms/gb
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/Gameboy Advance" /userdata/roms/gba
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/Gameboy Color" /userdata/roms/gbc
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/Gamecube" /userdata/roms/gamecube
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/N64" /userdata/roms/n64
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/PSP" /userdata/roms/psp
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/Snes" /userdata/roms/snes
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/VirtualBoy" /userdata/roms/virtualboy
ln -sf "/userdata/Clonecache/vfs/Nextcloud/jeux/WII" /userdata/roms/wii
ln -sf "/userdata/Cloneroms/vfs/Nextcloud/jeux/Dreamcast" /userdata/roms/dreamcast

echo "fin $(date) non connecté" >> /userdata/date.txt

fi
 
 
 
 
Alors : 
Nous avons les echo "début et fin $(date)" qui sont là pour faire un peu des logs, savoir combien de temps a pris la connexion, si ça c'est connecté. C'est optionnel dans le script.
 
Ensuite 
 
Ici le script fait un ping à perdu.com pour savoir si il a internet. Il a 3 essais, avec 5 secondes d'attente entre chaque essais pour recevoir un ping, sinon il abandonne et se lance et exécute "echo "fin $(date) non connecté" >> /userdata/date.txt" qui est plus bas dans le script.
 
Pourquoi "perdu.com" et pas mon NAS ? 
Mon IP, et surtout ma box internet ne permettent pas de faire des tests de ping. Donc j'ai mis perdu.com. Mais rien n'empêche de mettre autre chose. 
Mais c'est vrai que si mon NAS est down mais pas internet, ça va mettre une erreur.
Mais j'ai confiance dans la fiabilité de mon NAS 🗿
Et oui j'ai mis un break, et si on met un break dans un script, c'est que c'est mal fini, mais j'avais pas d'inspi pour finir la boucle.
 
 
 
La deuxième partie du script qui fait les liens symbolique. 
Dans mon NAS, les dossiers sont dans cette arborescence et avec ce nom, mais rien n'empêche d'avoir une arboresence différente de la mienne.
Ces liens symboliques sont créés sur les dossiers des consoles de batocera.  Il faut supprimer les dossiers dans "roms" sinon les liens symboliques seront mis dans le dossier et ça ne marchera pas.

ln -sf : le s c'est pour les liens symbolique et le f c'est que si un lien existe déjà, il le recrée. 
 
 
Cette dernière partie permet d'utiliser le cache des jeux déjà téléchargé si le script perçoit qu'internet n'est pas disponible.
 
 
Bon maintenant, il est temps de tester, si ça fonctionne

Est ce que nous aurons plus de jeux, ou plus de jeu....
 
Nous redémarrons la VM....
Et nous avons tout nos jeux ! ( J'ai changé de thème entre temps pour des test à internet )
Voilà , l'objectif principal de cette article était de relier Nextcloud à batocera et un système de cache pour les moments hors ligne et c'est chose faite ! Pour la configuration de Batocera, les bios et autres détails, n'étant pas en rapport avec, je vous laisse faire.
Bonne vacances, je vais profiter de mon batocera.

Posté le 15 juin 2026 par _Antonin_