Skip to content

fix: ce que l installateur pose atteint enfin le système qui tourne - #281

Merged
NLygitadm merged 1 commit into
mainfrom
fix/installation-atteint-le-systeme
Sep 9, 2026
Merged

NLygitadm merged 1 commit into
mainfrom
fix/installation-atteint-le-systeme

Conversation

@NLygitadm

@NLygitadm NLygitadm commented Sep 9, 2026 •

Copy link
Copy Markdown
Contributor

Trois remontées de testeurs le 09/09/2026. Même famille : le choix est bien enregistré, mais personne ne le rejoue là où il compte.

1. La rotation du playfield — Flo

Réglage écran ok pendant l'installation mais après reboot sur le dd ça n'a pas suivi

pincabos-screen-hotplug est la seule unité qui applique playfield_rotation depuis screens.json :

xrandr --output "$output" --mode "$mode" --pos "$pos" --rotate "${rotate:-normal}"

Elle n'était démarrée que par une règle udev :

ACTION=="change", SUBSYSTEM=="drm", RUN+="systemctl start pincabos-screen-hotplug.service"

Son .service n'avait pas de section [Install] : aucune cible ne la démarrait. Au démarrage, écrans déjà branchés, les connecteurs sont énumérés en add — l'événement change ne vient jamais. La rotation choisie dans l'assistant n'était donc jamais appliquée après le reboot.

L'ordre était déjà prévu pour le boot (After=pincabos-screen-topology-boot, posé en 4.32 quand le verrou du hotplug bloquait le frontend). Il ne manquait que le déclenchement.

2. Le ZeDMD — Flo

J'ai fait la config IP de mon zedmd pendant l'installation mais il n'est pas actif sous vpinfe

L'installateur appliquait la configuration depuis le chroot du média :

chroot "$TARGET" runuser -u pinball -- /opt/pincabos/tools/pincabos-zedmd apply || true

Pas de réseau final, pas de périphérique, et un || true qui avalait l'échec. Un ZeDMD en Wi-Fi ne pouvait pas y répondre.

On ne pose plus que le drapeau. pincabos-dmd-installer.service rejoue au premier démarrage et conserve le drapeau tant que l'application échoue : il retente aux démarrages suivants.

3. Aucune table ne démarre — Patrick

mv: cannot move '/home/pinball/.local/share/VPinballX/10.8'
    to '/home/pinball/.pincabos/vpx': Permission denied
code de sortie : 1

Renommer un dossier demande le droit d'écriture sur le parent. Sur une installation neuve il appartenait à root : le mv échouait, set -Eeuo pipefail tuait le lanceur, VPX ne démarrait jamais.

Et le journal du lanceur ne montrait rien d'anormal :

21:55:25  LEGACY [▶] Lancement Original direct.
21:55:25  RETOUR [=] frontend VPinFE reactive

Deux corrections :

  • le chown de l'installateur couvre maintenant /home/pinball — il s'arrêtait à /opt (#277) ;
  • la migration des préférences ne peut plus tuer le lanceur : quand elle échoue, on continue avec l'ancien dossier, en le disant.

Et le lanceur parle enfin. Seul le code 139 (SIGSEGV → repli OpenGL) était traité ; tout autre échec repartait en silence. Un retour non nul en moins de cinq secondes est désormais journalisé avec son code. C'est exactement ce qui manquait pour diagnostiquer.

Au passage

test_dof_port_famille (livré en #279) faisait m.glob.glob = ... — ce qui remplace glob.glob dans tout le processus, pas seulement dans le module testé. Deux tests sans rapport échouaient à retardement en recevant des listes vides. Corrigé avec un SimpleNamespace, et le piège est expliqué dans le code pour la prochaine fois.

Tests

test_installation_atteint.py, 13 tests. test_installer_dmd a correctement échoué quand j'ai retiré l'application dans le chroot — il l'épinglait ; il est mis à jour.

723 tests, tout au vert.

🤖 Generated with Claude Code

Trois remontées de testeurs le 09/09/2026, même famille : le choix est
bien enregistré, mais personne ne le rejoue là où il compte.

1. ROTATION DU PLAYFIELD (Flo)

pincabos-screen-hotplug est la SEULE unité qui applique playfield_rotation
(xrandr --rotate, depuis screens.json). Elle n'était démarrée que par la
règle udev « ACTION==change, SUBSYSTEM==drm » : au démarrage, écrans déjà
branchés, les connecteurs sont énumérés en « add » et l'événement
« change » ne vient jamais. Son .service n'avait pas de section [Install],
donc aucune cible ne la démarrait. La rotation choisie à l'installation
n'était jamais appliquée au reboot. L'ordre était déjà prévu pour le boot
(After=pincabos-screen-topology-boot) : il ne manquait que le
déclenchement.

2. ZeDMD (Flo)

L'installateur appliquait la configuration ZeDMD depuis le chroot du
média : pas de réseau final, pas de périphérique, et un « || true » qui
avalait l'échec. Un ZeDMD en Wi-Fi ne pouvait pas y répondre. On ne pose
plus que le drapeau — pincabos-dmd-installer.service rejoue au premier
démarrage et CONSERVE le drapeau tant que l'application échoue, donc il
retente aux démarrages suivants.

3. AUCUNE TABLE NE DÉMARRE (Patrick)

    mv: cannot move '/home/pinball/.local/share/VPinballX/10.8'
        to '/home/pinball/.pincabos/vpx': Permission denied

Renommer un dossier demande le droit d'écriture sur le PARENT. Le dossier
appartenait à root sur une installation neuve : le mv échouait, set -e
tuait le lanceur, VPX ne démarrait pas. VPinFE se contentait de réafficher
son menu, et le journal du lanceur montrait « Lancement Original direct »
puis « frontend réactivé » à la même seconde.

Deux corrections : le chown de l'installateur couvre maintenant
/home/pinball (il s'arrêtait à /opt), et la migration des préférences ne
peut plus tuer le lanceur — quand elle échoue, on continue avec l'ancien
dossier, en le disant.

Et le lanceur parle : seul le code 139 (SIGSEGV) était traité, tout autre
échec repartait en silence. Un retour non nul en moins de cinq secondes
est désormais journalisé avec son code. C'est ce qui manquait pour
diagnostiquer.

Au passage : test_dof_port_famille (livré en #279) remplaçait glob.glob
dans TOUT le processus au lieu de l'attribut du module. Deux tests sans
rapport échouaient à retardement en recevant des listes vides.

723 tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@NLygitadm
NLygitadm merged commit fa2190c into main Sep 9, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant