feat(installer): show croc log-send TUI on install error
On any ERR, both installers now trap the failure, log the line/exit code, and pop a dialog yes/no asking whether to send the log to another system via croc. Falls back to a plain read prompt if dialog is absent. Added dialog and croc to packages.extra so they are present in the live ISO. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main
parent
319af7bde7
commit
a0a2b66ccf
|
|
@ -7,7 +7,7 @@
|
||||||
# Answerfile fields: drive, kernel, keymap, hostname, username, encrypt, fido2_root,
|
# Answerfile fields: drive, kernel, keymap, hostname, username, encrypt, fido2_root,
|
||||||
# fido2_user, run_tui (password always prompted interactively)
|
# fido2_user, run_tui (password always prompted interactively)
|
||||||
|
|
||||||
set -euo pipefail
|
set -Eeuo pipefail
|
||||||
|
|
||||||
############################################
|
############################################
|
||||||
# LOGGING
|
# LOGGING
|
||||||
|
|
@ -22,6 +22,48 @@ LOGFILE="$HOME/arch-autoinstall.log"
|
||||||
} >> "$LOGFILE"
|
} >> "$LOGFILE"
|
||||||
exec > >(tee -a "$LOGFILE") 2>&1
|
exec > >(tee -a "$LOGFILE") 2>&1
|
||||||
|
|
||||||
|
############################################
|
||||||
|
# Error handler — TUI prompt to send log via croc
|
||||||
|
############################################
|
||||||
|
error_handler() {
|
||||||
|
local exit_code=$? line_num="${1:-?}"
|
||||||
|
echo "" >> "$LOGFILE"
|
||||||
|
echo "ERROR: installer failed at line $line_num (exit code $exit_code)" >> "$LOGFILE"
|
||||||
|
|
||||||
|
if command -v dialog &>/dev/null; then
|
||||||
|
if dialog --clear --title " Installer Error " \
|
||||||
|
--yesno \
|
||||||
|
"Installation failed at line $line_num (exit code: $exit_code).\n\nSend the log to another system via croc for analysis?" \
|
||||||
|
9 62; then
|
||||||
|
clear
|
||||||
|
if ! command -v croc &>/dev/null; then
|
||||||
|
echo "Installing croc..."
|
||||||
|
pacman -Sy --noconfirm croc 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
if command -v croc &>/dev/null; then
|
||||||
|
croc send "$LOGFILE"
|
||||||
|
else
|
||||||
|
echo "croc unavailable — log is at: $LOGFILE"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
clear
|
||||||
|
echo "Log saved to: $LOGFILE"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Installation failed at line $line_num (exit code $exit_code)."
|
||||||
|
read -rp "Send log via croc? [y/N]: " _croc_ans
|
||||||
|
if [[ "${_croc_ans,,}" == "y" ]]; then
|
||||||
|
command -v croc &>/dev/null || pacman -Sy --noconfirm croc 2>/dev/null || true
|
||||||
|
croc send "$LOGFILE" || true
|
||||||
|
else
|
||||||
|
echo "Log saved to: $LOGFILE"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
exit "$exit_code"
|
||||||
|
}
|
||||||
|
trap 'error_handler $LINENO' ERR
|
||||||
|
|
||||||
############################################
|
############################################
|
||||||
# ANSWERFILE
|
# ANSWERFILE
|
||||||
############################################
|
############################################
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
# If /answerfile.json exists (e.g. embedded via build.sh --preconf), all prompts
|
# If /answerfile.json exists (e.g. embedded via build.sh --preconf), all prompts
|
||||||
# are answered from it. Missing fields fall back to interactive prompts.
|
# are answered from it. Missing fields fall back to interactive prompts.
|
||||||
|
|
||||||
set -euo pipefail
|
set -Eeuo pipefail
|
||||||
|
|
||||||
############################################
|
############################################
|
||||||
# LOGGING
|
# LOGGING
|
||||||
|
|
@ -19,6 +19,48 @@ LOGFILE="$HOME/archbaseos-guided-install.log"
|
||||||
} >> "$LOGFILE"
|
} >> "$LOGFILE"
|
||||||
exec > >(tee -a "$LOGFILE") 2>&1
|
exec > >(tee -a "$LOGFILE") 2>&1
|
||||||
|
|
||||||
|
############################################
|
||||||
|
# Error handler — TUI prompt to send log via croc
|
||||||
|
############################################
|
||||||
|
error_handler() {
|
||||||
|
local exit_code=$? line_num="${1:-?}"
|
||||||
|
echo "" >> "$LOGFILE"
|
||||||
|
echo "ERROR: installer failed at line $line_num (exit code $exit_code)" >> "$LOGFILE"
|
||||||
|
|
||||||
|
if command -v dialog &>/dev/null; then
|
||||||
|
if dialog --clear --title " Installer Error " \
|
||||||
|
--yesno \
|
||||||
|
"Installation failed at line $line_num (exit code: $exit_code).\n\nSend the log to another system via croc for analysis?" \
|
||||||
|
9 62; then
|
||||||
|
clear
|
||||||
|
if ! command -v croc &>/dev/null; then
|
||||||
|
echo "Installing croc..."
|
||||||
|
pacman -Sy --noconfirm croc 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
if command -v croc &>/dev/null; then
|
||||||
|
croc send "$LOGFILE"
|
||||||
|
else
|
||||||
|
echo "croc unavailable — log is at: $LOGFILE"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
clear
|
||||||
|
echo "Log saved to: $LOGFILE"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Installation failed at line $line_num (exit code $exit_code)."
|
||||||
|
read -rp "Send log via croc? [y/N]: " _croc_ans
|
||||||
|
if [[ "${_croc_ans,,}" == "y" ]]; then
|
||||||
|
command -v croc &>/dev/null || pacman -Sy --noconfirm croc 2>/dev/null || true
|
||||||
|
croc send "$LOGFILE" || true
|
||||||
|
else
|
||||||
|
echo "Log saved to: $LOGFILE"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
exit "$exit_code"
|
||||||
|
}
|
||||||
|
trap 'error_handler $LINENO' ERR
|
||||||
|
|
||||||
############################################
|
############################################
|
||||||
# Helper Functions
|
# Helper Functions
|
||||||
############################################
|
############################################
|
||||||
|
|
|
||||||
|
|
@ -6,3 +6,5 @@ libfido2
|
||||||
btop
|
btop
|
||||||
fastfetch
|
fastfetch
|
||||||
openssh
|
openssh
|
||||||
|
dialog
|
||||||
|
croc
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue