168 lines
4.8 KiB
Bash
Executable File
168 lines
4.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# C-Relay Build and Restart Script
|
|
# Builds the project first, then stops any running relay and starts a new one in the background
|
|
|
|
echo "=== C Nostr Relay Build and Restart Script ==="
|
|
|
|
# Parse command line arguments
|
|
PRESERVE_CONFIG=false
|
|
HELP=false
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--preserve-config|-p)
|
|
PRESERVE_CONFIG=true
|
|
shift
|
|
;;
|
|
--help|-h)
|
|
HELP=true
|
|
shift
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
HELP=true
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Show help
|
|
if [ "$HELP" = true ]; then
|
|
echo "Usage: $0 [OPTIONS]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --preserve-config Keep existing configuration file (don't regenerate)"
|
|
echo " --help, -h Show this help message"
|
|
echo ""
|
|
echo "Default behavior: Automatically regenerates configuration file on each build"
|
|
echo " for development purposes"
|
|
exit 0
|
|
fi
|
|
|
|
# Handle configuration file regeneration
|
|
CONFIG_FILE="$HOME/.config/c-relay/c_relay_config_event.json"
|
|
if [ "$PRESERVE_CONFIG" = false ] && [ -f "$CONFIG_FILE" ]; then
|
|
echo "Removing old configuration file to trigger regeneration..."
|
|
rm -f "$CONFIG_FILE"
|
|
echo "✓ Configuration file removed - will be regenerated with latest database values"
|
|
elif [ "$PRESERVE_CONFIG" = true ] && [ -f "$CONFIG_FILE" ]; then
|
|
echo "Preserving existing configuration file as requested"
|
|
elif [ ! -f "$CONFIG_FILE" ]; then
|
|
echo "No existing configuration file found - will generate new one"
|
|
fi
|
|
|
|
# Build the project first
|
|
echo "Building project..."
|
|
make clean all
|
|
|
|
# Check if build was successful
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: Build failed. Cannot restart relay."
|
|
exit 1
|
|
fi
|
|
|
|
# Check if relay binary exists after build - detect architecture
|
|
ARCH=$(uname -m)
|
|
case "$ARCH" in
|
|
x86_64)
|
|
BINARY_PATH="./build/c_relay_x86"
|
|
;;
|
|
aarch64|arm64)
|
|
BINARY_PATH="./build/c_relay_arm64"
|
|
;;
|
|
*)
|
|
BINARY_PATH="./build/c_relay_$ARCH"
|
|
;;
|
|
esac
|
|
|
|
if [ ! -f "$BINARY_PATH" ]; then
|
|
echo "ERROR: Relay binary not found at $BINARY_PATH after build. Build may have failed."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Build successful. Proceeding with relay restart..."
|
|
|
|
# Kill existing relay if running
|
|
echo "Stopping any existing relay servers..."
|
|
pkill -f "c_relay_" 2>/dev/null
|
|
sleep 2 # Give time for shutdown
|
|
|
|
# Check if port is still bound
|
|
if lsof -i :8888 >/dev/null 2>&1; then
|
|
echo "Port 8888 still in use, force killing..."
|
|
fuser -k 8888/tcp 2>/dev/null || echo "No process on port 8888"
|
|
fi
|
|
|
|
# Get any remaining processes
|
|
REMAINING_PIDS=$(pgrep -f "c_relay_" || echo "")
|
|
if [ -n "$REMAINING_PIDS" ]; then
|
|
echo "Force killing remaining processes: $REMAINING_PIDS"
|
|
kill -9 $REMAINING_PIDS 2>/dev/null
|
|
sleep 1
|
|
else
|
|
echo "No existing relay found"
|
|
fi
|
|
|
|
# Clean up PID file
|
|
rm -f relay.pid
|
|
|
|
# Initialize database if needed
|
|
if [ ! -f "./db/c_nostr_relay.db" ]; then
|
|
echo "Initializing database..."
|
|
./db/init.sh --force >/dev/null 2>&1
|
|
fi
|
|
|
|
# Start relay in background with output redirection
|
|
echo "Starting relay server..."
|
|
echo "Debug: Current processes: $(ps aux | grep 'c_relay_' | grep -v grep || echo 'None')"
|
|
|
|
# Start relay in background and capture its PID
|
|
$BINARY_PATH > relay.log 2>&1 &
|
|
RELAY_PID=$!
|
|
|
|
echo "Started with PID: $RELAY_PID"
|
|
|
|
# Check if server is still running after short delay
|
|
sleep 3
|
|
|
|
# Check if process is still alive
|
|
if ps -p "$RELAY_PID" >/dev/null 2>&1; then
|
|
echo "Relay started successfully!"
|
|
echo "PID: $RELAY_PID"
|
|
echo "WebSocket endpoint: ws://127.0.0.1:8888"
|
|
echo "Log file: relay.log"
|
|
echo ""
|
|
|
|
# Save PID for debugging
|
|
echo $RELAY_PID > relay.pid
|
|
|
|
# Check if a new private key was generated and display it
|
|
sleep 1 # Give relay time to write initial logs
|
|
if grep -q "GENERATED RELAY ADMIN PRIVATE KEY" relay.log 2>/dev/null; then
|
|
echo "=== IMPORTANT: NEW ADMIN PRIVATE KEY GENERATED ==="
|
|
echo ""
|
|
# Extract and display the private key section from the log
|
|
grep -A 8 -B 2 "GENERATED RELAY ADMIN PRIVATE KEY" relay.log | head -n 12
|
|
echo ""
|
|
echo "⚠️ SAVE THIS PRIVATE KEY SECURELY - IT CONTROLS YOUR RELAY!"
|
|
echo "⚠️ This key is also logged in relay.log for reference"
|
|
echo ""
|
|
fi
|
|
|
|
echo "=== Relay server running in background ==="
|
|
echo "To kill relay: pkill -f 'c_relay_'"
|
|
echo "To check status: ps aux | grep c_relay_"
|
|
echo "To view logs: tail -f relay.log"
|
|
echo "Binary: $BINARY_PATH"
|
|
echo "Ready for Nostr client connections!"
|
|
else
|
|
echo "ERROR: Relay failed to start"
|
|
echo "Debug: Check relay.log for error details:"
|
|
echo "--- Last 10 lines of relay.log ---"
|
|
tail -n 10 relay.log 2>/dev/null || echo "No log file found"
|
|
echo "--- End log ---"
|
|
exit 1
|
|
fi
|
|
|
|
echo "" |