Virtualiser Batocera sur Proxmox VE

Au sommaire :

  • 1-Qu'est-ce que Batocera ?
  • 2-Pourquoi virtualiser Batocera ?
  • 3-Création de la machine virtuelle
  • 4-PCI Passthrough
  • 5-Se connecter en SSH ?
  • 6-Comment obtenir les bios et les jeux ?

1-Qu'est-ce que Batocera ?

Batocera est une distribution sous Arch Linux qui vous permet d'émuler des centaines de supports différents (consoles portables/salons, ordinateurs) avec actuellement plus de 221 émulateurs supportés.

Il supporte également le lecteur multimédia Kodi. D'ailleurs petite anecdote, j'utilise ce dernier avec le plugin Jellyfin (concurrent de Plex) qui me permet d'accéder à ma médiathèque sans passer par le transcodage côté serveur. cela soulage le processeur côté serveur et c'est le poste client qui s'occupe de décoder.

Bref, avec Batocera, c'est l'ensemble des émulateurs existants qui sont configurés et fournis clés en main.

2-Pourquoi virtualiser Batocera ?

Dernièrement, je suis tombé sur un excellent article de Nicolas Sherlock expliquant comment virtualiser Tails, une distribution GNU/Linux axé sur la sécurité. Il montre comment utiliser certains arguments pour pouvoir utiliser les fichiers au format IMG.

Running Tails as a VM with persistence on Proxmox – Nicholas Sherlock

Et je me suis dis "pourquoi pas réadapter cet tutoriel pour virtualiser Batocera ?"

Je passe peu de temps à jouer donc à quoi bon dédier une machine physique alors que je peux mutualiser mes machines virtuelle au sein d'une seule et même machine physique ?

De plus, avec le PCI passthrough, je peux transmettre à Batocera une carte graphique.

3-Création de la machine virtuelle

Choisissez un VM ID disponible et donnez un nom à votre machine virtuelle.

N'ajoutez pas de lecteur CD/DVD virtual car Batocera n'est pas un fichier au format ISO mais au format IMG (vous verrez plus clair par la suite). Laissez Linux par défaut.

Laissez la configuration par défaut sauf i440fx par q35 dans "Machine" (très très important).

Supprimez le disque scsi0 en cliquant sur la corbeille.

Pour le nombre de cores, je conseille 4 par défaut, notamment pour les émulateurs de consoles 128 bits et au delà. Sinon 2 sont suffisants si ce sont des émulateurs de consoles 8/16/62/64 bits.

Entre 2048 et 4096 Mo de mémoire sont nécessaire.

Choisissez le pilote e1000 au lieu de virtio (non reconnu par Batocera).

Vérifiez les informations et confirmer le tout.

Ensuite, voici les étapes à suivre :

  • Téléchargez Batocera,
  • Décompressez l'archive,
  • Augmentez la taille de la partition si besoin,
  • Importez cette dernière comme disque scsi0 pour la machine virtuelle Batocera,
# Télécharger l'image de Batocera 
wget /var/lib/vz/template/iso https://updates.batocera.org/x86_64/stable/last/batocera-x86_64-x86_64-38-20231014.img.gz 

# Décompression du fichier .img et suppression du fichier .img.gz gzip -d batocera-x86_64-*.img.gz 

# Augmenter la taille de la partition par défaut (16, 32, 64 ou 128 go) 
# Laissez par défaut si vous stocker vos jeux sur un partage NFS/SMB truncate -s 16384M batocera-x86_64-*.img 

# Importer l'image dans votre machine virtuelle en indiquant le VM ID et le stockage (local, local-lvm) 
#qm importdisk <vmid> batocera-x86_64-*.img <storage name> 
qm importdisk 400 batocera-x86_64-*.img local-lvm

Dans "hardware", double cliquez sur "Unused Disk 0"

Cochez "Advanced" puis activez les options suivantes (optionnel) :

  • "Discard" : cela permet au système de libérer de l'espace lorsqu'un fichier est supprimé,
  • "SSD emulation" : indique au système qu'il fonctionne sur un SSD au lieu d'un disque mécanique,

On s'attaque à la partie des arguments.

Dans le terminal, exécutez qm showcmd 1xx --pretty (remplacez 1xx par votre ID de VM) pour voir la commande que Proxmox utilisera pour lancer la VM. Dans cette sortie, trouvez la définition que Proxmox a créée pour le lecteur SCSI, spécifiquement ces deux lignes :

qm showcmd 108 --pretty 
... 
-drive 'file=/dev/pve/vm-400-disk-0,if=none,id=drive-scsi0,discard=on,format=raw,cache=none,aio=io_uring,detect-zeroes=unmap' 
-device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,rotation_rate=1'

Nous allons récupérer ces informations et créer une ligne "args" (arguments) dans le fichier configuration de la machine virtuelle.

Activez la lecture seule avec l'argument "readonly=on" pour ne pas écrire accidentellement sur l'image,

-set drive.drive-scsi0.readonly=on

Puis faites en sorte d'imiter le fonctionnement d'une clé usb avec l'argument "id=drive-usb0",

-drive 'file=/dev/pve/vm-400-disk-0,if=none,id=drive-usb0,discard=on,format=raw,cache=none,aio=io_uring,detect-zeroes=unmap'

Attachez ce lecteur comme un nouveau lecteur flash amovible "usb-storage". Son "bootindex" est fixé à 1 pour qu'il devienne le nouveau lecteur de démarrage par défaut.

-device 'usb-storage,drive=drive-usb0,bootindex=1,removable=on'

Enfin, copiez ces arguments dans le fichier configuration qui se trouve dans /etc/pve/qemu-server/VM_ID.conf

Votre fichier de configuration devrait ressembler à ceci.

args: -set drive.drive-scsi0.readonly=on -drive 'file=/dev/pve/vm-400-disk-0,if=none,id=drive-usb0,discard=on,format=raw,cache=none,aio=io_uring,detect-zeroes=unmap' -device 'usb-storage,drive=drive-usb0,bootindex=1,removable=on'
boot: order=ide2;net0
cores: 4
ide2: none,media=cdrom
machine: q35
memory: 2048
meta: creation-qemu=6.1.0,ctime=1641486019
name: batocera
net0: e1000=3A:D2:58:D0:04:6D,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
parent: initial
scsi0: local-lvm:vm-400-disk-0,discard=on,size=6660M,ssd=1
scsihw: virtio-scsi-pci
smbios1: uuid=13be6191-2e8f-4159-b7bb-3d0a9b4e28fd
sockets: 1
vmgenid: 4664ea27-fcfa-469b-8c71-2e537fdbd1d5

4-PCI Passthrough

Pour avoir le signal vidéo sur votre écran, il faudra créer une passerelle pour que la machine virtuelle puisse accéder à votre carte graphique.

Dans les paramètres de la machine virtuelle, ajoutez un périphérique PCI.

Choisissez votre carte graphique (0000:01:00.0 pour ma part).

Puis activez toute les options (All functions, ROM Bar, Primary GPU et PCI-Express).

Note : si votre machine virtuelle est configuré sur i440fx, impossible de cocher l'option PCI-Express (disponible uniquement en Q35) qui est INDISPENSABLE pour que Batocera puisse fonctionner.

Félicitation! Votre machine virtuelle Batocera est enfin prête. Je vous partage une photo de ma configuration domestique.

Si vous avez des soucis avec le PCI passthrough, je ferais prochainement un article à ce sujet.

5-Se connecter en SSH ?

Pour vous connecter en SSH/SFTP, voici les identifiants par défaut :

  • user : root
  • password : linux

6-Comment obtenir les bios et les jeux ?

Pour obtenir les bios, voici le lien d'un site proposant des pack clés en main.

2021 PACK FULL BIOS BATOCERA 5.20 to V33 Dev
PACK FULL BIOS BATOCERA

Pour les jeux, voici le lien github qui référence absolument tout. Il vous faut bien sûr disposer des originaux...

/r/Roms Megathread
None

L'abus de jeux-vidéos est dangereux pour la santé, à consommer avec modération ;)