130 lines
3.8 KiB
Bash
Executable File
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." |