Architecture validée
PC physique sans disque
↓ PXE
FOG / iPXE
↓ sanboot iSCSI TCP 3260
Synology 192.168.0.13
↓ Target iSCSI / LUN 1
GRUB installé sur le LUN
↓
Kernel + initramfs Debian
↓ DHCP + open-iscsi / iscsistart
Reconnexion au même LUN
↓
root=UUID=... → Debian opérationnel1. Préparer Debian sur le LUN iSCSI
Créer le LUN sur le NAS puis le présenter temporairement à une VM Proxmox. Installer Debian normalement sur ce disque. Proxmox masque alors le transport iSCSI et Debian voit un disque classique.
Identifier l’UUID de la partition racine :
lsblk -f
cat /etc/fstabExemple validé :
UUID=544b21d0-faf8-4cf6-b8a0-f85d0ed731a7 / ext4 errors=remount-ro 0 12. Ajouter iSCSI à l’initramfs Debian
Dans Debian démarré depuis la VM :
su -
apt update
apt install open-iscsi initramfs-toolsVérifier que l’initramfs contient les éléments nécessaires :
lsinitramfs /boot/initrd.img-$(uname -r) | grep -E 'iscsi|r8169' | head -30On doit notamment retrouver iscsi_tcp, iscsi_ibft, iscsistart, les scripts local-top/iscsi et le pilote réseau du poste physique.
Reconstruire :
update-initramfs -u -k all3. GRUB : connexion iSCSI puis root par UUID
Le point important est l’ordre des paramètres root=. Debian doit d’abord recevoir le paramètre iSCSI pour ouvrir le LUN, puis le dernier root= doit désigner la vraie partition racine.
nano /etc/default/grubConfiguration validée :
GRUB_CMDLINE_LINUX_DEFAULT="ip=dhcp root=iscsi:192.168.0.13:6:3260:1:iqn.2000-01.com.synology:Nas-Synology.Target-2.5aaa499fd71 root=UUID=544b21d0-faf8-4cf6-b8a0-f85d0ed731a7"
GRUB_CMDLINE_LINUX=""
GRUB_DISABLE_LINUX_UUID=truePuis :
update-grubContrôler la ligne générée :
grep -n "linux /boot/vmlinuz" /boot/grub/grub.cfg | headRésultat attendu, dans cet ordre :
root=/dev/sda1 ro ip=dhcp root=iscsi:192.168.0.13:6:3260:1:IQN_TARGET root=UUID=UUID_DE_LA_RACINE6 = TCP, 3260 = port iSCSI, 1 = numéro de LUN utilisé dans cette configuration Synology. Adapter l’IP, le LUN, l’IQN et l’UUID à chaque installation.4. Entrée FOG/iPXE finale
Après extinction de la VM et détachement du LUN de Proxmox, créer l’entrée iPXE :
sanboot iscsi:192.168.0.13:::1:iqn.2000-01.com.synology:Nas-Synology.Target-2.5aaa499fd71Le 1 est indispensable ici si le disque est exposé en LUN 1. Sans lui, le test a produit Could not open SAN device: Input/output error.
Flux réseau nécessaire :
Client PXE → NAS Synology : TCP 32605. Diagnostic du boot
Could not open SAN device: Input/output error→ vérifier le numéro de LUN dans l’URI iPXE ; dans le test validé il fallait:::1:.Gave up waiting for root file system device/ UUID absent → le kernel a démarré mais l’initramfs n’a pas repris le disque iSCSI.iscsistart ... session exists→ une session existe déjà ; vérifier surtout si le disque et ses partitions apparaissent ensuite.sdb: sdb1 ... Attached SCSI disk→ la reprise iSCSI fonctionne ; si le boot bloque ensuite, vérifier l’ordre des paramètresroot=.mount: bad address 'iscsi'→root=iscsi:root= doit être l’UUID de la partition Debian.
Pour récupérer temporairement une VM après une mauvaise ligne GRUB : au menu GRUB, appuyer sur e, supprimer pour ce boot les paramètres ip=dhcp root=iscsi:..., conserver root=UUID=... ro, puis démarrer avec Ctrl+X.
À retenir
open-iscsi dans l’initramfs et une ligne GRUB explicite permettent ce passage. Le root NFS/OverlayFS utilisé dans les essais précédents n’est plus nécessaire pour le système diskless.6. Transformer le Debian diskless en console rétro
Configuration validée sur PC physique : le système Debian reste sur le LUN iSCSI, tandis que les ROMs sont centralisées sur le Synology via NFS.
PXE → FOG/iPXE → LUN iSCSI → Debian 13 → LightDM/Openbox → ES-DE → RetroArch
└→ NFS /mnt/roms pour les ROMs7. Interface graphique minimale et firmware AMD
Installer Xorg, LightDM, Openbox et RetroArch :
su -
apt update
apt install --no-install-recommends xorg xserver-xorg-video-all xserver-xorg-input-all \
lightdm lightdm-gtk-greeter openbox dbus-x11
apt install retroarch joystick evtest unzip p7zip-full curl wgetSur une Radeon RX 6600/Navi 23, le pilote amdgpu était présent mais les firmwares manquaient. Symptômes : LightDM actif, aucun Xorg, aucun /dev/dri et erreurs dimgrey_cavefish_*.bin (-2).
apt install firmware-amd-graphics firmware-realtek
update-initramfs -u -k all
rebootContrôle :
ls -l /dev/dri/
lspci -nnk | grep -A4 -Ei 'VGA|3D|Display'Après connexion LightDM, un écran noir avec seulement le curseur est normal avec Openbox minimal : aucun bureau complet n'est lancé.
8. RetroArch et cores Debian
Pour certains cores, activer les composants APT contrib non-free non-free-firmware en plus de main, puis :
apt update
apt install -y libretro-core-info libretro-nestopia libretro-snes9x \
libretro-genesisplusgx libretro-gambatte libretro-mgba libretro-desmumeContrôle :
find /usr/lib -name '*libretro.so' | sortCores validés :
NES → Nestopia
SNES → Snes9x
Mega Drive → Genesis Plus GX
GB / GBC → Gambatte
GBA → mGBA
Nintendo DS→ DeSmuME9. ROMs sur Synology en NFS
Configuration réellement utilisée :
NAS : 192.168.0.13
Export : /volume2/roms
Montage Debian : /mnt/romsInstaller et tester :
apt install -y nfs-common
mkdir -p /mnt/roms
mount -t nfs -o vers=4 192.168.0.13:/volume2/roms /mnt/roms
df -h /mnt/roms
ls -la /mnt/romsMontage permanent dans /etc/fstab :
192.168.0.13:/volume2/roms /mnt/roms nfs4 rw,_netdev,x-systemd.automount,nofail 0 0Puis :
systemctl daemon-reload
mount -a
mount | grep /mnt/romsx-systemd.automount évite de bloquer le démarrage si le NAS répond lentement.Les noms de dossiers ES-DE ont de l'importance et Linux distingue majuscules/minuscules :
/mnt/roms/nes/ → NES
/mnt/roms/snes/ → Super Nintendo
/mnt/roms/gb/ → Game Boy
/mnt/roms/gbc/ → Game Boy Color
/mnt/roms/gba/ → Game Boy Advance
/mnt/roms/megadrive/ → Mega Drive
/mnt/roms/nds/ → Nintendo DS
/mnt/roms/n64/ → Nintendo 64Exemple : une ROM .sfc est une ROM SNES et doit être placée dans /mnt/roms/snes/.
10. ES-DE
ES-DE est lancé sous forme AppImage dans le compte jedi :
mkdir -p ~/Applications
cd ~/Applications
chmod +x ES-DE_x64.AppImageTest depuis SSH dans la session graphique X11 :
DISPLAY=:0 XAUTHORITY=/home/jedi/.Xauthority ~/Applications/ES-DE_x64.AppImageAu premier lancement, choisir /mnt/roms comme répertoire des ROMs. Les données ES-DE sont créées dans /home/jedi/ES-DE/.
11. Audio PipeWire / HDMI
Si ES-DE affiche ALSA: Couldn't open audio device, installer la pile audio utilisateur :
su -
apt install -y alsa-utils pipewire pipewire-audio wireplumber
exit
systemctl --user enable --now pipewire pipewire-pulse wireplumberContrôler :
aplay -l
wpctl statusSur le poste validé, la sortie HDMI/DP de la RX 6600 était l'ID 56 :
wpctl set-default 56
wpctl set-volume 56 0.8
speaker-test -D pipewire -c 2 -t wavwpctl status avant de reprendre un numéro d'exemple.12. Démarrage automatique : autologin + ES-DE
Dans /etc/lightdm/lightdm.conf :
[Seat:*]
autologin-user=jedi
autologin-user-timeout=0
user-session=openboxCréer /home/jedi/.config/openbox/autostart. Il faut déclencher le montage NFS avant ES-DE, sinon ES-DE peut redemander le chemin des ROMs :
# Déclenche le montage NFS
ls /mnt/roms >/dev/null 2>&1
# Attend que le montage soit disponible
while ! mountpoint -q /mnt/roms; do
sleep 1
done
# Lance ES-DE
/home/jedi/Applications/ES-DE_x64.AppImage &Puis :
chmod +x /home/jedi/.config/openbox/autostart
rebootRésultat validé :
Allumage → PXE → FOG/iPXE → iSCSI → Debian → autologin → NFS ROMs → ES-DE13. Arrêt / redémarrage propre depuis ES-DE — méthode validée
Dans la configuration testée, ES-DE ne proposait pas directement d’option Shutdown. La méthode validée consiste à faire exécuter l’arrêt par Openbox, puis à déclencher le raccourci Openbox depuis un faux système ES-DE à l’aide de xdotool.
systemctl poweroff ou le choix « Éteindre » créé dans ES-DE.13.1 Autoriser uniquement poweroff et reboot sans mot de passe
su -
apt install -y sudo
nano /etc/sudoers.d/esde-power
Contenu :
jedi ALL=(root) NOPASSWD: /usr/bin/systemctl poweroff, /usr/bin/systemctl reboot
Permissions et validation :
chmod 440 /etc/sudoers.d/esde-power
visudo -cf /etc/sudoers.d/esde-power
exit
sudo -l
Résultat attendu :
(root) NOPASSWD: /usr/bin/systemctl poweroff, /usr/bin/systemctl reboot
sudo reboot peut appeler /usr/sbin/reboot et n’est donc pas couvert par cette règle. La commande validée est sudo -n /usr/bin/systemctl reboot ou sudo -n /usr/bin/systemctl poweroff.13.2 Créer deux raccourcis globaux Openbox
Créer ou sauvegarder la configuration Openbox :
mkdir -p ~/.config/openbox
[ -f ~/.config/openbox/rc.xml ] && cp ~/.config/openbox/rc.xml ~/.config/openbox/rc.xml.bak
nano ~/.config/openbox/rc.xml
Configuration minimale validée :
<?xml version="1.0" encoding="UTF-8"?>
<openbox_config xmlns="http://openbox.org/3.4/rc">
<keyboard>
<keybind key="C-A-End">
<action name="Execute">
<command>sudo /usr/bin/systemctl poweroff</command>
</action>
</keybind>
<keybind key="C-A-Home">
<action name="Execute">
<command>sudo /usr/bin/systemctl reboot</command>
</action>
</keybind>
</keyboard>
</openbox_config>
Vérifier la syntaxe XML et recharger Openbox depuis SSH :
su -
apt install -y libxml2-utils
exit
xmllint --noout ~/.config/openbox/rc.xml
DISPLAY=:0 XAUTHORITY=/home/jedi/.Xauthority openbox --reconfigure
Tests clavier validés :
Ctrl + Alt + Home → redémarrage propre
Ctrl + Alt + End → arrêt propre
13.3 Ajouter « Éteindre » et « Redémarrer » comme choix dans ES-DE
Installer xdotool :
su -
apt install -y xdotool
exit
Créer le système personnalisé ES-DE :
mkdir -p ~/ES-DE/custom_systems ~/ES-DE/systemtools
nano ~/ES-DE/custom_systems/es_systems.xml
Contenu validé :
<?xml version="1.0"?>
<systemList>
<system>
<name>systemtools</name>
<fullname>Système</fullname>
<path>/home/jedi/ES-DE/systemtools</path>
<extension>.sh</extension>
<command label="Commande système">%STARTDIR%=%GAMEDIR% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM%</command>
<platform>pc</platform>
<theme>systemtools</theme>
</system>
</systemList>
Créer les deux entrées :
cat > ~/ES-DE/systemtools/Redémarrer.sh <<'EOF'
#!/bin/bash
xdotool key ctrl+alt+Home
EOF
cat > ~/ES-DE/systemtools/Éteindre.sh <<'EOF'
#!/bin/bash
xdotool key ctrl+alt+End
EOF
chmod +x ~/ES-DE/systemtools/*.sh
Quitter complètement ES-DE puis le relancer. Le système Système contient alors deux éléments sélectionnables à la manette :
Système
├── Éteindre
└── Redémarrer
Chaîne réellement validée :
ES-DE → script .sh → xdotool → raccourci Openbox → sudo systemctl → arrêt/reboot propre
xdotool et les raccourcis Openbox a été testé avec succès.13.4 Arrêt de secours en SSH
sudo -n /usr/bin/systemctl poweroff
sudo -n /usr/bin/systemctl reboot
14. Sauvegardes de jeux
Les sauvegardes RetroArch et save states doivent être vérifiées avant de les externaliser. Le principe recommandé est de conserver les fichiers actifs sur le LUN iSCSI, puis de les sauvegarder vers le NAS plutôt que d'écrire directement les saves actives sur NFS.
find ~/.config/retroarch -type f | grep -Ei '\.(srm|sav|state|state[0-9]+)$'Architecture recommandée :
RetroArch → sauvegarde locale sur LUN iSCSI → copie/sauvegarde vers NAS → snapshots Synology