From df542c38b0dae678ce14be66a62f1ab688dc200e Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 16 Sep 2025 09:45:32 +0200 Subject: [PATCH] Refactor install.sh for improved structure and clarity --- install.sh | 172 +++++++++++++++++++++++++++++------------------------ 1 file changed, 93 insertions(+), 79 deletions(-) diff --git a/install.sh b/install.sh index bf375b3..63e946a 100644 --- a/install.sh +++ b/install.sh @@ -5,86 +5,88 @@ set -euo pipefail -# Colors +# --- Core --------------------------------------------------------------------- RD=$(echo -e "\033[01;31m") GN=$(echo -e "\033[1;92m") YW=$(echo -e "\033[33m") CL=$(echo -e "\033[m") -# Status functions msg_info() { echo -e "⏳ $YW$1$CL"; } msg_ok() { echo -e "✔️ $GN$1$CL"; } msg_err() { echo -e "❌ $RD$1$CL"; } -# --- Check Proxmox VE environment --- -if ! command -v pveversion >/dev/null 2>&1; then - msg_err "This script must be executed on a Proxmox VE host." - exit 1 -fi -msg_ok "Proxmox VE detected: $(pveversion)" +# --- PVE Check ---------------------------------------------------------------- +check_pve() { + if ! command -v pveversion >/dev/null 2>&1; then + msg_err "This script must be executed on a Proxmox VE host." + exit 1 + fi + msg_ok "Proxmox VE detected: $(pveversion)" +} -# --- Check git --- -if ! command -v git >/dev/null 2>&1; then - msg_info "Git not found, installing..." +# --- Dependency Check & Install ----------------------------------------------- +check_dependencies() { + msg_info "Checking required packages (build-essential, git)..." apt-get update - apt-get install -y git - msg_ok "Git installed: $(git --version)" -else - msg_ok "Git already available: $(git --version)" -fi + apt-get install -y build-essential git + msg_ok "Dependencies installed." +} -# --- Check Node.js --- -if ! command -v node >/dev/null 2>&1; then - msg_info "Node.js not found, installing Node.js 24.x..." - curl -fsSL https://deb.nodesource.com/setup_24.x | bash - - apt-get install -y nodejs - msg_ok "Node.js installed: $(node -v)" -else - msg_ok "Node.js already available: $(node -v)" -fi +check_nodejs() { + if ! command -v node >/dev/null 2>&1; then + msg_info "Node.js not found, installing Node.js 24.x..." + curl -fsSL https://deb.nodesource.com/setup_24.x | bash - + apt-get install -y nodejs + msg_ok "Node.js installed: $(node -v)" + else + msg_ok "Node.js already available: $(node -v)" + fi +} -# --- Ask for installation path --- -read -rp "Installation directory [default: /opt/PVESciptslocal]: " INSTALL_DIR -INSTALL_DIR=${INSTALL_DIR:-/opt/PVESciptslocal} +# --- Repository Handling ------------------------------------------------------ +clone_or_update_repo() { + read -rp "Installation directory [default: /opt/PVESciptslocal]: " INSTALL_DIR + INSTALL_DIR=${INSTALL_DIR:-/opt/PVESciptslocal} -# --- Clone or update repository --- -if [ ! -d "$INSTALL_DIR/.git" ]; then - msg_info "Cloning repository into $INSTALL_DIR..." - git clone https://github.com/michelroegl-brunner/PVESciptslocal.git "$INSTALL_DIR" - msg_ok "Repository cloned." -else - msg_info "Directory already exists. Pulling latest changes..." - git -C "$INSTALL_DIR" pull - msg_ok "Repository updated." -fi + if [ ! -d "$INSTALL_DIR/.git" ]; then + msg_info "Cloning repository into $INSTALL_DIR..." + git clone https://github.com/michelroegl-brunner/PVESciptslocal.git "$INSTALL_DIR" + msg_ok "Repository cloned." + else + msg_info "Directory already exists. Pulling latest changes..." + git -C "$INSTALL_DIR" pull + msg_ok "Repository updated." + fi -cd "$INSTALL_DIR" + cd "$INSTALL_DIR" +} -# --- Install dependencies --- -msg_info "Installing dependencies..." -npm install -msg_ok "Dependencies installed." +# --- Application Setup -------------------------------------------------------- +setup_app() { + msg_info "Installing npm dependencies..." + npm install + msg_ok "Dependencies installed." -# --- Environment file --- -if [ ! -f .env ]; then - msg_info "Creating environment file from example..." - cp .env.example .env - msg_ok ".env file created." -else - msg_ok ".env file already exists, keeping it." -fi + if [ ! -f .env ]; then + msg_info "Creating environment file from example..." + cp .env.example .env + msg_ok ".env file created." + else + msg_ok ".env file already exists, keeping it." + fi -# --- Build the application --- -msg_info "Building application..." -npm run build -msg_ok "Build completed." + msg_info "Building application..." + npm run build + msg_ok "Build completed." +} -# --- Create systemd service --- -SERVICE_NAME="pvescriptslocal" -SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service" +# --- Systemd Service ---------------------------------------------------------- +setup_systemd_service() { + SERVICE_NAME="pvescriptslocal" + SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service" -msg_info "Creating systemd service at $SERVICE_FILE..." -cat > "$SERVICE_FILE" < "$SERVICE_FILE" <:3000" -echo "---------------------------------------------" + echo + echo "---------------------------------------------" + echo " Service installed: $SERVICE_NAME" + echo " Manage it with:" + echo " systemctl start $SERVICE_NAME" + echo " systemctl stop $SERVICE_NAME" + echo " systemctl status $SERVICE_NAME" + echo " App will be available at: http://:3000" + echo "---------------------------------------------" +} + +# --- Main --------------------------------------------------------------------- +main() { + check_pve + check_dependencies + check_nodejs + clone_or_update_repo + setup_app + setup_systemd_service +} + +main "$@"