diff --git a/_MasterScript/lgsm-core b/_MasterScript/lgsm-core index b4acf2281..0b239a26e 100755 --- a/_MasterScript/lgsm-core +++ b/_MasterScript/lgsm-core @@ -34,12 +34,20 @@ lgsmdir="${rootdir}/lgsm" # Temporary path to store and manipulate settings settingsdir="${lgsmdir}/settings.tmp" # Supported Game Data -gamedatadir="${lgsmdir}/cfg/gamedata" +gamedatadir="${lgsmdir}/gamedata" # Config path for local instances scriptcfgdir="${lgsmdir}/cfg/servers" # Temporary cache location cachedir="${lgsmdir}/tmp" +# Create all the directories we need +for dir in $(grep '^[a-zA-Z0-9]*dir=' $0 | cut -d'=' -f1); do + if [ ! -e "${!dir}" ]; then + echo "Creating ${dir} at ${!dir}" + mkdir -p "${!dir}" + fi +done +exit # Git last commit file (for tracking updates) lastcommit_file="${cachedir}/lastcommit" diff --git a/functions/core_functions.sh b/functions/core_functions.sh index 560a2ee26..e8d522175 100644 --- a/functions/core_functions.sh +++ b/functions/core_functions.sh @@ -10,84 +10,84 @@ lgsm_version="060116" #Legacy functions fn_functions(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fn_getopt(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Core core_getopt.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } core_messages.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Command command_console.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_debug.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_details.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_email_test.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_backup.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_monitor.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_start.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_stop.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_validate.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_install.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_ts3_server_pass.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fn_restart(){ @@ -102,196 +102,196 @@ command_start.sh # Checks check.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } check_config.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } check_ip.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } check_logs.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } check_root.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } check_steamcmd.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } check_steamuser.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } check_systemdir.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } check_tmux.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Compress compress_unreal2_maps.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } compress_ut99_maps.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Dev command_dev_debug.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } command_dev_detect_deps.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Fix fix.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fix_arma3.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fix_csgo.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fix_dst.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fix_ins.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fix_steamcmd.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fix_glibc.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fix_ro.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fix_kf.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fix_ut2k4.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Info info_config.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } info_distro.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } info_glibc.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } info_ts3status.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Email email.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Logs logs.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Monitor monitor_gsquery.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Update update_check.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } update_functions.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } update_dl.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } update_functions.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } @@ -305,92 +305,94 @@ command_install.sh } install_complete.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_config.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_gsquery.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_gslt.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_header.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_logs.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_retry.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_serverdir.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_serverfiles.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" +} +install_sourcemod.sh(){ +fn_runfunction "${FUNCNAME}" } install_steamcmd.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_ts3.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_ts3db.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_ut2k4.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_dl_ut2k4.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_ut2k4_key.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_ut99.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } install_dl_ut99.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } fix_ut99.sh(){ -functionfile="${FUNCNAME}" -fn_runfunction +fn_runfunction "${FUNCNAME}" + } # Calls on-screen messages diff --git a/functions/core_getopt.sh b/functions/core_getopt.sh index 95196d0ef..7bf402b33 100644 --- a/functions/core_getopt.sh +++ b/functions/core_getopt.sh @@ -41,6 +41,8 @@ case "$getopt" in command_install.sh;; ai|auto-install) fn_autoinstall;; + sm|sourcemod) + install_sourcemod.sh;; dd|depsdetect) command_dev_detect_deps.sh;; *) @@ -65,6 +67,7 @@ case "$getopt" in echo -e "\e[34mdebug\t\e[0mSee the output of the server directly to your terminal." echo -e "\e[34minstall\t\e[0mInstall the server." echo -e "\e[34mauto-install\t\e[0mInstall the server, without prompts." + echo -e "\e[34msourcemod\t\e[0mInstall SourceMod." } | column -s $'\t' -t esac exit @@ -424,4 +427,4 @@ elif [ "${engine}" == "unreal" ]; then fn_getopt_unreal else fn_getopt_generic -fi \ No newline at end of file +fi diff --git a/functions/install_sourcemod.sh b/functions/install_sourcemod.sh new file mode 100755 index 000000000..f6f7095b2 --- /dev/null +++ b/functions/install_sourcemod.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# LGSM install_sourcemod.sh +# Author: Jared Ballou +# Website: http://gameservermanagers.com + +# This downloads and installs the latest stable versions of MetaMod and SourceMod + +lgsm_version="200116" + + +# MetaMod +fn_install_metamod(){ + # Get installation path for MetaMod + mm_path="${1:-"${systemdir}/addons/metamod"}" + mm_root=$(cd "$(dirname $(dirname "${mm_path}"))" && pwd) + if [ -e "${mm_path}" ]; then + read -p "WARNING! MetaMod exists at ${mm_path}! OVERWRITE!? [y/N]: " input + if [ "${input}" != "y" ] && [ "${input}" != "Y" ]; then return; fi + fi + # Download URL base + mm_url_base="http://www.sourcemm.net/downloads/" + # Get latest release file name + echo "Getting latest MetaMod version..." + mm_file_latest="$(curl -sL "${mm_url_base}" | grep -m1 -o "mmsource-[0-9\.a-zA-Z]*-linux\.tar\.gz")" + mm_file="${cachedir}/${mm_file_latest}" + # If file is not here, download it + if [ ! -e "${mm_file}" ]; then + echo -ne "Downloading ${mm_file_latest}... \c" + # Get mirror URLs + mm_file_urls="$(curl -sL "${mm_url_base}${mm_file_latest}" | grep -o -E 'href="http([^"#]+)mmsource-1.10.6-linux.tar.gz"' | cut -d'"' -f2)" + # Try each mirror + for url in $mm_file_urls; do + # Download file + curl -sL "${url}" -o "${mm_file}" + # If file downloaded, exit loop + if [ -e "${mm_file}" ]; then break; fi + done + if [ ! -e "${mm_file}" ]; then + fn_colortext red FAILED + exit 1 + else + fn_colortext green DONE + fi + fi + # Unzip MetaMod to addons + tar -xzvpf "${mm_file}" -C "${mm_root}" +} +fn_install_sourcemod(){ + # Get installation path for SourceMod + sm_path="${1:-"${systemdir}/addons/sourcemod"}" + sm_root=$(cd "$(dirname $(dirname "${sm_path}"))" && pwd) + if [ -e "${sm_path}" ]; then + read -p "WARNING! SourceMod exists at ${sm_path}! OVERWRITE!? [y/N]: " input + if [ "${input}" != "y" ] && [ "${input}" != "Y" ]; then return; fi + fi + # Install SourceMod to game server + sm_major_version="1.7" + sm_url_base="http://www.sourcemod.net/smdrop/${sm_major_version}/" + sm_url_latest="${sm_url_base}sourcemod-latest-linux" + sm_file_latest="$(curl -sL "${sm_url_latest}")" + sm_url_file="${sm_url_base}${sm_file_latest}" + sm_file="${cachedir}/${sm_file_latest}" + if [ ! -e "${sm_file}" ]; then + echo -ne "Downloading ${sm_file_latest}... \c" + curl -sL "${sm_url_file}" -o "${sm_file}" + if [ ! -e "${sm_file}" ]; then + fn_colortext red FAILED + exit 1 + else + fn_colortext green DONE + fi + fi + # Unzip SourceMod to addons + tar -xzvpf "${sm_file}" -C "${sm_root}" +} +fn_install_metamod +fn_install_sourcemod