diff --git a/scripts/extract_nprofile.sh b/scripts/extract_nprofile.sh index 95e51869..59e1ff26 100644 --- a/scripts/extract_nprofile.sh +++ b/scripts/extract_nprofile.sh @@ -4,8 +4,8 @@ get_log_info() { USER_HOME=$HOME USER_NAME=$(whoami) - LOG_DIR="$USER_HOME/lightning_pub/logs" - DATA_DIR="$USER_HOME/lightning_pub/" + LOG_DIR="$INSTALL_DIR/logs" + DATA_DIR="$INSTALL_DIR/" START_TIME=$(date +%s) MAX_WAIT_TIME=360 # Maximum wait time in seconds (6 minutes) WAIT_INTERVAL=5 # Time to wait between checks in seconds diff --git a/scripts/install.sh b/scripts/install.sh index 84b18b92..775e3b17 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -17,7 +17,7 @@ BRANCH="master" cleanup() { log "Cleaning up temporary files..." - rm -rf "$HOME/lightning_pub_tmp" 2>/dev/null || true + rm -rf "$TMP_DIR" 2>/dev/null || true } trap cleanup EXIT @@ -56,15 +56,30 @@ BASE_URL="https://raw.githubusercontent.com/${REPO}/${BRANCH}" REPO_URL="https://github.com/${REPO}/tarball/${BRANCH}" SCRIPTS_URL="${BASE_URL}/scripts/" -# Create user-space temp directory -mkdir -p "$HOME/lightning_pub_tmp" +TMP_DIR=$(mktemp -d) for module in "${modules[@]}"; do - wget -q "${SCRIPTS_URL}${module}.sh" -O "$HOME/lightning_pub_tmp/${module}.sh" || log_error "Failed to download ${module}.sh" 1 - source "$HOME/lightning_pub_tmp/${module}.sh" || log_error "Failed to source ${module}.sh" 1 + wget -q "${SCRIPTS_URL}${module}.sh" -O "${TMP_DIR}/${module}.sh" || log_error "Failed to download ${module}.sh" 1 + source "${TMP_DIR}/${module}.sh" || log_error "Failed to source ${module}.sh" 1 done detect_os_arch + +# Define installation paths based on user +if [ "$(id -u)" -eq 0 ]; then + IS_ROOT=true + # For root, install under /opt for system-wide access + export INSTALL_DIR="/opt/lightning_pub" + export UNIT_DIR="/etc/systemd/system" + export SYSTEMCTL_CMD="systemctl" + log "Running as root: App will be installed in $INSTALL_DIR" +else + IS_ROOT=false + export INSTALL_DIR="$HOME/lightning_pub" + export UNIT_DIR="$HOME/.config/systemd/user" + export SYSTEMCTL_CMD="systemctl --user" +fi + check_deps log "Detected OS: $OS" log "Detected ARCH: $ARCH" diff --git a/scripts/install_lightning_pub.sh b/scripts/install_lightning_pub.sh index 963d5fc7..3df75c2e 100755 --- a/scripts/install_lightning_pub.sh +++ b/scripts/install_lightning_pub.sh @@ -14,6 +14,8 @@ install_lightning_pub() { return 1 fi + local EXTRACT_DIR=$(mktemp -d) + USER_HOME=$HOME USER_NAME=$(whoami) @@ -22,15 +24,15 @@ install_lightning_pub() { return 1 } - mkdir -p $USER_HOME/lightning_pub_temp - tar -xzf $USER_HOME/lightning_pub.tar.gz -C $USER_HOME/lightning_pub_temp --strip-components=1 > /dev/null 2>&1 || { + tar -xzf $USER_HOME/lightning_pub.tar.gz -C "$EXTRACT_DIR" --strip-components=1 > /dev/null 2>&1 || { log "${PRIMARY_COLOR}Failed to extract Lightning.Pub.${RESET_COLOR}" + rm -rf "$EXTRACT_DIR" return 1 } rm $USER_HOME/lightning_pub.tar.gz # Decide flow based on whether a valid previous installation exists. - if [ -f "$USER_HOME/lightning_pub/.installed_commit" ] || [ -f "$USER_HOME/lightning_pub/db.sqlite" ]; then + if [ -f "$INSTALL_DIR/.installed_commit" ] || [ -f "$INSTALL_DIR/db.sqlite" ]; then # --- UPGRADE PATH --- log "Existing installation found. Checking for updates..." @@ -44,10 +46,10 @@ install_lightning_pub() { log_error "Could not retrieve latest version from GitHub. Upgrade check failed. Aborting." 1 fi - CURRENT_COMMIT=$(cat "$USER_HOME/lightning_pub/.installed_commit" 2>/dev/null | head -c 40) + CURRENT_COMMIT=$(cat "$INSTALL_DIR/.installed_commit" 2>/dev/null | head -c 40) if [ "$CURRENT_COMMIT" = "$LATEST_COMMIT" ]; then log "${SECONDARY_COLOR}Lightning.Pub${RESET_COLOR} is already at the latest commit. No update needed." - rm -rf $USER_HOME/lightning_pub_temp + rm -rf "$EXTRACT_DIR" return 2 fi @@ -56,67 +58,71 @@ install_lightning_pub() { # Stop the service if running to avoid rug-pull during backup and file replacement was_running=false - if systemctl --user is-active --quiet lightning_pub 2>/dev/null; then + if [ "$SYSTEMCTL_CMD" = "systemctl --user" ] && systemctl --user is-active --quiet lightning_pub 2>/dev/null; then log "Stopping Lightning.Pub service before upgrade..." systemctl --user stop lightning_pub was_running=true + elif [ "$SYSTEMCTL_CMD" = "systemctl" ] && systemctl is-active --quiet lightning_pub 2>/dev/null; then + log "Stopping Lightning.Pub service before upgrade..." + systemctl stop lightning_pub + was_running=true fi log "Backing up user data before upgrade..." BACKUP_DIR=$(mktemp -d) - mv "$USER_HOME/lightning_pub" "$BACKUP_DIR" + mv "$INSTALL_DIR" "$BACKUP_DIR" log "Replacing application files..." - mv "$USER_HOME/lightning_pub_temp" "$USER_HOME/lightning_pub" + mv "$EXTRACT_DIR" "$INSTALL_DIR" log "Restoring user data..." - cp "$BACKUP_DIR"/*.sqlite "$USER_HOME/lightning_pub/" 2>/dev/null || true - cp "$BACKUP_DIR"/.env "$USER_HOME/lightning_pub/" 2>/dev/null || true - cp -r "$BACKUP_DIR"/logs "$USER_HOME/lightning_pub/" 2>/dev/null || true - cp -r "$BACKUP_DIR"/metric_cache "$USER_HOME/lightning_pub/" 2>/dev/null || true - cp "$BACKUP_DIR"/.jwt_secret "$USER_HOME/lightning_pub/" 2>/dev/null || true - cp "$BACKUP_DIR"/.wallet_secret "$USER_HOME/lightning_pub/" 2>/dev/null || true - cp "$BACKUP_DIR"/.installed_commit "$USER_HOME/lightning_pub/" 2>/dev/null || true - cp "$BACKUP_DIR"/admin.npub "$USER_HOME/lightning_pub/" 2>/dev/null || true - cp "$BACKUP_DIR"/app.nprofile "$USER_HOME/lightning_pub/" 2>/dev/null || true - cp "$BACKUP_DIR"/admin.connect "$USER_HOME/lightning_pub/" 2>/dev/null || true - cp "$BACKUP_DIR"/admin.enroll "$USER_HOME/lightning_pub/" 2>/dev/null || true + cp "$BACKUP_DIR"/*.sqlite "$INSTALL_DIR/" 2>/dev/null || true + cp "$BACKUP_DIR"/.env "$INSTALL_DIR/" 2>/dev/null || true + cp -r "$BACKUP_DIR"/logs "$INSTALL_DIR/" 2>/dev/null || true + cp -r "$BACKUP_DIR"/metric_cache "$INSTALL_DIR/" 2>/dev/null || true + cp "$BACKUP_DIR"/.jwt_secret "$INSTALL_DIR/" 2>/dev/null || true + cp "$BACKUP_DIR"/.wallet_secret "$INSTALL_DIR/" 2>/dev/null || true + cp "$BACKUP_DIR"/.installed_commit "$INSTALL_DIR/" 2>/dev/null || true + cp "$BACKUP_DIR"/admin.npub "$INSTALL_DIR/" 2>/dev/null || true + cp "$BACKUP_DIR"/app.nprofile "$INSTALL_DIR/" 2>/dev/null || true + cp "$BACKUP_DIR"/admin.connect "$INSTALL_DIR/" 2>/dev/null || true + cp "$BACKUP_DIR"/admin.enroll "$INSTALL_DIR/" 2>/dev/null || true # Ensure correct ownership post-restore (fixes potential mismatches) - chown -R "$USER_NAME:$USER_NAME" "$USER_HOME/lightning_pub/" 2>/dev/null || true + chown -R "$USER_NAME:$USER_NAME" "$INSTALL_DIR/" 2>/dev/null || true # Secure DB files (as before) - chmod 600 "$USER_HOME/lightning_pub/db.sqlite" 2>/dev/null || true - chmod 600 "$USER_HOME/lightning_pub/metrics.sqlite" 2>/dev/null || true - chmod 600 "$USER_HOME/lightning_pub/.jwt_secret" 2>/dev/null || true - chmod 600 "$USER_HOME/lightning_pub/.wallet_secret" 2>/dev/null || true - chmod 600 "$USER_HOME/lightning_pub/admin.connect" 2>/dev/null || true - chmod 600 "$USER_HOME/lightning_pub/admin.enroll" 2>/dev/null || true + chmod 600 "$INSTALL_DIR/db.sqlite" 2>/dev/null || true + chmod 600 "$INSTALL_DIR/metrics.sqlite" 2>/dev/null || true + chmod 600 "$INSTALL_DIR/.jwt_secret" 2>/dev/null || true + chmod 600 "$INSTALL_DIR/.wallet_secret" 2>/dev/null || true + chmod 600 "$INSTALL_DIR/admin.connect" 2>/dev/null || true + chmod 600 "$INSTALL_DIR/admin.enroll" 2>/dev/null || true # Ensure log/metric dirs are writable (dirs need execute for traversal) - chmod 755 "$USER_HOME/lightning_pub/logs" 2>/dev/null || true - chmod 755 "$USER_HOME/lightning_pub/logs/"*/ 2>/dev/null || true # Subdirs like apps/ - chmod 755 "$USER_HOME/lightning_pub/metric_cache" 2>/dev/null || true + chmod 755 "$INSTALL_DIR/logs" 2>/dev/null || true + chmod 755 "$INSTALL_DIR/logs/"*/ 2>/dev/null || true # Subdirs like apps/ + chmod 755 "$INSTALL_DIR/metric_cache" 2>/dev/null || true - elif [ -d "$USER_HOME/lightning_pub" ]; then + elif [ -d "$INSTALL_DIR" ]; then # --- CONFLICT/UNSAFE PATH --- # This handles the case where the directory exists but is not a valid install (e.g., a git clone). - log_error "Directory '~/lightning_pub' already exists but does not appear to be a valid installation. For your safety, please manually back up and remove this directory, then run the installer again." 1 + log_error "Directory '$INSTALL_DIR' already exists but does not appear to be a valid installation. For your safety, please manually back up and remove this directory, then run the installer again." 1 else # --- FRESH INSTALL PATH --- # This path is only taken if the ~/lightning_pub directory does not exist. log "${PRIMARY_COLOR}Installing${RESET_COLOR} ${SECONDARY_COLOR}Lightning.Pub${RESET_COLOR}..." upgrade_status=0 - mv "$USER_HOME/lightning_pub_temp" "$USER_HOME/lightning_pub" + mkdir -p "$(dirname "$INSTALL_DIR")" + mv "$EXTRACT_DIR" "$INSTALL_DIR" fi - rm -rf $USER_HOME/lightning_pub_temp # Load nvm and npm export NVM_DIR="${NVM_DIR}" [ -s "${NVM_DIR}/nvm.sh" ] && \. "${NVM_DIR}/nvm.sh" - cd $USER_HOME/lightning_pub + cd "$INSTALL_DIR" log "${PRIMARY_COLOR}Installing${RESET_COLOR} npm dependencies..." @@ -128,16 +134,16 @@ install_lightning_pub() { tail -n 20 npm_install.log | while IFS= read -r line; do log " $line" done - log "${PRIMARY_COLOR}Full log available in $USER_HOME/lightning_pub/npm_install.log${RESET_COLOR}" + log "${PRIMARY_COLOR}Full log available in $INSTALL_DIR/npm_install.log${RESET_COLOR}" log "Restoring previous installation due to upgrade failure..." - rm -rf "$USER_HOME/lightning_pub" - mv "$BACKUP_DIR" "$USER_HOME/lightning_pub" # Restore directly + rm -rf "$INSTALL_DIR" + mv "$BACKUP_DIR" "$INSTALL_DIR" log "Backup remnant at $BACKUP_DIR for manual review but may auto-clean on reboot." if [ "$was_running" = true ]; then log "Restarting Lightning.Pub service after restore." - systemctl --user start lightning_pub + $SYSTEMCTL_CMD start lightning_pub fi return 1 @@ -147,9 +153,9 @@ install_lightning_pub() { # Note: LATEST_COMMIT will be empty on a fresh install, which is fine. # The file will be created, and the next run will be an upgrade. if [ -n "$LATEST_COMMIT" ]; then - echo "$LATEST_COMMIT" > "$USER_HOME/lightning_pub/.installed_commit" + echo "$LATEST_COMMIT" > "$INSTALL_DIR/.installed_commit" else - touch "$USER_HOME/lightning_pub/.installed_commit" + touch "$INSTALL_DIR/.installed_commit" fi rm -rf "$BACKUP_DIR" diff --git a/scripts/start_services.sh b/scripts/start_services.sh index efccc625..8d25db68 100755 --- a/scripts/start_services.sh +++ b/scripts/start_services.sh @@ -7,19 +7,6 @@ start_services() { USER_HOME=$HOME USER_NAME=$(whoami) - # Detect if running as root and set mode - if [ "$(id -u)" -eq 0 ]; then - IS_ROOT=true - INSTALL_DIR="/opt/lightning_pub" # System-wide dir for root installs - UNIT_DIR="/etc/systemd/system" - SYSTEMCTL_CMD="systemctl" - log "Running as root: Installing system-wide to $INSTALL_DIR." - else - IS_ROOT=false - INSTALL_DIR="$USER_HOME/lightning_pub" - UNIT_DIR="$USER_HOME/.config/systemd/user" - SYSTEMCTL_CMD="systemctl --user" - fi # Ensure NVM_DIR is set if [ -z "$NVM_DIR" ]; then