Compare commits

..

2 Commits

Author SHA1 Message Date
Geoff Bourne 648abc4ae4 Added hairpin routing diagram 2024-06-15 14:10:51 -05:00
Geoff Bourne c764961418 paper: consider release channel when selecting version/build 2024-06-15 13:52:01 -05:00
40 changed files with 133 additions and 463 deletions
+9 -6
View File
@@ -11,7 +11,6 @@ on:
- "docs/**" - "docs/**"
- "examples/**" - "examples/**"
- "notes/**" - "notes/**"
- "kustomize/**"
jobs: jobs:
build: build:
@@ -61,6 +60,10 @@ jobs:
baseImage: container-registry.oracle.com/graalvm/jdk:17-ol8 baseImage: container-registry.oracle.com/graalvm/jdk:17-ol8
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
mcVersion: 1.20.4 mcVersion: 1.20.4
- variant: java17-jdk
baseImage: eclipse-temurin:17-focal
platforms: linux/amd64,linux/arm/v7,linux/arm64
mcVersion: 1.20.4
- variant: java17-alpine - variant: java17-alpine
baseImage: eclipse-temurin:17-jre-alpine baseImage: eclipse-temurin:17-jre-alpine
platforms: linux/amd64 platforms: linux/amd64
@@ -98,7 +101,7 @@ jobs:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4.1.7 uses: actions/checkout@v4.1.6
with: with:
# for build-files step # for build-files step
fetch-depth: 0 fetch-depth: 0
@@ -133,13 +136,13 @@ jobs:
org.opencontainers.image.authors=Geoff Bourne <itzgeoff@gmail.com> org.opencontainers.image.authors=Geoff Bourne <itzgeoff@gmail.com>
- name: Setup Docker Buildx - name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3.4.0 uses: docker/setup-buildx-action@v3.3.0
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3.1.0 uses: docker/setup-qemu-action@v3.0.0
- name: Build for test - name: Build for test
uses: docker/build-push-action@v6.4.1 uses: docker/build-push-action@v5.3.0
with: with:
platforms: linux/amd64 platforms: linux/amd64
tags: ${{ env.IMAGE_TO_TEST }} tags: ${{ env.IMAGE_TO_TEST }}
@@ -177,7 +180,7 @@ jobs:
password: ${{ github.token }} password: ${{ github.token }}
- name: Build and push - name: Build and push
uses: docker/build-push-action@v6.4.1 uses: docker/build-push-action@v5.3.0
if: github.actor == github.repository_owner if: github.actor == github.repository_owner
with: with:
platforms: ${{ matrix.platforms }} platforms: ${{ matrix.platforms }}
+4 -5
View File
@@ -8,7 +8,6 @@ on:
- "docs/**" - "docs/**"
- "examples/**" - "examples/**"
- "notes/**" - "notes/**"
- "kustomize/**"
- "docker-compose*.yml" - "docker-compose*.yml"
- "mkdocs.yml" - "mkdocs.yml"
@@ -47,16 +46,16 @@ jobs:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4.1.7 uses: actions/checkout@v4.1.6
with: with:
# for build-files step # for build-files step
fetch-depth: 0 fetch-depth: 0
- name: Setup Docker Buildx - name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3.4.0 uses: docker/setup-buildx-action@v3.3.0
- name: Confirm multi-arch build - name: Confirm multi-arch build
uses: docker/build-push-action@v6.4.1 uses: docker/build-push-action@v5.3.0
with: with:
platforms: ${{ matrix.platforms }} platforms: ${{ matrix.platforms }}
# ensure latest base image is used # ensure latest base image is used
@@ -66,7 +65,7 @@ jobs:
cache-from: type=gha,scope=${{ matrix.variant }} cache-from: type=gha,scope=${{ matrix.variant }}
- name: Build for test - name: Build for test
uses: docker/build-push-action@v6.4.1 uses: docker/build-push-action@v5.3.0
with: with:
# Only build single platform since loading multi-arch image into daemon fails with # Only build single platform since loading multi-arch image into daemon fails with
# "docker exporter does not currently support exporting manifest lists" # "docker exporter does not currently support exporting manifest lists"
+4 -4
View File
@@ -23,11 +23,11 @@ EXPOSE 25565
ARG APPS_REV=1 ARG APPS_REV=1
ARG GITHUB_BASEURL=https://github.com ARG GITHUB_BASEURL=https://github.com
ARG EASY_ADD_VERSION=0.8.7 ARG EASY_ADD_VERSION=0.8.6
ADD ${GITHUB_BASEURL}/itzg/easy-add/releases/download/${EASY_ADD_VERSION}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add ADD ${GITHUB_BASEURL}/itzg/easy-add/releases/download/${EASY_ADD_VERSION}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
RUN chmod +x /usr/bin/easy-add RUN chmod +x /usr/bin/easy-add
ARG RESTIFY_VERSION=1.7.4 ARG RESTIFY_VERSION=1.7.3
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${RESTIFY_VERSION} --var app=restify --file {{.app}} \ --var version=${RESTIFY_VERSION} --var app=restify --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz --from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
@@ -37,7 +37,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${RCON_CLI_VERSION} --var app=rcon-cli --file {{.app}} \ --var version=${RCON_CLI_VERSION} --var app=rcon-cli --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz --from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
ARG MC_MONITOR_VERSION=0.12.13 ARG MC_MONITOR_VERSION=0.12.12
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${MC_MONITOR_VERSION} --var app=mc-monitor --file {{.app}} \ --var version=${MC_MONITOR_VERSION} --var app=mc-monitor --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz --from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
@@ -47,7 +47,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${MC_SERVER_RUNNER_VERSION} --var app=mc-server-runner --file {{.app}} \ --var version=${MC_SERVER_RUNNER_VERSION} --var app=mc-server-runner --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz --from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
ARG MC_HELPER_VERSION=1.39.9 ARG MC_HELPER_VERSION=1.39.0
ARG MC_HELPER_BASE_URL=${GITHUB_BASEURL}/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION} ARG MC_HELPER_BASE_URL=${GITHUB_BASEURL}/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION}
# used for cache busting local copy of mc-image-helper # used for cache busting local copy of mc-image-helper
ARG MC_HELPER_REV=1 ARG MC_HELPER_REV=1
+5 -5
View File
@@ -44,7 +44,7 @@ do
if [[ "$RCON_CMDS_STARTUP" ]]; then if [[ "$RCON_CMDS_STARTUP" ]]; then
while read -r cmd; do while read -r cmd; do
run_command "$cmd" run_command "$cmd"
done <<< "$(echo -e "$RCON_CMDS_STARTUP")" done <<< "$RCON_CMDS_STARTUP"
fi fi
if if
[[ -z "$RCON_CMDS_ON_CONNECT" ]] && [[ -z "$RCON_CMDS_ON_CONNECT" ]] &&
@@ -66,7 +66,7 @@ do
logRcon "First Clients has Connected, running first connect cmds" logRcon "First Clients has Connected, running first connect cmds"
while read -r cmd; do while read -r cmd; do
run_command "$cmd" run_command "$cmd"
done <<< "$(echo -e "$RCON_CMDS_FIRST_CONNECT")" done <<< "$RCON_CMDS_FIRST_CONNECT"
fi fi
# When a client joins # When a client joins
@@ -74,13 +74,13 @@ do
logRcon "Clients have Connected, running connect cmds" logRcon "Clients have Connected, running connect cmds"
while read -r cmd; do while read -r cmd; do
run_command "$cmd" run_command "$cmd"
done <<< "$(echo -e "$RCON_CMDS_ON_CONNECT")" done <<< "$RCON_CMDS_ON_CONNECT"
# When a client leaves # When a client leaves
elif (( CURR_CLIENTCONNECTIONS < CLIENTCONNECTIONS )) && [[ "$RCON_CMDS_ON_DISCONNECT" ]]; then elif (( CURR_CLIENTCONNECTIONS < CLIENTCONNECTIONS )) && [[ "$RCON_CMDS_ON_DISCONNECT" ]]; then
logRcon "Clients have Disconnected, running disconnect cmds" logRcon "Clients have Disconnected, running disconnect cmds"
while read -r cmd; do while read -r cmd; do
run_command "$cmd" run_command "$cmd"
done <<< "$(echo -e "$RCON_CMDS_ON_DISCONNECT")" done <<< "$RCON_CMDS_ON_DISCONNECT"
fi fi
# Last client connection # Last client connection
@@ -89,7 +89,7 @@ do
logRcon "ALL Clients have Disconnected, running last disconnect cmds" logRcon "ALL Clients have Disconnected, running last disconnect cmds"
while read -r cmd; do while read -r cmd; do
run_command "$cmd" run_command "$cmd"
done <<< "$(echo -e "$RCON_CMDS_LAST_DISCONNECT")" done <<< "$RCON_CMDS_LAST_DISCONNECT"
fi fi
CLIENTCONNECTIONS=$CURR_CLIENTCONNECTIONS CLIENTCONNECTIONS=$CURR_CLIENTCONNECTIONS
;; ;;
+4 -10
View File
@@ -3,7 +3,6 @@
set -e set -e
set -o pipefail set -o pipefail
# Install necessary packages
apk add --no-cache -U \ apk add --no-cache -U \
openssl \ openssl \
imagemagick \ imagemagick \
@@ -15,8 +14,7 @@ apk add --no-cache -U \
procps \ procps \
shadow \ shadow \
bash \ bash \
curl \ curl iputils \
iputils \
git \ git \
jq \ jq \
mysql-client \ mysql-client \
@@ -31,15 +29,11 @@ apk add --no-cache -U \
libwebp \ libwebp \
libcap libcap
# Download and install patched knockd # Patched knockd
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-alpine-amd64.tar.gz curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-alpine-amd64.tar.gz
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
ln -s /usr/local/sbin/knockd /usr/sbin/knockd ln -s /usr/local/sbin/knockd /usr/sbin/knockd
setcap cap_net_raw=ep /usr/local/sbin/knockd setcap cap_net_raw=ep /usr/local/sbin/knockd
# Set Git credentials globally # Set git credentials
cat <<EOF >> /etc/gitconfig echo -e "[user]\n name = Minecraft Server on Docker\n email = server@example.com" >> /etc/gitconfig
[user]
name = Minecraft Server on Docker
email = server@example.com
EOF
+10 -20
View File
@@ -1,22 +1,12 @@
#!/bin/bash #!/bin/bash
set -euo pipefail if [[ $(uname -m) == "aarch64" ]]; then
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.16/gosu-arm64
GOSU_VERSION="1.16" chmod +x /bin/gosu
GOSU_BASE_URL="https://github.com/tianon/gosu/releases/download/$GOSU_VERSION" elif [[ $(uname -m) == "x86_64" ]]; then
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.16/gosu-amd64
case $(uname -m) in chmod +x /bin/gosu
"aarch64") else
GOSU_ARCH="gosu-arm64" echo "Not supported!"
;; exit 1
"x86_64") fi
GOSU_ARCH="gosu-amd64"
;;
*)
echo "Architecture not supported!"
exit 1
;;
esac
curl -sL -o /bin/gosu "${GOSU_BASE_URL}/${GOSU_ARCH}"
chmod +x /bin/gosu
+9 -21
View File
@@ -4,25 +4,20 @@ export TARGET
set -euo pipefail set -euo pipefail
# Install and configure dnf
microdnf install dnf -y microdnf install dnf -y
dnf install 'dnf-command(config-manager)' -y dnf install 'dnf-command(config-manager)' -y
dnf config-manager --set-enabled ol8_codeready_builder dnf config-manager --set-enabled ol8_codeready_builder
tee /etc/yum.repos.d/ol8-epel.repo<<EOF
# Add EPEL repository
tee /etc/yum.repos.d/ol8-epel.repo <<EOF
[ol8_developer_EPEL] [ol8_developer_EPEL]
name=Oracle Linux \$releasever EPEL (\$basearch) name= Oracle Linux \$releasever EPEL (\$basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL8/developer/EPEL/\$basearch/ baseurl=https://yum.oracle.com/repo/OracleLinux/OL8/developer/EPEL/\$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1 gpgcheck=1
enabled=1 enabled=1
EOF EOF
# Update system
dnf update -y dnf update -y
# Install necessary packages
dnf install -y \ dnf install -y \
ImageMagick \ ImageMagick \
file \ file \
@@ -31,6 +26,7 @@ dnf install -y \
iputils \ iputils \
curl \ curl \
git \ git \
git-lfs \
jq \ jq \
dos2unix \ dos2unix \
mysql \ mysql \
@@ -46,26 +42,18 @@ dnf install -y \
findutils \ findutils \
which which
# Install Git LFS
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash
dnf update -y dnf update -y
dnf install -y git-lfs dnf install -y \
git-lfs
# Clean up DNF when done
dnf clean all
# Install gosu (assuming the script /build/ol/install-gosu.sh exists and is executable)
bash /build/ol/install-gosu.sh bash /build/ol/install-gosu.sh
# Download and install patched knockd # Patched knockd
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-$TARGET.tar.gz curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-$TARGET.tar.gz
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
ln -s /usr/local/sbin/knockd /usr/sbin/knockd ln -s /usr/local/sbin/knockd /usr/sbin/knockd
setcap cap_net_raw=ep /usr/local/sbin/knockd setcap cap_net_raw=ep /usr/local/sbin/knockd
# Set git credentials globally # Set git credentials
cat <<EOF >> /etc/gitconfig echo -e "[user]\n name = Minecraft Server on Docker\n email = server@example.com" >> /etc/gitconfig
[user]
name = Minecraft Server on Docker
email = server@example.com
EOF
+8 -12
View File
@@ -4,8 +4,8 @@ export TARGET
set -euo pipefail set -euo pipefail
# Update and install packages
apt-get update apt-get update
DEBIAN_FRONTEND=noninteractive \ DEBIAN_FRONTEND=noninteractive \
apt-get install -y \ apt-get install -y \
imagemagick \ imagemagick \
@@ -26,26 +26,22 @@ apt-get install -y \
zstd \ zstd \
lbzip2 \ lbzip2 \
nfs-common \ nfs-common \
libpcap0.8 libpcap0.8 \
webp
# Install Git LFS
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
apt-get update apt-get update
apt-get install -y git-lfs apt-get install -y \
git-lfs
# Clean up APT when done
apt-get clean apt-get clean
# Download and install patched knockd # Patched knockd
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-$TARGET.tar.gz curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-$TARGET.tar.gz
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
ln -s /usr/local/sbin/knockd /usr/sbin/knockd ln -s /usr/local/sbin/knockd /usr/sbin/knockd
setcap cap_net_raw=ep /usr/local/sbin/knockd setcap cap_net_raw=ep /usr/local/sbin/knockd
find /usr/lib -name 'libpcap.so.0.8' -execdir cp '{}' libpcap.so.1 \; find /usr/lib -name 'libpcap.so.0.8' -execdir cp '{}' libpcap.so.1 \;
# Set git credentials globally # Set git credentials
cat <<EOF >> /etc/gitconfig echo -e "[user]\n name = Minecraft Server on Docker\n email = server@example.com" >> /etc/gitconfig
[user]
name = Minecraft Server on Docker
email = server@example.com
EOF
-4
View File
@@ -2,9 +2,5 @@
set -e set -e
if id ubuntu > /dev/null 2>&1; then
deluser ubuntu
fi
addgroup --gid 1000 minecraft 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
-3
View File
@@ -25,6 +25,3 @@ The following environment variables define the behavior of auto-stopping:
describes period of the daemonized state machine, that handles the stopping of the server describes period of the daemonized state machine, that handles the stopping of the server
> To troubleshoot, add `DEBUG_AUTOSTOP=true` to see additional output > To troubleshoot, add `DEBUG_AUTOSTOP=true` to see additional output
## Proxy Support
If you make use of PROXY Protocol, i.e. through something like HAProxy or Fly.io, you will need to enable it in your variety of server's configuration, and then set the `USES_PROXY_PROTOCOL` envar to `true`. This lets Autostop monitor the server, where it otherwise wouldn't
+1 -1
View File
@@ -6,7 +6,7 @@ Docker image that runs a Minecraft Bedrock server.
Lightweight multiplexer/proxy for Minecraft Java servers. Provided as a stand-alone application and a Docker image. Lightweight multiplexer/proxy for Minecraft Java servers. Provided as a stand-alone application and a Docker image.
### [itzg/mc-proxy](https://github.com/itzg/docker-bungeecord/) ### [itzg/bungeecord](https://github.com/itzg/docker-bungeecord/)
Docker image that runs a proxy powered by Bungeecord, Velocity, or Waterfall Docker image that runs a proxy powered by Bungeecord, Velocity, or Waterfall
+1 -1
View File
@@ -117,7 +117,7 @@ https://edge.forgecdn.net/files/2871/647/ToastControl-1.15.2-3.0.1.jar
Blank lines and lines that start with a `#` will be ignored Blank lines and lines that start with a `#` will be ignored
[This compose file](https://github.com/itzg/docker-minecraft-server/blob/master/examples/mods-file/docker-compose.yml) shows another example of using this feature. [This compose file](https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose-mods-file.yml) shows another example of using this feature.
## Remove old mods/plugins ## Remove old mods/plugins
+1 -1
View File
@@ -26,5 +26,5 @@
: Can be set to `none` (the default), `required`, or `optional` to download required and/or optional dependencies. : Can be set to `none` (the default), `required`, or `optional` to download required and/or optional dependencies.
`MODRINTH_ALLOWED_VERSION_TYPE` `MODRINTH_ALLOWED_VERSION_TYPE`
: The version type is used to determine the newest version to use from each project. The allowed values are `release` (default), `beta`, `alpha`. Setting to `beta` will pick up both release and beta versions. Setting to `alpha` will pick up release, beta, and alpha versions. : The version type is used to determine the newest version to use from each project. The allowed values are `release` (default), `beta`, `alpha`.
+1 -1
View File
@@ -1,4 +1,4 @@
mkdocs-material == 9.5.29 mkdocs-material == 9.5.26
mkdocs-autorefs == 1.0.1 mkdocs-autorefs == 1.0.1
mkdocstrings == 0.25.1 mkdocstrings == 0.25.1
mkdocs-literate-nav == 0.6.1 mkdocs-literate-nav == 0.6.1
@@ -73,10 +73,6 @@ To force include client mods, set `MODRINTH_FORCE_INCLUDE_FILES` to a comma or n
yet-another-config-lib yet-another-config-lib
``` ```
## Default exclude/includes
The image comes with a default set of exclude/includes, maintained [in the repo files area](https://github.com/itzg/docker-minecraft-server/blob/master/files/modrinth-exclude-include.json) and uses the same [JSON schema](https://github.com/itzg/mc-image-helper?tab=readme-ov-file#excludeinclude-file-schema) as Auto CurseForge. Those defaults can be disabled by setting the env var `MODRINTH_DEFAULT_EXCLUDE_INCLUDES` to an empty string.
## Excluding Overrides Files ## Excluding Overrides Files
Modrinth mrpack/zip files may include an `overrides` subdirectory that contains config files, world data, and extra mod files. All of those files will be extracted into the `/data` path of the container. If any of those files, such as incompatible mods, need to be excluded from extraction, then the `MODRINTH_OVERRIDES_EXCLUSIONS` variable can be set with a comma or newline delimited list of ant-style paths ([see below](#ant-style-paths)) to exclude, relative to the overrides (or `/data`) directory. Modrinth mrpack/zip files may include an `overrides` subdirectory that contains config files, world data, and extra mod files. All of those files will be extracted into the `/data` path of the container. If any of those files, such as incompatible mods, need to be excluded from extraction, then the `MODRINTH_OVERRIDES_EXCLUSIONS` variable can be set with a comma or newline delimited list of ant-style paths ([see below](#ant-style-paths)) to exclude, relative to the overrides (or `/data`) directory.
@@ -16,14 +16,6 @@ To allow for the selection of experimental builds, set `PAPER_CHANNEL` to "exper
docker run ... -e TYPE=PAPER -e PAPER_CHANNEL=experimental ... docker run ... -e TYPE=PAPER -e PAPER_CHANNEL=experimental ...
``` ```
!!! tip
If you see the following error, it likely means you need to set the env var `PAPER_CHANNEL` to "experimental"
```
No build found for version 1.21 with channel 'default'
```
If you are hosting your own copy of Paper you can override the download URL with `PAPER_DOWNLOAD_URL=<url>`. If you are hosting your own copy of Paper you can override the download URL with `PAPER_DOWNLOAD_URL=<url>`.
If you have attached a host directory to the `/data` volume, then you can install plugins via the `plugins` subdirectory. You can also [attach a `/plugins` volume](../../mods-and-plugins/index.md#optional-plugins-mods-and-config-attach-points). If you add plugins while the container is running, you'll need to restart it to pick those up. If you have attached a host directory to the `/data` volume, then you can install plugins via the `plugins` subdirectory. You can also [attach a `/plugins` volume](../../mods-and-plugins/index.md#optional-plugins-mods-and-config-attach-points). If you add plugins while the container is running, you'll need to restart it to pick those up.
-12
View File
@@ -80,18 +80,6 @@ The `stable` image tag combines the benefits of `latest` and [release versions](
[This section in the Minecraft wiki](https://minecraft.wiki/w/Tutorials/Update_Java#Why_update?) lists out versions of **vanilla** Minecraft versions and the corresponding Java version that is required. [This section in the Minecraft wiki](https://minecraft.wiki/w/Tutorials/Update_Java#Why_update?) lists out versions of **vanilla** Minecraft versions and the corresponding Java version that is required.
### Class file version 65.0
If encountering a startup failure similar to the following examples, then ensure that the latest image has been re-pulled to use a Java 21. Alternatively, set the image tag specifically to `itzg/minecraft-server:java21`.
> Exception in thread "ServerMain" java.lang.UnsupportedClassVersionError: org/bukkit/craftbukkit/Main has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
or
> Error: LinkageError occurred while loading main class net.minecraft.bundler.Main
java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
### Forge versions ### Forge versions
Forge and its mods sometimes utilize non-public APIs of the JVM and as such are suspceptible to becoming broken with newer Java versions. Forge and its mods sometimes utilize non-public APIs of the JVM and as such are suspceptible to becoming broken with newer Java versions.
+15
View File
@@ -16,6 +16,21 @@ services:
- "25565:25565" - "25565:25565"
volumes: volumes:
- mc-data:/data - mc-data:/data
- ./downloads:/downloads
# Manually download the following and put into the 'downloads' directory next to this compose file
#
# Mod Filename Download page
# =========================== ========================================= ====================================================================================
# Fish of Thieves [Fabric 1.20.1] Fish of Thieves v3.0.3 https://www.curseforge.com/minecraft/mc-mods/fish-of-thieves/files/4958329
# Only Hammers [FORGE/FABRIC] OnlyHammers-1.20.1-0.6-Fabric https://www.curseforge.com/minecraft/mc-mods/only-hammers-forge-fabric/files/4832068
# Sprinklerz sprinklerz-0.5_fabric.jar https://www.curseforge.com/minecraft/mc-mods/sprinklerz/files/4835664
# Frog Legs (Fabric/Forge) FrogLegs-v2.0.0-1.20.1-Fabric.jar https://www.curseforge.com/minecraft/mc-mods/froglegs/files/4917818
# TrimsEffects [FABRIC] TrimsEffects - MC 1.20.X - 1.1.0 https://www.curseforge.com/minecraft/mc-mods/trimseffects/files/4954156
# Display Case Display Case-fabric-1.20-1.0.8.jar https://www.curseforge.com/minecraft/mc-mods/displaycase/files/4921333
# Structory: Towers Structory Towers 1.20.4 v1.0.6 https://www.curseforge.com/minecraft/mc-mods/structory-towers/files/4937875
# Packet Fixer Packet Fixer Fabric 1.2.1 https://www.curseforge.com/minecraft/mc-mods/packet-fixer/files/4884316
# Perfect Plushies Perfect Plushies 1.9.0 [Fabric] https://www.curseforge.com/minecraft/mc-mods/perfect-plushies/files/4985767
# Structory Structory 1.20.2 v1.3.4 https://www.curseforge.com/minecraft/mc-mods/structory/files/4937872
volumes: volumes:
mc-data: {} mc-data: {}
+3 -2
View File
@@ -1,6 +1,6 @@
services: services:
mc: mc:
image: itzg/minecraft-server:java17 image: itzg/minecraft-server
ports: ports:
- "25565:25565" - "25565:25565"
environment: environment:
@@ -9,10 +9,11 @@ services:
# allocate from https://console.curseforge.com/ and set in .env file # allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-8 CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-8
# CF_FILENAME_MATCHER: "1.1.0" CF_FILENAME_MATCHER: "1.0.6"
MEMORY: 4G MEMORY: 4G
volumes: volumes:
- mc-data:/data - mc-data:/data
- ../downloads:/downloads
# Since Docker's default volume driver creates volumes owned by root, this # Since Docker's default volume driver creates volumes owned by root, this
# init container will change ownership to match final UID of mc service, above # init container will change ownership to match final UID of mc service, above
init-filebrowser: init-filebrowser:
+1
View File
@@ -14,6 +14,7 @@ services:
MEMORY: 4G MEMORY: 4G
volumes: volumes:
- mc-data:/data - mc-data:/data
- ./downloads:/downloads
volumes: volumes:
mc-data: {} mc-data: {}
@@ -1,6 +1,6 @@
services: services:
mc: mc:
image: itzg/minecraft-server:java8 image: itzg/minecraft-server:java8-multiarch
ports: ports:
- "25565:25565" - "25565:25565"
environment: environment:
@@ -43,6 +43,7 @@ services:
MEMORY: 4G MEMORY: 4G
volumes: volumes:
- mc-data:/data - mc-data:/data
- ./downloads:/downloads
volumes: volumes:
mc-data: {} mc-data: {}
+2 -1
View File
@@ -7,10 +7,11 @@ services:
# Set CF_API_KEY=... in a .env file next to this compose file and don't source control that file # Set CF_API_KEY=... in a .env file next to this compose file and don't source control that file
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_SLUG: better-mc-fabric-bmc1 CF_SLUG: better-mc-fabric-bmc1
# CF_FILENAME_MATCHER: v18.5 CF_FILENAME_MATCHER: v18.5
MEMORY: 4G MEMORY: 4G
volumes: volumes:
- mc:/data - mc:/data
- ../downloads:/downloads
ports: ports:
- "25565:25565" - "25565:25565"
+12 -4
View File
@@ -2,14 +2,22 @@ services:
mc: mc:
image: itzg/minecraft-server:java17 image: itzg/minecraft-server:java17
environment: environment:
DEBUG: true
SETUP_ONLY: true
EULA: true EULA: true
TYPE: MODRINTH TYPE: MODRINTH
VERSION: 1.20.1
MEMORY: 4G MEMORY: 4G
MODRINTH_MODPACK: better-mc-forge-bmc4 MODRINTH_MODPACK: better-mc-forge-bmc4
MODRINTH_VERSION: v28 MODRINTH_VERSION: v26
MODRINTH_EXCLUDE_FILES: |
citresewn
oculus
yungsmenutweaks
notenoughanimations
ryoamiclights
euphoriapatcher
entity_model_features
entity_texture_features
3dskinlayers
connector
MODRINTH_OVERRIDES_EXCLUSIONS: | MODRINTH_OVERRIDES_EXCLUSIONS: |
mods/NekosEnchantedBooks-*.jar mods/NekosEnchantedBooks-*.jar
mods/citresewn-*.jar mods/citresewn-*.jar
+1
View File
@@ -8,6 +8,7 @@ services:
environment: environment:
EULA: "TRUE" EULA: "TRUE"
ENABLE_AUTOPAUSE: "TRUE" ENABLE_AUTOPAUSE: "TRUE"
OVERRIDE_SERVER_PROPERTIES: "TRUE"
MAX_TICK_TIME: "-1" MAX_TICK_TIME: "-1"
# More aggressive settings for demo purposes # More aggressive settings for demo purposes
AUTOPAUSE_TIMEOUT_INIT: "30" AUTOPAUSE_TIMEOUT_INIT: "30"
@@ -1,6 +1,6 @@
services: services:
proxy: proxy:
image: itzg/mc-proxy image: itzg/bungeecord
environment: environment:
TYPE: WATERFALL TYPE: WATERFALL
ports: ports:
@@ -10,7 +10,7 @@ services:
- ./waterfall-config:/config - ./waterfall-config:/config
# If you want to use Velocity here is a premade version that supports Velocity # If you want to use Velocity here is a premade version that supports Velocity
# velocity-proxy: # velocity-proxy:
# image: itzg/mc-proxy # image: itzg/bungeecord
# environment: # environment:
# TYPE: VELOCITY # TYPE: VELOCITY
# ports: # ports:
-18
View File
@@ -1,18 +0,0 @@
services:
mc:
image: itzg/minecraft-server
ports:
- "25565:25565"
environment:
EULA: "true"
MOD_PLATFORM: AUTO_CURSEFORGE
# allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/prominence-2-rpg
CF_FILENAME_MATCHER: "2.8.7"
MEMORY: 4G
volumes:
- mc-data:/data
volumes:
mc-data: {}
+17
View File
@@ -13,21 +13,38 @@ services:
# Optional: select a specific version/file # Optional: select a specific version/file
#CF_FILENAME_MATCHER: "0.2.34" #CF_FILENAME_MATCHER: "0.2.34"
CF_EXCLUDE_MODS: | CF_EXCLUDE_MODS: |
auudio-forge
betterf3
better-third-person
clickable-advancements
controlling controlling
craftpresence craftpresence
creative-core creative-core
default-options default-options
drippy-loading-screen
embeddium
embeddium-extension
embeddium-extras
equipment-compare equipment-compare
ezzoom
fading-night-vision
fancymenu
item-borders item-borders
itemphysic-lite itemphysic-lite
just-enough-resources-jer
konkrete konkrete
legendary-tooltips
mouse-tweaks
oauth oauth
oculus
sound-filters sound-filters
textrues-embeddium-options
toast-control toast-control
CF_FORCE_SYNCHRONIZE: "true" CF_FORCE_SYNCHRONIZE: "true"
MEMORY: 4G MEMORY: 4G
volumes: volumes:
- mc-data:/data - mc-data:/data
- ./downloads:/downloads
volumes: volumes:
mc-data: {} mc-data: {}
@@ -16,6 +16,10 @@ services:
ENABLE_COMMAND_BLOCK: true ENABLE_COMMAND_BLOCK: true
DIFFICULTY: hard DIFFICULTY: hard
volumes: volumes:
# Need to place non-distributable mods in ./downloads/mods
# As of Update-10.0.0
# - Neon Craft 2 v2.2: https://www.curseforge.com/minecraft/mc-mods/neon-craft-2-mod/files/3726051
- ./downloads:/downloads
- mc-data:/data - mc-data:/data
volumes: volumes:
+3 -11
View File
@@ -1,7 +1,5 @@
#!/bin/bash #!/bin/bash
# shellcheck source=../scripts/start-utils
. "${SCRIPTS:-/}start-utils"
current_uptime() { current_uptime() {
awk '{print $1}' /proc/uptime | cut -d . -f 1 awk '{print $1}' /proc/uptime | cut -d . -f 1
} }
@@ -18,20 +16,14 @@ rcon_client_exists() {
[[ -n "$(ps -ax -o comm | grep 'rcon-cli')" ]] [[ -n "$(ps -ax -o comm | grep 'rcon-cli')" ]]
} }
use_proxy() {
if isTrue "$USES_PROXY_PROTOCOL"; then
echo "--use-proxy"
fi
}
mc_server_listening() { mc_server_listening() {
mc-monitor status $(use_proxy) --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --timeout 10s >&/dev/null mc-monitor status --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --timeout 10s >& /dev/null
} }
java_clients_connections() { java_clients_connections() {
local connections local connections
if java_running; then if java_running ; then
if ! connections=$(mc-monitor status $(use_proxy) --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --show-player-count); then if ! connections=$(mc-monitor status --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --show-player-count); then
# consider it a non-zero player count if the ping fails # consider it a non-zero player count if the ping fails
# otherwise a laggy server with players connected could get paused # otherwise a laggy server with players connected could get paused
connections=1 connections=1
+1 -53
View File
@@ -1,66 +1,30 @@
{ {
"globalExcludes": [ "globalExcludes": [
"ambientsounds", "ambientsounds",
"auudio-forge",
"ambience-music-mod",
"appleskin",
"armor-chroma",
"armor-toughness-bar", "armor-toughness-bar",
"beehivetooltips",
"better-advancements",
"betterf3",
"betterfps",
"better-foliage",
"better-placement",
"better-sprinting",
"better-tips-nbt-tag",
"better-third-person",
"biomeinfo", "biomeinfo",
"block-drops-jei-addon", "block-drops-jei-addon",
"blur-forge",
"cherished-worlds", "cherished-worlds",
"chunk-animator",
"clickable-advancements",
"configured",
"controlling", "controlling",
"ctm", "ctm",
"custom-main-menu", "custom-main-menu",
"defensive-measures", "defensive-measures",
"ding", "ding",
"drippy-loading-screen",
"dynamiclights-reforged", "dynamiclights-reforged",
"dynamic-surroundings",
"easiervillagertrading",
"effective-forge",
"embeddium", "embeddium",
"embeddium-extension",
"embeddium-extras",
"enchantment-descriptions", "enchantment-descriptions",
"entity-collision-fps-fix",
"entity-texture-features-fabric", "entity-texture-features-fabric",
"entityculling", "entityculling",
"extreme-sound-muffler", "extreme-sound-muffler",
"ezzoom",
"fading-night-vision",
"falling-leaves-forge",
"fancymenu",
"faster-ladder-climbing",
"foamfix-optimization-mod",
"free-cam", "free-cam",
"ftb-backups-2",
"fullscreen-windowed-borderless-for-minecraft",
"hwyla",
"ignitioncoil", "ignitioncoil",
"inmisaddon", "inmisaddon",
"irisshaders", "irisshaders",
"iris-flywheel-compat", "iris-flywheel-compat",
"itemphysic-lite",
"item-obliterator",
"itemzoom",
"just-enough-harvestcraft", "just-enough-harvestcraft",
"just-enough-resources-jer", "just-enough-resources-jer",
"legendary-tooltips", "legendary-tooltips",
"lootbeams",
"loot-capacitor-tooltips", "loot-capacitor-tooltips",
"magnesium-extras", "magnesium-extras",
"menumobs", "menumobs",
@@ -70,7 +34,6 @@
"neat", "neat",
"nekos-enchanted-books", "nekos-enchanted-books",
"no-recipe-book", "no-recipe-book",
"no-nv-flash",
"not-enough-animations", "not-enough-animations",
"oculus", "oculus",
"oldjavawarning", "oldjavawarning",
@@ -80,28 +43,13 @@
"resource-reloader", "resource-reloader",
"rubidium", "rubidium",
"rubidium-extra", "rubidium-extra",
"ryoamiclights",
"schematica",
"searchables",
"shulkerboxviewer",
"skin-layers-3d", "skin-layers-3d",
"smart-hud",
"smooth-font",
"smoothwater",
"sodium", "sodium",
"sound-filters",
"sound-physics-remastered",
"stellar-sky",
"swingthroughgrass",
"textrues-embeddium-options",
"textrues-rubidium-options", "textrues-rubidium-options",
"thaumic-jei", "thaumic-jei",
"tips", "tips",
"torohealth-damage-indicators", "torohealth-damage-indicators",
"true-darkness", "true-darkness",
"ungrab-mouse-mod",
"vanillafix",
"visuality",
"waila-harvestability", "waila-harvestability",
"zume" "zume"
], ],
-79
View File
@@ -1,79 +0,0 @@
{
"globalExcludes": [
"3dskinlayers",
"ae2-emi-crafting",
"AmbientSounds",
"amecs",
"Animation_Overhaul",
"appleskin",
"auudio",
"axolotlbuckets",
"BadOptimizations",
"BetterAdvancements",
"betterbeds",
"BetterThirdPerson",
"BHMenu",
"blur",
"Boat-Item-View",
"bobby",
"cat_jam",
"chat_heads",
"chatanimation",
"cherishedworlds",
"citresewn",
"clickadv",
"connector",
"DisableCustomWorldsAdvice",
"drippyloadingscreen",
"eating-animation",
"emiffect",
"emitrades",
"entity_model_features",
"entity_texture_features",
"entityculling",
"euphoriapatcher",
"fallingleaves",
"fancymenu",
"fast-ip-ping",
"FauxCustomEntityData",
"GeckoLibIrisCompat",
"gpumemleakfix",
"Highlighter",
"ImmediatelyFast",
"indium",
"iris",
"iris-flywheel",
"ItemBorders",
"ItemLocks",
"language-reload",
"lazy-language-loader",
"LegendaryTooltips",
"loadmyresources",
"lootbeams",
"MindfulDarkness",
"MouseTweaks",
"nicer-skies",
"notenoughanimations",
"oculus",
"OverflowingBars",
"PickUpNotifier",
"PresenceFootsteps",
"Prism",
"reeses_sodium_options",
"ResourcePackOverrides",
"ryoamiclights",
"Searchables",
"seasonhud",
"ShoulderSurfing",
"skinlayers3d",
"sodium",
"sorted_enchantments",
"visuality",
"VR-Combat",
"YeetusExperimentus",
"yungsmenutweaks",
"Zoomify"
],
"globalForceIncludes": [],
"modpacks": {}
}
-14
View File
@@ -13,9 +13,6 @@ configMapGenerator:
- name: mc - name: mc
envs: envs:
- mc.env - mc.env
patches:
# Example of using a patch to set external service name for mc-router to pick up
- path: set-external-servername.yml
``` ```
### mc.env ### mc.env
@@ -23,14 +20,3 @@ patches:
EULA=true EULA=true
TYPE=FORGE TYPE=FORGE
``` ```
###
```yaml
apiVersion: v1
kind: Service
metadata:
name: mc
annotations:
mc-router.itzg.me/externalServerName: forge.example.com
```
+1 -1
View File
@@ -12,7 +12,7 @@ set -eu
: "${CF_FORCE_SYNCHRONIZE:=false}" : "${CF_FORCE_SYNCHRONIZE:=false}"
: "${CF_FORCE_REINSTALL_MODLOADER:=false}" : "${CF_FORCE_REINSTALL_MODLOADER:=false}"
: "${CF_IGNORE_MISSING_FILES:=}" : "${CF_IGNORE_MISSING_FILES:=}"
: "${CF_EXCLUDE_INCLUDE_FILE=/image/cf-exclude-include.json}" : "${CF_EXCLUDE_INCLUDE_FILE=https://raw.githubusercontent.com/itzg/docker-minecraft-server/master/files/cf-exclude-include.json}"
: "${CF_EXCLUDE_MODS:=}" : "${CF_EXCLUDE_MODS:=}"
: "${CF_FORCE_INCLUDE_MODS:=}" : "${CF_FORCE_INCLUDE_MODS:=}"
: "${CF_SET_LEVEL_FROM:=}" # --set-level-from : "${CF_SET_LEVEL_FROM:=}" # --set-level-from
+4 -6
View File
@@ -9,11 +9,10 @@ resultsFile=/data/.install-modrinth.env
: "${MODRINTH_MODPACK:=${MODRINTH_PROJECT:-}}" : "${MODRINTH_MODPACK:=${MODRINTH_PROJECT:-}}"
: "${MODRINTH_LOADER:=}" : "${MODRINTH_LOADER:=}"
: "${MODRINTH_VERSION:=${MODRINTH_VERSION_ID:-}}" : "${MODRINTH_VERSION:=${MODRINTH_VERSION_ID:-}}"
: "${MODRINTH_IGNORE_MISSING_FILES=}" : "${MODRINTH_IGNORE_MISSING_FILES:=}"
: "${MODRINTH_EXCLUDE_FILES=}" : "${MODRINTH_EXCLUDE_FILES:=}"
: "${MODRINTH_FORCE_INCLUDE_FILES=}" : "${MODRINTH_FORCE_INCLUDE_FILES:=}"
: "${MODRINTH_OVERRIDES_EXCLUSIONS=}" : "${MODRINTH_OVERRIDES_EXCLUSIONS:=}"
: "${MODRINTH_DEFAULT_EXCLUDE_INCLUDES=/image/modrinth-exclude-include.json}"
if [[ ! $MODRINTH_MODPACK ]]; then if [[ ! $MODRINTH_MODPACK ]]; then
log "ERROR: MODRINTH_MODPACK must be set when using TYPE/MOD_PLATFORM of MODRINTH" log "ERROR: MODRINTH_MODPACK must be set when using TYPE/MOD_PLATFORM of MODRINTH"
@@ -61,7 +60,6 @@ setArg --default-version-type MODRINTH_DEFAULT_VERSION_TYPE
setArg --exclude-files MODRINTH_EXCLUDE_FILES setArg --exclude-files MODRINTH_EXCLUDE_FILES
setArg --force-include-files MODRINTH_FORCE_INCLUDE_FILES setArg --force-include-files MODRINTH_FORCE_INCLUDE_FILES
setArg --overrides-exclusions MODRINTH_OVERRIDES_EXCLUSIONS setArg --overrides-exclusions MODRINTH_OVERRIDES_EXCLUSIONS
setArg --default-exclude-includes MODRINTH_DEFAULT_EXCLUDE_INCLUDES
if ! mc-image-helper install-modrinth-modpack "${args[@]}"; then if ! mc-image-helper install-modrinth-modpack "${args[@]}"; then
log "ERROR failed to install Modrinth modpack" log "ERROR failed to install Modrinth modpack"
-6
View File
@@ -52,12 +52,6 @@ else
fi fi
# Download default configs to allow for consistent patching
for c in paper-global.yml paper-world-defaults.yml spigot.yml; do
DOWNLOAD_DEFAULT_CONFIGS+=",${PAPER_CONFIG_DEFAULTS_REPO}/${VERSION}/$c"
done
export DOWNLOAD_DEFAULT_CONFIGS
# Normalize on Spigot for downstream operations # Normalize on Spigot for downstream operations
export FAMILY=SPIGOT export FAMILY=SPIGOT
-10
View File
@@ -64,9 +64,6 @@ patchLog4jConfig() {
canUseRollingLogs=false canUseRollingLogs=false
} }
# Temporarily disable debugging output
oldState=$(shopt -po xtrace || true)
shopt -u -o xtrace
# Patch Log4j remote code execution vulnerability # Patch Log4j remote code execution vulnerability
# See https://www.minecraft.net/en-us/article/important-message--security-vulnerability-java-edition # See https://www.minecraft.net/en-us/article/important-message--security-vulnerability-java-edition
if versionLessThan 1.7; then if versionLessThan 1.7; then
@@ -83,7 +80,6 @@ elif isType PURPUR && versionLessThan 1.18.1; then
elif versionLessThan 1.18.1; then elif versionLessThan 1.18.1; then
useFallbackJvmFlag=true useFallbackJvmFlag=true
fi fi
eval "$oldState"
if ${useFallbackJvmFlag}; then if ${useFallbackJvmFlag}; then
JVM_OPTS="-Dlog4j2.formatMsgNoLookups=true ${JVM_OPTS}" JVM_OPTS="-Dlog4j2.formatMsgNoLookups=true ${JVM_OPTS}"
@@ -231,12 +227,6 @@ MC_HEALTH_EXTRA_ARGS=(
--use-server-list-ping --use-server-list-ping
) )
" > /data/.mc-health.env " > /data/.mc-health.env
elif isTrue "$USES_PROXY_PROTOCOL"; then
echo "
MC_HEALTH_EXTRA_ARGS=(
--use-proxy
)
" > /data/.mc-health.env
else else
rm -f /data/.mc-health.env rm -f /data/.mc-health.env
fi fi
-12
View File
@@ -4,7 +4,6 @@
. "${SCRIPTS:-/}start-utils" . "${SCRIPTS:-/}start-utils"
set -e set -e
handleDebugMode
: "${REPLACE_ENV_IN_PLACE:=${REPLACE_ENV_VARIABLES:-false}}" : "${REPLACE_ENV_IN_PLACE:=${REPLACE_ENV_VARIABLES:-false}}"
: "${REPLACE_ENV_PATHS:=/data}" : "${REPLACE_ENV_PATHS:=/data}"
@@ -14,7 +13,6 @@ handleDebugMode
: "${REPLACE_ENV_VARIABLES_EXCLUDE_PATHS:=}" : "${REPLACE_ENV_VARIABLES_EXCLUDE_PATHS:=}"
: "${PATCH_DEFINITIONS:=}" : "${PATCH_DEFINITIONS:=}"
: "${DEBUG:=false}" : "${DEBUG:=false}"
: "${DOWNLOAD_DEFAULT_CONFIGS:=}"
if isTrue "${REPLACE_ENV_IN_PLACE}"; then if isTrue "${REPLACE_ENV_IN_PLACE}"; then
log "Replacing env variables in ${REPLACE_ENV_PATHS} that match the prefix '$REPLACE_ENV_VARIABLE_PREFIX' ..." log "Replacing env variables in ${REPLACE_ENV_PATHS} that match the prefix '$REPLACE_ENV_VARIABLE_PREFIX' ..."
@@ -27,16 +25,6 @@ if isTrue "${REPLACE_ENV_IN_PLACE}"; then
"${REPLACE_ENV_PATHS[@]}" "${REPLACE_ENV_PATHS[@]}"
fi fi
if [[ $DOWNLOAD_DEFAULT_CONFIGS ]]; then
log "Downloading default configs, if needed"
if ! mc-image-helper mcopy \
--to /data/config \
--skip-existing --skip-up-to-date=false \
"$DOWNLOAD_DEFAULT_CONFIGS" 2> /dev/null; then
log "WARN: one or more default config files were not available from $DOWNLOAD_DEFAULT_CONFIGS"
fi
fi
if [[ ${PATCH_DEFINITIONS} ]]; then if [[ ${PATCH_DEFINITIONS} ]]; then
log "Applying patch definitions from ${PATCH_DEFINITIONS}" log "Applying patch definitions from ${PATCH_DEFINITIONS}"
mc-image-helper patch \ mc-image-helper patch \
+3 -8
View File
@@ -5,15 +5,10 @@
set -e set -e
isDebugging && set -x isDebugging && set -x
# support absolute directories if [ "$TYPE" = "CURSEFORGE" ]; then
if [[ "${LEVEL:-world}" =~ ^\/.*$ ]]; then worldDest=$FTB_DIR/${LEVEL:-world}
worldDest=${LEVEL}
else else
if [ "$TYPE" = "CURSEFORGE" ]; then worldDest=/data/${LEVEL:-world}
worldDest=$FTB_DIR/${LEVEL:-world}
else
worldDest=/data/${LEVEL:-world}
fi
fi fi
if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] ); then if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] ); then
+2 -112
View File
@@ -161,121 +161,11 @@ function normalizeMemSize() {
echo $((val * scale)) echo $((val * scale))
} }
function compare_version() {
local left_version=$1
local comparison=$2
local right_version=$3
if [[ -z "$left_version" ]]; then
echo "Left version is required"
return 1
fi
if [[ -z "$right_version" ]]; then
echo "Right version is required"
return 1
fi
# Handle version channels ('a', 'b', or numeric)
if [[ $left_version == a* || $left_version == b* ]]; then
left_version=${left_version:1}
fi
if [[ $right_version == a* || $right_version == b* ]]; then
right_version=${right_version:1}
fi
local left_version_channel=${left_version:0:1}
if [[ $left_version_channel =~ [0-9] ]]; then
left_version_channel='r'
fi
local right_version_channel=${right_version:0:1}
if [[ $right_version_channel =~ [0-9] ]]; then
right_version_channel='r'
fi
if [[ $comparison == "lt" && $left_version_channel < $right_version_channel ]]; then
return 0
elif [[ $comparison == "lt" && $left_version_channel > $right_version_channel ]]; then
return 1
elif [[ $comparison == "gt" && $left_version_channel > $right_version_channel ]]; then
return 0
elif [[ $comparison == "gt" && $left_version_channel < $right_version_channel ]]; then
return 1
elif [[ $comparison == "le" && $left_version_channel < $right_version_channel ]]; then
return 0
elif [[ $comparison == "le" && $left_version_channel == $right_version_channel ]]; then
return 0
elif [[ $comparison == "ge" && $left_version_channel > $right_version_channel ]]; then
return 0
elif [[ $comparison == "ge" && $left_version_channel == $right_version_channel ]]; then
return 0
elif [[ $comparison == "eq" && $left_version_channel == $right_version_channel ]]; then
return 0
fi
# Compare the versions using sort -V
local result
case $comparison in
"lt")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | head -n1) == "$left_version" && "$left_version" != "$right_version" ]]; then
result=0
else
result=1
fi
;;
"le")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | head -n1) == "$left_version" ]]; then
result=0
else
result=1
fi
;;
"eq")
if [[ "$left_version" == "$right_version" ]]; then
result=0
else
result=1
fi
;;
"ge")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | tail -n1) == "$left_version" ]]; then
result=0
else
result=1
fi
;;
"gt")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | tail -n1) == "$left_version" && "$left_version" != "$right_version" ]]; then
result=0
else
result=1
fi
;;
*)
echo "Unsupported comparison operator: $comparison"
return 1
;;
esac
return $result
}
function versionLessThan() { function versionLessThan() {
local oldState
# The return status when listing options is zero if all optnames are enabled, non- zero otherwise.
oldState=$(shopt -po xtrace || true)
shopt -u -o xtrace
# Use if-else since strict mode might be enabled # Use if-else since strict mode might be enabled
if compare_version "${VERSION}" "lt" "${1?}"; then if mc-image-helper compare-versions "${VERSION}" lt "${1?}"; then
eval "$oldState"
return 0 return 0
else else
eval "$oldState"
return 1 return 1
fi fi
} }
@@ -452,7 +342,7 @@ function ensureRemoveAllModsOff() {
reason=${1?} reason=${1?}
if isTrue "${REMOVE_OLD_MODS:-false}"; then if isTrue "${REMOVE_OLD_MODS:-false}"; then
log "WARNING using REMOVE_OLD_MODS interferes with $reason -- it is now disabled" log "WARNING using REMOVE_OLDS_MODS interferes with $reason -- it is now disabled"
REMOVE_OLD_MODS=false REMOVE_OLD_MODS=false
fi fi
} }
+2 -4
View File
@@ -2,8 +2,6 @@
set -euo pipefail set -euo pipefail
IFS=$'\n\t' IFS=$'\n\t'
: "${IMAGE_TO_TEST:=itzg/minecraft-server}"
# go to script root directory # go to script root directory
cd "$(dirname "$0")" || exit 1 cd "$(dirname "$0")" || exit 1
@@ -48,7 +46,7 @@ setupOnlyMinecraftTest(){
outputContainerLog "$logs" outputContainerLog "$logs"
result=1 result=1
elif [ -f verify.sh ]; then elif [ -f verify.sh ]; then
if ! docker run --rm --entrypoint bash -v "${PWD}/data":/data -v "${PWD}/verify.sh":/verify "${IMAGE_TO_TEST}" -e /verify; then if ! docker run --rm --entrypoint bash -v "${PWD}/data":/data -v "${PWD}/verify.sh":/verify "${IMAGE_TO_TEST:-itzg/minecraft-server}" -e /verify; then
endTime=$(date +%s) endTime=$(date +%s)
echo "${folder} FAILED verify in $(delta start)" echo "${folder} FAILED verify in $(delta start)"
outputContainerLog "$logs" outputContainerLog "$logs"
@@ -76,7 +74,7 @@ if (( $# > 0 )); then
else else
readarray -t folders < <(find . -maxdepth 2 -mindepth 2 -name docker-compose.yml -printf '%h\n') readarray -t folders < <(find . -maxdepth 2 -mindepth 2 -name docker-compose.yml -printf '%h\n')
for folder in "${folders[@]}"; do for folder in "${folders[@]}"; do
echo "Starting Tests in ${folder} using $IMAGE_TO_TEST" echo "Starting Tests in ${folder}"
setupOnlyMinecraftTest "$folder" setupOnlyMinecraftTest "$folder"
done done
fi fi