mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-04-29 21:45:59 +00:00
Improve error handling and logging for LXC builds (#12208)
Prevent host-side error_handler from being triggered during in-container install/recovery by delaying re-enabling set -Eeuo pipefail and the ERR trap in misc/build.func until after install/recovery completes; add explanatory comments. Update misc/error_handler.func to fall back to BUILD_LOG if container-internal log path is unavailable, show the last 20 log lines when present, refine container vs host detection (check INSTALL_LOG file and /root), copy INSTALL_LOG into /root and write a .failed flag with the exit code for host-side detection, and ensure full-log output and container removal prompt are shown appropriately in host context. Tweak misc/core.func silent() output to include a "Full log" path and adjust formatting.
This commit is contained in:
committed by
GitHub
parent
695a6ce29b
commit
69de9fa57e
+7
-2
@@ -4055,8 +4055,9 @@ EOF'
|
|||||||
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)"
|
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)"
|
||||||
local lxc_exit=$?
|
local lxc_exit=$?
|
||||||
|
|
||||||
set -Eeuo pipefail # Re-enable error handling
|
# Keep error handling DISABLED during failure detection and recovery
|
||||||
trap 'error_handler' ERR # Restore ERR trap
|
# Re-enabling it here would cause any pct exec/pull failure to trigger
|
||||||
|
# error_handler() on the host, bypassing the recovery menu entirely
|
||||||
|
|
||||||
# Check for error flag file in container (more reliable than lxc-attach exit code)
|
# Check for error flag file in container (more reliable than lxc-attach exit code)
|
||||||
local install_exit_code=0
|
local install_exit_code=0
|
||||||
@@ -4484,6 +4485,10 @@ EOF'
|
|||||||
|
|
||||||
exit $install_exit_code
|
exit $install_exit_code
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Re-enable error handling after successful install or recovery menu completion
|
||||||
|
set -Eeuo pipefail
|
||||||
|
trap 'error_handler' ERR
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy_lxc() {
|
destroy_lxc() {
|
||||||
|
|||||||
+2
-1
@@ -524,7 +524,8 @@ silent() {
|
|||||||
if [[ -s "$logfile" ]]; then
|
if [[ -s "$logfile" ]]; then
|
||||||
echo -e "\n${TAB}--- Last 10 lines of log ---"
|
echo -e "\n${TAB}--- Last 10 lines of log ---"
|
||||||
tail -n 10 "$logfile"
|
tail -n 10 "$logfile"
|
||||||
echo -e "${TAB}-----------------------------------\n"
|
echo -e "${TAB}-----------------------------------"
|
||||||
|
echo -e "${TAB}📋 Full log: ${logfile}\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exit "$rc"
|
exit "$rc"
|
||||||
|
|||||||
+13
-4
@@ -236,27 +236,37 @@ error_handler() {
|
|||||||
active_log="$SILENT_LOGFILE"
|
active_log="$SILENT_LOGFILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# If active_log points to a container-internal path that doesn't exist on host,
|
||||||
|
# fall back to BUILD_LOG (host-side log)
|
||||||
|
if [[ -n "$active_log" && ! -s "$active_log" && -n "${BUILD_LOG:-}" && -s "${BUILD_LOG}" ]]; then
|
||||||
|
active_log="$BUILD_LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Show last log lines if available
|
||||||
if [[ -n "$active_log" && -s "$active_log" ]]; then
|
if [[ -n "$active_log" && -s "$active_log" ]]; then
|
||||||
echo -e "\n${TAB}--- Last 20 lines of log ---"
|
echo -e "\n${TAB}--- Last 20 lines of log ---"
|
||||||
tail -n 20 "$active_log"
|
tail -n 20 "$active_log"
|
||||||
echo -e "${TAB}-----------------------------------\n"
|
echo -e "${TAB}-----------------------------------\n"
|
||||||
|
fi
|
||||||
|
|
||||||
# Detect context: Container (INSTALL_LOG set + /root exists) vs Host (BUILD_LOG)
|
# Detect context: Container (INSTALL_LOG set + inside container /root) vs Host
|
||||||
if [[ -n "${INSTALL_LOG:-}" && -d /root ]]; then
|
if [[ -n "${INSTALL_LOG:-}" && -f "${INSTALL_LOG:-}" && -d /root ]]; then
|
||||||
# CONTAINER CONTEXT: Copy log and create flag file for host
|
# CONTAINER CONTEXT: Copy log and create flag file for host
|
||||||
local container_log="/root/.install-${SESSION_ID:-error}.log"
|
local container_log="/root/.install-${SESSION_ID:-error}.log"
|
||||||
cp "$active_log" "$container_log" 2>/dev/null || true
|
cp "${INSTALL_LOG}" "$container_log" 2>/dev/null || true
|
||||||
|
|
||||||
# Create error flag file with exit code for host detection
|
# Create error flag file with exit code for host detection
|
||||||
echo "$exit_code" >"/root/.install-${SESSION_ID:-error}.failed" 2>/dev/null || true
|
echo "$exit_code" >"/root/.install-${SESSION_ID:-error}.failed" 2>/dev/null || true
|
||||||
# Log path is shown by host as combined log - no need to show container path
|
# Log path is shown by host as combined log - no need to show container path
|
||||||
else
|
else
|
||||||
# HOST CONTEXT: Show local log path and offer container cleanup
|
# HOST CONTEXT: Show local log path and offer container cleanup
|
||||||
|
if [[ -n "$active_log" && -s "$active_log" ]]; then
|
||||||
if declare -f msg_custom >/dev/null 2>&1; then
|
if declare -f msg_custom >/dev/null 2>&1; then
|
||||||
msg_custom "📋" "${YW}" "Full log: ${active_log}"
|
msg_custom "📋" "${YW}" "Full log: ${active_log}"
|
||||||
else
|
else
|
||||||
echo -e "${YW}Full log:${CL} ${BL}${active_log}${CL}"
|
echo -e "${YW}Full log:${CL} ${BL}${active_log}${CL}"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Offer to remove container if it exists (build errors after container creation)
|
# Offer to remove container if it exists (build errors after container creation)
|
||||||
if [[ -n "${CTID:-}" ]] && command -v pct &>/dev/null && pct status "$CTID" &>/dev/null; then
|
if [[ -n "${CTID:-}" ]] && command -v pct &>/dev/null && pct status "$CTID" &>/dev/null; then
|
||||||
@@ -314,7 +324,6 @@ error_handler() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
exit "$exit_code"
|
exit "$exit_code"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user