From 6da1a1a4c84ec8bbe2915822b297ae7576d042d6 Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Wed, 12 Apr 2017 23:44:09 +0100 Subject: [PATCH] dev Dev update --- lgsminstall.sh | 388 +++++++++++++++++++++++++++---------------------- 1 file changed, 216 insertions(+), 172 deletions(-) diff --git a/lgsminstall.sh b/lgsminstall.sh index 1c0b6d08f..0999334fe 100644 --- a/lgsminstall.sh +++ b/lgsminstall.sh @@ -37,144 +37,6 @@ githubuser="GameServerManagers" githubrepo="LinuxGSM" githubbranch="feature/config" - -fn_print_center() { - columns="$(tput cols)" - line="$@" - printf "%*s\n" $(( (${#line} + columns) / 2)) "$line" -} -# Print horizontal line -fn_print_horizontal(){ - char="${1:-=}" - printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' "${char}" -} - -# Display simple Bash menu -fn_menu_bash() { - local resultvar=$1 - title=$2 - caption=$3 - options=$4 - fn_print_horizontal - fn_print_center $title - fn_print_center $caption - fn_print_horizontal - menu_options=() - while read -r line || [[ -n "$line" ]]; do - var=$(echo $line | awk -F "," '{print $2 " - " $3}') - menu_options+=( "${var}" ) - done < $options - menu_options+=( "Cancel" ) - select option in "${menu_options[@]}"; do - if [ -n "${option}" ] && [ "${option}" != "Cancel" ]; then - eval "$resultvar=\"${option/%\ */}\"" - fi - break - done -} - -fn_menu() { - local resultvar=$1 - local selection="" - title=$2 - caption=$3 - options=$4 - # If this is a list of options as a string, dump it to a file so we can process it - if [ ! -e "${options}" ]; then - echo -ne "${options}\n" > "${cachedir}/menu.options" - options="${cachedir}/menu.options" - fi - - # Get menu command -# for menucmd in whiptail dialog bash; do -# if [ -x $(which $menucmd) ]; then -# menucmd=$(which $menucmd) -# break -# fi -# done - case "$(basename $menucmd)" in - whiptail|dialog) - fn_menu_whiptail "${menucmd}" selection "${title}" "${caption}" "${options}" 40 80 30 - ;; - *) - fn_menu_bash selection "${title}" "${caption}" "${options}" - ;; - esac - eval "$resultvar=\"${selection}\"" - echo "$resultvar" -} - -fn_serverlist(){ - IFS="," - if [ -f "lgsm/data/serverlist.csv" ]; then - serverlist="lgsm/data/serverlist.csv" - server_info_array=($(awk '{ print $2 }' "${serverlist}" | grep "${userinput}" )) - else - serverlist="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/serverlist.csv" - server_info_array=($(awk '{ print $2 }' <(curl -s "${serverlist}") | grep "${userinput}")) - fi - shortname="${server_info_array[0]}" - servername="${server_info_array[1]}" - gamename="${server_info_array[2]}" - echo "$server_info_array" - echo "shortname: $shortname" - echo "servername: $servername" - echo "gamename: $gamename" -} - -fn_install_getopt(){ - userinput="empty" - echo "Usage: $0 [option]" - echo -e "" - echo "Installer - Linux Game Server Manager - Version ${version}" - echo "https://gameservermanagers.com" - echo -e "" - echo -e "Commands" - echo -e "install |Select server to install." - echo -e "servername |e.g $0 csgoserver. Enter the required servername will install it." - echo -e "list |List all servers available for install." - exit -} - -# LinuxGSM installer -if [ "${shortname}" == "core" ]; then - userinput=$1 - if [ -z "${userinput}" ]; then - fn_install_getopt - elif [ "${userinput}" == "list" ]; then - fn_serverlist - { - if [ -f "lgsm/data/serverlist.csv" ]; then - awk -F "," '{print $2 "\t" $3}' "${serverlist}" - else - awk -F "," '{print $2 "\t" $3}' <(curl -s "${serverlist}") - fi - } | column -s $'\t' -t | more - exit - elif [ "${userinput}" == "install" ]; then - fn_menu result "Linux Game Server Manager" "Select game to install" "lgsm/data/serverlist.csv" - else - fn_serverlist - if [ "${userinput}" == "${server_info_array[1]}" ]; then - - if [ -e "${servername}" ]; then - i=2 - while [ -e "$servername-$i" ] ; do - let i++ - done - servername="${servername}-$i" - fi - cp "${selfname}" "${servername}" - sed -i -e "s/shortname=\"core\"/shortname=\"${shortname}\"/g" "${servername}" - sed -i -e "s/servername=\"core\"/servername=\"${servername}\"/g" "${servername}" - sed -i -e "s/gamename=\"core\"/gamename=\"${gamename}\"/g" "${servername}" - exit - else - fn_install_getopt - fi - fi -fi - # Bootstrap # Fetches bootstrap files (configs and core functions) @@ -260,36 +122,227 @@ fn_boostrap_fetch_config(){ fn_boostrap_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}" } -# Load the default config. If missing download it. If changed reload it. -if [ ! -f "${tmpdir}/config/${servername}/_default.cfg" ];then - fn_boostrap_fetch_config "lgsm/config/${servername}" "_default.cfg" "${tmpdir}/config/${servername}" "_default.cfg" "noexecutecmd" "norun" "noforce" "nomd5" -fi -if [ ! -f "${gameconfigdir}/_default.cfg" ];then - echo "hello" - cp "${tmpdir}/config/${servername}/_default.cfg" "${gameconfigdir}/_default.cfg" -else - function_file_diff=$(diff -q ${tmpdir}/config/${servername}/_default.cfg ${gameconfigdir}/_default.cfg) - if [ "${function_file_diff}" != "" ]; then - echo "config different onverwriting" - cp "${tmpdir}/config/${servername}/_default.cfg" "${gameconfigdir}/_default.cfg" +fn_print_center() { + columns="$(tput cols)" + line="$@" + printf "%*s\n" $(( (${#line} + columns) / 2)) "${line}" +} +# Print horizontal line +fn_print_horizontal(){ + char="${1:-=}" + printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' "${char}" +} + +# Bash Menu +fn_install_menu_bash() { + local resultvar=$1 + title=$2 + caption=$3 + options=$4 + fn_print_horizontal + fn_print_center $title + fn_print_center $caption + fn_print_horizontal + menu_options=() + while read -r line || [[ -n "${line}" ]]; do + var=$(echo "${line}" | awk -F "," '{print $2 " - " $3}') + menu_options+=( "${var}" ) + done < $options + menu_options+=( "Cancel" ) + select option in "${menu_options[@]}"; do + if [ -n "${option}" ] && [ "${option}" != "Cancel" ]; then + eval "$resultvar=\"${option/%\ */}\"" + fi + break + done +} + +# Whiptail/Dialog Menu +fn_install_menu_whiptail() { + local menucmd=$1 + local resultvar=$2 + title=$3 + caption=$4 + options=$5 + height=${6:-40} + width=${7:-80} + menuheight=${8:-30} + IFS="," + menu_options=() + while read -r line; do + key=$(echo "${line}" | awk -F "," '{print $3}') + val=$(echo "${line}" | awk -F "," '{print $2}') + menu_options+=( ${val//\"} "${key//\"}" ) + done < $options + OPTION=$(${menucmd} --title "${title}" --menu "${caption}" ${height} ${width} ${menuheight} "${menu_options[@]}" 3>&1 1>&2 2>&3) + if [ $? = 0 ]; then + eval "$resultvar=\"${OPTION}\"" + else + eval "$resultvar=" fi - source lgsm/config/${servername}/_default.cfg -fi +} -if [ ! -f "${gameconfigdir}/common.cfg" ];then - fn_boostrap_fetch_config "lgsm/config" "common-template.cfg" "${lgsmdir}/config/${servername}" "common.cfg" "${executecmd}" "noexecutecmd" "norun" "noforce" "nomd5" - source lgsm/config/${servername}/common.cfg -else - source lgsm/config/${servername}/common.cfg +# Menu selector +fn_install_menu() { + local resultvar=$1 + local selection="" + title=$2 + caption=$3 + options=$4 + # Get menu command + for menucmd in whiptail dialog bash; do + if [ -x $(which ${menucmd}) ]; then + menucmd=$(which ${menucmd}) + break + fi + done + case "$(basename ${menucmd})" in + whiptail|dialog) + fn_install_menu_whiptail "${menucmd}" selection "${title}" "${caption}" "${options}" 40 80 30;; + *) + fn_install_menu_bash selection "${title}" "${caption}" "${options}";; + esac + eval "$resultvar=\"${selection}\"" +} + +# Gets server info from serverlist.csv and puts in to array +fn_server_info(){ + IFS="," + server_info_array=($(grep -a "${userinput}" "${serverlist}")) + shortname="${server_info_array[0]}" # csgo + servername="${server_info_array[1]}" # csgoserver + gamename="${server_info_array[2]}" # Counter Strike: Global Offensive + echo "shortname: $shortname" + echo "servername: $servername" + echo "gamename: $gamename" +} + +fn_install_getopt(){ + userinput="empty" + echo "Usage: $0 [option]" + echo -e "" + echo "Installer - Linux Game Server Managers - Version ${version}" + echo "https://gameservermanagers.com" + echo -e "" + echo -e "Commands" + echo -e "install |Select server to install." + echo -e "servername |e.g $0 csgoserver. Enter the required servername will install it." + echo -e "list |List all servers available for install." + exit +} + +fn_install_file(){ + filename="${servername}" + if [ -e "${filename}" ]; then + i=2 + while [ -e "${filename}-${i}" ] ; do + let i++ + done + filename="${filename}-${i}" + fi + cp -R "${selfname}" "${filename}" + sed -i -e "s/shortname=\"core\"/shortname=\"${shortname}\"/g" "${filename}" + sed -i -e "s/servername=\"core\"/servername=\"${servername}\"/g" "${filename}" + sed -i -e "s/gamename=\"core\"/gamename=\"${gamename}\"/g" "${filename}" + exit +} + +# Prevent from running this script as root. +if [ "$(whoami)" = "root" ]; then + if [ ! -f "${functionsdir}/core_functions.sh" ]||[ ! -f "${functionsdir}/check_root.sh" ]||[ ! -f "${functionsdir}/core_messages.sh" ]; then + echo "[ FAIL ] Do NOT run this script as root!" + exit 1 + else + core_functions.sh + check_root.sh + fi fi -if [ ! -f "${gameconfigdir}/${servicename}.cfg" ];then - fn_boostrap_fetch_config "lgsm/config" "instance-template.cfg" "${lgsmdir}/config/${servername}" "${servicename}.cfg" "noexecutecmd" "norun" "noforce" "nomd5" - source lgsm/config/${servername}/${servicename}.cfg +# LinuxGSM installer mode +if [ "${shortname}" == "core" ]; then + userinput=$1 + datadir="${lgsmdir}/data" + serverlist="${datadir}/serverlist.csv" + serverlist_tmp="${tmpdir}/data/serverlist.csv" + + # Download the serverlist. This is the complete list of all supported servers. + # Download to tmp dir + fn_boostrap_fetch_config "lgsm/data" "serverlist.csv" "${tmpdir}/data" "serverlist.csv" "noexecutecmd" "norun" "noforce" "nomd5" + # if missing in lgsm dir copy it accross + if [ ! -f "${serverlist}" ]; then + mkdir -p "${datadir}" + cp -R "${serverlist_tmp}" "${serverlist}" + # check if the files are different. + else + file_diff=$(diff -q "${serverlist_tmp}" "${serverlist}") + if [ "${file_diff}" != "" ]; then + cp -Rf "${serverlist_tmp}" "${serverlist}" + fi + fi + + if [ ! -f "${serverlist}" ];then + echo "[ FAIL ] serverlist.csv could not be loaded." + exit 1 + fi + + if [ "${userinput}" == "list" ]; then + { + awk -F "," '{print $2 "\t" $3}' "${serverlist}" + } | column -s $'\t' -t | more + exit + elif [ "${userinput}" == "install" ]; then + fn_install_menu result "LinuxGSM" "Select game to install" "lgsm/data/serverlist.csv" + userinput="${result}" + fn_server_info + echo "result is ${result}" + echo "RESULT: ${result}" + echo "VALIDATE: ${servername}" + if [ "${result}" == "${servername}" ]; then + fn_install_file + else + echo "[ FAIL ] menu result does not match servername" + fi + elif [ -n "${userinput}" ]; then + fn_server_info + if [ "${userinput}" == "${servername}" ]; then + fn_install_file + fi + else + fn_install_getopt + fi +# LinuxGSM Server Mode else - source lgsm/config/${servername}/${servicename}.cfg + # Load LinuxGSM configs + # These are required to get all the default variables for the specific server. + # Load the default config. If missing download it. If changed reload it. + if [ ! -f "${tmpdir}/config/${servername}/_default.cfg" ];then + fn_boostrap_fetch_config "lgsm/config/${servername}" "_default.cfg" "${tmpdir}/config/${servername}" "_default.cfg" "noexecutecmd" "norun" "noforce" "nomd5" + fi + if [ ! -f "${gameconfigdir}/_default.cfg" ];then + cp -R "${tmpdir}/config/${servername}/_default.cfg" "${gameconfigdir}/_default.cfg" + else + function_file_diff=$(diff -q ${tmpdir}/config/${servername}/_default.cfg ${gameconfigdir}/_default.cfg) + if [ "${function_file_diff}" != "" ]; then + echo "config different onverwriting" + cp -R "${tmpdir}/config/${servername}/_default.cfg" "${gameconfigdir}/_default.cfg" + fi + source lgsm/config/${servername}/_default.cfg + fi + # Load the common.cfg config. If missing download it + if [ ! -f "${gameconfigdir}/common.cfg" ];then + fn_boostrap_fetch_config "lgsm/config" "common-template.cfg" "${lgsmdir}/config/${servername}" "common.cfg" "${executecmd}" "noexecutecmd" "norun" "noforce" "nomd5" + source lgsm/config/${servername}/common.cfg + else + source lgsm/config/${servername}/common.cfg + fi + # Load the instance.cfg config. If missing download it + if [ ! -f "${gameconfigdir}/${servicename}.cfg" ];then + fn_boostrap_fetch_config "lgsm/config" "instance-template.cfg" "${lgsmdir}/config/${servername}" "${servicename}.cfg" "noexecutecmd" "norun" "noforce" "nomd5" + source lgsm/config/${servername}/${servicename}.cfg + else + source lgsm/config/${servername}/${servicename}.cfg + fi fi - ######################## ######## Script ######## ###### Do not edit ##### @@ -307,16 +360,7 @@ functionfile="${FUNCNAME}" fn_boostrap_fetch_function } -# Prevent from running this script as root. -if [ "$(whoami)" = "root" ]; then - if [ ! -f "${functionsdir}/core_functions.sh" ]||[ ! -f "${functionsdir}/check_root.sh" ]||[ ! -f "${functionsdir}/core_messages.sh" ]||[ ! -f "${functionsdir}/exit 1" ]; then - echo "[ FAIL ] Do NOT run this script as root!" - exit 1 - else - core_functions.sh - check_root.sh - fi -fi + core_dl.sh core_functions.sh