From 9611bc9bcf74232abc21800a696bb1f9cfe8c805 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Tue, 13 Jan 2026 16:53:37 +0100 Subject: [PATCH] Improve Node.js upgrade and service recovery in update.sh (#440) Enhances the Node.js upgrade process by handling both .list and .sources files, updating the apt cache, and adding error handling for download and install failures. Introduces a function to re-enable and start the systemd service on failure to prevent user lockout, and ensures this is called during rollback and upgrade errors. Also refines Node.js version checks and build environment setup. --- update.sh | 54 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/update.sh b/update.sh index 81eea9c..f4236d0 100755 --- a/update.sh +++ b/update.sh @@ -710,11 +710,14 @@ install_and_build() { log "Building application..." # Set NODE_ENV to production for build export NODE_ENV=production + # Unset TURBOPACK to prevent "Multiple bundler flags" error with --webpack + unset TURBOPACK 2>/dev/null || true + export TURBOPACK='' # Create temporary file for npm build output local build_log="/tmp/npm_build_$$.log" - if ! npm run build >"$build_log" 2>&1; then + if ! TURBOPACK='' npm run build >"$build_log" 2>&1; then log_error "Failed to build application" log_error "npm run build output:" cat "$build_log" | while read -r line; do @@ -781,6 +784,23 @@ start_with_npm() { fi } +# Re-enable the systemd service on failure to prevent users from being locked out +re_enable_service_on_failure() { + if check_service; then + log "Re-enabling systemd service after failure..." + if systemctl enable pvescriptslocal.service 2>/dev/null; then + log_success "Service re-enabled" + if systemctl start pvescriptslocal.service 2>/dev/null; then + log_success "Service started" + else + log_warning "Failed to start service - manual intervention may be required" + fi + else + log_warning "Failed to re-enable service - manual intervention may be required" + fi + fi +} + # Rollback function rollback() { log_warning "Rolling back to previous version..." @@ -852,6 +872,9 @@ rollback() { log_error "No backup directory found for rollback" fi + # Re-enable the service so users aren't locked out + re_enable_service_on_failure + log_error "Update failed. Please check the logs and try again." exit 1 } @@ -870,14 +893,14 @@ check_node_version() { log "Detected Node.js version: $current" - if ((major_version < 24)); then + if ((major_version == 24)); then + log_success "Node.js 24 already installed" + elif ((major_version < 24)); then log_warning "Node.js < 24 detected → upgrading to Node.js 24 LTS..." upgrade_node_to_24 - elif ((major_version > 24)); then + else log_warning "Node.js > 24 detected → script tested only up to Node 24" log "Continuing anyway…" - else - log_success "Node.js 24 already installed" fi } @@ -885,22 +908,39 @@ check_node_version() { upgrade_node_to_24() { log "Preparing Node.js 24 upgrade…" - # Remove old nodesource repo if it exists + # Remove old nodesource repo files if they exist if [ -f /etc/apt/sources.list.d/nodesource.list ]; then + log "Removing old nodesource.list file..." rm -f /etc/apt/sources.list.d/nodesource.list fi + if [ -f /etc/apt/sources.list.d/nodesource.sources ]; then + log "Removing old nodesource.sources file..." + rm -f /etc/apt/sources.list.d/nodesource.sources + fi + + # Update apt cache first + log "Updating apt cache..." + apt-get update >>"$LOG_FILE" 2>&1 || true # Install NodeSource repo for Node.js 24 - curl -fsSL https://deb.nodesource.com/setup_24.x -o /tmp/node24_setup.sh + log "Downloading Node.js 24 setup script..." + if ! curl -fsSL https://deb.nodesource.com/setup_24.x -o /tmp/node24_setup.sh; then + log_error "Failed to download Node.js 24 setup script" + re_enable_service_on_failure + exit 1 + fi + if ! bash /tmp/node24_setup.sh >/tmp/node24_setup.log 2>&1; then log_error "Failed to configure Node.js 24 repository" tail -20 /tmp/node24_setup.log | while read -r line; do log_error "$line"; done + re_enable_service_on_failure exit 1 fi log "Installing Node.js 24…" if ! apt-get install -y nodejs >>"$LOG_FILE" 2>&1; then log_error "Failed to install Node.js 24" + re_enable_service_on_failure exit 1 fi