123 lines
3.8 KiB
Bash
Executable File
123 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# C-Relay Debug Binary Deployment Script
|
|
# Deploys build/c_relay_static_x86_64_debug to server for CPU profiling
|
|
#
|
|
# Usage:
|
|
# ./deploy_lt_debug.sh -- deploy debug binary and restart
|
|
# ./deploy_lt_debug.sh --profile -- deploy, then run perf and fetch results
|
|
#
|
|
# After deploying, profile with:
|
|
# sudo perf record -g -p $(pgrep c_relay) -- sleep 30
|
|
# sudo perf report --stdio --sort=symbol --no-children -n 2>/dev/null | head -80
|
|
#
|
|
# Restore production binary:
|
|
# ./deploy_lt.sh
|
|
|
|
set -e
|
|
|
|
LOCAL_DEBUG_BINARY="build/c_relay_static_x86_64_debug"
|
|
REMOTE_BINARY_PATH="/usr/local/bin/c_relay/c_relay"
|
|
REMOTE_PROD_BACKUP="/usr/local/bin/c_relay/c_relay.production"
|
|
SERVICE_NAME="c-relay"
|
|
REMOTE_HOST="ubuntu@laantungir.com"
|
|
|
|
# Check debug binary exists
|
|
if [ ! -f "$LOCAL_DEBUG_BINARY" ]; then
|
|
echo "ERROR: Debug binary not found: $LOCAL_DEBUG_BINARY"
|
|
echo ""
|
|
echo "Build it first with:"
|
|
echo " ./build_static.sh --debug"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
|
|
echo "=========================================="
|
|
echo "C-Relay Debug Deployment"
|
|
echo "=========================================="
|
|
echo "Binary: $LOCAL_DEBUG_BINARY ($(du -h "$LOCAL_DEBUG_BINARY" | cut -f1))"
|
|
echo "Target: $REMOTE_HOST:$REMOTE_BINARY_PATH"
|
|
echo ""
|
|
echo "WARNING: Debug binary has symbols and is larger than production."
|
|
echo " It is safe to run but should not be left deployed long-term."
|
|
echo ""
|
|
|
|
# Backup production binary (only if not already backed up)
|
|
echo "Backing up production binary..."
|
|
ssh "$REMOTE_HOST" "
|
|
if [ ! -f '$REMOTE_PROD_BACKUP' ]; then
|
|
sudo cp '$REMOTE_BINARY_PATH' '$REMOTE_PROD_BACKUP'
|
|
echo 'Production binary backed up to $REMOTE_PROD_BACKUP'
|
|
else
|
|
echo 'Production backup already exists, skipping'
|
|
fi
|
|
"
|
|
|
|
# Upload debug binary
|
|
echo "Uploading debug binary..."
|
|
scp "$LOCAL_DEBUG_BINARY" "$REMOTE_HOST:/tmp/c_relay_debug.tmp"
|
|
|
|
# Install debug binary
|
|
echo "Installing debug binary..."
|
|
ssh "$REMOTE_HOST" "
|
|
sudo mv '/tmp/c_relay_debug.tmp' '$REMOTE_BINARY_PATH'
|
|
sudo chown c-relay:c-relay '$REMOTE_BINARY_PATH'
|
|
sudo chmod +x '$REMOTE_BINARY_PATH'
|
|
"
|
|
|
|
# Restart service
|
|
echo "Restarting c-relay service..."
|
|
ssh "$REMOTE_HOST" "sudo systemctl daemon-reload && sudo systemctl restart '$SERVICE_NAME'"
|
|
|
|
echo ""
|
|
echo "✓ Debug binary deployed and service restarted"
|
|
echo ""
|
|
|
|
# If --profile flag, run perf automatically
|
|
if [ "$1" = "--profile" ]; then
|
|
echo "=========================================="
|
|
echo "Running perf profile (30 seconds)..."
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Wait for relay to start
|
|
sleep 3
|
|
|
|
ssh "$REMOTE_HOST" "
|
|
PID=\$(pgrep c_relay)
|
|
if [ -z \"\$PID\" ]; then
|
|
echo 'ERROR: c_relay not running'
|
|
exit 1
|
|
fi
|
|
echo \"Profiling PID \$PID for 30 seconds...\"
|
|
sudo perf record -g -p \$PID -- sleep 30
|
|
echo ''
|
|
echo '=== TOP FUNCTIONS BY CPU ==='
|
|
sudo perf report --stdio --sort=symbol --no-children -n 2>/dev/null | head -60
|
|
"
|
|
else
|
|
echo "=========================================="
|
|
echo "Next Steps: Profile the relay"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "SSH to server and run:"
|
|
echo " sudo perf record -g -p \$(pgrep c_relay) -- sleep 30"
|
|
echo " sudo perf report --stdio --sort=symbol --no-children -n 2>/dev/null | head -60"
|
|
echo ""
|
|
echo "Or run with --profile to do it automatically:"
|
|
echo " ./deploy_lt_debug.sh --profile"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "Restore Production Binary When Done"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Run this to restore the production binary:"
|
|
echo " ./deploy_lt.sh"
|
|
echo ""
|
|
echo "Or manually on the server:"
|
|
echo " sudo cp '$REMOTE_PROD_BACKUP' '$REMOTE_BINARY_PATH'"
|
|
echo " sudo systemctl restart $SERVICE_NAME"
|
|
echo ""
|