mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-13 01:08:35 +00:00
118 lines
3.0 KiB
Bash
Executable File
118 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# AzerothCore Starter Script
|
|
# This script handles the execution of AzerothCore binaries with optional GDB support
|
|
#
|
|
# Usage: starter <binary> [gdb_file] [config] [syslog] [syserr] [gdb_enabled] [crashes_path]
|
|
#
|
|
# Parameters:
|
|
# $1 - Binary to execute (required)
|
|
# $2 - GDB configuration file (optional)
|
|
# $3 - Configuration file path (optional)
|
|
# $4 - System log file (optional)
|
|
# $5 - System error file (optional)
|
|
# $6 - GDB enabled flag (0/1, optional)
|
|
# $7 - Crashes directory path (optional)
|
|
|
|
BINPATH="$1"
|
|
BINFILE="$2"
|
|
GDB_FILE="$3"
|
|
CONFIG="$4"
|
|
SYSLOG="$5"
|
|
SYSERR="$6"
|
|
GDB_ENABLED="${7:-0}"
|
|
CRASHES_PATH="$8"
|
|
|
|
BINARY=$(realpath "$BINPATH/$BINFILE")
|
|
|
|
# Default values
|
|
CURRENT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
DEFAULT_CRASHES_PATH="$CURRENT_PATH/logs/crashes"
|
|
DEFAULT_GDB_FILE="$CURRENT_PATH/gdb.conf"
|
|
|
|
# Set defaults if not provided
|
|
CONFIG="${CONFIG:-""}"
|
|
CRASHES_PATH="${CRASHES_PATH:-$DEFAULT_CRASHES_PATH}"
|
|
GDB_FILE="${GDB_FILE:-$DEFAULT_GDB_FILE}"
|
|
|
|
# Validate binary
|
|
if [ -z "$BINARY" ]; then
|
|
echo "Error: Binary parameter is required"
|
|
echo "Usage: $0 <binary> [gdb_file] [config] [syslog] [syserr] [gdb_enabled] [crashes_path]"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$BINARY" ]; then
|
|
echo "Error: Binary '$BINARY' not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Create crashes directory if it doesn't exist
|
|
mkdir -p "$CRASHES_PATH"
|
|
|
|
cd $BINPATH || {
|
|
echo "Error: Could not change to binary path '$BINPATH'"
|
|
exit 1
|
|
}
|
|
|
|
EXECPATH=$(realpath "$BINFILE")
|
|
|
|
if [ "$GDB_ENABLED" -eq 1 ]; then
|
|
echo "Starting $EXECPATH with GDB enabled"
|
|
|
|
# Generate GDB configuration on the fly
|
|
TIMESTAMP=$(date +%Y-%m-%d-%H-%M-%S)
|
|
GDB_TEMP_FILE="$CRASHES_PATH/gdb-$TIMESTAMP.conf"
|
|
GDB_OUTPUT_FILE="$CRASHES_PATH/gdb-$TIMESTAMP.txt"
|
|
|
|
# Create GDB configuration
|
|
cat > "$GDB_TEMP_FILE" << EOF
|
|
set logging file $GDB_OUTPUT_FILE
|
|
set logging enabled on
|
|
set debug timestamp
|
|
EOF
|
|
|
|
# Add run command with config if specified
|
|
if [ -n "$CONFIG" ]; then
|
|
echo "run -c $CONFIG" >> "$GDB_TEMP_FILE"
|
|
else
|
|
echo "run" >> "$GDB_TEMP_FILE"
|
|
fi
|
|
|
|
cat >> "$GDB_TEMP_FILE" << EOF
|
|
bt
|
|
bt full
|
|
info thread
|
|
thread apply all backtrace full
|
|
EOF
|
|
|
|
# Create log files if specified
|
|
if [ -n "$SYSLOG" ]; then
|
|
[ ! -f "$SYSLOG" ] && touch "$SYSLOG"
|
|
fi
|
|
if [ -n "$SYSERR" ]; then
|
|
[ ! -f "$SYSERR" ] && touch "$SYSERR"
|
|
fi
|
|
|
|
# Execute with GDB
|
|
if [ "${WITH_CONSOLE:-0}" -eq 0 ] && [ -n "$SYSLOG" ] && [ -n "$SYSERR" ]; then
|
|
gdb -x "$GDB_TEMP_FILE" --batch "$EXECPATH" >> "$SYSLOG" 2>> "$SYSERR"
|
|
else
|
|
echo "> Console enabled"
|
|
if [ -n "$SYSLOG" ] && [ -n "$SYSERR" ]; then
|
|
gdb -x "$GDB_TEMP_FILE" --batch "$EXECPATH" > >(tee "$SYSLOG") 2> >(tee "$SYSERR" >&2)
|
|
else
|
|
gdb -x "$GDB_TEMP_FILE" --batch "$EXECPATH"
|
|
fi
|
|
fi
|
|
|
|
# Cleanup temporary GDB file
|
|
rm -f "$GDB_TEMP_FILE"
|
|
else
|
|
if [ -n "$CONFIG" ]; then
|
|
script -q -e -c "$EXECPATH -c \"$CONFIG\""
|
|
else
|
|
script -q -e -c "$EXECPATH"
|
|
fi
|
|
fi
|