added installer
This commit is contained in:
parent
1d04e2a4e8
commit
ce741133d8
12 changed files with 2226 additions and 0 deletions
333
bin/ogp_agent
Normal file
333
bin/ogp_agent
Normal file
|
|
@ -0,0 +1,333 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
#
|
||||
# A wrapper script for the OGP agent perl script.
|
||||
# Performs auto-restarting of the agent on crash. You can
|
||||
# extend this to log crashes and more.
|
||||
#
|
||||
# The ogp_agent script should be at the top level of the agent tree
|
||||
# Make sure we are in that directory since the script assumes this is the case
|
||||
|
||||
#####################
|
||||
# Important VARS #
|
||||
#####################
|
||||
|
||||
AGENTDIR="/OGP"
|
||||
BASH_PREFS_CONF="$AGENTDIR/Cfg/bash_prefs.cfg"
|
||||
REPONAME=OGP-Agent-Windows
|
||||
GitHubUsername="OpenGamePanel"
|
||||
|
||||
#####################
|
||||
# FUNCTIONS #
|
||||
#####################
|
||||
|
||||
setupOGPAndReadBashPrefs(){
|
||||
|
||||
# Find CURL
|
||||
if [ -z "$CURL" -o -z "$UNZIP" ]; then
|
||||
checkDepends
|
||||
fi
|
||||
|
||||
chmod -Rf 770 $AGENTDIR
|
||||
find $AGENTDIR -type f -print | xargs chmod ug=rw
|
||||
if [ -d "$AGENTDIR/steamcmd" ]; then
|
||||
find $AGENTDIR/steamcmd -iname \*.dll -exec chmod +x {} \;
|
||||
find $AGENTDIR/steamcmd -iname \*.exe -exec chmod +x {} \;
|
||||
fi
|
||||
if [ -d "$AGENTDIR/screenlogs" ]; then
|
||||
chmod -Rf ug=rwx $AGENTDIR/screenlogs
|
||||
fi
|
||||
chmod +x $AGENTDIR/ogp_agent.pl &> /dev/null
|
||||
chmod +x $AGENTDIR/agent_conf.sh &> /dev/null
|
||||
chmod +x /usr/bin/ogp_agent &> /dev/null
|
||||
|
||||
# Should we perform an automatic update?
|
||||
if [ -e $BASH_PREFS_CONF ]
|
||||
then
|
||||
source "$BASH_PREFS_CONF"
|
||||
if [ "X$agent_auto_update" == "X1" ]
|
||||
then
|
||||
AUTO_UPDATE="yes"
|
||||
fi
|
||||
|
||||
if [ "X$run_pureftpd" == "X0" ]
|
||||
then
|
||||
RUN_PUREFTPD="no"
|
||||
else
|
||||
RUN_PUREFTPD="yes"
|
||||
fi
|
||||
|
||||
if [ "X$ftp_ip" != "X" ]
|
||||
then
|
||||
FTP_IP="$ftp_ip"
|
||||
else
|
||||
FTP_IP="0.0.0.0"
|
||||
fi
|
||||
|
||||
if [ "X$ftp_port" != "X" ]
|
||||
then
|
||||
FTP_PORT="$ftp_port"
|
||||
else
|
||||
FTP_PORT="21"
|
||||
fi
|
||||
|
||||
if [ "X$ftp_pasv_range" != "X" ]
|
||||
then
|
||||
FTP_PASV_STRING="-p $ftp_pasv_range"
|
||||
else
|
||||
FTP_PASV_STRING=""
|
||||
fi
|
||||
|
||||
# Use custom github update address
|
||||
if [ ! -z "$github_update_username" ]; then
|
||||
if [ -f "$CURL" -a -x "$CURL" ] && [ -f "$UNZIP" -a -x "$UNZIP" ]; then
|
||||
REVISIONTest=`curl -Lks https://github.com/${github_update_username}/${REPONAME}/commits/master.atom | grep -Eo "([a-f0-9]{40})" | head -n 1`
|
||||
if [ ! -z "$REVISIONTest" ]; then
|
||||
GitHubUsername=${github_update_username}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
else
|
||||
AUTO_UPDATE="yes"
|
||||
RUN_PUREFTPD="yes"
|
||||
FTP_IP="0.0.0.0"
|
||||
FTP_PORT="21"
|
||||
FTP_PASV_STING=""
|
||||
fi
|
||||
|
||||
if test `id -u` -eq 0; then
|
||||
echo
|
||||
echo
|
||||
echo "************** WARNING ***************"
|
||||
echo "Running the OGP agent as root "
|
||||
echo "is highly discouraged. It is generally"
|
||||
echo "unnecessary to use root privileges to "
|
||||
echo "execute the agent. "
|
||||
echo "**************************************"
|
||||
echo
|
||||
echo
|
||||
timeout=10
|
||||
while test $timeout -gt 0; do
|
||||
echo -n "The agent will continue to launch in $timeout seconds\r"
|
||||
timeout=`expr $timeout - 1`
|
||||
sleep 1
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
ogpGitCleanup(){
|
||||
echo "Cleaning up..."
|
||||
rm -Rf ${REPONAME}-* &> /dev/null
|
||||
if [ -e "ogp_agent_latest.zip" ]; then
|
||||
rm -f "ogp_agent_latest.zip"
|
||||
fi
|
||||
}
|
||||
|
||||
init() {
|
||||
RESTART="yes"
|
||||
AGENT="$AGENTDIR/ogp_agent.pl"
|
||||
TIMEOUT=10 # time to wait after a crash (in seconds)
|
||||
PID_FILE=""
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
"-pidfile")
|
||||
PID_FILE="$2"
|
||||
PID_FILE_SET=1
|
||||
echo $$ > $PID_FILE
|
||||
shift ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test ! -f "$AGENT"; then
|
||||
echo "ERROR: '$AGENT' not found, exiting"
|
||||
quit 1
|
||||
elif test ! -x "$AGENT"; then
|
||||
# Could try chmod but dont know what we will be
|
||||
# chmoding so just fail.
|
||||
echo "ERROR: '$AGENT' not executable, exiting"
|
||||
quit 1
|
||||
fi
|
||||
}
|
||||
|
||||
syntax () {
|
||||
# Prints script syntax
|
||||
|
||||
echo "Syntax:"
|
||||
echo "$0"
|
||||
}
|
||||
|
||||
checkDepends() {
|
||||
CURL=`which curl 2>/dev/null`
|
||||
if test "$?" -gt 0; then
|
||||
echo "WARNING: Failed to locate curl binary."
|
||||
else
|
||||
echo "INFO: Located curl: $CURL"
|
||||
fi
|
||||
UNZIP=`which unzip 2>/dev/null`
|
||||
if test "$?" -gt 0; then
|
||||
echo "WARNING: Failed to locate unzip binary."
|
||||
else
|
||||
echo "INFO: Located unzip: $UNZIP"
|
||||
fi
|
||||
}
|
||||
|
||||
update() {
|
||||
# Run the git update
|
||||
if test -n "$AUTO_UPDATE"; then
|
||||
if [ -f "$CURL" -a -x "$CURL" ] && [ -f "$UNZIP" -a -x "$UNZIP" ]; then
|
||||
cd $AGENTDIR
|
||||
if [ ! -d tmp ]; then
|
||||
mkdir tmp
|
||||
fi
|
||||
cd tmp
|
||||
REVISION=`curl -Lks https://github.com/${GitHubUsername}/${REPONAME}/commits/master.atom | grep -Eo "([a-f0-9]{40})" | head -n 1`
|
||||
curl -Os https://raw.githubusercontent.com/${GitHubUsername}/${REPONAME}/${REVISION}/bin/ogp_agent
|
||||
currentOGPAgentRunContent=$(cat "./ogp_agent")
|
||||
# Check to make sure ogp_agent downloaded successfully from GitHub before we attempt to replace it.
|
||||
# This should fix random 404 people have been experiencing
|
||||
if [ -s "./ogp_agent" ] && [ "$(echo "$currentOGPAgentRunContent" | head -n 1)" != "404: Not Found" ] && [ ! -z "$(echo "$currentOGPAgentRunContent" | grep "ogp_agent.pl")" ]; then
|
||||
diff ./ogp_agent /bin/ogp_agent &>/dev/null
|
||||
if test $? -ne 0; then
|
||||
cp -f ./ogp_agent /bin/ogp_agent &> /dev/null
|
||||
if test $? -eq 0; then
|
||||
cd /bin
|
||||
chmod ugo+x ogp_agent 2>/dev/null
|
||||
echo "`date`: The agent updater has been changed, relaunching..."
|
||||
rm -Rf tmp
|
||||
/bin/ogp_agent
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
CURRENT=$(cat $AGENTDIR/Cfg/Config.pm | grep version | grep -Eo '[0-9a-f]{40}')
|
||||
if [ "$CURRENT" == "$REVISION" ]; then
|
||||
echo "The agent is up to date."
|
||||
else
|
||||
URL=https://github.com/${GitHubUsername}/${REPONAME}/archive/${REVISION}.zip
|
||||
HEAD=$(curl -L -Os --head -w "%{http_code}" "$URL")
|
||||
if [ "$HEAD" == "200" ]; then
|
||||
echo "Updating agent using curl."
|
||||
curl -L -s "$URL" -o "ogp_agent_latest.zip"
|
||||
if test $? -ne 0; then
|
||||
echo "`date`: curl failed to download the update package."
|
||||
else
|
||||
unzip -oq "ogp_agent_latest.zip"
|
||||
if test $? -ne 0; then
|
||||
echo "`date`: Unable to unzip the update package."
|
||||
ogpGitCleanup
|
||||
else
|
||||
cd ${REPONAME}-${REVISION}
|
||||
cp -avf OGP/* $AGENTDIR/. &> /dev/null
|
||||
CP_APP_RET=$?
|
||||
cp -avf bin/* /usr/bin/. &> /dev/null
|
||||
CP_BIN_RET=$?
|
||||
if [ $CP_APP_RET -ne 0 -o $CP_BIN_RET -ne 0 ]; then
|
||||
echo "`date`: The agent files cannot be overwritten."
|
||||
cd ..
|
||||
ogpGitCleanup
|
||||
echo "Agent update failed."
|
||||
else
|
||||
if test ! -e "$AGENTDIR/Cfg/Preferences.pm"; then
|
||||
cp -f Cfg/Preferences.pm $AGENTDIR/Cfg/Preferences.pm &> /dev/null
|
||||
fi
|
||||
echo "Fixing permissions..."
|
||||
chmod +x $AGENTDIR/ogp_agent.pl &> /dev/null
|
||||
chmod +x $AGENTDIR/agent_conf.sh &> /dev/null
|
||||
chmod +x /usr/bin/ogp_agent &> /dev/null
|
||||
cd ..
|
||||
ogpGitCleanup
|
||||
sed -i "s/version.*/version => '${REVISION}',/" $AGENTDIR/Cfg/Config.pm
|
||||
echo "Agent updated successfully."
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "There is a update available (${REVISION}) but the download source is not ready.";
|
||||
echo "Try again later."
|
||||
fi
|
||||
fi
|
||||
|
||||
else
|
||||
echo "Update failed."
|
||||
fi
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
run() {
|
||||
# Runs the update and agent
|
||||
update
|
||||
if test -n "$RESTART" ; then
|
||||
echo "Agent will auto-restart if there is a crash."
|
||||
#loop forever
|
||||
while true
|
||||
do
|
||||
# Run
|
||||
cd $AGENTDIR
|
||||
./ogp_agent.pl
|
||||
echo "`date`: Agent restart in $TIMEOUT seconds"
|
||||
# don't thrash the hard disk if the agent dies, wait a little
|
||||
sleep $TIMEOUT
|
||||
done # while true
|
||||
else
|
||||
cd $AGENTDIR
|
||||
./ogp_agent.pl
|
||||
fi
|
||||
}
|
||||
|
||||
quit() {
|
||||
# Exits with the give error code, 1
|
||||
# if none specified.
|
||||
# exit code 2 also prints syntax
|
||||
exitcode="$1"
|
||||
|
||||
# default to failure
|
||||
if test -z "$exitcode"; then
|
||||
exitcode=1
|
||||
fi
|
||||
|
||||
case "$exitcode" in
|
||||
0)
|
||||
echo "`date`: OGP Agent Quit" ;;
|
||||
2)
|
||||
syntax ;;
|
||||
*)
|
||||
echo "`date`: OGP Agent Failed" ;;
|
||||
esac
|
||||
|
||||
# Remove pid file
|
||||
if test -n "$PID_FILE" && test -f "$PID_FILE" ; then
|
||||
# The specified pid file
|
||||
rm -f $PID_FILE
|
||||
fi
|
||||
|
||||
# reset SIGINT and then kill ourselves properly
|
||||
trap - 2
|
||||
kill -2 $$
|
||||
}
|
||||
|
||||
#####################
|
||||
# MAIN APP CODE #
|
||||
#####################
|
||||
|
||||
PATH=/usr/local/bin:/usr/bin:${PATH}
|
||||
|
||||
# Start PureFTPD if OGP has been configured to manage FTP users
|
||||
if [ ! -z "$RUN_PUREFTPD" ] && [ "$RUN_PUREFTPD" == "yes" ]; then
|
||||
/usr/sbin/pure-ftpd.exe -S ${FTP_IP},${FTP_PORT} ${FTP_PASV_STRING} -lpuredb:/etc/pureftpd.pdb -g /var/run/pure-ftpd.pid &
|
||||
fi
|
||||
|
||||
# Setup OGP and Read Preferences
|
||||
setupOGPAndReadBashPrefs
|
||||
|
||||
# Initialise
|
||||
init $*
|
||||
|
||||
# Run
|
||||
run
|
||||
|
||||
# Quit normally
|
||||
quit 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue