feat(xinitrc): add anaconda installer improvements and splash screen
Add several improvements to the liveinst installer workflow: - Expose archiso squashfs at /run/rootfsbase where Anaconda expects to find the Live OS image, fixing SourceSetupError crashes - Display immediate splash screen with zenity during Anaconda startup (2-4 min wait time) to provide user feedback and prevent perceived hangs - Wrap liveinst with dbus-run-session to provide D-Bus session bus, fixing GLib.GError crashes from missing ScreenSaver service - Add hardware summary log output to debug information collection These changes address three crash scenarios identified during testing and improve user experience during installer initialization.
This commit is contained in:
@@ -20,10 +20,61 @@ _OB_PID=$!
|
|||||||
# boucle (symptôme « fond bleu qui clignote/reboote »). On NE rend jamais la main
|
# 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.
|
# à startx : on reste sur Openbox pour lire les logs / rebooter proprement.
|
||||||
if command -v liveinst >/dev/null 2>&1; then
|
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="<b>Préparation de l'installateur FWS…</b>\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_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=$?
|
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
|
# 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
|
# 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
|
# 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
|
||||||
echo "########## %post --nochroot (/tmp/fws-post-nochroot.log) ##########"
|
echo "########## %post --nochroot (/tmp/fws-post-nochroot.log) ##########"
|
||||||
cat /tmp/fws-post-nochroot.log 2>/dev/null || echo "(absent)"
|
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 \
|
for f in /tmp/anaconda.log /tmp/syslog /tmp/program.log \
|
||||||
/tmp/storage.log /tmp/dbus.log /tmp/packaging.log /tmp/X.log; do
|
/tmp/storage.log /tmp/dbus.log /tmp/packaging.log /tmp/X.log; do
|
||||||
echo
|
echo
|
||||||
|
|||||||
Reference in New Issue
Block a user