stock-bot/scripts/setup-host-dependencies.sh

325 lines
8 KiB
Bash
Executable file

#!/bin/bash
# Stock Bot - Host Machine Dependencies Setup Script
# This script installs all necessary system dependencies for running the stock bot
# with browser automation capabilities
set -e # Exit on any error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Helper functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check if running as root
check_not_root() {
if [ "$EUID" -eq 0 ]; then
log_error "Please do not run this script as root. It will use sudo when necessary."
exit 1
fi
}
# Detect OS
detect_os() {
if [[ -f /etc/os-release ]]; then
. /etc/os-release
OS=$ID
VERSION=$VERSION_ID
log_info "Detected OS: $OS $VERSION"
else
log_error "Cannot detect OS. This script supports Ubuntu/Debian systems."
exit 1
fi
}
# Update package lists
update_packages() {
log_info "Updating package lists..."
sudo apt update
log_success "Package lists updated"
}
# Install system dependencies for Playwright
install_playwright_deps() {
log_info "Installing Playwright system dependencies..."
# Install basic dependencies
sudo apt install -y \
wget \
curl \
gnupg \
ca-certificates \
software-properties-common \
apt-transport-https
# Install browser dependencies
sudo apt install -y \
libnss3 \
libnspr4 \
libatk-bridge2.0-0 \
libdrm2 \
libxkbcommon0 \
libxcomposite1 \
libxdamage1 \
libxrandr2 \
libgbm1 \
libxss1 \
libasound2 \
libatspi2.0-0 \
libgtk-3-0
# Install additional media and graphics libraries
sudo apt install -y \
libgconf-2-4 \
libxfixes3 \
libxinerama1 \
libxi6 \
libxrandr2 \
libasound2-dev \
libpangocairo-1.0-0 \
libcairo-gobject2 \
libcairo2 \
libgdk-pixbuf2.0-0 \
libgtk-3-0 \
libglib2.0-0 \
libpango-1.0-0 \
libharfbuzz0b \
libfreetype6 \
libfontconfig1
# Install fonts
sudo apt install -y \
fonts-liberation \
fonts-noto-color-emoji \
fonts-noto-cjk
log_success "Playwright system dependencies installed"
}
# Install development tools
install_dev_tools() {
log_info "Installing development tools..."
sudo apt install -y \
build-essential \
git \
curl \
wget \
unzip \
vim \
htop \
jq \
tree
log_success "Development tools installed"
}
# Install Docker (if not already installed)
install_docker() {
if command -v docker &> /dev/null; then
log_info "Docker is already installed"
return
fi
log_info "Installing Docker..."
# Add Docker's official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Update package lists and install Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Add user to docker group
sudo usermod -aG docker $USER
log_success "Docker installed. Please log out and back in for group changes to take effect."
}
# Install Node.js and Bun (if not already installed)
install_runtime() {
# Check if Bun is installed
if command -v bun &> /dev/null; then
log_info "Bun is already installed: $(bun --version)"
else
log_info "Installing Bun..."
curl -fsSL https://bun.sh/install | bash
export PATH="$HOME/.bun/bin:$PATH"
log_success "Bun installed"
fi
# Check if Node.js is installed
if command -v node &> /dev/null; then
log_info "Node.js is already installed: $(node --version)"
else
log_info "Installing Node.js..."
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
log_success "Node.js installed"
fi
}
# Install additional system dependencies for proxy and networking
install_network_deps() {
log_info "Installing networking and proxy dependencies..."
sudo apt install -y \
net-tools \
iputils-ping \
telnet \
netcat \
socat \
proxychains4 \
tor \
privoxy
log_success "Networking dependencies installed"
}
# Install system monitoring tools
install_monitoring_tools() {
log_info "Installing system monitoring tools..."
sudo apt install -y \
htop \
iotop \
nethogs \
iftop \
dstat \
sysstat \
lsof
log_success "Monitoring tools installed"
}
# Configure system limits for better performance
configure_system_limits() {
log_info "Configuring system limits..."
# Increase file descriptor limits
echo "fs.file-max = 2097152" | sudo tee -a /etc/sysctl.conf
echo "* soft nofile 65536" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65536" | sudo tee -a /etc/security/limits.conf
# Apply sysctl changes
sudo sysctl -p
log_success "System limits configured"
}
# Install Playwright browsers
install_playwright_browsers() {
log_info "Installing Playwright browsers..."
# Navigate to project directory
cd "$(dirname "$0")/.."
# Install Playwright browsers
bunx playwright install chromium
bunx playwright install firefox
bunx playwright install webkit
log_success "Playwright browsers installed"
}
# Main installation function
main() {
log_info "Starting Stock Bot host dependencies setup..."
check_not_root
detect_os
# Only proceed if Ubuntu/Debian
if [[ "$OS" != "ubuntu" && "$OS" != "debian" ]]; then
log_error "This script only supports Ubuntu and Debian systems"
exit 1
fi
# Run installation steps
update_packages
install_dev_tools
install_playwright_deps
install_runtime
install_docker
install_network_deps
install_monitoring_tools
configure_system_limits
install_playwright_browsers
log_success "Host dependencies setup completed!"
log_info "Next steps:"
echo " 1. Log out and back in (or run 'newgrp docker') to activate Docker group membership"
echo " 2. Run 'source ~/.bashrc' to update PATH for Bun"
echo " 3. Navigate to your project directory and run 'bun install'"
echo " 4. Test the setup with 'bun run dev'"
}
# Show help
show_help() {
echo "Stock Bot Host Dependencies Setup Script"
echo ""
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " -h, --help Show this help message"
echo " --skip-docker Skip Docker installation"
echo " --minimal Install only essential dependencies"
echo ""
echo "This script installs all necessary system dependencies for:"
echo " - Playwright browser automation"
echo " - Docker containers"
echo " - Development tools"
echo " - Network utilities"
echo " - System monitoring tools"
}
# Parse command line arguments
SKIP_DOCKER=false
MINIMAL=false
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
--skip-docker)
SKIP_DOCKER=true
shift
;;
--minimal)
MINIMAL=true
shift
;;
*)
log_error "Unknown option: $1"
show_help
exit 1
;;
esac
done
# Run main function
main