Files
aitbc/packages/github/install.sh
oib ccedbace53 chore: remove configuration files and enhance blockchain explorer with advanced search, analytics, and export features
- Delete .aitbc.yaml.example CLI configuration template
- Delete .lycheeignore link checker exclusion rules
- Delete .nvmrc Node.js version specification
- Add advanced search panel with filters for address, amount range, transaction type, time range, and validator
- Add analytics dashboard with transaction volume, active addresses, and block time metrics
- Add Chart.js integration
2026-03-02 15:38:25 +01:00

522 lines
14 KiB
Bash
Executable File

#!/bin/bash
# AITBC CLI & Services Universal Installer
# Supports Linux, macOS, and Windows (WSL2)
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Script information
SCRIPT_VERSION="1.0.0"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PACKAGES_DIR="$SCRIPT_DIR/packages"
CONFIGS_DIR="$SCRIPT_DIR/configs"
SCRIPTS_DIR="$SCRIPT_DIR/scripts"
# Default options
INSTALL_CLI=true
INSTALL_SERVICES=false
COMPLETE_INSTALL=false
UNINSTALL=false
UPDATE=false
HEALTH_CHECK=false
PLATFORM="linux"
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
--cli-only)
INSTALL_CLI=true
INSTALL_SERVICES=false
shift
;;
--services-only)
INSTALL_CLI=false
INSTALL_SERVICES=true
shift
;;
--complete)
INSTALL_CLI=true
INSTALL_SERVICES=true
COMPLETE_INSTALL=true
shift
;;
--packages)
IFS=',' read -ra PACKAGES <<< "$2"
INSTALL_CLI=false
INSTALL_SERVICES=false
CUSTOM_PACKAGES=true
shift 2
;;
--macos)
PLATFORM="macos"
shift
;;
--windows)
PLATFORM="windows"
shift
;;
--uninstall-all)
UNINSTALL=true
shift
;;
--uninstall-cli)
UNINSTALL=true
UNINSTALL_CLI_ONLY=true
shift
;;
--uninstall-services)
UNINSTALL=true
UNINSTALL_SERVICES_ONLY=true
shift
;;
--update-cli)
UPDATE=true
UPDATE_CLI=true
shift
;;
--update-services)
UPDATE=true
UPDATE_SERVICES=true
shift
;;
--update-all)
UPDATE=true
UPDATE_ALL=true
shift
;;
--health-check)
HEALTH_CHECK=true
shift
;;
--diagnose)
DIAGNOSE=true
shift
;;
--logs)
SHOW_LOGS=true
shift
;;
--reset)
RESET=true
shift
;;
--dev)
DEV_MODE=true
shift
;;
-h|--help)
show_help
exit 0
;;
-v|--version)
echo "AITBC Universal Installer v$SCRIPT_VERSION"
exit 0
;;
*)
echo -e "${RED}Unknown option: $1${NC}"
show_help
exit 1
;;
esac
done
# Show help
show_help() {
echo -e "${BLUE}AITBC CLI & Services Universal Installer${NC}"
echo "==============================================="
echo ""
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Installation Options:"
echo " --cli-only Install CLI only (default)"
echo " --services-only Install services only"
echo " --complete Install CLI and all services"
echo " --packages LIST Install specific packages (comma-separated)"
echo ""
echo "Platform Options:"
echo " --macos Force macOS installation"
echo " --windows Force Windows/WSL2 installation"
echo ""
echo "Update Options:"
echo " --update-cli Update CLI package"
echo " --update-services Update service packages"
echo " --update-all Update all packages"
echo ""
echo "Uninstall Options:"
echo " --uninstall-all Uninstall CLI and all services"
echo " --uninstall-cli Uninstall CLI only"
echo " --uninstall-services Uninstall services only"
echo ""
echo "Utility Options:"
echo " --health-check Run health check"
echo " --diagnose Run system diagnostics"
echo " --logs Show installation logs"
echo " --reset Reset installation"
echo " --dev Development mode"
echo ""
echo "Help Options:"
echo " -h, --help Show this help"
echo " -v, --version Show version"
echo ""
echo "Examples:"
echo " $0 --cli-only # Install CLI only"
echo " $0 --complete # Install everything"
echo " $0 --packages aitbc-cli,aitbc-node-service # Custom packages"
echo " $0 --health-check # Check system health"
echo " $0 --uninstall-all # Remove everything"
}
# Print banner
print_banner() {
echo -e "${CYAN}"
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ AITBC Universal Installer ║"
echo "║ CLI & Services v$SCRIPT_VERSION"
echo "╚══════════════════════════════════════════════════════════════╝"
echo -e "${NC}"
}
# Detect platform
detect_platform() {
if [[ "$OSTYPE" == "darwin"* ]]; then
PLATFORM="macos"
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
PLATFORM="linux"
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
PLATFORM="windows"
fi
echo -e "${BLUE}Detected platform: $PLATFORM${NC}"
}
# Check system requirements
check_requirements() {
echo -e "${BLUE}Checking system requirements...${NC}"
case $PLATFORM in
"linux")
check_linux_requirements
;;
"macos")
check_macos_requirements
;;
"windows")
check_windows_requirements
;;
esac
}
# Check Linux requirements
check_linux_requirements() {
# Check if running as root for service installation
if [[ $INSTALL_SERVICES == true ]] && [[ $EUID -ne 0 ]]; then
echo -e "${YELLOW}Service installation requires root privileges. You may be asked for your password.${NC}"
fi
# Check package manager
if command -v apt-get >/dev/null 2>&1; then
PKG_MANAGER="apt"
elif command -v yum >/dev/null 2>&1; then
PKG_MANAGER="yum"
elif command -v dnf >/dev/null 2>&1; then
PKG_MANAGER="dnf"
else
echo -e "${RED}❌ No supported package manager found${NC}"
exit 1
fi
echo -e "${GREEN}✓ Package manager: $PKG_MANAGER${NC}"
# Check Python
if command -v python3 >/dev/null 2>&1; then
PYTHON_VERSION=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
if [[ $(echo "$PYTHON_VERSION >= 3.13" | bc -l) -eq 1 ]]; then
echo -e "${GREEN}✓ Python $PYTHON_VERSION${NC}"
else
echo -e "${YELLOW}⚠ Python $PYTHON_VERSION found, installing 3.13+${NC}"
install_python
fi
else
echo -e "${YELLOW}⚠ Python not found, installing 3.13+${NC}"
install_python
fi
}
# Check macOS requirements
check_macos_requirements() {
# Check if Homebrew is installed
if command -v brew >/dev/null 2>&1; then
echo -e "${GREEN}✓ Homebrew found${NC}"
else
echo -e "${YELLOW}⚠ Homebrew not found, installing...${NC}"
install_homebrew
fi
# Check Python
if command -v python3 >/dev/null 2>&1; then
PYTHON_VERSION=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
if [[ $(echo "$PYTHON_VERSION >= 3.13" | bc -l) -eq 1 ]]; then
echo -e "${GREEN}✓ Python $PYTHON_VERSION${NC}"
else
echo -e "${YELLOW}⚠ Python $PYTHON_VERSION found, installing 3.13+${NC}"
install_python_macos
fi
else
echo -e "${YELLOW}⚠ Python not found, installing 3.13+${NC}"
install_python_macos
fi
}
# Check Windows requirements
check_windows_requirements() {
# Check if WSL is available
if command -v wsl >/dev/null 2>&1; then
echo -e "${GREEN}✓ WSL found${NC}"
else
echo -e "${RED}❌ WSL not found. Please install WSL2 first.${NC}"
echo "Visit: https://learn.microsoft.com/en-us/windows/wsl/install"
exit 1
fi
# Check Debian in WSL
if wsl --list --verbose | grep -q "Debian"; then
echo -e "${GREEN}✓ Debian found in WSL${NC}"
else
echo -e "${YELLOW}⚠ Debian not found in WSL, installing...${NC}"
wsl --install -d Debian
fi
}
# Install Python on Linux
install_python() {
case $PKG_MANAGER in
"apt")
sudo apt-get update
sudo apt-get install -y python3.13 python3.13-venv python3-pip
;;
"yum"|"dnf")
sudo $PKG_MANAGER install -y python3.13 python3.13-pip
;;
esac
}
# Install Homebrew on macOS
install_homebrew() {
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
}
# Install Python on macOS
install_python_macos() {
brew install python@3.13
}
# Install CLI package
install_cli() {
echo -e "${BLUE}Installing AITBC CLI...${NC}"
local cli_package="$PACKAGES_DIR/aitbc-cli_0.1.0_all.deb"
if [[ ! -f "$cli_package" ]]; then
echo -e "${RED}❌ CLI package not found: $cli_package${NC}"
return 1
fi
case $PLATFORM in
"linux")
install_deb_package "$cli_package"
;;
"macos")
install_cli_macos
;;
"windows")
install_cli_windows
;;
esac
}
# Install CLI on macOS
install_cli_macos() {
# Create virtual environment
local venv_dir="/usr/local/aitbc"
sudo mkdir -p "$venv_dir"
sudo python3.13 -m venv "$venv_dir/venv"
# Install CLI in virtual environment
sudo "$venv_dir/venv/bin/pip" install --upgrade pip
# Install from source (since deb packages don't work on macOS)
if [[ -f "$SCRIPT_DIR/../../cli/dist/aitbc_cli-0.1.0-py3-none-any.whl" ]]; then
sudo "$venv_dir/venv/bin/pip" install "$SCRIPT_DIR/../../cli/dist/aitbc_cli-0.1.0-py3-none-any.whl"
else
sudo "$venv_dir/venv/bin/pip" install git+https://github.com/aitbc/aitbc.git#subdirectory=cli
fi
# Create symlink
sudo ln -sf "$venv_dir/venv/bin/aitbc" /usr/local/bin/aitbc
echo -e "${GREEN}✓ AITBC CLI installed on macOS${NC}"
}
# Install CLI on Windows
install_cli_windows() {
echo -e "${BLUE}Installing AITBC CLI in WSL...${NC}"
# Run installation in WSL
wsl -e bash -c "
cd /mnt/c/Users/\$USER/aitbc/packages/github
./install.sh --cli-only
"
}
# Install service packages
install_services() {
echo -e "${BLUE}Installing AITBC Services...${NC}"
if [[ $PLATFORM != "linux" ]]; then
echo -e "${YELLOW}⚠ Services are only supported on Linux${NC}"
return 1
fi
local service_packages=(
"aitbc-node-service"
"aitbc-coordinator-service"
"aitbc-miner-service"
"aitbc-marketplace-service"
"aitbc-explorer-service"
"aitbc-wallet-service"
"aitbc-multimodal-service"
)
if [[ $COMPLETE_INSTALL == true ]]; then
service_packages+=("aitbc-all-services")
fi
for package in "${service_packages[@]}"; do
local package_file="$PACKAGES_DIR/${package}_0.1.0_all.deb"
if [[ -f "$package_file" ]]; then
install_deb_package "$package_file"
else
echo -e "${YELLOW}⚠ Service package not found: $package_file${NC}"
fi
done
}
# Install Debian package
install_deb_package() {
local package_file="$1"
if [[ $EUID -ne 0 ]]; then
echo -e "${YELLOW}Installing package: $(basename "$package_file")${NC}"
sudo dpkg -i "$package_file"
else
echo -e "${BLUE}Installing package: $(basename "$package_file")${NC}"
dpkg -i "$package_file"
fi
# Fix dependencies if needed
if [[ $? -ne 0 ]]; then
echo -e "${YELLOW}Fixing dependencies...${NC}"
if [[ $EUID -ne 0 ]]; then
sudo apt-get install -f
else
apt-get install -f
fi
fi
}
# Health check
health_check() {
echo -e "${BLUE}Running health check...${NC}"
# Check CLI
if command -v aitbc >/dev/null 2>&1; then
echo -e "${GREEN}✓ AITBC CLI available${NC}"
if aitbc --version >/dev/null 2>&1; then
echo -e "${GREEN}✓ AITBC CLI working${NC}"
else
echo -e "${RED}❌ AITBC CLI not working${NC}"
fi
else
echo -e "${RED}❌ AITBC CLI not found${NC}"
fi
# Check services (Linux only)
if [[ $PLATFORM == "linux" ]]; then
local services=(
"aitbc-node.service"
"aitbc-coordinator-api.service"
"aitbc-gpu-miner.service"
)
for service in "${services[@]}"; do
if systemctl is-active --quiet "$service"; then
echo -e "${GREEN}$service running${NC}"
elif systemctl list-unit-files | grep -q "$service"; then
echo -e "${YELLOW}$service installed but not running${NC}"
else
echo -e "${RED}$service not found${NC}"
fi
done
fi
}
# Main installation function
main() {
print_banner
if [[ $HEALTH_CHECK == true ]]; then
detect_platform
health_check
exit 0
fi
if [[ $UNINSTALL == true ]]; then
uninstall_packages
exit 0
fi
if [[ $UPDATE == true ]]; then
update_packages
exit 0
fi
detect_platform
check_requirements
if [[ $INSTALL_CLI == true ]]; then
install_cli
fi
if [[ $INSTALL_SERVICES == true ]]; then
install_services
fi
health_check
echo ""
echo -e "${GREEN}🎉 Installation completed successfully!${NC}"
echo ""
echo "Quick start:"
echo " aitbc --help"
echo " aitbc wallet balance"
echo ""
if [[ $PLATFORM == "linux" ]] && [[ $INSTALL_SERVICES == true ]]; then
echo "Service management:"
echo " sudo systemctl start aitbc-node.service"
echo " sudo systemctl status aitbc-node.service"
echo ""
fi
}
# Run main function
main "$@"