From beaccbcf3b4d8bc59d79c6670c6c25d35772c004 Mon Sep 17 00:00:00 2001 From: Geoff Bourne Date: Sun, 19 Jul 2020 15:01:19 -0500 Subject: [PATCH] Added option to set USE_MODPACK_START_SCRIPT=false for CF modpacks (#591) --- README.md | 4 ++++ start-deployFTB | 37 +++++++++++++++++++++++++++++++++---- start-minecraftFinalSetup | 11 +++++++++-- start-utils | 4 ++++ 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0d5e7bcb..726d1297 100644 --- a/README.md +++ b/README.md @@ -513,6 +513,10 @@ The following example uses `/modpacks` as the container path as the pre-download -e CF_SERVER_MOD=/modpacks/SkyFactory_4_Server_4.1.0.zip \ -p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server +#### Buggy start scripts + +Some modpacks have buggy or overly complex start scripts. You can avoid using the bundled start script and use this image's standard server-starting logic by adding `-e USE_MODPACK_START_SCRIPT=false`. + ### Fixing "unable to launch forgemodloader" If your server's modpack fails to load with an error [like this](https://support.feed-the-beast.com/t/cant-start-crashlanding-server-unable-to-launch-forgemodloader/6028/2): diff --git a/start-deployFTB b/start-deployFTB index 5e2b5c4f..66d8559b 100644 --- a/start-deployFTB +++ b/start-deployFTB @@ -1,5 +1,7 @@ #!/bin/bash +set -e + . ${SCRIPTS:-/}start-utils export FTB_BASE_DIR=/data/FeedTheBeast @@ -9,11 +11,38 @@ export TYPE=FEED-THE-BEAST FTB_SERVER_MOD=${FTB_SERVER_MOD:-$CF_SERVER_MOD} log "Looking for Feed-The-Beast / CurseForge server modpack." -if [[ -z $FTB_SERVER_MOD ]]; then - log "Environment variable FTB_SERVER_MOD not set." - log "Set FTB_SERVER_MOD to the file name of the FTB server modpack." - log "(And place the modpack in the /data directory.)" +requireVar FTB_SERVER_MOD + +if ! isTrue ${USE_MODPACK_START_SCRIPT:-true}; then + if ! [ -f ${FTB_SERVER_MOD} ]; then + log "ERROR unable to find requested modpack file ${FTB_SERVER_MOD}" exit 2 + fi + + log "Unpacking FTB server modpack ${FTB_SERVER_MOD} ..." + mkdir -p ${FTB_BASE_DIR} + unzip -o ${FTB_SERVER_MOD} -d ${FTB_BASE_DIR} | awk '{printf "."} END {print ""}' + + forgeInstallerJar=$(find ${FTB_BASE_DIR} -name "forge*installer.jar") + if [[ -z "${forgeInstallerJar}" ]]; then + log "ERROR Unable to find forge installer in modpack." + log " Make sure you downloaded the server files." + exit 2 + fi + + log "Installing forge server" + (cd $(dirname "${forgeInstallerJar}"); java -jar $(basename ${forgeInstallerJar}) --installServer) | awk '{printf "."} END {print ""}' + + export SERVER=$(find ${FTB_BASE_DIR} -not -name "forge*installer.jar" -name "forge*.jar") + if [[ -z "${SERVER}" || ! -f "${SERVER}" ]]; then + log "ERROR unable to locate installed forge server jar" + isDebugging && find ${FTB_BASE_DIR} -name "forge*.jar" + exit 2 + fi + + export FTB_DIR=$(dirname "${SERVER}") + + exec ${SCRIPTS:-/}start-finalSetupWorld $@ fi entryScriptExpr=" diff --git a/start-minecraftFinalSetup b/start-minecraftFinalSetup index 5b8af846..3fd2a21c 100644 --- a/start-minecraftFinalSetup +++ b/start-minecraftFinalSetup @@ -158,15 +158,23 @@ if isTrue "${DEBUG_MEMORY}"; then free -m fi +JVM_OPTS="-Xms${INIT_MEMORY} -Xmx${MAX_MEMORY} ${JVM_OPTS}" + mcServerRunnerArgs="--stop-duration 60s" if [[ ${TYPE} == "CURSE_INSTANCE" ]]; then - JVM_OPTS="-Xms${INIT_MEMORY} -Xmx${MAX_MEMORY} ${JVM_OPTS}" if isTrue ${DEBUG_EXEC}; then set -x fi exec mc-server-runner ${mcServerRunnerArgs} \ --cf-instance-file "${CURSE_INSTANCE_JSON}" \ java $JVM_XX_OPTS $JVM_OPTS $expandedDOpts -jar _SERVERJAR_ "$@" $EXTRA_ARGS +elif [[ ${TYPE} == "FEED-THE-BEAST" && "${SERVER}" ]]; then + cd "${FTB_DIR}" + log "Starting CurseForge server in ${FTB_DIR}..." + if isTrue ${DEBUG_EXEC}; then + set -x + fi + exec mc-server-runner ${bootstrapArgs} ${mcServerRunnerArgs} java $JVM_XX_OPTS $JVM_OPTS $expandedDOpts -jar $(basename "${SERVER}") "$@" $EXTRA_ARGS elif [[ ${TYPE} == "FEED-THE-BEAST" ]]; then mcServerRunnerArgs="${mcServerRunnerArgs} --shell bash" @@ -205,7 +213,6 @@ else fi log "Starting the Minecraft server..." - JVM_OPTS="-Xms${INIT_MEMORY} -Xmx${MAX_MEMORY} ${JVM_OPTS}" if isTrue ${DEBUG_EXEC}; then set -x fi diff --git a/start-utils b/start-utils index 0c6fd763..ffbdec29 100644 --- a/start-utils +++ b/start-utils @@ -108,4 +108,8 @@ requireVar() { log "ERROR: $1 is required to be set" exit 1 fi + if [ -z "${!1}" ]; then + log "ERROR: $1 is required to be set" + exit 1 + fi }