mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-17 23:16:24 +00:00
Compare commits
55 Commits
java7
...
2021.17.0-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
61b0eff4ca | ||
|
|
8c5f0a53bf | ||
|
|
fffeb7bb9c | ||
|
|
a060cc88d1 | ||
|
|
4421aaa22d | ||
|
|
3a51db6d24 | ||
|
|
969a23ae27 | ||
|
|
1a62592fe2 | ||
|
|
c316dbb5d2 | ||
|
|
bb64135c9b | ||
|
|
ef98de154c | ||
|
|
3d00077ef8 | ||
|
|
0d3ab75683 | ||
|
|
87681e64bb | ||
|
|
8ce986d3d7 | ||
|
|
67fda61de4 | ||
|
|
7c6ec41822 | ||
|
|
93af2025a2 | ||
|
|
c1b040af77 | ||
|
|
4148325787 | ||
|
|
7083cd15e8 | ||
|
|
7418dab476 | ||
|
|
94bbc8e649 | ||
|
|
3e5e62229a | ||
|
|
fe2a9d56ed | ||
|
|
27571999b2 | ||
|
|
bbd7d9e39a | ||
|
|
ef6f308229 | ||
|
|
49d89d3e73 | ||
|
|
74203b23f4 | ||
|
|
4fb791b490 | ||
|
|
ced25ad50a | ||
|
|
48efc224ba | ||
|
|
467c1d9954 | ||
|
|
9ced230f55 | ||
|
|
f3a8276362 | ||
|
|
b91d63716e | ||
|
|
46cccfd531 | ||
|
|
9fe1cb4a0d | ||
|
|
076038b470 | ||
|
|
aa416729ea | ||
|
|
812c6365ec | ||
|
|
42a5131b19 | ||
|
|
624f6a210f | ||
|
|
1c63cd18b7 | ||
|
|
6266a7e3cc | ||
|
|
871ecd4d9d | ||
|
|
c572c95161 | ||
|
|
f7b58fbbb1 | ||
|
|
eccfa444a9 | ||
|
|
e831d25706 | ||
|
|
12e931332b | ||
|
|
ceee9eddc9 | ||
|
|
60ba668743 | ||
|
|
fd1b15e01f |
3
.github/workflows/build-multiarch.yml
vendored
3
.github/workflows/build-multiarch.yml
vendored
@@ -5,7 +5,6 @@ on:
|
|||||||
- master
|
- master
|
||||||
- "*-multiarch"
|
- "*-multiarch"
|
||||||
- "multiarch*"
|
- "multiarch*"
|
||||||
- java7
|
|
||||||
- java8-openj9
|
- java8-openj9
|
||||||
- java11*
|
- java11*
|
||||||
- java16*
|
- java16*
|
||||||
@@ -67,7 +66,7 @@ jobs:
|
|||||||
uses: docker/build-push-action@v2.6.1
|
uses: docker/build-push-action@v2.6.1
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
platforms: linux/amd64,linux/arm/v7
|
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
# ensure latest base image is used
|
# ensure latest base image is used
|
||||||
|
|||||||
41
Dockerfile
41
Dockerfile
@@ -1,4 +1,4 @@
|
|||||||
FROM openjdk:7-jre
|
FROM adoptopenjdk:8-jre-hotspot
|
||||||
|
|
||||||
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
|
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
|
||||||
|
|
||||||
@@ -6,6 +6,7 @@ RUN apt-get update \
|
|||||||
&& DEBIAN_FRONTEND=noninteractive \
|
&& DEBIAN_FRONTEND=noninteractive \
|
||||||
apt-get install -y \
|
apt-get install -y \
|
||||||
imagemagick \
|
imagemagick \
|
||||||
|
gosu \
|
||||||
sudo \
|
sudo \
|
||||||
net-tools \
|
net-tools \
|
||||||
curl wget \
|
curl wget \
|
||||||
@@ -21,42 +22,6 @@ RUN apt-get update \
|
|||||||
ttf-dejavu \
|
ttf-dejavu \
|
||||||
&& apt-get clean
|
&& apt-get clean
|
||||||
|
|
||||||
# Procedure from https://github.com/tianon/gosu/blob/master/INSTALL.md#from-debian
|
|
||||||
ENV GOSU_VERSION 1.14
|
|
||||||
RUN set -eux; \
|
|
||||||
# save list of currently installed packages for later so we can clean up
|
|
||||||
savedAptMark="$(apt-mark showmanual)"; \
|
|
||||||
apt-get update; \
|
|
||||||
apt-get install -y --no-install-recommends ca-certificates wget; \
|
|
||||||
if ! command -v gpg; then \
|
|
||||||
apt-get install -y --no-install-recommends gnupg2 dirmngr; \
|
|
||||||
elif gpg --version | grep -q '^gpg (GnuPG) 1\.'; then \
|
|
||||||
# "This package provides support for HKPS keyservers." (GnuPG 1.x only)
|
|
||||||
apt-get install -y --no-install-recommends gnupg-curl; \
|
|
||||||
fi; \
|
|
||||||
rm -rf /var/lib/apt/lists/*; \
|
|
||||||
\
|
|
||||||
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
|
|
||||||
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
|
|
||||||
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
|
|
||||||
\
|
|
||||||
# verify the signature
|
|
||||||
export GNUPGHOME="$(mktemp -d)"; \
|
|
||||||
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
|
|
||||||
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
|
|
||||||
command -v gpgconf && gpgconf --kill all || :; \
|
|
||||||
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
|
|
||||||
\
|
|
||||||
# clean up fetch dependencies
|
|
||||||
apt-mark auto '.*' > /dev/null; \
|
|
||||||
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
|
|
||||||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
|
|
||||||
\
|
|
||||||
chmod +x /usr/local/bin/gosu; \
|
|
||||||
# verify that the binary works
|
|
||||||
gosu --version; \
|
|
||||||
gosu nobody true
|
|
||||||
|
|
||||||
RUN addgroup --gid 1000 minecraft \
|
RUN addgroup --gid 1000 minecraft \
|
||||||
&& adduser --system --shell /bin/false --uid 1000 --ingroup minecraft --home /data minecraft
|
&& adduser --system --shell /bin/false --uid 1000 --ingroup minecraft --home /data minecraft
|
||||||
|
|
||||||
@@ -87,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.6.0 --var app=mc-server-runner --file {{.app}} \
|
--var version=1.5.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} \
|
||||||
|
|||||||
61
README.md
61
README.md
@@ -13,11 +13,30 @@ 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, in this case, the standard server port 25565, will be exposed on your host machine.
|
where the standard server port, 25565, will be exposed on your host machine.
|
||||||
|
|
||||||
> 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.
|
If you want to serve up multiple Minecraft servers or just use an alternate port,
|
||||||
|
change the host-side port mapping such as
|
||||||
|
|
||||||
> Be sure to always include `-e EULA=TRUE` in your commands and container definitions, as Mojang/Microsoft requires EULA acceptance.
|
... -p 25566:25565 ...
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
@@ -52,14 +71,13 @@ By default, the container will download the latest version of the "vanilla" [Min
|
|||||||
* [Running an Canyon server](#running-an-canyon-server)
|
* [Running an Canyon server](#running-an-canyon-server)
|
||||||
* [Running a SpongeVanilla server](#running-a-spongevanilla-server)
|
* [Running a SpongeVanilla server](#running-a-spongevanilla-server)
|
||||||
* [Running a Fabric Server](#running-a-fabric-server)
|
* [Running a Fabric Server](#running-a-fabric-server)
|
||||||
* [Running a Limbo server](#running-a-limbo-server)
|
|
||||||
* [Running a server with a Feed the Beast modpack](#running-a-server-with-a-feed-the-beast-modpack)
|
* [Running a server with a Feed the Beast modpack](#running-a-server-with-a-feed-the-beast-modpack)
|
||||||
* [Environment Variables:](#environment-variables)
|
* [Environment Variables:](#environment-variables)
|
||||||
* [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)
|
||||||
@@ -113,7 +131,6 @@ 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)
|
||||||
@@ -128,7 +145,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: Sun Aug 15 17:44:45 UTC 2021 -->
|
<!-- Added by: runner, at: Thu Jul 15 13:34:00 UTC 2021 -->
|
||||||
|
|
||||||
<!--te-->
|
<!--te-->
|
||||||
|
|
||||||
@@ -472,9 +489,7 @@ A [Magma](https://magmafoundation.org/) server, which is a combination of Forge
|
|||||||
|
|
||||||
-e TYPE=MAGMA
|
-e TYPE=MAGMA
|
||||||
|
|
||||||
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"
|
||||||
|
|
||||||
> **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
|
||||||
@@ -554,20 +569,6 @@ docker run -d -v /path/on/host:/data ... \
|
|||||||
|
|
||||||
In order to add mods, you have two options:
|
In order to add mods, you have two options:
|
||||||
|
|
||||||
### Running a Limbo server
|
|
||||||
|
|
||||||
A [Limbo](https://github.com/LOOHP/Limbo) server can be run by setting `TYPE` to `LIMBO`.
|
|
||||||
|
|
||||||
Configuration options with defaults:
|
|
||||||
|
|
||||||
- `LIMBO_BUILD`=LATEST
|
|
||||||
|
|
||||||
The `VERSION` will be ignored so locate the appropriate value from [here](https://ci.loohpjames.com/job/Limbo/) to match the version expected by clients.
|
|
||||||
|
|
||||||
- `FORCE_REDOWNLOAD`=false
|
|
||||||
- `LIMBO_SCHEMA_FILENAME`=default.schem
|
|
||||||
- `LEVEL`="Default;${LIMBO_SCHEMA_FILENAME}"
|
|
||||||
|
|
||||||
## Running a server with a Feed the Beast modpack
|
## Running a server with a Feed the Beast modpack
|
||||||
|
|
||||||
> **NOTE** requires one of the Debian based images listed in [the Java versions section](#running-minecraft-server-on-different-java-version).
|
> **NOTE** requires one of the Debian based images listed in [the Java versions section](#running-minecraft-server-on-different-java-version).
|
||||||
@@ -619,13 +620,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`.
|
||||||
|
|
||||||
@@ -1226,12 +1227,6 @@ 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:
|
||||||
|
|||||||
@@ -98,14 +98,6 @@ case "${TYPE^^}" in
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
FORGE)
|
FORGE)
|
||||||
if versionLessThan 1.17; then
|
|
||||||
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 "**********************************************************************"
|
|
||||||
fi
|
|
||||||
exec ${SCRIPTS:-/}start-deployForge "$@"
|
exec ${SCRIPTS:-/}start-deployForge "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -118,12 +110,6 @@ case "${TYPE^^}" in
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
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 "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -171,15 +157,11 @@ case "${TYPE^^}" in
|
|||||||
exec ${SCRIPTS:-/}start-deployCanyon "$@"
|
exec ${SCRIPTS:-/}start-deployCanyon "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
LIMBO)
|
|
||||||
exec ${SCRIPTS:-/}start-deployLimbo "$@"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
*)
|
||||||
log "Invalid type: '$TYPE'"
|
log "Invalid type: '$TYPE'"
|
||||||
log "Must be: VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, FTBA (multiarch-only),"
|
log "Must be: VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, FTBA (multiarch-only),"
|
||||||
log " CURSE_INSTANCE, CURSEFORGE, SPONGEVANILLA, TUINITY, PURPUR"
|
log " CURSE_INSTANCE, CURSEFORGE, SPONGEVANILLA, TUINITY, PURPUR"
|
||||||
log " CUSTOM, MAGMA, MOHIST, CATSERVER, YATOPIA, AIRPLANE, CANYON, LIMBO"
|
log " CUSTOM, MAGMA, MOHIST, CATSERVER, YATOPIA, AIRPLANE, CANYON"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ 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"
|
||||||
@@ -23,12 +22,10 @@ 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"
|
||||||
@@ -36,7 +33,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_TYPE}.jar"
|
downloadUrl="https://ci.tivy.ca/job/Airplane-${AIRPLANE_BRANCH}/${AIRPLANE_BUILD}/artifact/launcher-airplane.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
|
||||||
|
|||||||
@@ -30,13 +30,7 @@ if ! [ -f "${ftbInstallMarker}" ] || [ $(cat "${ftbInstallMarker}") != "${FTB_MO
|
|||||||
ftbInstaller=/data/ftb-installer
|
ftbInstaller=/data/ftb-installer
|
||||||
if ! [[ -f "${ftbInstaller}" ]]; then
|
if ! [[ -f "${ftbInstaller}" ]]; then
|
||||||
log "Downloading FTB installer"
|
log "Downloading FTB installer"
|
||||||
if [ "$(uname -m)" == "aarch64" ]; then
|
curl -fsSL https://api.modpacks.ch/public/modpack/1/1/server/linux -o "${ftbInstaller}"
|
||||||
log "Downloading ARM installer"
|
|
||||||
curl -fsSL https://api.modpacks.ch/public/modpack/1/1/server/arm/linux -o "${ftbInstaller}"
|
|
||||||
else
|
|
||||||
log "Downloading x86 installer"
|
|
||||||
curl -fsSL https://api.modpacks.ch/public/modpack/1/1/server/linux -o "${ftbInstaller}"
|
|
||||||
fi
|
|
||||||
chmod +x "${ftbInstaller}"
|
chmod +x "${ftbInstaller}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
. ${SCRIPTS:-/}start-utils
|
. ${SCRIPTS:-/}start-utils
|
||||||
|
export TYPE=FORGE
|
||||||
: ${FORGEVERSION:=RECOMMENDED}
|
: ${FORGEVERSION:=RECOMMENDED}
|
||||||
isDebugging && set -x
|
isDebugging && set -x
|
||||||
|
|
||||||
@@ -46,7 +47,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-${FORGE_INSTALLER_CUSTOM_VERSION:-custom}
|
shortForgeVersion=$VANILLA_VERSION-custom
|
||||||
fi
|
fi
|
||||||
|
|
||||||
installMarker="/data/.forge-installed-$shortForgeVersion"
|
installMarker="/data/.forge-installed-$shortForgeVersion"
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -euo pipefail
|
|
||||||
IFS=$'\n\t'
|
|
||||||
|
|
||||||
. ${SCRIPTS:-/}start-utils
|
|
||||||
isDebugging && set -x
|
|
||||||
|
|
||||||
: ${LIMBO_BUILD:=LATEST}
|
|
||||||
: ${FORCE_REDOWNLOAD:=false}
|
|
||||||
: ${LIMBO_SCHEMA_FILENAME:=default.schem}
|
|
||||||
: ${LEVEL:=Default;${LIMBO_SCHEMA_FILENAME}}
|
|
||||||
|
|
||||||
if [[ ${LIMBO_BUILD^^} == LATEST ]]; then
|
|
||||||
LIMBO_BUILD=lastStableBuild
|
|
||||||
fi
|
|
||||||
|
|
||||||
baseUrl="https://ci.loohpjames.com/job/Limbo/${LIMBO_BUILD}"
|
|
||||||
buildInfoUrl="${baseUrl}/api/json"
|
|
||||||
buildJson=$(curl -fsSL "${buildInfoUrl}")
|
|
||||||
if [ $? != 0 ]; then
|
|
||||||
log "ERROR failed to get build info from ${buildInfoUrl} (status=$?)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
PURPUR_BUILD=$(jq -r '.number' <<<${buildJson})
|
|
||||||
artifactPath=$(jq -r '.artifacts[] | select(.fileName|test("^Limbo-")) | .relativePath' <<<${buildJson})
|
|
||||||
defaultSchemaPath=$(jq -r '.artifacts[] | select(.fileName|test(".*\\.schem")) | .relativePath' <<<${buildJson})
|
|
||||||
|
|
||||||
export SERVER="purpur-${PURPUR_BUILD}.jar"
|
|
||||||
|
|
||||||
if [ ! -f "$SERVER" ] || isTrue "$FORCE_REDOWNLOAD"; then
|
|
||||||
downloadUrl="${baseUrl}/artifact/${artifactPath}"
|
|
||||||
log "Downloading Limbo from $downloadUrl ..."
|
|
||||||
if ! curl -fsSL -o "$SERVER" "$downloadUrl"; then
|
|
||||||
log "ERROR: failed to download from $downloadUrl (status=$?)"
|
|
||||||
exit 3
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "${LIMBO_SCHEMA_FILENAME}" ]; then
|
|
||||||
log "Downloading default schem file"
|
|
||||||
if ! curl -o "${LIMBO_SCHEMA_FILENAME}" -fsSL "${baseUrl}/artifact/${defaultSchemaPath}"; then
|
|
||||||
log "ERROR: failed to download schema file $baseUrl (status=$?)"
|
|
||||||
exit 3
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${LEVEL} != "*;*" ]]; then
|
|
||||||
LEVEL="${LEVEL};${LIMBO_SCHEMA_FILENAME}"
|
|
||||||
fi
|
|
||||||
export LEVEL
|
|
||||||
|
|
||||||
export SKIP_LOG4J_CONFIG=true
|
|
||||||
|
|
||||||
# Continue to Final Setup
|
|
||||||
exec ${SCRIPTS:-/}start-finalSetupWorld $@
|
|
||||||
@@ -1,93 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
. ${SCRIPTS:-/}start-utils
|
. ${SCRIPTS:-/}start-utils
|
||||||
export SKIP_LOG4J_CONFIG=true
|
|
||||||
|
|
||||||
isDebugging && set -x
|
export SERVER="/data/magma-server-${VANILLA_VERSION}.jar"
|
||||||
|
|
||||||
: ${VANILLA_VERSION?}
|
# Always download since new updates of each base version are published frequently
|
||||||
# stable, dev
|
if ! curl -o /data/magma-server-${VANILLA_VERSION}.jar -fsSL \
|
||||||
: ${MAGMA_CHANNEL:=stable}
|
https://api.magmafoundation.org/api/resources/Magma/${VANILLA_VERSION}/stable/latest/download; then
|
||||||
|
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
|
||||||
|
|
||||||
tagName=$(echo "${latestMeta}" | jq -r '.tag_name')
|
export SKIP_LOG4J_CONFIG=true
|
||||||
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,10 +173,6 @@ 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
|
||||||
@@ -229,10 +225,6 @@ 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,7 +6,6 @@ IFS=$'\n\t'
|
|||||||
handleDebugMode
|
handleDebugMode
|
||||||
|
|
||||||
: ${SPIGET_RESOURCES:=}
|
: ${SPIGET_RESOURCES:=}
|
||||||
: ${SPIGET_DOWNLOAD_TOLERANCE:=5} # in minutes
|
|
||||||
|
|
||||||
containsJars() {
|
containsJars() {
|
||||||
file=${1?}
|
file=${1?}
|
||||||
@@ -29,61 +28,26 @@ getResourceFromSpiget() {
|
|||||||
|
|
||||||
mkdir -p /data/plugins
|
mkdir -p /data/plugins
|
||||||
|
|
||||||
versionfile="/data/plugins/.${resource}-version.json"
|
if [ -f /data/plugins/.${resource} ]; then
|
||||||
versionfileNew="/tmp/.${resource}-version.json"
|
log "Resource '${resource}' already downloaded"
|
||||||
|
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 [ -f "$versionfile" ]; then
|
if containsJars "${tmpfile}"; then
|
||||||
if [[ -n $(find "$versionfile" -mmin +${SPIGET_DOWNLOAD_TOLERANCE}) ]]; then
|
log "Extracting contents of resource ${resource} into plugins"
|
||||||
urlVersion="https://api.spiget.org/v2/resources/${resource}/versions/latest"
|
unzip -o -q -d /data/plugins "${tmpfile}"
|
||||||
if ! curl -o "${versionfileNew}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${urlVersion}"; then
|
touch "/data/plugins/.${resource}"
|
||||||
log "ERROR failed to download resource version meta data '${resource}' from ${urlVersion}"
|
rm "${tmpfile}"
|
||||||
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 "resource '${resource}' not checked because version meta file newer than '${SPIGET_DOWNLOAD_TOLERANCE}' minutes"
|
log "Moving resource ${resource} into plugins"
|
||||||
|
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
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user