1917a3321b
Add fws-hw-detect integration to display hardware information in a dialog before launching the installer. This allows users to review detected hardware (GPU drivers, hypervisor guest tools, disk info) before proceeding. The summary is shown via zenity if available, with options to launch the installer or power off. Also includes the hardware summary in the installation logs for debugging purposes.
127 lines
5.9 KiB
Bash
127 lines
5.9 KiB
Bash
#!/bin/sh
|
|
# Lancé par startx (cf. /root/.zprofile), uniquement dans le live FWS.
|
|
if [ ! -d /run/archiso ]; then
|
|
exit 0
|
|
fi
|
|
|
|
xsetroot -solid "#1a1a2e"
|
|
|
|
# Openbox en arrière-plan : gestionnaire de fenêtres pour l'installateur.
|
|
openbox &
|
|
_OB_PID=$!
|
|
|
|
# Chantier C : lance l'installateur Anaconda en mode live s'il est présent.
|
|
# « liveinst » re-exécute anaconda (ici on est déjà root → pas de pkexec/polkit).
|
|
#
|
|
# DEBUG (premier run réel) : on CAPTURE stdout+stderr — un plantage d'import
|
|
# précoce de Python n'apparaît QUE là, pas dans /tmp/anaconda.log — et, si
|
|
# liveinst quitte en erreur, on regroupe tous les logs Anaconda et on les AFFICHE
|
|
# (zenity) au lieu de laisser startx rendre la main → .zprofile relancerait X en
|
|
# 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
|
|
# Chantier D : RÉCAPITULATIF matériel AVANT de lancer l'installateur.
|
|
# fws-hw-detect est la MÊME source de vérité que le %post du kickstart
|
|
# (mode --env) → ce que cet écran annonce = ce que l'install appliquera
|
|
# (drivers GPU, guest tools de l'hyperviseur, effacement des disques…).
|
|
# « Éteindre » est le seul moyen propre d'annuler : on ne rend jamais la
|
|
# main à startx (cf. plus bas), et liveinst n'a pas encore touché au disque.
|
|
# Tout est best-effort : sans script ou sans zenity, on installe comme avant.
|
|
if command -v fws-hw-detect >/dev/null 2>&1; then
|
|
fws-hw-detect --text >/tmp/fws-hw-summary.txt 2>/dev/null || true
|
|
if command -v zenity >/dev/null 2>&1 && [ -s /tmp/fws-hw-summary.txt ]; then
|
|
if ! zenity --text-info --title="FWS — Récapitulatif avant installation" \
|
|
--filename=/tmp/fws-hw-summary.txt \
|
|
--ok-label="Lancer l'installateur" --cancel-label="Éteindre" \
|
|
--width=800 --height=700 2>/dev/null; then
|
|
systemctl poweroff
|
|
exit 0
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
LIVEINST_LOG=/tmp/fws-liveinst.log
|
|
liveinst >"$LIVEINST_LOG" 2>&1
|
|
rc=$?
|
|
|
|
# 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
|
|
# logs et on les affiche systématiquement (zenity). Le traceback Python d'un
|
|
# crash d'import précoce n'est QUE dans $LIVEINST_LOG (stderr capturé).
|
|
# Log du %post chrooté (grub-install / mkinitcpio) = CE qui rend le disque
|
|
# bootable. Le kickstart en copie une version dans le LIVE
|
|
# (/tmp/fws-post-chroot.log, via un %post --nochroot final, cible encore
|
|
# montée → fiable). SECOURS si absent : on réactive le LVM (pvscan/vgscan
|
|
# rescannent les PV qu'Anaconda a désactivés) et on remonte le disque pour
|
|
# le lire.
|
|
if [ ! -s /tmp/fws-post-chroot.log ]; then
|
|
pvscan --cache >/dev/null 2>&1 || true
|
|
vgscan --mknodes >/dev/null 2>&1 || true
|
|
vgchange -ay >/dev/null 2>&1 || true
|
|
udevadm settle --timeout=10 >/dev/null 2>&1 || true
|
|
mkdir -p /run/fws-installed
|
|
for _dev in /dev/mapper/*-root /dev/mapper/* /dev/sd*[0-9] /dev/vd*[0-9] /dev/nvme*n*p*; do
|
|
[ -b "$_dev" ] || continue
|
|
mount -o ro "$_dev" /run/fws-installed 2>/dev/null || continue
|
|
if [ -f /run/fws-installed/var/log/fws-post.log ]; then
|
|
cp -f /run/fws-installed/var/log/fws-post.log /tmp/fws-post-chroot.log 2>/dev/null
|
|
umount /run/fws-installed 2>/dev/null || true
|
|
break
|
|
fi
|
|
umount /run/fws-installed 2>/dev/null || true
|
|
done
|
|
fi
|
|
|
|
DBG=/tmp/fws-debug.txt
|
|
{
|
|
echo "===== liveinst sorti (code $rc) — logs Anaconda ====="
|
|
echo
|
|
echo "########## sortie liveinst (stdout+stderr) ##########"
|
|
cat "$LIVEINST_LOG" 2>/dev/null
|
|
echo
|
|
echo "########## %post chrooté = grub-install / mkinitcpio ##########"
|
|
echo "########## >>> C'EST CE BLOC QUI DIT SI LE DISQUE VA BOOTER <<< ##########"
|
|
cat /tmp/fws-post-chroot.log 2>/dev/null || echo "(log introuvable)"
|
|
echo
|
|
echo "########## %post --nochroot (/tmp/fws-post-nochroot.log) ##########"
|
|
cat /tmp/fws-post-nochroot.log 2>/dev/null || echo "(absent)"
|
|
echo
|
|
echo "########## Récapitulatif matériel montré avant l'install ##########"
|
|
cat /tmp/fws-hw-summary.txt 2>/dev/null || echo "(absent)"
|
|
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
|
|
echo "########## $f ##########"
|
|
tail -n 200 "$f" 2>/dev/null || echo "(absent)"
|
|
done
|
|
} >"$DBG" 2>&1
|
|
|
|
# Succès d'install = les DEUX étapes qui rendent le disque bootable ont
|
|
# réussi dans le %post : mkinitcpio (« Initcpio image generation successful »)
|
|
# ET grub-install (« Installation finished. No error reported. »). Si oui →
|
|
# on montre un écran de RÉUSSITE et on éteint (l'utilisateur retire l'ISO puis
|
|
# rallume sur FWS). Sinon → on affiche tous les logs de debug (comportement
|
|
# debug). Les lignes cosmétiques (load_policy, warnings GTK…) n'influent PAS
|
|
# sur cette détection : on ne regarde que le log du %post.
|
|
if grep -q 'Initcpio image generation successful' /tmp/fws-post-chroot.log 2>/dev/null \
|
|
&& grep -q 'Installation finished. No error reported.' /tmp/fws-post-chroot.log 2>/dev/null; then
|
|
if command -v zenity >/dev/null 2>&1; then
|
|
zenity --info --width=480 --title="FWS — installation réussie ✅" \
|
|
--text="<b>FWS est installé sur le disque.</b>\n\n1. Clique OK pour <b>éteindre</b> la machine.\n2. <b>Retire l'ISO</b> (lecteur CD/DVD).\n3. Rallume → FWS démarre." \
|
|
2>/dev/null
|
|
fi
|
|
systemctl poweroff
|
|
else
|
|
# Échec (ou install non terminée) : on montre les logs pour diagnostiquer.
|
|
if command -v zenity >/dev/null 2>&1; then
|
|
zenity --text-info --title="FWS — logs Anaconda (sortie $rc)" \
|
|
--filename="$DBG" --width=1100 --height=720 2>/dev/null &
|
|
fi
|
|
wait "$_OB_PID"
|
|
fi
|
|
else
|
|
echo "[FWS] Anaconda absent de l'ISO — à builder (setup-aur.sh) + ajouter à packages.x86_64." >&2
|
|
exec openbox
|
|
fi
|