254 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			254 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| 
								 | 
							
								#!/bin/bash
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# MOXYTOOL Installer Script
							 | 
						||
| 
								 | 
							
								# Downloads and installs pre-compiled MOXYTOOL binary from releases
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Usage:
							 | 
						||
| 
								 | 
							
								#   Direct piped installation (recommended):
							 | 
						||
| 
								 | 
							
								#     curl -sSL https://code.foss.global/serve.zone/moxytool/raw/branch/master/install.sh | sudo bash
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#   With version specification:
							 | 
						||
| 
								 | 
							
								#     curl -sSL https://code.foss.global/serve.zone/moxytool/raw/branch/master/install.sh | sudo bash -s -- --version v1.0.0
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Options:
							 | 
						||
| 
								 | 
							
								#   -h, --help             Show this help message
							 | 
						||
| 
								 | 
							
								#   --version VERSION      Install specific version (e.g., v1.0.0)
							 | 
						||
| 
								 | 
							
								#   --install-dir DIR      Installation directory (default: /opt/moxytool)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								set -e
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Default values
							 | 
						||
| 
								 | 
							
								SHOW_HELP=0
							 | 
						||
| 
								 | 
							
								SPECIFIED_VERSION=""
							 | 
						||
| 
								 | 
							
								INSTALL_DIR="/opt/moxytool"
							 | 
						||
| 
								 | 
							
								GITEA_BASE_URL="https://code.foss.global"
							 | 
						||
| 
								 | 
							
								GITEA_REPO="serve.zone/moxytool"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Parse command line arguments
							 | 
						||
| 
								 | 
							
								while [[ $# -gt 0 ]]; do
							 | 
						||
| 
								 | 
							
								  case $1 in
							 | 
						||
| 
								 | 
							
								    -h|--help)
							 | 
						||
| 
								 | 
							
								      SHOW_HELP=1
							 | 
						||
| 
								 | 
							
								      shift
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								    --version)
							 | 
						||
| 
								 | 
							
								      SPECIFIED_VERSION="$2"
							 | 
						||
| 
								 | 
							
								      shift 2
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								    --install-dir)
							 | 
						||
| 
								 | 
							
								      INSTALL_DIR="$2"
							 | 
						||
| 
								 | 
							
								      shift 2
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								    *)
							 | 
						||
| 
								 | 
							
								      echo "Unknown option: $1"
							 | 
						||
| 
								 | 
							
								      echo "Use -h or --help for usage information"
							 | 
						||
| 
								 | 
							
								      exit 1
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								  esac
							 | 
						||
| 
								 | 
							
								done
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ $SHOW_HELP -eq 1 ]; then
							 | 
						||
| 
								 | 
							
								  echo "MOXYTOOL Installer Script"
							 | 
						||
| 
								 | 
							
								  echo "Downloads and installs pre-compiled MOXYTOOL binary"
							 | 
						||
| 
								 | 
							
								  echo ""
							 | 
						||
| 
								 | 
							
								  echo "Usage: $0 [options]"
							 | 
						||
| 
								 | 
							
								  echo ""
							 | 
						||
| 
								 | 
							
								  echo "Options:"
							 | 
						||
| 
								 | 
							
								  echo "  -h, --help             Show this help message"
							 | 
						||
| 
								 | 
							
								  echo "  --version VERSION      Install specific version (e.g., v1.0.0)"
							 | 
						||
| 
								 | 
							
								  echo "  --install-dir DIR      Installation directory (default: /opt/moxytool)"
							 | 
						||
| 
								 | 
							
								  echo ""
							 | 
						||
| 
								 | 
							
								  echo "Examples:"
							 | 
						||
| 
								 | 
							
								  echo "  # Install latest version"
							 | 
						||
| 
								 | 
							
								  echo "  curl -sSL https://code.foss.global/serve.zone/moxytool/raw/branch/master/install.sh | sudo bash"
							 | 
						||
| 
								 | 
							
								  echo ""
							 | 
						||
| 
								 | 
							
								  echo "  # Install specific version"
							 | 
						||
| 
								 | 
							
								  echo "  curl -sSL https://code.foss.global/serve.zone/moxytool/raw/branch/master/install.sh | sudo bash -s -- --version v1.0.0"
							 | 
						||
| 
								 | 
							
								  exit 0
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Check if running as root
							 | 
						||
| 
								 | 
							
								if [ "$EUID" -ne 0 ]; then
							 | 
						||
| 
								 | 
							
								  echo "Please run as root (sudo bash install.sh or pipe to sudo bash)"
							 | 
						||
| 
								 | 
							
								  exit 1
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Helper function to detect OS and architecture
							 | 
						||
| 
								 | 
							
								detect_platform() {
							 | 
						||
| 
								 | 
							
								  local os=$(uname -s)
							 | 
						||
| 
								 | 
							
								  local arch=$(uname -m)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  # Map OS
							 | 
						||
| 
								 | 
							
								  case "$os" in
							 | 
						||
| 
								 | 
							
								    Linux)
							 | 
						||
| 
								 | 
							
								      os_name="linux"
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								    Darwin)
							 | 
						||
| 
								 | 
							
								      os_name="macos"
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								    MINGW*|MSYS*|CYGWIN*)
							 | 
						||
| 
								 | 
							
								      os_name="windows"
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								    *)
							 | 
						||
| 
								 | 
							
								      echo "Error: Unsupported operating system: $os"
							 | 
						||
| 
								 | 
							
								      echo "Supported: Linux, macOS, Windows"
							 | 
						||
| 
								 | 
							
								      exit 1
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								  esac
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  # Map architecture
							 | 
						||
| 
								 | 
							
								  case "$arch" in
							 | 
						||
| 
								 | 
							
								    x86_64|amd64)
							 | 
						||
| 
								 | 
							
								      arch_name="x64"
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								    aarch64|arm64)
							 | 
						||
| 
								 | 
							
								      arch_name="arm64"
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								    *)
							 | 
						||
| 
								 | 
							
								      echo "Error: Unsupported architecture: $arch"
							 | 
						||
| 
								 | 
							
								      echo "Supported: x86_64/amd64 (x64), aarch64/arm64 (arm64)"
							 | 
						||
| 
								 | 
							
								      exit 1
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								  esac
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  # Construct binary name
							 | 
						||
| 
								 | 
							
								  if [ "$os_name" = "windows" ]; then
							 | 
						||
| 
								 | 
							
								    echo "moxytool-${os_name}-${arch_name}.exe"
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								    echo "moxytool-${os_name}-${arch_name}"
							 | 
						||
| 
								 | 
							
								  fi
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Get latest release version from Gitea API
							 | 
						||
| 
								 | 
							
								get_latest_version() {
							 | 
						||
| 
								 | 
							
								  echo "Fetching latest release version from Gitea..." >&2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  local api_url="${GITEA_BASE_URL}/api/v1/repos/${GITEA_REPO}/releases/latest"
							 | 
						||
| 
								 | 
							
								  local response=$(curl -sSL "$api_url" 2>/dev/null)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if [ $? -ne 0 ] || [ -z "$response" ]; then
							 | 
						||
| 
								 | 
							
								    echo "Error: Failed to fetch latest release information from Gitea API" >&2
							 | 
						||
| 
								 | 
							
								    echo "URL: $api_url" >&2
							 | 
						||
| 
								 | 
							
								    exit 1
							 | 
						||
| 
								 | 
							
								  fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  # Extract tag_name from JSON response
							 | 
						||
| 
								 | 
							
								  local version=$(echo "$response" | grep -o '"tag_name":"[^"]*"' | cut -d'"' -f4)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if [ -z "$version" ]; then
							 | 
						||
| 
								 | 
							
								    echo "Error: Could not determine latest version from API response" >&2
							 | 
						||
| 
								 | 
							
								    exit 1
							 | 
						||
| 
								 | 
							
								  fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  echo "$version"
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Main installation process
							 | 
						||
| 
								 | 
							
								echo "================================================"
							 | 
						||
| 
								 | 
							
								echo "  MOXYTOOL Installation Script"
							 | 
						||
| 
								 | 
							
								echo "================================================"
							 | 
						||
| 
								 | 
							
								echo ""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Detect platform
							 | 
						||
| 
								 | 
							
								BINARY_NAME=$(detect_platform)
							 | 
						||
| 
								 | 
							
								echo "Detected platform: $BINARY_NAME"
							 | 
						||
| 
								 | 
							
								echo ""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Determine version to install
							 | 
						||
| 
								 | 
							
								if [ -n "$SPECIFIED_VERSION" ]; then
							 | 
						||
| 
								 | 
							
								  VERSION="$SPECIFIED_VERSION"
							 | 
						||
| 
								 | 
							
								  echo "Installing specified version: $VERSION"
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
								  VERSION=$(get_latest_version)
							 | 
						||
| 
								 | 
							
								  echo "Installing latest version: $VERSION"
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								echo ""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Construct download URL
							 | 
						||
| 
								 | 
							
								DOWNLOAD_URL="${GITEA_BASE_URL}/${GITEA_REPO}/releases/download/${VERSION}/${BINARY_NAME}"
							 | 
						||
| 
								 | 
							
								echo "Download URL: $DOWNLOAD_URL"
							 | 
						||
| 
								 | 
							
								echo ""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Clean installation directory - ensure only binary exists
							 | 
						||
| 
								 | 
							
								if [ -d "$INSTALL_DIR" ]; then
							 | 
						||
| 
								 | 
							
								  echo "Cleaning installation directory: $INSTALL_DIR"
							 | 
						||
| 
								 | 
							
								  rm -rf "$INSTALL_DIR"
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Create fresh installation directory
							 | 
						||
| 
								 | 
							
								echo "Creating installation directory: $INSTALL_DIR"
							 | 
						||
| 
								 | 
							
								mkdir -p "$INSTALL_DIR"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Download binary
							 | 
						||
| 
								 | 
							
								echo "Downloading MOXYTOOL binary..."
							 | 
						||
| 
								 | 
							
								TEMP_FILE="$INSTALL_DIR/moxytool.download"
							 | 
						||
| 
								 | 
							
								curl -sSL "$DOWNLOAD_URL" -o "$TEMP_FILE"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ $? -ne 0 ]; then
							 | 
						||
| 
								 | 
							
								  echo "Error: Failed to download binary from $DOWNLOAD_URL"
							 | 
						||
| 
								 | 
							
								  echo ""
							 | 
						||
| 
								 | 
							
								  echo "Please check:"
							 | 
						||
| 
								 | 
							
								  echo "  1. Your internet connection"
							 | 
						||
| 
								 | 
							
								  echo "  2. The specified version exists: ${GITEA_BASE_URL}/${GITEA_REPO}/releases"
							 | 
						||
| 
								 | 
							
								  echo "  3. The platform binary is available for this release"
							 | 
						||
| 
								 | 
							
								  rm -f "$TEMP_FILE"
							 | 
						||
| 
								 | 
							
								  exit 1
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Check if download was successful (file exists and not empty)
							 | 
						||
| 
								 | 
							
								if [ ! -s "$TEMP_FILE" ]; then
							 | 
						||
| 
								 | 
							
								  echo "Error: Downloaded file is empty or does not exist"
							 | 
						||
| 
								 | 
							
								  rm -f "$TEMP_FILE"
							 | 
						||
| 
								 | 
							
								  exit 1
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Move to final location
							 | 
						||
| 
								 | 
							
								BINARY_PATH="$INSTALL_DIR/moxytool"
							 | 
						||
| 
								 | 
							
								mv "$TEMP_FILE" "$BINARY_PATH"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ $? -ne 0 ] || [ ! -f "$BINARY_PATH" ]; then
							 | 
						||
| 
								 | 
							
								  echo "Error: Failed to move binary to $BINARY_PATH"
							 | 
						||
| 
								 | 
							
								  rm -f "$TEMP_FILE" 2>/dev/null
							 | 
						||
| 
								 | 
							
								  exit 1
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Make executable
							 | 
						||
| 
								 | 
							
								chmod +x "$BINARY_PATH"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ $? -ne 0 ]; then
							 | 
						||
| 
								 | 
							
								  echo "Error: Failed to make binary executable"
							 | 
						||
| 
								 | 
							
								  exit 1
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								echo "Binary installed successfully to: $BINARY_PATH"
							 | 
						||
| 
								 | 
							
								echo ""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Check if /usr/local/bin is in PATH
							 | 
						||
| 
								 | 
							
								if [[ ":$PATH:" == *":/usr/local/bin:"* ]]; then
							 | 
						||
| 
								 | 
							
								  BIN_DIR="/usr/local/bin"
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
								  BIN_DIR="/usr/bin"
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Create symlink for global access
							 | 
						||
| 
								 | 
							
								ln -sf "$BINARY_PATH" "$BIN_DIR/moxytool"
							 | 
						||
| 
								 | 
							
								echo "Symlink created: $BIN_DIR/moxytool -> $BINARY_PATH"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								echo ""
							 | 
						||
| 
								 | 
							
								echo "================================================"
							 | 
						||
| 
								 | 
							
								echo "  MOXYTOOL Installation Complete!"
							 | 
						||
| 
								 | 
							
								echo "================================================"
							 | 
						||
| 
								 | 
							
								echo ""
							 | 
						||
| 
								 | 
							
								echo "Installation details:"
							 | 
						||
| 
								 | 
							
								echo "  Binary location: $BINARY_PATH"
							 | 
						||
| 
								 | 
							
								echo "  Symlink location: $BIN_DIR/moxytool"
							 | 
						||
| 
								 | 
							
								echo "  Version: $VERSION"
							 | 
						||
| 
								 | 
							
								echo ""
							 | 
						||
| 
								 | 
							
								echo "Get started:"
							 | 
						||
| 
								 | 
							
								echo "  moxytool"
							 | 
						||
| 
								 | 
							
								echo "  moxytool vgpu-setup  # Set up Proxmox vGPU support"
							 | 
						||
| 
								 | 
							
								echo ""
							 | 
						||
| 
								 | 
							
								echo "For vGPU setup, run:"
							 | 
						||
| 
								 | 
							
								echo "  sudo moxytool vgpu-setup"
							 | 
						||
| 
								 | 
							
								echo ""
							 |