mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-18 15:36:22 +00:00
Compare commits
92 Commits
2021.17.0-
...
2021.18.0-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a3169344d | ||
|
|
327f21f1bb | ||
|
|
c96d6b2958 | ||
|
|
8ec4f0d244 | ||
|
|
da8fb37317 | ||
|
|
4d7e29cb3a | ||
|
|
d45250ebf2 | ||
|
|
17099320e9 | ||
|
|
f3dbb4dd2d | ||
|
|
03110aef99 | ||
|
|
b3b3cdde08 | ||
|
|
f344e7e823 | ||
|
|
b8cd510a0e | ||
|
|
0d5eb2ea9e | ||
|
|
c7fcaf1ec6 | ||
|
|
2b0fd2e5c0 | ||
|
|
4168821ec4 | ||
|
|
6353488db7 | ||
|
|
b446d4cc3f | ||
|
|
9d700041a7 | ||
|
|
16b2762025 | ||
|
|
4af4ed69a5 | ||
|
|
c5a3e2e376 | ||
|
|
d215c14996 | ||
|
|
4716254b5b | ||
|
|
3c2b7f0718 | ||
|
|
0fd43f5a05 | ||
|
|
fae6479453 | ||
|
|
d9df5bf773 | ||
|
|
13d7248c38 | ||
|
|
3c54954057 | ||
|
|
84823a559d | ||
|
|
d543df768b | ||
|
|
74968389a2 | ||
|
|
1701718515 | ||
|
|
ed6937654c | ||
|
|
73eb6e2e45 | ||
|
|
8b982472a4 | ||
|
|
ab406727d6 | ||
|
|
5fc74a45f7 | ||
|
|
17ecd48cd8 | ||
|
|
4732ce27a6 | ||
|
|
6e10768e7f | ||
|
|
bb47a3705d | ||
|
|
c3e1e92547 | ||
|
|
9ddd768f44 | ||
|
|
62e1ff8ffa | ||
|
|
5f95d135f5 | ||
|
|
8e32d26b0f | ||
|
|
573f064970 | ||
|
|
0bc6f4075b | ||
|
|
4ebcc0ef48 | ||
|
|
57720cf394 | ||
|
|
64b2783f19 | ||
|
|
1dbdd7628a | ||
|
|
4252ec710f | ||
|
|
11d455c284 | ||
|
|
08bc419dc8 | ||
|
|
67c23017d0 | ||
|
|
6e1ba3667c | ||
|
|
0c2f8b903b | ||
|
|
b9335d9cd6 | ||
|
|
0d92092b90 | ||
|
|
e653a41b3f | ||
|
|
82e63c54c4 | ||
|
|
f9c573f598 | ||
|
|
bf8b9cf20d | ||
|
|
0dd5a412d9 | ||
|
|
b389561091 | ||
|
|
6ee055761d | ||
|
|
49f9ff645e | ||
|
|
004cbdb9f7 | ||
|
|
45856a1a81 | ||
|
|
1e615e76e8 | ||
|
|
1c85a685de | ||
|
|
7cd207f40b | ||
|
|
140a8aa90c | ||
|
|
76dcff9d18 | ||
|
|
a9a86d249b | ||
|
|
595760d301 | ||
|
|
6d3f194ce3 | ||
|
|
21c1620f0c | ||
|
|
e78e5af96d | ||
|
|
0fb9700fc7 | ||
|
|
18925ef32c | ||
|
|
f06b990f8a | ||
|
|
75844ae81a | ||
|
|
6bb2323c46 | ||
|
|
7814ca21b5 | ||
|
|
b8806629ec | ||
|
|
4a7f838a0f | ||
|
|
2d07dee4df |
@@ -70,5 +70,5 @@ The multiarch images are built and published by [a Github action](https://github
|
|||||||
The following git command can be used to provide the bulk of release notes content:
|
The following git command can be used to provide the bulk of release notes content:
|
||||||
|
|
||||||
```shell script
|
```shell script
|
||||||
git log --invert-grep --grep "^ci:" --grep "^misc:" --grep "^docs:" --pretty="- %s" 1.1.0..1.2.0
|
git log --invert-grep --grep "^ci:" --grep "^misc:" --grep "^docs:" --grep "^build(deps)" --pretty="- %s" 1.1.0..1.2.0
|
||||||
```
|
```
|
||||||
|
|||||||
41
Dockerfile
41
Dockerfile
@@ -1,29 +1,29 @@
|
|||||||
FROM adoptopenjdk:16-jre
|
FROM openjdk:8u212-jre-alpine
|
||||||
|
|
||||||
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
|
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apk add --no-cache -U \
|
||||||
&& DEBIAN_FRONTEND=noninteractive \
|
openssl \
|
||||||
apt-get install -y \
|
|
||||||
imagemagick \
|
imagemagick \
|
||||||
gosu \
|
lsof \
|
||||||
sudo \
|
su-exec \
|
||||||
net-tools \
|
shadow \
|
||||||
curl wget \
|
bash \
|
||||||
|
curl iputils wget \
|
||||||
git \
|
git \
|
||||||
jq \
|
jq \
|
||||||
dos2unix \
|
|
||||||
mysql-client \
|
mysql-client \
|
||||||
tzdata \
|
tzdata \
|
||||||
rsync \
|
rsync \
|
||||||
nano \
|
nano \
|
||||||
unzip \
|
sudo \
|
||||||
knockd \
|
knock \
|
||||||
ttf-dejavu \
|
ttf-dejavu
|
||||||
&& apt-get clean
|
|
||||||
|
|
||||||
RUN addgroup --gid 1000 minecraft \
|
RUN addgroup -g 1000 minecraft \
|
||||||
&& adduser --system --shell /bin/false --uid 1000 --ingroup minecraft --home /data minecraft
|
&& adduser -Ss /bin/false -u 1000 -G minecraft -h /home/minecraft minecraft \
|
||||||
|
&& mkdir -m 777 /data \
|
||||||
|
&& chown minecraft:minecraft /data /home/minecraft
|
||||||
|
|
||||||
COPY files/sudoers* /etc/sudoers.d
|
COPY files/sudoers* /etc/sudoers.d
|
||||||
|
|
||||||
@@ -31,9 +31,9 @@ EXPOSE 25565 25575
|
|||||||
|
|
||||||
# hook into docker BuildKit --platform support
|
# hook into docker BuildKit --platform support
|
||||||
# see https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope
|
# see https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope
|
||||||
ARG TARGETOS
|
ARG TARGETOS=linux
|
||||||
ARG TARGETARCH
|
ARG TARGETARCH=amd64
|
||||||
ARG TARGETVARIANT
|
ARG TARGETVARIANT=""
|
||||||
|
|
||||||
ARG EASY_ADD_VER=0.7.1
|
ARG EASY_ADD_VER=0.7.1
|
||||||
ADD https://github.com/itzg/easy-add/releases/download/${EASY_ADD_VER}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
|
ADD https://github.com/itzg/easy-add/releases/download/${EASY_ADD_VER}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
|
||||||
@@ -52,7 +52,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.5.0 --var app=mc-server-runner --file {{.app}} \
|
--var version=1.6.0 --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} \
|
||||||
@@ -69,7 +69,7 @@ WORKDIR /data
|
|||||||
STOPSIGNAL SIGTERM
|
STOPSIGNAL SIGTERM
|
||||||
|
|
||||||
ENV UID=1000 GID=1000 \
|
ENV UID=1000 GID=1000 \
|
||||||
MEMORY="1G" \
|
JVM_XX_OPTS="-XX:+UseG1GC" MEMORY="1G" \
|
||||||
TYPE=VANILLA VERSION=LATEST \
|
TYPE=VANILLA VERSION=LATEST \
|
||||||
ENABLE_RCON=true RCON_PORT=25575 RCON_PASSWORD=minecraft \
|
ENABLE_RCON=true RCON_PORT=25575 RCON_PASSWORD=minecraft \
|
||||||
SERVER_PORT=25565 ONLINE_MODE=TRUE SERVER_NAME="Dedicated Server" \
|
SERVER_PORT=25565 ONLINE_MODE=TRUE SERVER_NAME="Dedicated Server" \
|
||||||
@@ -84,6 +84,5 @@ RUN dos2unix /start* && chmod +x /start*
|
|||||||
RUN dos2unix /health.sh && chmod +x /health.sh
|
RUN dos2unix /health.sh && chmod +x /health.sh
|
||||||
RUN dos2unix /autopause/* && chmod +x /autopause/*.sh
|
RUN dos2unix /autopause/* && chmod +x /autopause/*.sh
|
||||||
|
|
||||||
|
|
||||||
ENTRYPOINT [ "/start" ]
|
ENTRYPOINT [ "/start" ]
|
||||||
HEALTHCHECK --start-period=1m CMD /health.sh
|
HEALTHCHECK --start-period=1m CMD /health.sh
|
||||||
|
|||||||
46
README.md
46
README.md
@@ -13,30 +13,11 @@ To simply use the latest stable version, run
|
|||||||
|
|
||||||
docker run -d -it -p 25565:25565 -e EULA=TRUE itzg/minecraft-server
|
docker run -d -it -p 25565:25565 -e EULA=TRUE itzg/minecraft-server
|
||||||
|
|
||||||
where the standard server port, 25565, will be exposed on your host machine.
|
where, in this case, the standard server port 25565, will be exposed on your host machine.
|
||||||
|
|
||||||
If you want to serve up multiple Minecraft servers or just use an alternate port,
|
> If you plan on running a server for a longer amount of time it is highly recommended using a management layer such as [Docker Compose](#using-docker-compose) or [Kubernetes](#deployment-templates-and-examples) to allow for incremental reconfiguration and image upgrades.
|
||||||
change the host-side port mapping such as
|
|
||||||
|
|
||||||
... -p 25566:25565 ...
|
> Be sure to always include `-e EULA=TRUE` in your commands and container definitions, as Mojang/Microsoft requires EULA acceptance.
|
||||||
|
|
||||||
will serve your Minecraft server on your host's port 25566 since the `-p` syntax is
|
|
||||||
`host-port`:`container-port`.
|
|
||||||
|
|
||||||
Speaking of multiple servers, it's handy to give your containers explicit names using `--name`, such as naming this one "mc"
|
|
||||||
|
|
||||||
... --name mc itzg/minecraft-server
|
|
||||||
|
|
||||||
With that you can easily view the logs, stop, or re-start the container:
|
|
||||||
|
|
||||||
docker logs -f mc
|
|
||||||
( Ctrl-C to exit logs action )
|
|
||||||
|
|
||||||
docker stop mc
|
|
||||||
|
|
||||||
docker start mc
|
|
||||||
|
|
||||||
> Be sure to always include `-e EULA=TRUE` in your commands, as Mojang/Microsoft requires EULA acceptance.
|
|
||||||
|
|
||||||
By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](#versions) and the [`TYPE`](#server-types) can be configured to create many variations of desired Minecraft server.
|
By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](#versions) and the [`TYPE`](#server-types) can be configured to create many variations of desired Minecraft server.
|
||||||
|
|
||||||
@@ -76,8 +57,8 @@ By default, the container will download the latest version of the "vanilla" [Min
|
|||||||
* [Upgrading](#upgrading)
|
* [Upgrading](#upgrading)
|
||||||
* [Example](#example)
|
* [Example](#example)
|
||||||
* [Running a server with a CurseForge modpack](#running-a-server-with-a-curseforge-modpack)
|
* [Running a server with a CurseForge modpack](#running-a-server-with-a-curseforge-modpack)
|
||||||
* [Modpack data directory](#modpack-data-directory)
|
* [Modpack data directory](#modpack-data-directory)
|
||||||
* [Buggy start scripts](#buggy-start-scripts)
|
* [Buggy start scripts](#buggy-start-scripts)
|
||||||
* [Fixing "unable to launch forgemodloader"](#fixing-unable-to-launch-forgemodloader)
|
* [Fixing "unable to launch forgemodloader"](#fixing-unable-to-launch-forgemodloader)
|
||||||
* [Working with mods and plugins](#working-with-mods-and-plugins)
|
* [Working with mods and plugins](#working-with-mods-and-plugins)
|
||||||
* [Optional plugins, mods, and config attach points](#optional-plugins-mods-and-config-attach-points)
|
* [Optional plugins, mods, and config attach points](#optional-plugins-mods-and-config-attach-points)
|
||||||
@@ -131,6 +112,7 @@ By default, the container will download the latest version of the "vanilla" [Min
|
|||||||
* [Memory Limit](#memory-limit)
|
* [Memory Limit](#memory-limit)
|
||||||
* [JVM Options](#jvm-options)
|
* [JVM Options](#jvm-options)
|
||||||
* [Interactive and Color Console](#interactive-and-color-console)
|
* [Interactive and Color Console](#interactive-and-color-console)
|
||||||
|
* [Server Shutdown Options](#server-shutdown-options)
|
||||||
* [OpenJ9 Specific Options](#openj9-specific-options)
|
* [OpenJ9 Specific Options](#openj9-specific-options)
|
||||||
* [Enabling rolling logs](#enabling-rolling-logs)
|
* [Enabling rolling logs](#enabling-rolling-logs)
|
||||||
* [Timezone Configuration](#timezone-configuration)
|
* [Timezone Configuration](#timezone-configuration)
|
||||||
@@ -145,7 +127,7 @@ By default, the container will download the latest version of the "vanilla" [Min
|
|||||||
* [Enabling Autopause](#enabling-autopause)
|
* [Enabling Autopause](#enabling-autopause)
|
||||||
* [Running on RaspberryPi](#running-on-raspberrypi)
|
* [Running on RaspberryPi](#running-on-raspberrypi)
|
||||||
|
|
||||||
<!-- Added by: runner, at: Thu Jul 15 13:34:00 UTC 2021 -->
|
<!-- Added by: runner, at: Sun Aug 1 17:09:36 UTC 2021 -->
|
||||||
|
|
||||||
<!--te-->
|
<!--te-->
|
||||||
|
|
||||||
@@ -489,7 +471,9 @@ A [Magma](https://magmafoundation.org/) server, which is a combination of Forge
|
|||||||
|
|
||||||
-e TYPE=MAGMA
|
-e TYPE=MAGMA
|
||||||
|
|
||||||
> **NOTE** there are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2"
|
By default, the "stable" channel is used, but you can set `MAGMA_CHANNEL` to "dev" to access dev channel versions.
|
||||||
|
|
||||||
|
> **NOTE** there are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2", "1.16.5", etc.
|
||||||
|
|
||||||
|
|
||||||
### Running a Mohist server
|
### Running a Mohist server
|
||||||
@@ -620,13 +604,13 @@ 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 \
|
-e CF_SERVER_MOD=/modpacks/SkyFactory_4_Server_4.1.0.zip \
|
||||||
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
||||||
|
|
||||||
#### Modpack data directory
|
### Modpack data directory
|
||||||
|
|
||||||
By default, CurseForge modpacks are expanded into the sub-directory `/data/FeedTheBeast` and executed from there. (The default location was chosen for legacy reasons, when Curse and FTB were maintained together.)
|
By default, CurseForge modpacks are expanded into the sub-directory `/data/FeedTheBeast` and executed from there. (The default location was chosen for legacy reasons, when Curse and FTB were maintained together.)
|
||||||
|
|
||||||
The directory can be changed by setting `CF_BASE_DIR`, such as `-e CF_BASE_DIR=/data`.
|
The directory can be changed by setting `CF_BASE_DIR`, such as `-e CF_BASE_DIR=/data`.
|
||||||
|
|
||||||
#### Buggy start scripts
|
### 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`.
|
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`.
|
||||||
|
|
||||||
@@ -1227,6 +1211,12 @@ If you would like to `docker attach` to the Minecraft server console with color
|
|||||||
>
|
>
|
||||||
> Make to enable stdin and tty with `-it` when using `docker run` or `stdin_open: true` and `tty: true` when using docker compose.
|
> Make to enable stdin and tty with `-it` when using `docker run` or `stdin_open: true` and `tty: true` when using docker compose.
|
||||||
|
|
||||||
|
### Server Shutdown Options
|
||||||
|
|
||||||
|
To allow time for players to finish what they're doing during a graceful server shutdown, set `STOP_SERVER_ANNOUNCE_DELAY` to a number of seconds to delay after an announcement is posted by the server.
|
||||||
|
|
||||||
|
> **NOTE** be sure to adjust Docker's shutdown timeout accordingly, such as using [the -t option on docker-compose down](https://docs.docker.com/compose/reference/down/).
|
||||||
|
|
||||||
### OpenJ9 Specific Options
|
### OpenJ9 Specific Options
|
||||||
|
|
||||||
The openj9 image tags include specific variables to simplify configuration:
|
The openj9 image tags include specific variables to simplify configuration:
|
||||||
|
|||||||
@@ -5,15 +5,15 @@ current_uptime() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
java_running() {
|
java_running() {
|
||||||
[[ $( ps -ax -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^S.*$ ]]
|
[[ $( ps -a -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^S.*$ ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
java_process_exists() {
|
java_process_exists() {
|
||||||
[[ -n "$(ps -ax -o comm | grep 'java')" ]]
|
[[ -n "$(ps -a -o comm | grep 'java')" ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
rcon_client_exists() {
|
rcon_client_exists() {
|
||||||
[[ -n "$(ps -ax -o comm | grep 'rcon-cli')" ]]
|
[[ -n "$(ps -a -o comm | grep 'rcon-cli')" ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
mc_server_listening() {
|
mc_server_listening() {
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
[unpauseMCServer-server]
|
[unpauseMCServer-server]
|
||||||
sequence = 25565
|
sequence = 25565
|
||||||
seq_timeout = 1
|
seq_timeout = 1
|
||||||
command = /usr/sbin/gosu minecraft:minecraft /autopause/resume.sh
|
command = /sbin/su-exec minecraft:minecraft /autopause/resume.sh
|
||||||
tcpflags = syn
|
tcpflags = syn
|
||||||
[unpauseMCServer-rcon]
|
[unpauseMCServer-rcon]
|
||||||
sequence = 25575
|
sequence = 25575
|
||||||
seq_timeout = 1
|
seq_timeout = 1
|
||||||
command = /usr/sbin/gosu minecraft:minecraft /autopause/resume.sh
|
command = /sbin/su-exec minecraft:minecraft /autopause/resume.sh
|
||||||
tcpflags = syn
|
tcpflags = syn
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
. /start-utils
|
. /start-utils
|
||||||
|
|
||||||
if [[ $( ps -ax -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^S.*$ ]] ; then
|
if [[ $( ps -a -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^S.*$ ]] ; then
|
||||||
# save world
|
# save world
|
||||||
rcon-cli save-all >/dev/null
|
rcon-cli save-all >/dev/null
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
. /start-utils
|
. /start-utils
|
||||||
|
|
||||||
if [[ $( ps -ax -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^T.*$ ]] ; then
|
if [[ $( ps -a -o stat,comm | grep 'java' | awk '{ print $1 }') =~ ^T.*$ ]] ; then
|
||||||
logAutopauseAction "Knocked, resuming Java process"
|
logAutopauseAction "Knocked, resuming Java process"
|
||||||
pkill -CONT java
|
pkill -CONT java
|
||||||
fi
|
fi
|
||||||
|
|||||||
2
start
2
start
@@ -40,7 +40,7 @@ if ! isTrue "${SKIP_SUDO:-false}" && [ $(id -u) = 0 ]; then
|
|||||||
echo 'hosts: files dns' > /etc/nsswitch.conf
|
echo 'hosts: files dns' > /etc/nsswitch.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec gosu ${runAsUser}:${runAsGroup} ${SCRIPTS:-/}start-configuration $@
|
exec su-exec ${runAsUser}:${runAsGroup} ${SCRIPTS:-/}start-configuration $@
|
||||||
else
|
else
|
||||||
exec ${SCRIPTS:-/}start-configuration $@
|
exec ${SCRIPTS:-/}start-configuration $@
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ fi
|
|||||||
|
|
||||||
if ! which java > /dev/null; then
|
if ! which java > /dev/null; then
|
||||||
log "Fixing PATH to include java"
|
log "Fixing PATH to include java"
|
||||||
PATH="${PATH}:/opt/java/openjdk/bin"
|
PATH="${PATH}:/usr/bin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.json
|
export VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.json
|
||||||
@@ -98,12 +98,6 @@ case "${TYPE^^}" in
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
FORGE)
|
FORGE)
|
||||||
log "**********************************************************************"
|
|
||||||
log "WARNING: The image tag itzg/minecraft-server:java8 is recommended"
|
|
||||||
log " since some mods require Java 8"
|
|
||||||
log " Exception traces reporting ClassCastException: class jdk.internal.loader.ClassLoaders\$AppClassLoader"
|
|
||||||
log " can be fixed with java8"
|
|
||||||
log "**********************************************************************"
|
|
||||||
exec ${SCRIPTS:-/}start-deployForge "$@"
|
exec ${SCRIPTS:-/}start-deployForge "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -111,17 +105,7 @@ case "${TYPE^^}" in
|
|||||||
exec ${SCRIPTS:-/}start-deployFabric "$@"
|
exec ${SCRIPTS:-/}start-deployFabric "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
FTBA)
|
|
||||||
exec ${SCRIPTS:-/}start-deployFTBA "$@"
|
|
||||||
;;
|
|
||||||
|
|
||||||
FTB|CURSEFORGE)
|
FTB|CURSEFORGE)
|
||||||
log "**********************************************************************"
|
|
||||||
log "WARNING: The image tag itzg/minecraft-server:java8 is recommended"
|
|
||||||
log " since some mods require Java 8"
|
|
||||||
log " Exception traces reporting ClassCastException: class jdk.internal.loader.ClassLoaders\$AppClassLoader"
|
|
||||||
log " can be fixed with java8"
|
|
||||||
log "**********************************************************************"
|
|
||||||
exec ${SCRIPTS:-/}start-deployCF "$@"
|
exec ${SCRIPTS:-/}start-deployCF "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ if [ "${VERSION}" != "LATEST" ] && [ "${VERSION}" != "1.16" ] && [ "${VERSION}"
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
: ${AIRPLANE_BUILD:=lastSuccessfulBuild}
|
: ${AIRPLANE_BUILD:=lastSuccessfulBuild}
|
||||||
|
: ${AIRPLANE_TYPE:=airplane}
|
||||||
|
|
||||||
if [ "${VERSION}" = "LATEST" ] || [ "${VERSION}" = "1.17" ]; then
|
if [ "${VERSION}" = "LATEST" ] || [ "${VERSION}" = "1.17" ]; then
|
||||||
AIRPLANE_BRANCH="1.17"
|
AIRPLANE_BRANCH="1.17"
|
||||||
@@ -22,10 +23,12 @@ fi
|
|||||||
|
|
||||||
if [ "${VERSION}" = "PURPUR" ]; then
|
if [ "${VERSION}" = "PURPUR" ]; then
|
||||||
AIRPLANE_BRANCH="Purpur-1.17"
|
AIRPLANE_BRANCH="Purpur-1.17"
|
||||||
|
AIRPLANE_TYPE="airplanepurpur"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${VERSION}" = "PURPUR-1.16" ]; then
|
if [ "${VERSION}" = "PURPUR-1.16" ]; then
|
||||||
AIRPLANE_BRANCH="Purpur-1.16"
|
AIRPLANE_BRANCH="Purpur-1.16"
|
||||||
|
AIRPLANE_TYPE="airplanepurpur"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "Using Airplane-${AIRPLANE_BRANCH} branch"
|
log "Using Airplane-${AIRPLANE_BRANCH} branch"
|
||||||
@@ -33,7 +36,7 @@ log "Using Airplane-${AIRPLANE_BRANCH} branch"
|
|||||||
export SERVER=airplane-${AIRPLANE_BRANCH}-${AIRPLANE_BUILD}.jar
|
export SERVER=airplane-${AIRPLANE_BRANCH}-${AIRPLANE_BUILD}.jar
|
||||||
|
|
||||||
if [ ! -f "$SERVER" ] || isTrue "${FORCE_REDOWNLOAD:-false}"; then
|
if [ ! -f "$SERVER" ] || isTrue "${FORCE_REDOWNLOAD:-false}"; then
|
||||||
downloadUrl="https://ci.tivy.ca/job/Airplane-${AIRPLANE_BRANCH}/${AIRPLANE_BUILD}/artifact/launcher-airplane.jar"
|
downloadUrl="https://ci.tivy.ca/job/Airplane-${AIRPLANE_BRANCH}/${AIRPLANE_BUILD}/artifact/launcher-${AIRPLANE_TYPE}.jar"
|
||||||
log "Downloading Airplane from $downloadUrl ..."
|
log "Downloading Airplane from $downloadUrl ..."
|
||||||
curl -fsSL -o "$SERVER" "$downloadUrl"
|
curl -fsSL -o "$SERVER" "$downloadUrl"
|
||||||
if [ ! -f "$SERVER" ]; then
|
if [ ! -f "$SERVER" ]; then
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ if ! isTrue ${USE_MODPACK_START_SCRIPT:-true}; then
|
|||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
forgeInstallerJar=$(ls -t "${forgeInstallerJar}" | head -1)
|
||||||
|
|
||||||
log "Installing forge server"
|
log "Installing forge server"
|
||||||
dirOfInstaller=$(dirname "${forgeInstallerJar}")
|
dirOfInstaller=$(dirname "${forgeInstallerJar}")
|
||||||
(cd "${dirOfInstaller}"; java -jar $(basename "${forgeInstallerJar}") --installServer)
|
(cd "${dirOfInstaller}"; java -jar $(basename "${forgeInstallerJar}") --installServer)
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
. ${SCRIPTS:-/}start-utils
|
. ${SCRIPTS:-/}start-utils
|
||||||
export TYPE=FORGE
|
|
||||||
: ${FORGEVERSION:=RECOMMENDED}
|
: ${FORGEVERSION:=RECOMMENDED}
|
||||||
isDebugging && set -x
|
isDebugging && set -x
|
||||||
|
|
||||||
@@ -47,7 +46,7 @@ elif [[ ! -e $FORGE_INSTALLER ]]; then
|
|||||||
log "ERROR: the given Forge installer doesn't exist : $FORGE_INSTALLER"
|
log "ERROR: the given Forge installer doesn't exist : $FORGE_INSTALLER"
|
||||||
exit 2
|
exit 2
|
||||||
else
|
else
|
||||||
shortForgeVersion=$VANILLA_VERSION-custom
|
shortForgeVersion=$VANILLA_VERSION-${FORGE_INSTALLER_CUSTOM_VERSION:-custom}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
installMarker="/data/.forge-installed-$shortForgeVersion"
|
installMarker="/data/.forge-installed-$shortForgeVersion"
|
||||||
|
|||||||
@@ -1,18 +1,93 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
. ${SCRIPTS:-/}start-utils
|
. ${SCRIPTS:-/}start-utils
|
||||||
|
export SKIP_LOG4J_CONFIG=true
|
||||||
|
|
||||||
export SERVER="/data/magma-server-${VANILLA_VERSION}.jar"
|
isDebugging && set -x
|
||||||
|
|
||||||
# Always download since new updates of each base version are published frequently
|
: ${VANILLA_VERSION?}
|
||||||
if ! curl -o /data/magma-server-${VANILLA_VERSION}.jar -fsSL \
|
# stable, dev
|
||||||
https://api.magmafoundation.org/api/resources/Magma/${VANILLA_VERSION}/stable/latest/download; then
|
: ${MAGMA_CHANNEL:=stable}
|
||||||
log "ERROR unable to download version ${VANILLA_VERSION} of Magma"
|
|
||||||
log " Check https://magmafoundation.org/ for available versions"
|
|
||||||
|
magmaDownloadServer() {
|
||||||
|
url=${1?}
|
||||||
|
tagName=${2?}
|
||||||
|
markerFile=${3?}
|
||||||
|
|
||||||
|
export SERVER="/data/magma-server-${VANILLA_VERSION}.jar"
|
||||||
|
|
||||||
|
log "Downloading Magma server file for ${VANILLA_VERSION} @ ${tagName}"
|
||||||
|
if ! curl -o /data/magma-server-${VANILLA_VERSION}.jar -fsSL "$url"; then
|
||||||
|
log "ERROR failed to download Magma server from $url (status=$?)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "$SERVER" > "$markerFile"
|
||||||
|
}
|
||||||
|
|
||||||
|
magmaHandleInstaller() {
|
||||||
|
url=${1?}
|
||||||
|
tagName=${2?}
|
||||||
|
markerFile=${3?}
|
||||||
|
|
||||||
|
installerFile="magma-installer-${VANILLA_VERSION}-${tagName}.jar"
|
||||||
|
log "Downloading Magma installer file for ${VANILLA_VERSION} @ ${tagName}"
|
||||||
|
if ! curl -o "$installerFile" -fsSL "$url"; then
|
||||||
|
log "ERROR failed to download Magma installer from $url (status=$?)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "forge" > "$markerFile"
|
||||||
|
|
||||||
|
export FORGE_INSTALLER="$installerFile"
|
||||||
|
export FORGE_INSTALLER_CUSTOM_VERSION="$tagName"
|
||||||
|
|
||||||
|
# now hand off the rest to forge
|
||||||
|
exec ${SCRIPTS:-/}start-deployForge "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
latestMeta=$(curl -fsSL https://api.magmafoundation.org/api/resources/Magma/${VANILLA_VERSION}/${MAGMA_CHANNEL}/latest || exit $?)
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
log "ERROR failed to locate latest Magma info for ${VANILLA_VERSION} in channel ${MAGMA_CHANNEL} (error=$?)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export SKIP_LOG4J_CONFIG=true
|
tagName=$(echo "${latestMeta}" | jq -r '.tag_name')
|
||||||
|
markerFile=".magma-installed-${VANILLA_VERSION}-${tagName}"
|
||||||
|
if [ -f "${markerFile}" ]; then
|
||||||
|
installedTagName=$(cat "${markerFile}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${markerFile}" ]; then
|
||||||
|
|
||||||
|
if versionLessThan 1.16; then
|
||||||
|
assetType=server
|
||||||
|
else
|
||||||
|
assetType=installer
|
||||||
|
fi
|
||||||
|
|
||||||
|
assetUrl=$(echo "${latestMeta}" | jq -r ".assets | .[].browser_download_url | select(test(\"${assetType}\"))")
|
||||||
|
if [ $? != 0 ] || [ -z "$assetUrl" ]; then
|
||||||
|
log "ERROR failed to extract ${assetType} asset type for ${VANILLA_VERSION} in channel ${MAGMA_CHANNEL}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${assetType} = server ]]; then
|
||||||
|
magmaDownloadServer "$assetUrl" "$tagName" "$markerFile"
|
||||||
|
else
|
||||||
|
magmaHandleInstaller "$assetUrl" "$tagName" "$markerFile"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
export SERVER=$(cat "${markerFile}")
|
||||||
|
|
||||||
|
if [[ $SERVER == "forge" ]]; then
|
||||||
|
export FORGE_INSTALLER="magma-installer-${VANILLA_VERSION}-${tagName}.jar"
|
||||||
|
export FORGE_INSTALLER_CUSTOM_VERSION="$tagName"
|
||||||
|
# now hand off the rest to forge
|
||||||
|
exec ${SCRIPTS:-/}start-deployForge "$@"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Continue to Final Setup
|
# Continue to Final Setup
|
||||||
exec ${SCRIPTS:-/}start-finalSetupWorld $@
|
exec ${SCRIPTS:-/}start-finalSetupWorld $@
|
||||||
|
|||||||
@@ -173,6 +173,10 @@ function copyFilesForCurseForge() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcServerRunnerArgs="--stop-duration ${STOP_DURATION:-60}s"
|
mcServerRunnerArgs="--stop-duration ${STOP_DURATION:-60}s"
|
||||||
|
if [[ ${STOP_SERVER_ANNOUNCE_DELAY} ]]; then
|
||||||
|
mcServerRunnerArgs="${mcServerRunnerArgs} --stop-server-announce-delay ${STOP_SERVER_ANNOUNCE_DELAY}s"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ ${TYPE} == "CURSE_INSTANCE" ]]; then
|
if [[ ${TYPE} == "CURSE_INSTANCE" ]]; then
|
||||||
if isTrue ${DEBUG_EXEC}; then
|
if isTrue ${DEBUG_EXEC}; then
|
||||||
set -x
|
set -x
|
||||||
@@ -225,6 +229,10 @@ EOF
|
|||||||
else
|
else
|
||||||
exec mc-server-runner ${mcServerRunnerArgs} "${finalArgs[@]}"
|
exec mc-server-runner ${mcServerRunnerArgs} "${finalArgs[@]}"
|
||||||
fi
|
fi
|
||||||
|
elif [[ -x run.sh ]]; then
|
||||||
|
log "Using Forge supplied run.sh script..."
|
||||||
|
echo $JVM_XX_OPTS $JVM_OPTS $expandedDOpts > user_jvm_args.txt
|
||||||
|
exec mc-server-runner ${mcServerRunnerArgs} --shell bash run.sh
|
||||||
else
|
else
|
||||||
# If we have a bootstrap.txt file... feed that in to the server stdin
|
# If we have a bootstrap.txt file... feed that in to the server stdin
|
||||||
if [ -f /data/bootstrap.txt ]; then
|
if [ -f /data/bootstrap.txt ]; then
|
||||||
|
|||||||
70
start-spiget
70
start-spiget
@@ -6,6 +6,7 @@ IFS=$'\n\t'
|
|||||||
handleDebugMode
|
handleDebugMode
|
||||||
|
|
||||||
: ${SPIGET_RESOURCES:=}
|
: ${SPIGET_RESOURCES:=}
|
||||||
|
: ${SPIGET_DOWNLOAD_TOLERANCE:=5} # in minutes
|
||||||
|
|
||||||
containsJars() {
|
containsJars() {
|
||||||
file=${1?}
|
file=${1?}
|
||||||
@@ -28,26 +29,61 @@ getResourceFromSpiget() {
|
|||||||
|
|
||||||
mkdir -p /data/plugins
|
mkdir -p /data/plugins
|
||||||
|
|
||||||
if [ -f /data/plugins/.${resource} ]; then
|
versionfile="/data/plugins/.${resource}-version.json"
|
||||||
log "Resource '${resource}' already downloaded"
|
versionfileNew="/tmp/.${resource}-version.json"
|
||||||
else
|
|
||||||
tmpfile="/tmp/${resource}.zip"
|
|
||||||
url="https://api.spiget.org/v2/resources/${resource}/download"
|
|
||||||
if ! curl -o "${tmpfile}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${url}"; then
|
|
||||||
log "ERROR failed to download resource '${resource}' from ${url}"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if containsJars "${tmpfile}"; then
|
if [ -f "$versionfile" ]; then
|
||||||
log "Extracting contents of resource ${resource} into plugins"
|
if [[ -n $(find "$versionfile" -mmin +${SPIGET_DOWNLOAD_TOLERANCE}) ]]; then
|
||||||
unzip -o -q -d /data/plugins "${tmpfile}"
|
urlVersion="https://api.spiget.org/v2/resources/${resource}/versions/latest"
|
||||||
touch "/data/plugins/.${resource}"
|
if ! curl -o "${versionfileNew}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${urlVersion}"; then
|
||||||
rm "${tmpfile}"
|
log "ERROR failed to download resource version meta data '${resource}' from ${urlVersion}"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
installedVersion=$(jq -r '.name' $versionfile)
|
||||||
|
newVersion=$(jq -r '.name' $versionfileNew)
|
||||||
|
|
||||||
|
if [ "$installedVersion" = "$newVersion" ]; then
|
||||||
|
log "resource '${resource}' not downloaded because installed version '${installedVersion}' already up to date ('${newVersion}')"
|
||||||
|
mv "${versionfileNew}" "${versionfile}"
|
||||||
|
else
|
||||||
|
if downloadResourceFromSpiget "${resource}"; then
|
||||||
|
mv "${versionfileNew}" "${versionfile}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
log "Moving resource ${resource} into plugins"
|
log "resource '${resource}' not checked because version meta file newer than '${SPIGET_DOWNLOAD_TOLERANCE}' minutes"
|
||||||
mv "${tmpfile}" "/data/plugins/${resource}.jar"
|
|
||||||
touch "/data/plugins/.${resource}"
|
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
if downloadResourceFromSpiget "${resource}"; then
|
||||||
|
urlVersion="https://api.spiget.org/v2/resources/${resource}/versions/latest"
|
||||||
|
if ! curl -o "${versionfileNew}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${urlVersion}"; then
|
||||||
|
log "ERROR failed to download resource version meta data '${resource}' from ${urlVersion}"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
mv "${versionfileNew}" "${versionfile}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
downloadResourceFromSpiget() {
|
||||||
|
resource=${1?}
|
||||||
|
|
||||||
|
tmpfile="/tmp/${resource}.zip"
|
||||||
|
url="https://api.spiget.org/v2/resources/${resource}/download"
|
||||||
|
if ! curl -o "${tmpfile}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${url}"; then
|
||||||
|
log "ERROR failed to download resource '${resource}' from ${url}"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if containsJars "${tmpfile}"; then
|
||||||
|
log "Extracting contents of resource ${resource} into plugins"
|
||||||
|
unzip -o -q -d /data/plugins "${tmpfile}"
|
||||||
|
rm "${tmpfile}"
|
||||||
|
else
|
||||||
|
log "Moving resource ${resource} into plugins"
|
||||||
|
mv "${tmpfile}" "/data/plugins/${resource}.jar"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,4 +17,5 @@ services:
|
|||||||
- itzg/minecraft-server:latest
|
- itzg/minecraft-server:latest
|
||||||
environment:
|
environment:
|
||||||
EULA: "TRUE"
|
EULA: "TRUE"
|
||||||
|
VERSION: "1.16.5"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user