super_ball/thrower_daemon/install.sh

130 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# Superball Thrower Daemon Installation Script
# This script installs and configures the Superball Thrower daemon
set -e
echo "=== Superball Thrower Daemon Installation ==="
echo
# Check if running as root
if [[ $EUID -eq 0 ]]; then
echo "This script should not be run as root for security reasons."
echo "Please run as a regular user with sudo privileges."
exit 1
fi
# Check if Node.js is installed
if ! command -v node &> /dev/null; then
echo "Error: Node.js is not installed."
echo "Please install Node.js 16 or later from https://nodejs.org/"
exit 1
fi
# Check Node.js version
NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 16 ]; then
echo "Error: Node.js version 16 or later is required."
echo "Current version: $(node --version)"
exit 1
fi
echo "✓ Node.js $(node --version) detected"
# Check if npm is installed
if ! command -v npm &> /dev/null; then
echo "Error: npm is not installed."
exit 1
fi
echo "✓ npm $(npm --version) detected"
# Get the directory where this script is located
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DAEMON_DIR="$SCRIPT_DIR"
echo "Installing to: $DAEMON_DIR"
echo
# Install Node.js dependencies
echo "Installing Node.js dependencies..."
cd "$DAEMON_DIR"
npm install
if [ $? -ne 0 ]; then
echo "Error: Failed to install Node.js dependencies"
exit 1
fi
echo "✓ Dependencies installed successfully"
echo
# Create user for daemon (if it doesn't exist)
DAEMON_USER="superball"
if ! id "$DAEMON_USER" &>/dev/null; then
echo "Creating system user: $DAEMON_USER"
sudo useradd --system --no-create-home --shell /bin/false "$DAEMON_USER"
echo "✓ User $DAEMON_USER created"
else
echo "✓ User $DAEMON_USER already exists"
fi
# Create directories
echo "Creating directories..."
sudo mkdir -p /var/log/superball
sudo mkdir -p /etc/superball
sudo chown "$DAEMON_USER:$DAEMON_USER" /var/log/superball
echo "✓ Directories created"
# Copy configuration file
if [ ! -f "/etc/superball/config.json" ]; then
echo "Installing default configuration..."
sudo cp "$DAEMON_DIR/config.json" /etc/superball/config.json
sudo chown "$DAEMON_USER:$DAEMON_USER" /etc/superball/config.json
sudo chmod 600 /etc/superball/config.json
echo "✓ Configuration installed to /etc/superball/config.json"
echo "⚠️ IMPORTANT: Edit /etc/superball/config.json with your private key and settings"
else
echo "✓ Configuration already exists at /etc/superball/config.json"
fi
# Install systemd service
echo "Installing systemd service..."
sudo cp "$DAEMON_DIR/superball-thrower.service" /etc/systemd/system/
sudo sed -i "s|/path/to/thrower_daemon|$DAEMON_DIR|g" /etc/systemd/system/superball-thrower.service
sudo systemctl daemon-reload
echo "✓ Systemd service installed"
# Set permissions
echo "Setting permissions..."
sudo chown -R "$DAEMON_USER:$DAEMON_USER" "$DAEMON_DIR"
sudo chmod +x "$DAEMON_DIR/daemon.js"
echo "✓ Permissions set"
echo
echo "=== Installation Complete ==="
echo
echo "Next steps:"
echo "1. Edit the configuration file:"
echo " sudo nano /etc/superball/config.json"
echo
echo "2. Add your private key and configure relays"
echo
echo "3. Enable and start the service:"
echo " sudo systemctl enable superball-thrower"
echo " sudo systemctl start superball-thrower"
echo
echo "4. Check service status:"
echo " sudo systemctl status superball-thrower"
echo
echo "5. View logs:"
echo " sudo journalctl -u superball-thrower -f"
echo
echo "Configuration file location: /etc/superball/config.json"
echo "Log file location: /var/log/superball/daemon.log"
echo "Service name: superball-thrower"
echo
echo "⚠️ SECURITY WARNING:"
echo " Make sure to secure your private key in the configuration file!"
echo " The config file should only be readable by the superball user."