325 lines
8 KiB
Bash
Executable file
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
|