Compare commits

...

4 Commits

Author SHA1 Message Date
Geoff Bourne
8dbbdd8cd2 Added logic to skip --noconsole on newer versions
Fixes #452
2020-04-13 18:29:44 -05:00
Geoff Bourne
1c2a0c506c Added support for TYPE=CURSE_INSTANCE 2020-04-12 14:31:19 -05:00
Chip Wolf ‮
90a6707280 Enable upgrades with GENERIC_PACK (#491) 2020-04-12 09:39:28 -05:00
Geoff Bourne
e7cc54092a Fixing health check description to reference mc-monitor
For #426
2020-04-11 10:51:30 -05:00
10 changed files with 106 additions and 35 deletions

View File

@@ -1,4 +1,5 @@
data data
examples examples
k8s-examples k8s-examples
.idea .idea
.git

View File

@@ -49,7 +49,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz --from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=1.3.5 --var app=mc-server-runner --file {{.app}} \ --var version=1.4.2 --var app=mc-server-runner --file {{.app}} \
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz --from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \

View File

@@ -145,8 +145,8 @@ Keep in mind that some versions of Minecraft server can't work on the newest ver
## Healthcheck ## Healthcheck
This image contains [Dinnerbone's mcstatus](https://github.com/Dinnerbone/mcstatus) and uses This image contains [mc-monitor](https://github.com/itzg/mc-monitor) and uses
its `ping` command to continually check on the container's. That can be observed its `status` command to continually check on the container's. That can be observed
from the `STATUS` column of `docker ps` from the `STATUS` column of `docker ps`
``` ```
@@ -161,16 +161,6 @@ You can also query the container's health in a script friendly way:
healthy healthy
``` ```
Finally, since `mcstatus` is on the `PATH` you can exec into the container
and use mcstatus directly and invoke any of its other commands:
```
> docker exec mc mcstatus localhost status
version: v1.12 (protocol 335)
description: "{u'text': u'A Minecraft Server Powered by Docker'}"
players: 0/20 No players online
```
## Deployment Templates and Examples ## Deployment Templates and Examples
### Helm Charts ### Helm Charts

View File

@@ -0,0 +1,20 @@
version: "3.7"
services:
mc:
image: itzg/minecraft-server
ports:
- 25565:25565
volumes:
# Attach .../Curse/Minecraft/Instances for use at /instances
- ./Instances:/instances:ro
# Attach /data as usual
- ./ServerData:/data
environment:
EULA: "TRUE"
# Modpacks generally need more memory, so let's give at 2 GB
MEMORY: 2G
# Use new CURSE_INSTANCE type
TYPE: CURSE_INSTANCE
# Reference directory of or full path to minecraftinstance.json
CURSE_INSTANCE_JSON: /instances/FTB Presents SkyFactory 3

View File

@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
echo "WARNING: mcstatus is deprecated; calling mc-monitor instead"
##### mcstatus shim for mc-monitor ##### mcstatus shim for mc-monitor
# handles translating calls to # handles translating calls to
# mcstatus (host:port) (command) # mcstatus (host:port) (command)

View File

@@ -20,8 +20,8 @@ if [ ! -e /data/eula.txt ]; then
fi fi
echo "# Generated via Docker on $(date)" > eula.txt echo "# Generated via Docker on $(date)" > eula.txt
echo "eula=$EULA" >> eula.txt
if [ $? != 0 ]; then if ! echo "eula=$EULA" >> eula.txt; then
log "ERROR: unable to write eula to /data. Please make sure attached directory is writable by uid=${UID}" log "ERROR: unable to write eula to /data. Please make sure attached directory is writable by uid=${UID}"
exit 2 exit 2
fi fi
@@ -49,56 +49,61 @@ export VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.js
case "X$VERSION" in case "X$VERSION" in
X|XLATEST|Xlatest) X|XLATEST|Xlatest)
export VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.release'` VANILLA_VERSION=$(curl -fsSL $VERSIONS_JSON | jq -r '.latest.release')
;; ;;
XSNAPSHOT|Xsnapshot) XSNAPSHOT|Xsnapshot)
export VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.snapshot'` VANILLA_VERSION=$(curl -fsSL $VERSIONS_JSON | jq -r '.latest.snapshot')
;; ;;
X[1-9]*) X[1-9]*)
export VANILLA_VERSION=$VERSION VANILLA_VERSION=$VERSION
;; ;;
*) *)
export VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.release'` VANILLA_VERSION=$(curl -fsSL $VERSIONS_JSON | jq -r '.latest.release')
;; ;;
esac esac
export VANILLA_VERSION
log "Resolved version given ${VERSION} into ${VANILLA_VERSION}" log "Resolved version given ${VERSION} into ${VANILLA_VERSION}"
cd /data cd /data || exit 1
export ORIGINAL_TYPE=${TYPE^^} export ORIGINAL_TYPE=${TYPE^^}
log "Resolving type given ${TYPE}" log "Resolving type given ${TYPE}"
case "${TYPE^^}" in case "${TYPE^^}" in
*BUKKIT|SPIGOT) *BUKKIT|SPIGOT)
exec /start-deployBukkitSpigot $@ exec /start-deployBukkitSpigot "$@"
;; ;;
PAPER) PAPER)
exec /start-deployPaper $@ exec /start-deployPaper "$@"
;; ;;
FORGE) FORGE)
exec /start-deployForge $@ exec /start-deployForge "$@"
;; ;;
FABRIC) FABRIC)
exec /start-deployFabric $@ exec /start-deployFabric "$@"
;; ;;
FTB|CURSEFORGE) FTB|CURSEFORGE)
exec /start-deployFTB $@ exec /start-deployFTB "$@"
;; ;;
VANILLA) VANILLA)
exec /start-deployVanilla $@ exec /start-deployVanilla "$@"
;; ;;
SPONGEVANILLA) SPONGEVANILLA)
exec /start-deploySpongeVanilla $@ exec /start-deploySpongeVanilla "$@"
;; ;;
CUSTOM) CUSTOM)
exec /start-deployCustom $@ exec /start-deployCustom "$@"
;;
CURSE_INSTANCE)
exec /start-validateCurseInstance "$@"
;; ;;
*) *)

View File

@@ -133,9 +133,22 @@ if [[ "${GENERIC_PACK}" ]]; then
base_dir=/tmp/generic_pack_base base_dir=/tmp/generic_pack_base
mkdir -p ${base_dir} mkdir -p ${base_dir}
unzip -q -d ${base_dir} ${GENERIC_PACK} unzip -q -d ${base_dir} ${GENERIC_PACK}
depth=$(( ${GENERIC_PACK_STRIP_DIRS:-1} + 1 )) if [ -f /data/manifest.txt ]; then
log "Applying generic pack, stripping $(( depth - 1 )) level ..." log "Manifest exists from older generic pack, cleaning up ..."
find ${base_dir} -type d -mindepth $depth -maxdepth $depth -exec cp -r {} /data/ + while read f; do
rm -rf "/data/${f}"
done < /data/manifest.txt
find /data/* -type d -exec rmdir --ignore-fail-on-non-empty {} +
rm -f /data/manifest.txt
fi
log "Writing generic pack manifest ... "
find ${base_dir} -type f -print0 | xargs -0 -I {} echo "{}" | sed "s#${base_dir}/##" > /data/manifest.txt
log "Applying generic pack ..."
IFS='
'
set -f
for d in $(find ${base_dir} -type d); do mkdir -p "$(sed "s#${base_dir}#/data#" <<< $d)"; done
for f in $(find ${base_dir} -type f); do cp -f "$f" "$(sed "s#${base_dir}#/data#" <<< $f)"; done
rm -rf ${base_dir} rm -rf ${base_dir}
sha256sum ${GENERIC_PACK} > ${sum_file} sha256sum ${GENERIC_PACK} > ${sum_file}
fi fi

View File

@@ -80,7 +80,7 @@ esac
EXTRA_ARGS="" EXTRA_ARGS=""
# Optional disable console # Optional disable console
if [[ ${CONSOLE} = false || ${CONSOLE} = FALSE ]]; then if versionLessThan 1.14 && [[ ${CONSOLE,,} = false ]]; then
EXTRA_ARGS+="--noconsole" EXTRA_ARGS+="--noconsole"
fi fi
@@ -164,8 +164,15 @@ if isTrue "${USE_LARGE_PAGES}"; then
fi fi
mcServerRunnerArgs="--stop-duration 60s" mcServerRunnerArgs="--stop-duration 60s"
if [[ ${TYPE} == "CURSE_INSTANCE" ]]; then
if [[ ${TYPE} == "FEED-THE-BEAST" ]]; 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" ]]; then
mcServerRunnerArgs="${mcServerRunnerArgs} --shell bash" mcServerRunnerArgs="${mcServerRunnerArgs} --shell bash"
if [ ! -e "${FTB_DIR}/ops.json" -a -e /data/ops.txt ]; then if [ ! -e "${FTB_DIR}/ops.json" -a -e /data/ops.txt ]; then

View File

@@ -63,3 +63,18 @@ function normalizeMemSize {
val=${1:0: -1} val=${1:0: -1}
echo $(( val * scale )) echo $(( val * scale ))
} }
function versionLessThan {
local activeParts
IFS=. read -ra activeParts <<< "${VANILLA_VERSION}"
local givenParts
IFS=. read -ra givenParts <<< "$1"
if (( activeParts[0] < givenParts[0] )) || \
(( activeParts[0] == givenParts[0] && activeParts[1] < givenParts[1] )); then
return 0
else
return 1
fi
}

18
start-validateCurseInstance Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/bash
. /start-utils
if ! [[ -v CURSE_INSTANCE_JSON ]]; then
log "ERROR: CURSE_INSTANCE_JSON needs to be set"
exit 2
elif ! [ -f "${CURSE_INSTANCE_JSON}" ] && [ -f "${CURSE_INSTANCE_JSON}/minecraftinstance.json" ]; then
CURSE_INSTANCE_JSON="${CURSE_INSTANCE_JSON}/minecraftinstance.json"
elif ! [ -f "${CURSE_INSTANCE_JSON}" ]; then
log "ERROR: CURSE_INSTANCE_JSON file does not exist: ${CURSE_INSTANCE_JSON}"
exit 2
fi
log "Resolved CURSE_INSTANCE_JSON as ${CURSE_INSTANCE_JSON}"
# Continue to Final Setup
exec /start-finalSetup01World "$@"