From b7dc119b74fabdddbd4de966e947978e3a2ded53 Mon Sep 17 00:00:00 2001 From: Emagi Date: Wed, 28 Aug 2024 09:19:11 -0400 Subject: [PATCH] sample bash script for linux compile + obtaining content files and maps/pathing repository --- linux_compile.sh | 102 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 linux_compile.sh diff --git a/linux_compile.sh b/linux_compile.sh new file mode 100644 index 0000000..859c760 --- /dev/null +++ b/linux_compile.sh @@ -0,0 +1,102 @@ +#!/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 yum >/dev/null; then + log "Detected RHEL-based system. Using yum to install packages." + sudo yum 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 yum." + elif command -v dnf >/dev/null; then + log "Detected 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."