From a7a79883605f30d244e949933483151d8877c242 Mon Sep 17 00:00:00 2001 From: "courtmanr@gmail.com" Date: Sun, 4 May 2025 23:44:26 +0100 Subject: [PATCH] Refactor: Remove comments per reviewer feedback --- ct/pulse.sh | 41 +++++++--------------------------------- install/pulse-install.sh | 39 +++++--------------------------------- 2 files changed, 12 insertions(+), 68 deletions(-) diff --git a/ct/pulse.sh b/ct/pulse.sh index f9fd090..4d04e50 100644 --- a/ct/pulse.sh +++ b/ct/pulse.sh @@ -5,7 +5,6 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/ # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://github.com/rcourtman/Pulse -# App Default Values APP="Pulse" # shellcheck disable=SC2034 var_tags="monitoring;nodejs" @@ -32,19 +31,16 @@ function update_script() { check_container_storage check_container_resources - # Check if installation is present if [[ ! -d /opt/pulse-proxmox/.git ]]; then msg_error "No ${APP} Installation Found! Cannot check/update via git." exit 1 fi - # Check if jq is installed (needed for version parsing) if ! command -v jq &>/dev/null; then msg_error "jq is required for version checking but not installed. Please install it (apt-get install jq)." exit 1 fi - # Crawling the new version and checking whether an update is required msg_info "Checking for ${APP} updates..." LATEST_RELEASE=$(curl -s https://api.github.com/repos/rcourtman/Pulse/releases/latest | jq -r '.tag_name') if ! LATEST_RELEASE=$(curl -s https://api.github.com/repos/rcourtman/Pulse/releases/latest | jq -r '.tag_name') || @@ -64,12 +60,10 @@ function update_script() { if [[ "${LATEST_RELEASE}" != "$CURRENT_VERSION" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then msg_info "Updating ${APP} to ${LATEST_RELEASE}..." - # Stopping Service msg_info "Stopping ${APP} service..." systemctl stop pulse-monitor.service msg_ok "Stopped ${APP} service." - # Execute Update using git and npm (run as root, chown later) msg_info "Fetching and checking out ${LATEST_RELEASE}..." cd /opt/pulse-proxmox || { msg_error "Failed to cd into /opt/pulse-proxmox" @@ -77,25 +71,21 @@ function update_script() { } msg_info "Configuring git safe directory..." - set -x # Enable command tracing - # Allow root user to operate on the pulse user's git repo - exit if it fails + set -x git config --global --add safe.directory /opt/pulse-proxmox - local git_config_exit_code=$? # Capture exit code - set +x # Disable command tracing + local git_config_exit_code=$? + set +x if [ $git_config_exit_code -ne 0 ]; then msg_error "git config safe.directory failed with exit code $git_config_exit_code" exit 1 fi msg_ok "Configured git safe directory." - # Reset local changes, fetch, checkout, clean - # Use silent function wrapper for non-interactive update silent git fetch origin --tags --force || { msg_error "Failed to fetch from git remote." exit 1 } - echo "DEBUG: Attempting checkout command: git checkout ${LATEST_RELEASE}" # DEBUG - # Try checkout without -f and without silent wrapper + echo "DEBUG: Attempting checkout command: git checkout ${LATEST_RELEASE}" git checkout "${LATEST_RELEASE}" || { msg_error "Failed to checkout tag ${LATEST_RELEASE}." exit 1 @@ -104,7 +94,7 @@ function update_script() { msg_error "Failed to reset to tag ${LATEST_RELEASE}." exit 1 } - silent git clean -fd || { msg_warning "Failed to clean untracked files."; } # Non-fatal warning + silent git clean -fd || { msg_warning "Failed to clean untracked files."; } msg_ok "Fetched and checked out ${LATEST_RELEASE}." msg_info "Setting ownership and permissions before npm install..." @@ -112,58 +102,43 @@ function update_script() { msg_error "Failed to chown /opt/pulse-proxmox" exit 1 } - # Ensure correct execute permissions before npm install/build chmod -R u+rwX,go+rX,go-w /opt/pulse-proxmox || { msg_error "Failed to chmod /opt/pulse-proxmox" exit 1 } - # Explicitly add execute permission for node_modules binaries if [ -d "/opt/pulse-proxmox/node_modules/.bin" ]; then chmod +x /opt/pulse-proxmox/node_modules/.bin/* || msg_warning "Failed to chmod +x on node_modules/.bin" fi msg_ok "Ownership and permissions set." msg_info "Installing Node.js dependencies..." - # Run installs as pulse user with simulated login shell, ensuring correct directory silent sudo -iu pulse sh -c 'cd /opt/pulse-proxmox && npm install --unsafe-perm' || { msg_error "Failed to install root npm dependencies." exit 1 } - # Install server deps - # Explicitly set directory for server deps install as well silent sudo -iu pulse sh -c 'cd /opt/pulse-proxmox/server && npm install --unsafe-perm' || { msg_error "Failed to install server npm dependencies." exit 1 } - # No need for cd .. here as sh -c runs in a subshell msg_ok "Node.js dependencies installed." msg_info "Building CSS assets..." - # Try running tailwindcss directly as pulse user, specifying full path TAILWIND_PATH="/opt/pulse-proxmox/node_modules/.bin/tailwindcss" TAILWIND_ARGS="-c ./src/tailwind.config.js -i ./src/index.css -o ./src/public/output.css" - # Use sh -c to ensure correct directory context for paths in TAILWIND_ARGS if ! sudo -iu pulse sh -c "cd /opt/pulse-proxmox && $TAILWIND_PATH $TAILWIND_ARGS"; then - # Use echo directly, remove BFR echo -e "${TAB}${YW}⚠️ Failed to build CSS assets (See errors above). Proceeding anyway.${CL}" else msg_ok "CSS assets built." fi msg_info "Setting permissions..." - # Permissions might not be strictly needed now if installs run as pulse, - # but doesn't hurt to ensure consistency. - # Run chown again to be safe, though maybe less critical now. chown -R pulse:pulse /opt/pulse-proxmox || msg_warning "Final chown failed." - # Final chmod removed as it's done earlier msg_ok "Permissions set." - # Starting Service msg_info "Starting ${APP} service..." systemctl start pulse-monitor.service msg_ok "Started ${APP} service." - # Update version file echo "${LATEST_RELEASE}" >/opt/${APP}_version.txt msg_ok "Update Successful to ${LATEST_RELEASE}" else @@ -176,13 +151,11 @@ start build_container description -# Read port from .env file if it exists, otherwise use default -PULSE_PORT=7655 # Default +PULSE_PORT=7655 if [ -f "/opt/pulse-proxmox/.env" ] && grep -q '^PORT=' "/opt/pulse-proxmox/.env"; then PULSE_PORT=$(grep '^PORT=' "/opt/pulse-proxmox/.env" | cut -d'=' -f2 | tr -d '[:space:]') - # Basic validation if port looks like a number if ! [[ "$PULSE_PORT" =~ ^[0-9]+$ ]]; then - PULSE_PORT=7655 # Fallback to default if not a number + PULSE_PORT=7655 fi fi diff --git a/install/pulse-install.sh b/install/pulse-install.sh index 0cf9734..4a27eec 100644 --- a/install/pulse-install.sh +++ b/install/pulse-install.sh @@ -5,7 +5,6 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://github.com/rcourtman/Pulse -# Import Functions and Setup source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color @@ -15,20 +14,18 @@ setting_up_container network_check update_os -# --- Configuration --- APP="Pulse" APP_DIR="/opt/pulse-proxmox" PULSE_USER="pulse" SERVICE_NAME="pulse-monitor.service" -NODE_MAJOR_VERSION=20 # From install-pulse.sh +NODE_MAJOR_VERSION=20 REPO_URL="https://github.com/rcourtman/Pulse.git" -# Create Pulse User msg_info "Creating dedicated user '${PULSE_USER}'..." if id "$PULSE_USER" &>/dev/null; then msg_warning "User '${PULSE_USER}' already exists. Skipping creation." else - useradd -r -m -d /opt/pulse-home -s /bin/bash "$PULSE_USER" # Give a shell for potential debugging/manual commands + useradd -r -m -d /opt/pulse-home -s /bin/bash "$PULSE_USER" if useradd -r -m -d /opt/pulse-home -s /bin/bash "$PULSE_USER"; then msg_ok "User '${PULSE_USER}' created successfully." else @@ -37,7 +34,6 @@ else fi fi -# Installing Dependencies msg_info "Installing Dependencies (git, curl, sudo, gpg, jq, diffutils)..." $STD apt-get install -y \ git \ @@ -48,13 +44,12 @@ $STD apt-get install -y \ diffutils msg_ok "Installed Core Dependencies" -# Setup Node.js via NodeSource msg_info "Setting up Node.js ${NODE_MAJOR_VERSION}.x repository..." KEYRING_DIR="/usr/share/keyrings" KEYRING_FILE="$KEYRING_DIR/nodesource.gpg" mkdir -p "$KEYRING_DIR" curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --yes --dearmor -o "$KEYRING_FILE" -pipestatus=("${PIPESTATUS[@]}") # Capture pipestatus array +pipestatus=("${PIPESTATUS[@]}") if [ "${pipestatus[1]}" -ne 0 ]; then msg_error "Failed to download NodeSource GPG key (gpg exited non-zero)." exit 1 @@ -69,9 +64,7 @@ msg_ok "Installed Node.js" msg_info "Node version: $(node -v)" msg_info "npm version: $(npm -v)" -# Setup App msg_info "Cloning ${APP} repository..." -# Clone as root initially, then change ownership $STD git clone "$REPO_URL" "$APP_DIR" cd "$APP_DIR" || { msg_error "Failed to cd into $APP_DIR" @@ -85,20 +78,14 @@ pipestatus=("${PIPESTATUS[@]}") if [ "${pipestatus[0]}" -ne 0 ] || [ "${pipestatus[1]}" -ne 0 ] || [[ -z "$LATEST_RELEASE" ]] || [[ "$LATEST_RELEASE" == "null" ]]; then msg_warning "Failed to fetch latest release tag. Proceeding with default branch." - # Optionally, you could fetch tags via git and parse locally: - # LATEST_RELEASE=$(git tag -l 'v*' --sort='-version:refname' | head -n 1) - # if [[ -z "$LATEST_RELEASE" ]]; then msg_error "Could not find any release tags."; exit 1; fi else msg_info "Checking out latest release tag: ${LATEST_RELEASE}" $STD git checkout "${LATEST_RELEASE}" msg_ok "Checked out ${LATEST_RELEASE}." fi -# Install npm dependencies (as root because of /opt permissions) msg_info "Installing Node.js dependencies for ${APP}..." -# Install root deps (includes dev for build) $STD npm install --unsafe-perm -# Install server deps cd server || { msg_error "Failed to cd into server directory." exit 1 @@ -107,22 +94,17 @@ $STD npm install --unsafe-perm cd .. msg_ok "Installed Node.js dependencies." -# Build CSS msg_info "Building CSS assets..." $STD npm run build:css msg_ok "Built CSS assets." -# Configure Environment (.env) msg_info "Configuring environment file..." ENV_EXAMPLE="${APP_DIR}/.env.example" ENV_FILE="${APP_DIR}/.env" if [ -f "$ENV_EXAMPLE" ]; then - # Copy example to .env if .env doesn't exist or is empty if [ ! -s "$ENV_FILE" ]; then cp "$ENV_EXAMPLE" "$ENV_FILE" msg_info "Created ${ENV_FILE} from example." - # Set default values (or leave placeholders for user to fill) - # Using defaults similar to install-pulse.sh prompts sed -i 's|^PROXMOX_HOST=.*|PROXMOX_HOST=https://proxmox_host:8006|' "$ENV_FILE" sed -i 's|^PROXMOX_TOKEN_ID=.*|PROXMOX_TOKEN_ID=user@pam!tokenid|' "$ENV_FILE" sed -i 's|^PROXMOX_TOKEN_SECRET=.*|PROXMOX_TOKEN_SECRET=YOUR_API_SECRET_HERE|' "$ENV_FILE" @@ -132,30 +114,23 @@ if [ -f "$ENV_EXAMPLE" ]; then else msg_warning "${ENV_FILE} already exists. Skipping default configuration." fi - # Set permissions on .env regardless chmod 600 "$ENV_FILE" else msg_warning "${ENV_EXAMPLE} not found. Skipping environment configuration." fi -# Set Permissions for the entire app directory msg_info "Setting permissions for ${APP_DIR}..." chown -R ${PULSE_USER}:${PULSE_USER} "${APP_DIR}" -# Ensure pulse user can write to logs if needed, and execute necessary files find "${APP_DIR}" -type d -exec chmod 755 {} \; find "${APP_DIR}" -type f -exec chmod 644 {} \; -# Make sure node_modules executables are runnable if needed (though npm scripts handle this) -# chmod +x ${APP_DIR}/server/server.js # Example if direct execution was needed -chmod 600 "$ENV_FILE" # Ensure .env is kept restricted +chmod 600 "$ENV_FILE" msg_ok "Set permissions." -# Save Installed Version msg_info "Saving installed version information..." -VERSION_TO_SAVE="${LATEST_RELEASE:-$(git rev-parse --short HEAD)}" # Use tag or commit hash +VERSION_TO_SAVE="${LATEST_RELEASE:-$(git rev-parse --short HEAD)}" echo "${VERSION_TO_SAVE}" >/opt/${APP}_version.txt msg_ok "Saved version info (${VERSION_TO_SAVE})." -# Creating Service msg_info "Creating systemd service for ${APP}..." NODE_PATH=$(command -v node) NPM_PATH=$(command -v npm) @@ -170,7 +145,6 @@ User=${PULSE_USER} Group=${PULSE_USER} WorkingDirectory=${APP_DIR} EnvironmentFile=${APP_DIR}/.env -# Use absolute paths for node and npm ExecStart=${NODE_PATH} ${NPM_PATH} run start Restart=on-failure RestartSec=5 @@ -183,15 +157,12 @@ EOF systemctl enable -q --now ${SERVICE_NAME} msg_ok "Created and enabled systemd service." -# Add motd and customize (standard functions) motd_ssh customize -# Cleanup msg_info "Cleaning up apt cache..." $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned up." -# Sentinel file for ct script verification (optional but good practice) touch /opt/pulse_install_complete