254 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			254 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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 ""
 |