diff --git a/pms-cli b/pms-cli index 7afdfc5..5b90f33 100755 --- a/pms-cli +++ b/pms-cli @@ -9,7 +9,7 @@ readonly BUILDDIR="$(mktemp -d /tmp/pms-cli.XXXXXX)" readonly CONFIG="/usr/local/noveria/etc/pms-cli/pms-cli.json" for util in ${ROOTPATH}/utils/*; do - source $util + source ${util} done # VARIABLES @@ -52,7 +52,7 @@ if [ "$?" != 0 ]; then exit 1 fi -eval set -- "$TEMP" +eval set -- "${TEMP}" while true; do case "${1}" in @@ -99,8 +99,8 @@ while true; do ;; --delete) shift - stop "$1" - delete "$1" + stop "${1}" + delete "${1}" ;; --) shift diff --git a/utils/configparser b/utils/configparser index bc0054f..b3a3c2e 100644 --- a/utils/configparser +++ b/utils/configparser @@ -1,15 +1,15 @@ #!/usr/bin/env bash function getValueByKey() { - jq -r ".$1" "${CONFIG}" + jq -r ".${1}" "${CONFIG}" } function getLocalConfValue() { - jq -r ".$2" "$1/config.json" + jq -r ".${2}" "${1}/config.json" } function setLocalConfValue() { - jq "$2" "$1/config.json" > "$1/config.tmp.json" - rm -f "$1/config.json" - mv "$1/config.tmp.json" "$1/config.json" + jq "${2}" "${1}/config.json" > "${1}/config.tmp.json" + rm -f "${1}/config.json" + mv "${1}/config.tmp.json" "${1}/config.json" } diff --git a/utils/datapack b/utils/datapack index a8ee104..15b50c1 100644 --- a/utils/datapack +++ b/utils/datapack @@ -8,5 +8,5 @@ function datapack() { local dir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}/data/world/datapacks" - curl -L "${2}" -o "$dir/$(echo $2 | awk -F/ '{print $NF}')" + curl -L "${2}" -o "${dir}/$(echo ${2} | awk -F/ '{print $NF}')" } diff --git a/utils/delete b/utils/delete index a23b33e..361c530 100644 --- a/utils/delete +++ b/utils/delete @@ -8,9 +8,9 @@ function delete() { local delDir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}" - while [[ ! $deleteAns =~ [YyNn] ]]; do + while [[ ! ${deleteAns} =~ [YyNn] ]]; do read -p "Do you really want to delete the complete directory located in ${delDir} ? (This is an unrecoverable process): " deleteAns - case "$deleteAns" in + case "${deleteAns}" in "N"|"n") log e "Aborted by user!" exit 1 @@ -18,6 +18,6 @@ function delete() { esac done - rm -rf "$delDir" + rm -rf "${delDir}" log s "Server '${1}' deleted!" } diff --git a/utils/init b/utils/init index 40362f4..ec77630 100644 --- a/utils/init +++ b/utils/init @@ -1,7 +1,7 @@ #!/usr/bin/env bash function init() { - createNetwork "$2" + createNetwork "${2}" if [[ -d "$(getValueByKey 'PODMAN_DIRECTORY')/${1}" ]]; then log e "Directory '${1}' already exists!" exit 1 @@ -10,12 +10,12 @@ function init() { local newdir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}" mkdir -p "${newdir}/data/world/datapacks" - populateConfig "${newdir}/config.json" "$2" + populateConfig "${newdir}/config.json" "${2}" } function populateConfig() { - local config="$1" - local network_name="$2" + local config="${1}" + local network_name="${2}" local runnertype local build @@ -26,99 +26,99 @@ function populateConfig() { # software log i "What would you like to install?" - while [[ ! $softwareAns =~ [1-2] ]]; do + while [[ ! ${softwareAns} =~ [1-2] ]]; do echo -ne "[1] Server\n[2] Proxy\n" read -p "Answer: " softwareAns done - case "$softwareAns" in + case "${softwareAns}" in 1) runnertype="server" log i "Which server-software would you like to install?" local servers=($(getValueByKey 'SERVERRUNNERS|keys[]')) - while [[ ! $serverAns =~ [0-9] ]]; do + while [[ ! ${serverAns} =~ [0-9] ]]; do for (( i = 0; i<${#servers[@]}; i++ )); do - if [[ -n ${servers[$i]} ]]; then - echo "[$(($i + 1))] ${servers[$i]}" + if [[ -n ${servers[${i}]} ]]; then + echo "[$((${i} + 1))] ${servers[${i}]}" fi done read -p "Answer: " serverAns done - if [[ $serverAns -gt ${#servers[@]} ]]; then - log e "The answer '$serverAns' is not valid!" + if [[ ${serverAns} -gt ${#servers[@]} ]]; then + log e "The answer '${serverAns}' is not valid!" exit 1 fi - software="${servers[$(($serverAns - 1))]}" + software="${servers[$((${serverAns} - 1))]}" software_url="$(getValueByKey SERVERRUNNERS.${software})" ;; 2) runnertype="proxy" log i "Which proxy-software would you like to install?" local proxies=($(getValueByKey 'PROXYRUNNERS|keys[]')) - while [[ ! $proxyAns =~ [0-9] ]]; do + while [[ ! ${proxyAns} =~ [0-9] ]]; do for (( i = 0; i<${#proxies[@]}; i++ )); do - if [[ -n ${proxies[$i]} ]]; then - echo "[$(($i + 1))] ${proxies[$i]}" + if [[ -n ${proxies[${i}]} ]]; then + echo "[$((${i} + 1))] ${proxies[${i}]}" fi done read -p "Answer: " proxyAns done - if [[ $proxyAns -gt ${#proxies[@]} ]]; then - log e "The answer '$proxyAns' is not valid!" + if [[ ${proxyAns} -gt ${#proxies[@]} ]]; then + log e "The answer '${proxyAns}' is not valid!" exit 1 fi - software="${proxies[$(($proxyAns - 1))]}" + software="${proxies[$((${proxyAns} - 1))]}" software_url="$(getValueByKey PROXYRUNNERS.${software})" ;; *) - log e "The answer '$softwareAns' is not valid!" + log e "The answer '${softwareAns}' is not valid!" exit 1 ;; esac # version - log i "Which version of '$software' would you like to install?" - local versions=($(curl -s "$software_url" | jq -r '.versions[]' )) + log i "Which version of '${software}' would you like to install?" + local versions=($(curl -s "${software_url}" | jq -r '.versions[]' )) - while [[ -z $versionAns ]]; do + while [[ -z ${versionAns} ]]; do for (( i = 0; i<${#versions[@]}; i++ )); do - echo "[$(($i + 1))] ${versions[$i]}" + echo "[$((${i} + 1))] ${versions[${i}]}" done read -p "Answer: " versionAns done - if [[ $versionAns -gt ${#versions[@]} ]]; then - log e "The answer '$versionAns' is not valid!" + if [[ ${versionAns} -gt ${#versions[@]} ]]; then + log e "The answer '${versionAns}' is not valid!" exit 1 fi - version="${versions[$(($versionAns - 1))]}" + version="${versions[$((${versionAns} - 1))]}" # releasecycle log i "Which release-cycle do you want to go?" - while [[ -z $releaseCycleAns ]]; do + while [[ -z ${releaseCycleAns} ]]; do echo -ne "[1] latest\n[2] specific\n" read -p "Answer: " releaseCycleAns done - case "$releaseCycleAns" in + case "${releaseCycleAns}" in 1) release="latest" - build=$(curl -s "$software_url/versions/$version" | jq -r '.builds | last') + build=$(curl -s "${software_url}/versions/${version}" | jq -r '.builds | last') ;; 2) - log i "Which build of '$software/$version' would you like to use?" - local builds=($(curl -s "$software_url/versions/$version" | jq -r '.builds[]')) - while [[ -z $buildAns ]]; do + log i "Which build of '${software}/${version}' would you like to use?" + local builds=($(curl -s "${software_url}/versions/${version}" | jq -r '.builds[]')) + while [[ -z ${buildAns} ]]; do for (( i = 0; i<${#builds[@]}; i++ )); do - echo "[$(($i + 1))] ${builds[$i]}" + echo "[$((${i} + 1))] ${builds[${i}]}" done read -p "Answer: " buildAns done - if [[ $buildAns -gt ${#builds[@]} ]]; then - log e "The answer '$buildAns' is not valid!" + if [[ ${buildAns} -gt ${#builds[@]} ]]; then + log e "The answer '${buildAns}' is not valid!" exit 1 fi - build="${builds[$(($buildAns - 1))]}" + build="${builds[$((${buildAns} - 1))]}" release="specific" ;; esac - jq "(.type=\"$runnertype\")|(.build=$build)|(.software=\"$software\")|(.release=\"$release\")|(.version=\"$version\")|(.podman_network=\"$network_name\")" ${TEMPLATEDIR}/config.json > "$config" + jq "(.type=\"${runnertype}\")|(.build=${build})|(.software=\"${software}\")|(.release=\"${release}\")|(.version=\"${version}\")|(.podman_network=\"${network_name}\")" ${TEMPLATEDIR}/config.json > "${config}" } diff --git a/utils/podman b/utils/podman index 2a695e1..109252d 100644 --- a/utils/podman +++ b/utils/podman @@ -6,32 +6,32 @@ readonly IMAGEDIR=${ROOTPATH}/image ## # checks if the defined image exists already # -# $1 - string: software-name -# $2 - string: mc-version -# $3 - string: build-number +# ${1} - string: software-name +# ${2} - string: mc-version +# ${3} - string: build-number ## function checkImage() { - [[ -n $(podman image ls | grep "$2/$1" | grep "$3") ]] && echo true || echo false + [[ -n $(podman image ls | grep "${2}/${1}" | grep "${3}") ]] && echo true || echo false } ## # checks if the passed data is up-to-date # -# $1 - string: software-name -# $2 - string: mc-version -# $3 - string: build-number -# $4 - string: runner-type +# ${1} - string: software-name +# ${2} - string: mc-version +# ${3} - string: build-number +# ${4} - string: runner-type ## function checkUpdate() { - case "$4" in + case "${4}" in "server") - local remotebuild=$(curl -s "$(getValueByKey SERVERRUNNERS.$1)/versions/$2" | jq -r '.builds | last') + local remotebuild=$(curl -s "$(getValueByKey SERVERRUNNERS.${1})/versions/${2}" | jq -r '.builds | last') ;; "proxy") - local remotebuild=$(curl -s "$(getValueByKey PROXYRUNNERS.$1)/versions/$2" | jq -r '.builds | last') + local remotebuild=$(curl -s "$(getValueByKey PROXYRUNNERS.${1})/versions/${2}" | jq -r '.builds | last') ;; esac - if [[ "$3" == "$remotebuild" ]]; then + if [[ "${3}" == "${remotebuild}" ]]; then echo false else echo true @@ -41,40 +41,40 @@ function checkUpdate() { ## # updates the config-file to the latest build # -# $1 - string: software-name -# $2 - string: mc-version -# $3 - string: config-dir -# $4 - string: runner-type +# ${1} - string: software-name +# ${2} - string: mc-version +# ${3} - string: config-dir +# ${4} - string: runner-type ## function updateBuild() { - case "$4" in + case "${4}" in "server") - local latest=$(curl -s "$(getValueByKey SERVERRUNNERS.$1)/versions/$2" | jq -r '.builds | last') + local latest=$(curl -s "$(getValueByKey SERVERRUNNERS.${1})/versions/${2}" | jq -r '.builds | last') ;; "proxy") - local latest=$(curl -s "$(getValueByKey PROXYRUNNERS.$1)/versions/$2" | jq -r '.builds | last') + local latest=$(curl -s "$(getValueByKey PROXYRUNNERS.${1})/versions/${2}" | jq -r '.builds | last') ;; esac - log d "Updating build-no. to '$latest'" - setLocalConfValue "$3" "(.build=$latest)" + log d "Updating build-no. to '${latest}'" + setLocalConfValue "${3}" "(.build=${latest})" } ## # builds the podman image with the proper settings # -# $1 - string: software-name -# $2 - string: mc-version -# $3 - string: build-number -# $4 - string: download-url +# ${1} - string: software-name +# ${2} - string: mc-version +# ${3} - string: build-number +# ${4} - string: download-url # ## function buildImage() { log d "lookup jar-name for download" - local app_name=$(curl -s "$4" | jq -r '.downloads.application.name') + local app_name=$(curl -s "${4}" | jq -r '.downloads.application.name') log d "downloading server.jar" cp "${ROOTPATH}"/image/* "${BUILDDIR}/" - curl "$4/downloads/$app_name" -o "${BUILDDIR}/server.jar" + curl "${4}/downloads/${app_name}" -o "${BUILDDIR}/server.jar" log d "building docker image" podman build --rm "${BUILDDIR}" --tag "${2}/${1}:${3}" @@ -87,42 +87,42 @@ function buildImage() { ## # starts the specified container # -# $1 - string: containername -# $2 - string: image -# $3 - int: port +# ${1} - string: containername +# ${2} - string: image +# ${3} - int: port ## function startContainer() { - log d "Starting container '$1'" + log d "Starting container '${1}'" readarray -t additional_ports <<< "$(getLocalConfValue $(getValueByKey 'PODMAN_DIRECTORY')/${1} 'additional_ports[]')" [[ ${#additional_ports} -gt 0 ]] && log d "Starting with additional ports: ${additional_ports[@]}" podman run --name "${1}" --userns=keep-id:uid=1000 --rm -it -d --network "${5}" -p $([[ -n "${4}" ]] && echo ${4}:)${3}:25565 $([[ ${#additional_ports} -gt 0 ]] && for port in "${additional_ports[@]}"; do echo "-p $([[ -n ${4} ]] && echo ${4}:)${port}:${port}"; done) -v $(getValueByKey 'PODMAN_DIRECTORY')/${1}/data:/var/server "${2}" java -Dcom.mojang.eula.agree=true -jar /var/exec/server.jar --nogui --port 25565 - [[ $? -eq 0 ]] && log s "Container '$1' started!" + [[ $? -eq 0 ]] && log s "Container '${1}' started!" } ## # stops the specified container # -# $1 - string: containername +# ${1} - string: containername ## function stopContainer() { - log d "Stopping container '$1'" - podman container stop --time 100 $1 - log s "Container '$1' stopped" + log d "Stopping container '${1}'" + podman container stop --time 100 ${1} + log s "Container '${1}' stopped" } ## # create a podman network # -# $1 - string: network-name +# ${1} - string: network-name ## function createNetwork() { - if [[ -z "$1" ]]; then + if [[ -z "${1}" ]]; then log e "Network name is unspecified. Please provide a network-name!" exit 1 fi - if [[ -n $(podman network ls | grep "$1") ]]; then - log w "Network '$1' exists already, won't create!" + if [[ -n $(podman network ls | grep "${1}") ]]; then + log w "Network '${1}' exists already, won't create!" return 1 fi - podman network create "$1" + podman network create "${1}" } diff --git a/utils/reset b/utils/reset index 203e7e8..adb6800 100644 --- a/utils/reset +++ b/utils/reset @@ -7,11 +7,11 @@ function reset() { fi local dir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}" - local datapack_dir="$dir/data/world/datapacks" + local datapack_dir="${dir}/data/world/datapacks" - while [[ ! $deleteDataDir =~ [YyNn] ]]; do + while [[ ! ${deleteDataDir} =~ [YyNn] ]]; do read -p "Do you want to reset the complete data dir located in ${dir}/data ? (This is an unrecoverable process): " deleteDataDir - case "$deleteDataDir" in + case "${deleteDataDir}" in "N"|"n") log e "Aborted by user!" exit 1 @@ -21,9 +21,9 @@ function reset() { local backedup=false if [[ -n $(find "${datapack_dir}" -maxdepth 1 -type f) ]]; then - while [[ ! $backupDatapacksAns =~ [YyNn] ]]; do - read -p "Do you want to backup the datapack .zip found in $datapack_dir ?: " backupDatapacksAns - case "$backupDatapacksAns" in + while [[ ! ${backupDatapacksAns} =~ [YyNn] ]]; do + read -p "Do you want to backup the datapack .zip found in ${datapack_dir} ?: " backupDatapacksAns + case "${backupDatapacksAns}" in "Y"|"y") local backedup=true local tempdir=$(mktemp -d /tmp/pms-cli.XXXXXX) @@ -33,19 +33,19 @@ function reset() { done fi - rm -rf "$dir/data" - mkdir -p "$dir/data/world/datapacks" + rm -rf "${dir}/data" + mkdir -p "${dir}/data/world/datapacks" - if [[ "$backedup" == true ]]; then - while [[ ! $restoreDatapacksAns =~ [YyNn] ]]; do - read -p "You have some backed up datapack .zip in $tempdir. Do you want to restore them now?: " restoreDatapacksAns - case "$restoreDatapacksAns" in + if [[ "${backedup}" == true ]]; then + while [[ ! ${restoreDatapacksAns} =~ [YyNn] ]]; do + read -p "You have some backed up datapack .zip in ${tempdir}. Do you want to restore them now?: " restoreDatapacksAns + case "${restoreDatapacksAns}" in "Y"|"y") mv ${tempdir}/*.zip "${dir}/data/world/datapacks/" - rm -rf "$tempdir" + rm -rf "${tempdir}" ;; esac done fi - log s "Server '$1' resetted!" + log s "Server '${1}' resetted!" } diff --git a/utils/start b/utils/start index f6882d4..3745918 100644 --- a/utils/start +++ b/utils/start @@ -6,19 +6,19 @@ function start() { exit 1 fi - if [[ -z "$2" ]]; then + if [[ -z "${2}" ]]; then log e "You have to specify a port, on which the server listens!" exit 1 fi local dir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}" - local software="$(getLocalConfValue $dir 'software')" - local version="$(getLocalConfValue $dir 'version')" - local build="$(getLocalConfValue $dir 'build')" - local podman_network="$(getLocalConfValue $dir 'podman_network')" + local software="$(getLocalConfValue ${dir} 'software')" + local version="$(getLocalConfValue ${dir} 'version')" + local build="$(getLocalConfValue ${dir} 'build')" + local podman_network="$(getLocalConfValue ${dir} 'podman_network')" - case "$(getLocalConfValue $dir 'type')" in + case "$(getLocalConfValue ${dir} 'type')" in "server") local software_url="$(getValueByKey SERVERRUNNERS.${software})" ;; @@ -27,24 +27,24 @@ function start() { ;; esac - if [[ $(checkImage "$software" "$version" "$build") == false ]]; then - log i "Building image '$version/$software:$build'" - buildImage "$software" "$version" "$build" "$software_url/versions/$version/builds/$build" + if [[ $(checkImage "${software}" "${version}" "${build}") == false ]]; then + log i "Building image '${version}/${software}:${build}'" + buildImage "${software}" "${version}" "${build}" "${software_url}/versions/${version}/builds/${build}" else - if [[ "$(getLocalConfValue $dir 'release')" == "latest" ]]; then - if [[ $(checkUpdate "$software" "$version" "$build" "$(getLocalConfValue $dir 'type')") == true ]]; then - log w "Update for '$software/$version:$build' is available." - updateBuild "$software" "$version" "$dir" "$(getLocalConfValue $dir 'type')" - local oldbuild="$build" - build="$(getLocalConfValue $dir 'build')" - if [[ $(checkImage "$software" "$version" "$build") == false ]]; then - log i "Updating image '$version/$software:$oldbuild' => '$version/$software:$build'" - buildImage "$software" "$version" "$build" "$software_url/versions/$version/builds/$build" + if [[ "$(getLocalConfValue ${dir} 'release')" == "latest" ]]; then + if [[ $(checkUpdate "${software}" "${version}" "${build}" "$(getLocalConfValue ${dir} 'type')") == true ]]; then + log w "Update for '${software}/${version}:${build}' is available." + updateBuild "${software}" "${version}" "${dir}" "$(getLocalConfValue ${dir} 'type')" + local oldbuild="${build}" + build="$(getLocalConfValue ${dir} 'build')" + if [[ $(checkImage "${software}" "${version}" "${build}") == false ]]; then + log i "Updating image '${version}/${software}:${oldbuild}' => '${version}/${software}:${build}'" + buildImage "${software}" "${version}" "${build}" "${software_url}/versions/${version}/builds/${build}" fi fi fi fi - log i "Starting container '$1' with image '$version/$software:$build' on port '$([[ -n "$3" ]] && echo ${3}:)$2'" - startContainer "$1" "$version/$software:$build" "$2" "$3" "$podman_network" + log i "Starting container '${1}' with image '${version}/${software}:${build}' on port '$([[ -n "${3}" ]] && echo ${3}:)${2}'" + startContainer "${1}" "${version}/${software}:${build}" "${2}" "${3}" "${podman_network}" }