mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-07-06 00:25:09 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 648abc4ae4 | |||
| c764961418 |
@@ -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 }}
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -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
@@ -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
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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,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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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: {}
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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: {}
|
||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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: {}
|
|
||||||
@@ -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:
|
||||||
|
|||||||
@@ -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,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"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -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": {}
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
```
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 \
|
||||||
|
|||||||
@@ -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
@@ -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,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
|
||||||
|
|||||||
Reference in New Issue
Block a user