
YUM is no longer used on RHEL-based distributions as of RHEL 8. RHEL 7 was the last version to support YUM and is EOL as of June 30, 2024, probably doesn't make sense to check for YUM, instead I'd just change the DNF detection log messages to say Fedora/RHEL.
100 lines
5.0 KiB
Bash
100 lines
5.0 KiB
Bash
#!/bin/bash
|
|
|
|
LOG_FILE="$(pwd)/eq2emu_install.log"
|
|
EQ2EMU_HOME_DIR="/home/eq2emu"
|
|
PREMAKE5_PKG="https://github.com/premake/premake-core/releases/download/v5.0.0-beta2/premake-5.0.0-beta2-linux.tar.gz"
|
|
PREMAKE5_FILE="premake-5.0.0-beta2-linux.tar.gz"
|
|
RECAST_GIT="https://github.com/recastnavigation/recastnavigation.git"
|
|
FMT_GIT="https://github.com/fmtlib/fmt.git"
|
|
EQ2SOURCE_GIT="https://github.com/emagi/eq2emu.git"
|
|
EQ2CONTENT_GIT="https://github.com/emagi/eq2emu-content.git"
|
|
EQ2MAPS_GIT="https://github.com/emagi/eq2emu-maps.git"
|
|
|
|
log() {
|
|
echo "$(date +"%Y-%m-%d %H:%M:%S") - $1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
handle_error() {
|
|
log "ERROR: $1"
|
|
exit 1
|
|
}
|
|
|
|
install_packages() {
|
|
if command -v apt-get >/dev/null; then
|
|
log "Detected Debian-based system. Using apt-get to install packages."
|
|
sudo apt-get update
|
|
sudo apt-get install -y git make mariadb-client automake g++ libsdl2-dev libmariadb-dev libboost-all-dev libreadline-dev cmake liblua5.4-dev lua5.4 libcrypto++-dev wget libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev libglm-dev || handle_error "Failed to install packages using apt-get."
|
|
elif command -v dnf >/dev/null; then
|
|
log "Detected RHEL/Fedora-based system. Using dnf to install packages."
|
|
sudo dnf install -y git make mariadb automake gcc-c++ SDL2-devel mariadb-devel boost-devel readline-devel cmake lua-devel lua crypto++-devel wget glfw-devel mesa-libGL-devel mesa-libGLU-devel glm-devel || handle_error "Failed to install packages using dnf."
|
|
elif command -v zypper >/dev/null; then
|
|
log "Detected SUSE-based system. Using zypper to install packages."
|
|
sudo zypper install -y git make mariadb automake gcc-c++ libSDL2-devel libmariadb-devel boost-devel readline-devel cmake liblua5_4-devel lua5_4 libcrypto++-devel wget libglfw3-devel Mesa-libGL-devel Mesa-libGLU-devel glm-devel || handle_error "Failed to install packages using zypper."
|
|
else
|
|
handle_error "Unsupported Linux distribution."
|
|
fi
|
|
}
|
|
|
|
|
|
log "Starting EQ2EMU installation..."
|
|
|
|
# Install necessary packages
|
|
install_packages
|
|
|
|
# Create the home directory
|
|
log "Creating home directory..."
|
|
mkdir -p "${EQ2EMU_HOME_DIR}" || handle_error "Failed to create home directory."
|
|
cd "${EQ2EMU_HOME_DIR}" || handle_error "Failed to navigate to home directory."
|
|
|
|
# Download and install premake5
|
|
log "Downloading premake5..."
|
|
wget ${PREMAKE5_PKG} || handle_error "Failed to download premake5."
|
|
log "Extracting premake5..."
|
|
tar -xzvf ${PREMAKE5_FILE} || handle_error "Failed to extract premake5."
|
|
|
|
# Clone Recast repository
|
|
log "Cloning Recast repository..."
|
|
git clone ${RECAST_GIT} || handle_error "Failed to clone Recast repository."
|
|
cp premake5 recastnavigation/RecastDemo || handle_error "Failed to copy premake5 to RecastDemo."
|
|
|
|
# Compile Recast
|
|
log "Compiling Recast..."
|
|
cd recastnavigation/RecastDemo || handle_error "Failed to navigate to RecastDemo."
|
|
./premake5 gmake2 || handle_error "Failed to generate makefiles with premake5."
|
|
cd Build/gmake2 || handle_error "Failed to navigate to Build/gmake2."
|
|
make || handle_error "Failed to compile Recast."
|
|
|
|
# Clone and compile EQ2EMU source
|
|
log "Cloning and compiling EQ2EMU source..."
|
|
cd ${EQ2EMU_HOME_DIR} || handle_error "Failed to navigate to home directory."
|
|
git clone ${FMT_GIT} || handle_error "Failed to clone fmt repository."
|
|
git clone ${EQ2SOURCE_GIT} || handle_error "Failed to clone EQ2 source repository."
|
|
|
|
cd ${EQ2EMU_HOME_DIR}/eq2emu/source/LoginServer || handle_error "Failed to navigate to LoginServer directory."
|
|
git pull || handle_error "Failed to pull latest changes for LoginServer."
|
|
make clean || handle_error "Failed to clean LoginServer build."
|
|
make -j$(nproc) || handle_error "Failed to compile LoginServer."
|
|
cp login ${EQ2EMU_HOME_DIR}/eq2emu/server/ || handle_error "Failed to copy LoginServer executable."
|
|
|
|
cd ${EQ2EMU_HOME_DIR}/eq2emu/source/WorldServer || handle_error "Failed to navigate to WorldServer directory."
|
|
git pull || handle_error "Failed to pull latest changes for WorldServer."
|
|
make clean || handle_error "Failed to clean WorldServer build."
|
|
make -j$(nproc) || handle_error "Failed to compile WorldServer."
|
|
cp eq2world ${EQ2EMU_HOME_DIR}/eq2emu/server/ || handle_error "Failed to copy WorldServer executable."
|
|
|
|
# Clone EQ2 content and maps
|
|
log "Cloning EQ2 content and maps..."
|
|
cd ${EQ2EMU_HOME_DIR} || handle_error "Failed to navigate to home directory."
|
|
git clone ${EQ2CONTENT_GIT} || handle_error "Failed to clone EQ2 content repository."
|
|
git clone ${EQ2MAPS_GIT} || handle_error "Failed to clone EQ2 maps repository."
|
|
|
|
# Copy content and maps to server
|
|
log "Copying content and maps to server..."
|
|
cd ${EQ2EMU_HOME_DIR}/eq2emu-content || handle_error "Failed to navigate to eq2emu-content directory."
|
|
cp -r ItemScripts Quests RegionScripts SpawnScripts Spells ZoneScripts ${EQ2EMU_HOME_DIR}/eq2emu/server/ || handle_error "Failed to copy content scripts."
|
|
|
|
cd ${EQ2EMU_HOME_DIR}/eq2emu-maps || handle_error "Failed to navigate to eq2emu-maps directory."
|
|
cp -r Maps Regions ${EQ2EMU_HOME_DIR}/eq2emu/server/ || handle_error "Failed to copy maps."
|
|
|
|
log "EQ2EMU installation completed successfully."
|