Raised This Month: $12 Target: $400
 3% 

Idk if SM1.6 is at fault but


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
WildCard65
Veteran Member
Join Date: Aug 2013
Location: Canada
Old 06-29-2014 , 10:47   Idk if SM1.6 is at fault but
Reply With Quote #1

L 06/29/2014 - 10:45:19: [STEAMTOOLS] Ran out of methods to acquire SteamWorks interfaces.
Game: Tf2
WildCard65 is offline
asherkin
SourceMod Developer
Join Date: Aug 2009
Location: OnGameFrame()
Old 06-29-2014 , 14:10   Re: Idk if SM1.6 is at fault but
Reply With Quote #2

The only time I've seen this before was with modified steamclient binaries (to bypass client authenticity checks).
__________________
asherkin is offline
WildCard65
Veteran Member
Join Date: Aug 2013
Location: Canada
Old 06-30-2014 , 10:36   Re: Idk if SM1.6 is at fault but
Reply With Quote #3

Quote:
Originally Posted by asherkin View Post
The only time I've seen this before was with modified steamclient binaries (to bypass client authenticity checks).
I'm using this bash script to run my tf2 server that applies a fix for steamclient thing using the one that comes with steamcmd.
Edit: But it only does that when installing server.
Edit2: Here's entire script if you want, but servers are definitly installed + updated by steamcmd.
PHP Code:
#!/bin/bash
# Team Fortress 2
# Server Management Script
# Author: Daniel Gibbs
# Website: http://danielgibbs.co.uk
# Version: 220614

#### Variables ####

# Notification Email
# (on|off)
emailnotification="off"
email="[email protected]"

# Steam login
steamuser="anonymous"
steampass=""

# Start Variables
defaultmap="vsh_turret_testing_b2"
maxplayers="32"
port="27015"
sourcetvport="27020"
clientport="27005"
ip="192.168.0.26"
svpure="0"

# Server Details
servicename="flextf21"
gamename="Team Fortress 2"
engine="source"

# Directorys
rootdir="/home/flexcraft"
selfname="$0"
lockselfname="${rootdir}/scripts/${servicename}.lock"
filesdir="${rootdir}/tf21"
systemdir="${filesdir}/tf"
executabledir="${filesdir}"
executable="./srcds_run"
servercfgdir="${systemdir}/cfg"
servercfg="${servicename}.cfg"
servercfgfullpath="${servercfgdir}/${servercfg}"
defaultcfg="${servercfgdir}/server.cfg"
backupdir="${rootdir}/backups"
steamcmddir="/var/steamcmd"
steamclient="${steamcmddir}/linux32/steamclient.so"

# https://developer.valvesoftware.com/wiki/Command_Line_Options#Source_Dedicated_Server
fn_parms(){
parms="-game tf -console -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} +map ${defaultmap} +servercfgfile ${servercfg} -maxplayers ${maxplayers} +sv_pure ${svpure}"
}

#### Advanced Variables ####

# Steam
appid="232250"

# Server Details
servername=$(grep -s hostname "${servercfgfullpath}"|sed 's/hostname //g'|sed 's/"//g')
rcon=$(grep -s rcon_password "${servercfgfullpath}"|sed 's/rcon_password //g'|sed 's/"//g')

# Logging
logdays="7"
gamelogdir="${systemdir}/logs"
scriptlogdir="${rootdir}/logs/script"
consolelogdir="${rootdir}/logs/console"

scriptlog="${scriptlogdir}/${servicename}-script.log"
consolelog="${consolelogdir}/${servicename}-console.log"
emaillog="${scriptlogdir}/${servicename}-email.log"

scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log"
consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%H-%M-%S').log"

##### Script #####
# Do not edit
# unless you know
# what you are doing

fn_scriptlog(){
    echo -
"$(date '+%b %d %H:%M:%S') ${servicename}: '$1'" >> ${scriptlog}
}

# [ FAIL ]
fn_printfail(){
    echo -
en "\r\033[K[\e[0;31m FAIL \e[0;39m] $@"
}

fn_printfailnl(){
    echo -
"\r\033[K[\e[0;31m FAIL \e[0;39m] $@"
}

fn_printok(){
    echo -
en "\r\033[K[\e[0;32m  OK  \e[0;39m] $@"
}

# [  OK  ]
fn_printoknl(){
    echo -
"\r\033[K[\e[0;32m  OK  \e[0;39m] $@"
}

fn_printinfo(){
    echo -
en "\r\033[K[\e[0;36m INFO \e[0;39m] $@"
}

fn_printinfonl(){
    echo -
"\r\033[K[\e[0;36m INFO \e[0;39m] $@"
}

# [ INFO ]
fn_printokinfonl(){
    echo -
"\r\033[K[\e[0;36m INFO \e[0;39m] $@"
}

fn_printwarn(){
    echo -
en "\r\033[K[\e[1;33m WARN \e[0;39m] $@"
}

fn_printwarnnl(){
    echo -
"\r\033[K[\e[1;33m WARN \e[0;39m] $@"
}
    
# [ .... ]
fn_printdots(){
    echo -
en "\r\033[K[ .... ] $@"
}

fn_rootcheck(){
if [ `
whoami` = "root" ]; then
    fn_printfailnl 
"Script will not run as root!"
    
exit
fi
}

fn_syscheck(){
if [ ! -
"${systemdir}]; then
    fn_printfailnl 
"Cannot access ${systemdir}: No such directory"
    
exit
fi
}

fn_autoip(){
# Identifies the server interface IP
# If multiple interfaces this will need to be set manually
getip=$(ip --4 addr|awk '{print $4 }'|grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}'|grep -v 127.0.0.1)
getipwc=$(ip --4 addr|awk '{print $4 }'|grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}'|grep -v 127.0.0.1|wc -l)
if [ 
"${ip}== "0.0.0.0" ]||[ "${ip}== "" ]; then
    
if [ "${getipwc}-ge "2" ]; then
        fn_printwarn 
"Multiple active network interfaces.\n\n"
        
echo -en "Manually specify the IP you want to use within the ${selfname} script.\n"
        
echo -en "Set ip=\"0.0.0.0\" to one of the following:\n"
        
echo -en "${getip}\n"
        
exit
    else
        
ip=${getip}
    
fi
fi
}

fn_logmanager(){
if [ ! -
"${consolelog}]; then
    touch 
"${consolelog}"
fi
# log manager will active if finds logs older than ${logdays}
if [ `find "${scriptlogdir}"/* -mtime +${logdays}|wc -l` -ne "0" ]; then
    fn_printdots 
"Starting log cleaner"
    
sleep 1    
    fn_printok 
"Starting log cleaner"
    
sleep 1    
    fn_scriptlog 
"Starting log cleaner"
    
sleep 1
    
echo -en "\n"
    
fn_printinfo "Removing logs older than ${logdays} days"
    
sleep 1
    
echo -en "\n"
    
fn_scriptlog "Removing logs older than ${logdays} days"
    
sleep 1
    find 
"${scriptlogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}"
    find "${consolelogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}"
    scriptcount=$(find "${scriptlogdir}"/* -mtime +${logdays}|wc -l)
    consolecount=$(find "${consolelogdir}"/* -mtime +${logdays}|wc -l)
    count=$((${scriptcount} + ${consolecount}))
    find "${scriptlogdir}"/* -mtime +${logdays} -exec rm {} \;
    find "${consolelogdir}"/* -mtime +${logdays} -exec rm {} \;
    fn_printok "Log cleaner removed ${count} log files"
    sleep 1
    echo -en "\n"
    fn_scriptlog "Log cleaner removed ${count} log files"
fi
}

fn_debugserver(){
fn_rootcheck
fn_syscheck
fn_autoip
fn_parms
echo ""
echo "${gamename} Debug"
echo "============================"
echo ""
echo -e "Use for identifying server issues only!"
echo -e "Press CTRL+c to drop out of debug mode"
echo -e "\e[0;31mWARNING!\e[0;39m If ${servicename} is already running it will be stopped"
echo ""
echo "Start parameters:"
echo ${parms}
echo ""
while true; do
    read -p "Continue? [y/N]" yn
    case $yn in
    [Yy]* ) break;;
    [Nn]* ) echo Exiting; return 1;;
    * ) echo "Please answer yes or no.";;
esac
done
fn_stopserver
fn_printdots "Starting debug mode ${servicename}: ${servername}"
sleep 1
fn_printok "Starting debug mode ${servicename}: ${servername}"
sleep 1
fn_scriptlog "Started debug mode ${servername}"
echo -en "\n"
cd "${executabledir}"
${executable} ${parms} -debug
}

fn_console(){
fn_rootcheck
fn_syscheck
echo ""
echo "${gamename} Console"
echo "============================"
echo ""
echo "Press \"CTRL+b d\" to exit console"
echo -e "\e[0;31mWARNING!\e[0;39m Do NOT press CTRL+c to exit"
echo ""
while true; do
    read -p "Continue? [y/N]" yn
    case $yn in
    [Yy]* ) break;;
    [Nn]* ) echo Exiting; return 1;;
    * ) echo "Please answer yes or no.";;
esac
done
fn_printdots "Starting ${servicename} console"
sleep 1
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -E "^${servicename}:"|wc -l)
if [ ${tmuxwc} -eq 1 ]; then
    fn_printoknl "Starting ${servicename} console"
    sleep 1
    fn_scriptlog "Console accessed"
    tmux attach-session -t ${servicename}
else
    fn_printfailnl "Starting ${servicename} console: ${servername} not running"
    sleep 1
    while true; do
        read -p "Do you want to start the server? [y/N]" yn
        case $yn in
        [Yy]* ) fn_startserver; break;;
        [Nn]* ) break;;
        * ) echo "Please answer yes or no.";;
    esac
    done
fi
}

fn_backupserver(){
fn_rootcheck
fn_syscheck
backupname="${servicename}-$(date '+%Y-%m-%d-%H%M%S')"
echo ""
echo "${gamename} Backup"
echo "============================"
echo ""
echo "The following backup will be created."
echo ""
echo "${backupdir}/${backupname}.tar.gz"
echo ""
while true; do
    read -p "Continue? [y/N]" yn
    case $yn in
    [Yy]* ) break;;
    [Nn]* ) echo Exiting; return 1;;
    * ) echo "Please answer yes or no.";;
esac
done
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -E "^${servicename}:"|wc -l)
if [ ${tmuxwc} -eq 1 ]; then
    echo -e "\e[0;31mWARNING!\e[0;39m ${servicename} is currently running"
    while true; do
        read -p "Would you like to stop ${servicename} while running the backup? [y/N]" yn
        case $yn in
        [Yy]* ) fn_stopserver; break;;
        [Nn]* ) break;;
        * ) echo "Please answer yes or no.";;
    esac
    done
fi
fn_printdots "Starting backup ${servicename}: ${servername}"
sleep 1
fn_printok "Starting backup ${servicename}: ${servername}"
sleep 1
fn_scriptlog "Backup started"
echo -en "\n"
cd "${rootdir}"
mkdir -pv "${backupdir}" > /dev/null 2>&1
tar -cvzf "${backupdir}/${backupname}.tar.gz" --exclude "${backupdir}" *
echo -en "\r\033[K${servicename} Backup complete"
fn_scriptlog "Backup complete"
}

fn_distro(){
arch=$(uname -m)
kernel=$(uname -r)
if [ -f /etc/lsb-release ]; then
    os=$(lsb_release -s -d)
elif [ -f /etc/debian_version ]; then
    os="Debian $(cat /etc/debian_version)"
elif [ -f /etc/redhat-release ]; then
    os=$(cat /etc/redhat-release)
else
    os="$(uname -s) $(uname -r)"
fi
}

fn_uptime(){
uptime=$(</proc/uptime)
uptime=${uptime%%.*}
minutes=$(( uptime/60%60 ))
hours=$(( uptime/60/60%24 ))
days=$(( uptime/60/60/24 ))
}

fn_load(){
load=$(uptime|awk -F 'load average' '{ print $2 }')
}

fn_emailnotification(){
fn_distro
fn_uptime
fn_load
{
    echo -e "========================================\n${servicename} details\n========================================\n"
    echo -e "Service: ${servicename}"
    echo -e "Server: ${servername}"
    echo -e "Game: ${gamename}"
    echo -e "Failure reason: ${failurereason}"
    echo -e "Action Taken: ${actiontaken}\n"
    echo -e "========================================\nServer details\n========================================\n"
    echo -e "Date: $(date)"
    echo -e "Distro: ${os}"
    echo -e "Arch: ${arch}"
    echo -e "Kernel: ${kernel}"
    echo -e "Hostname: $HOSTNAME"
    echo -e "Uptime: ${days}d, ${hours}h, ${minutes}m"
    echo -e "Avg Load${load}\n"
    echo -e "========================================\nLogs\n========================================\n"
    echo -e "Script log\n===================\n"
}|tee "${scriptlogdir}/${servicename}-email.log" > /dev/null 2>&1
tail -25 "${scriptlog}" >> "${emaillog}"
if [ ! -z "${consolelog}" ]; then
    echo -e "\n\nConsole log\n====================\n" >> "${emaillog}"
    tail -25 "${consolelog}" >> "${emaillog}"
fi
if [ ! -z "${gamelogdir}" ]; then
    echo -e "\n\nServer log\n====================\n" >> "${emaillog}"
    tail "${gamelogdir}"/*|grep -v "==>"|sed '/^$/d'|tail -25 >> "${emaillog}"
fi
mail -s "${subject}" ${email} < "${emaillog}"
fn_printinfo "Sent email notification to ${email}"
sleep 1
echo -en "\n"
fn_scriptlog "Sent email notification to ${email}"
}

fn_emailtest(){
fn_rootcheck
fn_syscheck
fn_scriptlog "Emailing test notification"
if [ "${emailnotification}" = "on" ]; then
    subject="${servicename} Email Test Notification - Testing ${servername}"
    failurereason="Testing ${servicename} email notification"
    actiontaken="Sent test email...hello is this thing on?"
    fn_emailnotification
else
    fn_printfailnl "Email notification not enabled"
    fn_scriptlog "Email notification not enabled"
fi
sleep 1
echo -en "\n"
}

fn_serverquery(){
# uses gsquery.py to directly query the server
# detects if the server locks up
if [ -f gsquery.py ]; then
    if [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then
        gameport=$(grep Port= ${systemdir}/${ini}|grep -v Master|grep -v LAN|grep -v Proxy|grep -v Listen|sed 's/\Port=//g')
        port=$((${gameport} + 1))
    elif [ "${engine}" == "spark" ]; then
        port=$((${port} + 1))
    fi
    fn_printinfo "Monitoring ${servicename}: Detected gsquery.py"
    sleep 1    
    fn_scriptlog "Detected gsquery.py"
    fn_printdots "Monitoring ${servicename}: Querying port: ${ip}:${port}: QUERYING"
    sleep 1    
    fn_scriptlog "Querying port: ${ip}:${port}: QUERYING"
    serverquery=$(./gsquery.py -a ${ip} -p ${port} -e ${engine} 2>&1)
    exitcode=$?
    if [ "${exitcode}" == "1" ]||[ "${exitcode}" == "2" ]||[ "${exitcode}" == "3" ]||[ "${exitcode}" == "4" ]; then
        fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: ${serverquery}"
        sleep 1
        echo -en "\n"
        fn_scriptlog "Querying port: ${ip}:${port}: ${serverquery}"
        if [[ -z "${secondquery}" ]]; then
            fn_printinfo "Monitoring ${servicename}: Waiting 30 seconds to re-query"
            sleep 1
            fn_scriptlog "Waiting 30 seconds to re-query"
            sleep 29
            secondquery=1
            fn_serverquery
        fi
        if [ "${emailnotification}" = "on" ]; then
            subject="${servicename} Monitor - Starting ${servername}"
            failurereason="Failed to query ${servicename}: ${serverquery}"
            actiontaken="restarted ${servicename}"
            fn_emailnotification
        fi
        fn_restartserver
        exit
    elif [ "${exitcode}" == "0" ]; then
        fn_printok "Monitoring ${servicename}: Querying port: ${ip}:${port}: OK"
        sleep 1        
        fn_scriptlog "Querying port: ${ip}:${port}: OK"
        echo -en "\n"
        exit
    elif [ "${exitcode}" == "126" ]; then
        fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: ERROR: ./gsquery.py: Permission denied"
        sleep 1
        fn_scriptlog "Querying port: ${ip}:${port}: ./gsquery.py: Permission denied"
        echo -en "\n"
        echo "Attempting to resolve automatically"
        chmod +x -v gsquery.py
        exitcode=$?
        if [ "${exitcode}" == "0" ]; then
            fn_serverquery
        else
            echo -en "\nUnable to resolve automatically. Please manually fix permissions\n"
            owner=$(ls -al gsquery.py|awk '{ print $3 }')
            echo "As user ${owner} or root run the following command"
            whoami=$(whoami)
            echo -en "\nchown ${whoami}:${whoami} gsquery.py\n\n"
        exit
        fi
    else
        fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: UNKNOWN ERROR"
        sleep 1
        echo -en "\n"
        fn_scriptlog "Querying port: ${ip}:${port}: UNKNOWN ERROR"
        ./gsquery.py -a ${ip} -p ${port} -e ${engine}
        exit
    fi
fi
}

fn_monitorserver(){
fn_rootcheck
fn_syscheck
fn_autoip
if [ ! -f ${lockselfname} ]; then 
    fn_printinfo "Monitoring ${servicename}: No lock file found: Monitor disabled"
    sleep 1
    echo -en "\n"
    exit
fi
fn_printdots "Monitoring ${servicename}: ${servername}"
sleep 1
fn_scriptlog "Monitoring ${servername}"
updatecheck=$(ps -ef|grep "${selfname} update"|grep -v grep|wc -l)
if [ "${updatecheck}" = "0" ]; then
    fn_printdots "Monitoring ${servicename}: Checking session: CHECKING"
    sleep 1    
    fn_scriptlog "Checking session: CHECKING"
    tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -E "^${servicename}:"|wc -l)
    if [ ${tmuxwc} -eq 1 ]; then
        fn_printok "Monitoring ${servicename}: Checking session: OK"
        sleep 1        
        echo -en "\n"
        fn_scriptlog "Checking session: OK"
        fn_serverquery
        exit
    else
        fn_printfail "Monitoring ${servicename}: Checking session: FAIL"
        fn_scriptlog "Checking session: FAIL"
        sleep 1
        echo -en "\n"
        if [ "${emailnotification}" = "on" ]; then
            subject="${servicename} Monitor - Starting ${servername}"
            failurereason="${servicename} process not running"
            actiontaken="${servicename} has been restarted"
            fn_emailnotification
        fi
        fn_scriptlog "Monitor is starting ${servername}"
        fn_startserver
    fi
else
    fn_printinfonl "Monitoring ${servicename}: Detected SteamCMD is checking for updates"
    sleep 1
    fn_scriptlog "Detected SteamCMD is checking for updates"
    fn_printinfonl "Monitoring ${servicename}: When updates complete ${servicename} will start"
    sleep 1    
    fn_scriptlog "When updates complete ${servicename} will start"
fi
}

fn_updateserver(){
fn_rootcheck
fn_syscheck
fn_printdots "Updating ${servicename}: ${servername}"
sleep 1
fn_printok "Updating ${servicename}: ${servername}"
sleep 1
fn_scriptlog "Updating ${servername}"
cd "${steamcmddir}"
./steamcmd.sh +login ${steamuser} ${steampass} +force_install_dir "${filesdir}" +app_update ${appid} +quit|tee -a "${scriptlog}"
}

fn_validateserver(){
fn_rootcheck
fn_syscheck
fn_printwarn "Validating may overwrite some customised files."
sleep 1
echo -en "\n"
echo -en "https://developer.valvesoftware.com/wiki/SteamCMD#Validate"
sleep 5
echo -en "\n"
fn_printdots "Validating ${servicename}: ${servername}"
sleep 1
fn_printok "Validating ${servicename}: ${servername}"
sleep 1
fn_scriptlog "Validating ${servername}"
cd "${steamcmddir}"
./steamcmd.sh +login ${steamuser} ${steampass} +force_install_dir "${filesdir}" +app_update ${appid} validate +quit|tee -a "${scriptlog}"
}

fn_restartserver(){
fn_scriptlog "Restarting ${servername}"
fn_stopserver
fn_startserver
}

fn_stopserver(){
fn_rootcheck
fn_syscheck
pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l)
fn_printdots "Stopping ${servicename}: ${servername}"
sleep 1
fn_scriptlog "Stopping ${servername}"
if [ "${pid}" == "0" ]; then
    fn_printfail "Stopping ${servicename}: ${servername} is already stopped"
    fn_scriptlog "${servername} is already stopped"
else
    tmux kill-session -t ${servicename}
    fn_printok "Stopping ${servicename}: ${servername}"
    fn_scriptlog "Stopped ${servername}"
fi
# Remove lock file
rm -f ${lockselfname}
sleep 1
echo -en "\n"
}

fn_startserver(){
fn_rootcheck
fn_syscheck
fn_autoip
fn_parms
fn_logmanager
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -E "^${servicename}:"|wc -l)
if [ ${tmuxwc} -eq 0 ]; then
    mv "${scriptlog}" "${scriptlogdate}"
    mv "${consolelog}" "${consolelogdate}"
fi
fn_printdots "Starting ${servicename}: ${servername}"
sleep 1
fn_scriptlog "Starting ${servername}"
if [ ${tmuxwc} -eq 1 ]; then
    fn_printinfo "Starting ${servicename}: ${servername} is already running"
    sleep 1
    echo -en "\n"
    fn_scriptlog "${servername} is already running"
    exit
fi
# Create lock file
lockfile -r 0 ${lockselfname}
cd "${executabledir}"
tmux new-session -d -s ${servicename} "${executable} ${parms}|tee -a '${consolelog}'"
sleep 1
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l)
if [ ${tmuxwc} -eq 0 ]; then
    fn_printfail "Starting ${servicename}: Failed to start ${servername}"
    fn_scriptlog "failed to start ${servername}"
else
    fn_printok "Starting ${servicename}: ${servername}"
    fn_scriptlog "Started ${servername}"
fi
sleep 1
echo -en "\n"
}

fn_details(){
fn_autoip
servername=$(grep -s hostname "${servercfgfullpath}"|sed 's/hostname //g'|sed 's/"//g')
rcon=$(grep -s rcon_password "${servercfgfullpath}"|sed 's/rcon_password //g'|sed 's/"//g')
pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l)
echo ""
echo "${gamename} Server Details"
echo "============================"
echo "Server name: ${servername}"
echo "Server IP: ${ip}:${port}"
echo "RCON password: ${rcon}"
echo "Config file: ${servercfgfullpath}"
echo ""
echo "${servername} Ports"
echo "============================"
echo "Ports the server is currently using."
echo ""
echo "DIRECTION    DESCRIPTION        PORT"
echo "INBOUND        Game/RCON port        ${port}"
if [ ! -z ${sourcetvport} ]; then
    echo "INBOUND        SourceTV port        ${sourcetvport}"
fi
echo "OUTBOUND    Client port        ${clientport}"
echo ""
echo "You can change ports by editing the"
echo "start parameters in ${selfname}."
echo ""
if [ "${pid}" == "0" ]; then
    echo -e "Status:\e[0;31m OFFLINE\e[0;39m"
else
    echo -e "Status:\e[0;32m ONLINE\e[0;39m"
fi
echo ""
}

#
## Installer
#

fn_header(){
clear
echo "================================="
echo "${gamename}"
echo "Linux Game Server Manager"
echo "by Daniel Gibbs"
echo "http://danielgibbs.co.uk"
echo "================================="
echo ""
}

fn_steamdl(){
echo "Installing SteamCMD"
echo "================================="
cd "${rootdir}"
mkdir -pv "steamcmd"
sleep 1
cd "steamcmd"
if [ ! -f steamcmd.sh ]; then
    wget http://media.steampowered.com/client/steamcmd_linux.tar.gz
    tar --verbose -zxf steamcmd_linux.tar.gz
    rm -v steamcmd_linux.tar.gz
    chmod +x steamcmd.sh
    sleep 1
else
    echo ""
    echo "Steam already installed!"
fi
sleep 1
echo ""
}

fn_steaminstall(){
echo "Installing ${gamename} Server"
echo "================================="
sleep 1
mkdir -pv "${filesdir}"
cd "${rootdir}/steamcmd"
STEAMEXE=steamcmd ./steamcmd.sh +login ${steamuser} ${steampass} +force_install_dir "${filesdir}" +app_update ${appid} validate +quit
echo ""
echo "================================="
while true; do
    read -p "Was the install successful? [y/N]" yn
    case $yn in
    [Yy]* ) break;;
    [Nn]* ) fn_retryinstall;;
    * ) echo "Please answer yes or no.";;
    esac
done
echo ""
}

fn_steamfix(){
echo "Applying steamclient.so fix"
echo "================================="
sleep 1
mkdir -pv "${HOME}/.steam"
mkdir -pv "${HOME}/.steam/sdk32"
cp -v "${steamclient}" "${HOME}/.steam/sdk32/steamclient.so"
sleep 1
echo ""
}

fn_loginstall(){
echo "Creating log directorys"
echo "================================="
sleep 1
mkdir -pv "${rootdir}/log"
mkdir -pv "${scriptlogdir}"
touch "${scriptlog}"
mkdir -pv "${consolelogdir}"
touch "${consolelog}"
if [ ! -h ${rootdir}/log/server ]; then
    ln -sv "${gamelogdir}" "${rootdir}/log/server"
else
    echo "Symbolic link ${gamelogdir} => ${rootdir}/log/server already exists!"
fi
sleep 1
echo ""
}

fn_retryinstall(){
while true; do
    read -p "Retry install? [y/N]" yn
    case $yn in
    [Yy]* ) fn_install;;
    [Nn]* ) echo Exiting; exit;;
    * ) echo "Please answer yes or no.";;
    esac
done
}

fn_install(){
fn_rootcheck
fn_header
if [ -d "${filesdir}" ]; then
    echo "${gamename} Server is already installed here:"
    pwd
    echo ""
    while true; do
        read -p "Continue [y/N]" yn
        case $yn in
        [Yy]* ) fn_header; break;;
        [Nn]* ) echo Exiting; return 1;;
        * ) echo "Please answer yes or no.";;
        esac
    done
fi
echo "Install Directory:"
pwd
echo ""
while true; do
    read -p "Continue [y/N]" yn
    case $yn in
    [Yy]* ) break;;
    [Nn]* ) echo Exiting; return 1;;
    * ) echo "Please answer yes or no.";;
    esac
done
fn_header
fn_steamdl
fn_steaminstall
fn_steamfix
fn_loginstall
echo "Configuring ${gamename} Server"
echo "================================="
    sleep 1
    read -p "Enter server name: " servername
    read -p "Enter rcon password: " rconpass
    sleep 1
    echo "Creating server.cfg."
    touch "${defaultcfg}"
    echo "exec ${servicename}.cfg" > "${defaultcfg}"
    sleep 1
    echo "Creating ${servicename}.cfg config file."
    touch "${servercfgfullpath}"
    {
        echo -e "// server name"
        echo -e "hostname \"${servername}\""
        echo -e ""
        echo -e "// rcon passsword"
        echo -e "rcon_password \"${rconpass}\""
        echo -e ""
        echo -e "// Server password"
        echo -e "sv_password \"\""
        echo -e ""
        echo -e "// server logging"
        echo -e "log on"
        echo -e "sv_logbans 1"
        echo -e "sv_logecho 1"
        echo -e "sv_logfile 1"
        echo -e "sv_log_onefile 0"
    }|tee "${servercfgfullpath}" > /dev/null 2>&1
    sleep 1
    echo ""
    fn_header
    sleep 1
    fn_details
    sleep 1
    echo "================================="
    echo "Install Complete!"
    echo ""
    echo "To start server type:"
    echo "${selfname} start"
    echo ""
}

case "$1" in
    start)
        fn_startserver;;
    stop)
        fn_stopserver;;
    restart)
        fn_restartserver;;
    update)
        fn_updateserver;;
    update-restart)
        fn_stopserver
        fn_updateserver
        fn_startserver;;        
    validate)
        fn_validateserver;;
    validate-restart)
        fn_stopserver
        fn_validateserver
        fn_startserver;;
    monitor)
        fn_monitorserver;;
    email-test)
        fn_emailtest;;
    details)
        fn_details;;
    backup)
        fn_backupserver;;
    console)
        fn_console;;
    debug)
        fn_debugserver;;
    install)
        fn_install;;
    *)
    echo "Usage: $0 {start|stop|restart|update|update-restart|validate|validate-restart|monitor|email-test|details|backup|console|debug|install}"
    exit 1;;
esac
exit 

Last edited by WildCard65; 06-30-2014 at 10:38.
WildCard65 is offline
Powerlord
AlliedModders Donor
Join Date: Jun 2008
Location: Seduce Me!
Old 06-30-2014 , 10:50   Re: Idk if SM1.6 is at fault but
Reply With Quote #4

Quote:
Originally Posted by WildCard65 View Post
I'm using this bash script to run my tf2 server that applies a fix for steamclient thing using the one that comes with steamcmd.
Edit: But it only does that when installing server.
Edit2: Here's entire script if you want, but servers are definitly installed + updated by steamcmd
What's wrong with the steamclient.so that comes with the game server?

Code:
Initializing Steam libraries for secure Internet server
[S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.
dlopen failed trying to load:
/home/tf2/.steam/sdk32/steamclient.so
with error:
/home/tf2/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory
Looking up breakpad interfaces from steamclient
Calling BreakpadMiniDumpSystemInit
Logging into Steam game server account
[STEAMTOOLS] Trying method 1 ...
[STEAMTOOLS] Method 1 worked!
[STEAMTOOLS] Loading complete.
__________________
Not currently working on SourceMod plugin development.

Last edited by Powerlord; 06-30-2014 at 10:52.
Powerlord is offline
WildCard65
Veteran Member
Join Date: Aug 2013
Location: Canada
Old 06-30-2014 , 14:21   Re: Idk if SM1.6 is at fault but
Reply With Quote #5

Quote:
Originally Posted by Powerlord View Post
What's wrong with the steamclient.so that comes with the game server?

Code:
Initializing Steam libraries for secure Internet server
[S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.
dlopen failed trying to load:
/home/tf2/.steam/sdk32/steamclient.so
with error:
/home/tf2/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory
Looking up breakpad interfaces from steamclient
Calling BreakpadMiniDumpSystemInit
Logging into Steam game server account
[STEAMTOOLS] Trying method 1 ...
[STEAMTOOLS] Method 1 worked!
[STEAMTOOLS] Loading complete.
IDK, the script came with that feature.
WildCard65 is offline
WildCard65
Veteran Member
Join Date: Aug 2013
Location: Canada
Old 07-02-2014 , 11:53   Re: Idk if SM1.6 is at fault but
Reply With Quote #6

A little update: It seems like my server is able to realize I have steam running(the client itself) and is using that steamclient.so
This is how I found out:
First, I deleted the steamclient.so that came with server(steamclient is still running), server started on same account that the client is running on also.
Started server, no complaints about no steamclient.so
Closed steam client
Restarted server and recieved a complaint
WildCard65 is offline
asherkin
SourceMod Developer
Join Date: Aug 2009
Location: OnGameFrame()
Old 07-02-2014 , 11:59   Re: Idk if SM1.6 is at fault but
Reply With Quote #7

Running the client on the same system as the server currently isn't a supported configuration with SteamTools on platforms other than Windows (a patch is welcome if you want to implement it yourself).
__________________
asherkin is offline
WildCard65
Veteran Member
Join Date: Aug 2013
Location: Canada
Old 07-02-2014 , 12:02   Re: Idk if SM1.6 is at fault but
Reply With Quote #8

Quote:
Originally Posted by asherkin View Post
Running the client on the same system as the server currently isn't a supported configuration with SteamTools on platforms other than Windows (a patch is welcome if you want to implement it yourself).
Well, before, I had a simple script that allowed me to run the tf2 server on a different account, which worked 100% perfectly with SteamTools, but, now that I am using this new script, it is providing an issue with me being able to view the console via my main account that runs the steamclient.
Fyi: I am too poor to get a dedicated machine, so I'm stuck with using my decent enough laptop I play on to run the tf2 server.
Edit: Now that I know what caused my issue, I'm going to try to right my own version of the shell script to solve this(as the script I used to use was using screen sessions, but this new one is using a package that makes it harder to share sessions)

Last edited by WildCard65; 07-02-2014 at 12:03.
WildCard65 is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 21:52.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode