diff --git a/configs/baseline/airootfs/root/.xinitrc b/configs/baseline/airootfs/root/.xinitrc index b7b050e..c05ca75 100644 --- a/configs/baseline/airootfs/root/.xinitrc +++ b/configs/baseline/airootfs/root/.xinitrc @@ -20,10 +20,61 @@ _OB_PID=$! # boucle (symptôme « fond bleu qui clignote/reboote »). On NE rend jamais la main # à startx : on reste sur Openbox pour lire les logs / rebooter proprement. if command -v liveinst >/dev/null 2>&1; then + # Payload LiveOS : avec --liveinst (passé par liveinst), Anaconda IGNORE le + # payload du kickstart (anaconda.py teste opts.liveinst AVANT le type du + # payload DBus — un « liveimg » dans le ks serait du code mort) et détecte + # l'image live sur des chemins Fedora/dracut : /dev/mapper/live-base, + # /dev/mapper/live-osimg-min ou /run/rootfsbase — tous ABSENTS d'archiso → + # « SourceSetupError: No Live OS image found! » = crash au démarrage + # (reproduit hors VM dans un chroot de l'airootfs). On expose donc le + # squashfs archiso (monté ro sur /run/archiso/airootfs) là où Anaconda le + # cherche : findmnt y résout le loop device → montage → rsync vers la cible. + if [ -d /run/archiso/airootfs ] && [ ! -e /run/rootfsbase ]; then + mkdir -p /run/rootfsbase + mount --bind /run/archiso/airootfs /run/rootfsbase || rmdir /run/rootfsbase + fi + + # ÉCRAN D'ATTENTE immédiat : le démarrage d'anaconda peut prendre 2 à + # 4 minutes (observé en VM VMware : un worker udev se bloque au boot et + # n'est tué par udevd qu'après 180 s → le « udevadm settle » d'anaconda + # attend tout ce temps). Sans feedback, l'écran reste bleu et muet et + # l'utilisateur croit à une panne (« l'installateur ne se lance pas ») + # alors que TOUT va bien. Le splash pulse pendant la préparation ; + # anaconda s'ouvre PAR-DESSUS quand il est prêt (openbox donne le focus + # aux nouvelles fenêtres) et on tue le splash à la sortie de liveinst. + # tail -f /dev/null : zenity --progress lit stdin — un stdin qui ne se + # ferme jamais garde la fenêtre ouverte sans consommer de CPU. + _SPLASH_PID="" + if command -v zenity >/dev/null 2>&1; then + tail -f /dev/null | zenity --progress --pulsate --no-cancel \ + --title="FWS" \ + --text="Préparation de l'installateur FWS…\n\nAnalyse du matériel et des disques en cours.\nCela peut prendre 2 à 4 minutes, c'est normal." \ + --width=420 2>/dev/null & + _SPLASH_PID=$! + fi + LIVEINST_LOG=/tmp/fws-liveinst.log - liveinst >"$LIVEINST_LOG" 2>&1 + # Bus D-Bus de SESSION : au démarrage (--liveinst), inhibit_screensaver() + # de pyanaconda se connecte au bus de session. S'il n'y en a AUCUN (notre + # startx root minimal n'en garantit pas), Gio lève une GLib.GError que + # pyanaconda n'attrape PAS (il n'attrape que DBusError) → crash immédiat + # (2e crash reproduit hors VM). dbus-run-session fournit un bus de session + # pour toute la durée de l'installateur ; avec un bus présent, l'absence du + # service ScreenSaver est attrapée (simple warning dans anaconda.log). + if command -v dbus-run-session >/dev/null 2>&1 && [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then + dbus-run-session -- liveinst >"$LIVEINST_LOG" 2>&1 + else + liveinst >"$LIVEINST_LOG" 2>&1 + fi rc=$? + # liveinst terminé (install finie ou échec) : le splash n'a plus de raison + # d'être — kill du pipeline tail|zenity (pkill -P attrape les deux). + if [ -n "$_SPLASH_PID" ]; then + pkill -P "$_SPLASH_PID" 2>/dev/null + kill "$_SPLASH_PID" 2>/dev/null + fi + # ATTENTION : liveinst NE propage PAS le code de sortie d'anaconda — il # enchaîne son propre nettoyage et sort souvent 0 même quand anaconda a # planté. On ne se fie donc PAS à $rc : en phase debug on regroupe TOUS les @@ -66,6 +117,9 @@ if command -v liveinst >/dev/null 2>&1; then echo echo "########## %post --nochroot (/tmp/fws-post-nochroot.log) ##########" cat /tmp/fws-post-nochroot.log 2>/dev/null || echo "(absent)" + echo + echo "########## Récapitulatif (page GUI fws_recap, avant install) ##########" + cat /tmp/fws-hw-summary.txt 2>/dev/null || echo "(absent — page récap pas atteinte)" for f in /tmp/anaconda.log /tmp/syslog /tmp/program.log \ /tmp/storage.log /tmp/dbus.log /tmp/packaging.log /tmp/X.log; do echo