mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-03-03 16:15:54 +00:00
Simplify lxc-attach logging and terminal handling
Remove host-side tee capture of lxc-attach output and PIPESTATUS handling; lxc-attach is now invoked directly and the exit code is taken from $?. Simplify install log retrieval by pulling /root/.install-<SESSION_ID>.log directly and removing the fallback that used the host-captured terminal log, related temp-file size checks, and timeout logic. Remove terminal-state restores and input-draining (stty/dd) and stop redirecting reads from /dev/tty so interactive reads use standard input; similar simplifications applied to the retry flow. Also remove cleanup of the discarded capture log. These changes reduce complexity and terminal manipulation, at the cost of losing the previous terminal-capture fallback for installs that failed to produce a container-side log.
This commit is contained in:
@@ -4094,19 +4094,8 @@ EOF'
|
|||||||
# that sends "configuring" status AFTER the host already reported "failed"
|
# that sends "configuring" status AFTER the host already reported "failed"
|
||||||
export CONTAINER_INSTALLING=true
|
export CONTAINER_INSTALLING=true
|
||||||
|
|
||||||
# Capture lxc-attach terminal output to host-side log via tee.
|
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)"
|
||||||
# This is the ONLY reliable way to get install output when:
|
local lxc_exit=$?
|
||||||
# - install.func fails to load (DNS error) → no container-side logging
|
|
||||||
# - install script crashes before logging starts
|
|
||||||
# - $STD/silent() not used for some commands
|
|
||||||
# PIPESTATUS[0] gets the real exit code from lxc-attach (not from tee).
|
|
||||||
# stdin comes from /dev/tty so install scripts can use interactive `read`.
|
|
||||||
local _LXC_CAPTURE_LOG="/tmp/.install-capture-${SESSION_ID}.log"
|
|
||||||
lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)" </dev/tty 2>&1 | tee "$_LXC_CAPTURE_LOG"
|
|
||||||
local lxc_exit=${PIPESTATUS[0]}
|
|
||||||
|
|
||||||
# Restore terminal state after pipeline (tee/lxc-attach may leave it broken)
|
|
||||||
stty sane 2>/dev/null || true
|
|
||||||
|
|
||||||
unset CONTAINER_INSTALLING
|
unset CONTAINER_INSTALLING
|
||||||
|
|
||||||
@@ -4168,19 +4157,9 @@ EOF'
|
|||||||
build_log_copied=true
|
build_log_copied=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Copy and append INSTALL_LOG from container (with timeout to prevent hangs)
|
# Copy and append INSTALL_LOG from container
|
||||||
local temp_install_log="/tmp/.install-temp-${SESSION_ID}.log"
|
local temp_install_log="/tmp/.install-temp-${SESSION_ID}.log"
|
||||||
local container_log_ok=false
|
if pct pull "$CTID" "/root/.install-${SESSION_ID}.log" "$temp_install_log" 2>/dev/null; then
|
||||||
if timeout 8 pct pull "$CTID" "/root/.install-${SESSION_ID}.log" "$temp_install_log" 2>/dev/null; then
|
|
||||||
# Only use container log if it has meaningful content (>100 bytes)
|
|
||||||
if [[ -s "$temp_install_log" ]] && [[ $(stat -c%s "$temp_install_log" 2>/dev/null || echo 0) -gt 100 ]]; then
|
|
||||||
container_log_ok=true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# PHASE 2: Use container-side log if available, otherwise use host-captured tee output
|
|
||||||
local _LXC_CAPTURE_LOG="/tmp/.install-capture-${SESSION_ID}.log"
|
|
||||||
if [[ "$container_log_ok" == true ]]; then
|
|
||||||
{
|
{
|
||||||
echo "================================================================================"
|
echo "================================================================================"
|
||||||
echo "PHASE 2: APPLICATION INSTALLATION (Container)"
|
echo "PHASE 2: APPLICATION INSTALLATION (Container)"
|
||||||
@@ -4188,24 +4167,8 @@ EOF'
|
|||||||
cat "$temp_install_log"
|
cat "$temp_install_log"
|
||||||
echo ""
|
echo ""
|
||||||
} >>"$combined_log"
|
} >>"$combined_log"
|
||||||
|
rm -f "$temp_install_log"
|
||||||
install_log_copied=true
|
install_log_copied=true
|
||||||
elif [[ -s "$_LXC_CAPTURE_LOG" ]]; then
|
|
||||||
# Fallback: host-captured terminal output from lxc-attach
|
|
||||||
# This captures everything the user saw, including errors when install.func
|
|
||||||
# failed to load (DNS issues, etc.) and no container-side logging was set up.
|
|
||||||
{
|
|
||||||
echo "================================================================================"
|
|
||||||
echo "PHASE 2: APPLICATION INSTALLATION (Container - captured from terminal)"
|
|
||||||
echo "================================================================================"
|
|
||||||
# Strip ANSI escape codes from terminal capture
|
|
||||||
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' "$_LXC_CAPTURE_LOG" | sed 's/\r$//'
|
|
||||||
echo ""
|
|
||||||
} >>"$combined_log"
|
|
||||||
install_log_copied=true
|
|
||||||
fi
|
|
||||||
rm -f "$temp_install_log"
|
|
||||||
|
|
||||||
if [[ "$install_log_copied" == true ]]; then
|
|
||||||
# Point INSTALL_LOG to combined log so get_full_log() finds it
|
# Point INSTALL_LOG to combined log so get_full_log() finds it
|
||||||
INSTALL_LOG="$combined_log"
|
INSTALL_LOG="$combined_log"
|
||||||
fi
|
fi
|
||||||
@@ -4391,16 +4354,8 @@ EOF'
|
|||||||
echo ""
|
echo ""
|
||||||
echo -en "${YW}Select option [1-${max_option}] (default: 1, auto-remove in 60s): ${CL}"
|
echo -en "${YW}Select option [1-${max_option}] (default: 1, auto-remove in 60s): ${CL}"
|
||||||
|
|
||||||
# Restore terminal state after lxc-attach|tee pipeline
|
|
||||||
stty sane 2>/dev/null || true
|
|
||||||
# Drain stale input from terminal buffer (lxc-attach|tee leaves residual data
|
|
||||||
# that causes read to return immediately with empty input)
|
|
||||||
dd iflag=nonblock if=/dev/tty of=/dev/null 2>/dev/null || true
|
|
||||||
sleep 0.3
|
|
||||||
|
|
||||||
# Read user choice
|
|
||||||
local response=""
|
local response=""
|
||||||
if read -t 60 -r response </dev/tty; then
|
if read -t 60 -r response; then
|
||||||
case "${response:-1}" in
|
case "${response:-1}" in
|
||||||
1)
|
1)
|
||||||
# Remove container
|
# Remove container
|
||||||
@@ -4487,10 +4442,8 @@ EOF'
|
|||||||
# Re-run install script in existing container (don't destroy/recreate)
|
# Re-run install script in existing container (don't destroy/recreate)
|
||||||
set +Eeuo pipefail
|
set +Eeuo pipefail
|
||||||
trap - ERR
|
trap - ERR
|
||||||
local _LXC_CAPTURE_LOG="/tmp/.install-capture-${SESSION_ID}.log"
|
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)" </dev/tty 2>&1 | tee "$_LXC_CAPTURE_LOG"
|
local apt_retry_exit=$?
|
||||||
local apt_retry_exit=${PIPESTATUS[0]}
|
|
||||||
stty sane 2>/dev/null || true
|
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
trap 'error_handler' ERR
|
trap 'error_handler' ERR
|
||||||
|
|
||||||
@@ -4600,9 +4553,6 @@ EOF'
|
|||||||
exit $install_exit_code
|
exit $install_exit_code
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clean up host-side capture log (not needed on success, already in combined_log on failure)
|
|
||||||
rm -f "/tmp/.install-capture-${SESSION_ID}.log" 2>/dev/null
|
|
||||||
|
|
||||||
# Re-enable error handling after successful install or recovery menu completion
|
# Re-enable error handling after successful install or recovery menu completion
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
trap 'error_handler' ERR
|
trap 'error_handler' ERR
|
||||||
|
|||||||
@@ -286,12 +286,9 @@ error_handler() {
|
|||||||
echo -en "${YW}Remove broken container ${CTID}? (Y/n) [auto-remove in 60s]: ${CL}"
|
echo -en "${YW}Remove broken container ${CTID}? (Y/n) [auto-remove in 60s]: ${CL}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Reset terminal state and flush stale input from buffer
|
# Read user response
|
||||||
stty sane 2>/dev/null || true
|
|
||||||
dd iflag=nonblock if=/dev/tty of=/dev/null 2>/dev/null || true
|
|
||||||
sleep 0.3
|
|
||||||
local response=""
|
local response=""
|
||||||
if read -t 60 -r response </dev/tty; then
|
if read -t 60 -r response; then
|
||||||
if [[ -z "$response" || "$response" =~ ^[Yy]$ ]]; then
|
if [[ -z "$response" || "$response" =~ ^[Yy]$ ]]; then
|
||||||
echo ""
|
echo ""
|
||||||
if declare -f msg_info >/dev/null 2>&1; then
|
if declare -f msg_info >/dev/null 2>&1; then
|
||||||
|
|||||||
Reference in New Issue
Block a user