mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-03-11 17:21:24 +00:00
Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6f67f76eef | ||
|
|
002ed4bc77 | ||
|
|
9d48e79c64 | ||
|
|
ba7db26157 | ||
|
|
fc6129261b | ||
|
|
7702d98766 | ||
|
|
04ed016175 | ||
|
|
1aaaf95950 | ||
|
|
1e334ca7d5 | ||
|
|
74df4b6a9c | ||
|
|
f63463e654 | ||
|
|
a24b633ccb | ||
|
|
5b8cd8cdcc | ||
|
|
c35c85e9b5 | ||
|
|
2ffc1641a0 | ||
|
|
9d67dceff3 | ||
|
|
c449a31b37 | ||
|
|
efd3427fc0 | ||
|
|
88ed017ca7 | ||
|
|
30ba3a4b78 | ||
|
|
c8380daee5 | ||
|
|
8afb1651fd | ||
|
|
9560903c80 | ||
|
|
e94f6608d2 | ||
|
|
949faf1620 | ||
|
|
5b3259b1ef | ||
|
|
485d7b0612 | ||
|
|
94b037428e |
46
Dockerfile
46
Dockerfile
@@ -15,12 +15,9 @@ RUN apk add --no-cache -U \
|
|||||||
mysql-client \
|
mysql-client \
|
||||||
tzdata \
|
tzdata \
|
||||||
rsync \
|
rsync \
|
||||||
nano \
|
nano
|
||||||
python python-dev py2-pip
|
|
||||||
|
|
||||||
RUN pip install mcstatus yq
|
HEALTHCHECK --start-period=1m CMD mc-monitor status --host localhost --port $SERVER_PORT
|
||||||
|
|
||||||
HEALTHCHECK --start-period=1m CMD mcstatus localhost:$SERVER_PORT ping
|
|
||||||
|
|
||||||
RUN addgroup -g 1000 minecraft \
|
RUN addgroup -g 1000 minecraft \
|
||||||
&& adduser -Ss /bin/false -u 1000 -G minecraft -h /home/minecraft minecraft \
|
&& adduser -Ss /bin/false -u 1000 -G minecraft -h /home/minecraft minecraft \
|
||||||
@@ -29,28 +26,41 @@ RUN addgroup -g 1000 minecraft \
|
|||||||
|
|
||||||
EXPOSE 25565 25575
|
EXPOSE 25565 25575
|
||||||
|
|
||||||
RUN echo 'hosts: files dns' > /etc/nsswitch.conf
|
# hook into docker BuildKit --platform support
|
||||||
|
# see https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope
|
||||||
|
ARG TARGETOS=linux
|
||||||
|
ARG TARGETARCH=amd64
|
||||||
|
ARG TARGETVARIANT=""
|
||||||
|
|
||||||
ARG ARCH=amd64
|
ARG EASY_ADD_VER=0.7.1
|
||||||
|
ADD https://github.com/itzg/easy-add/releases/download/${EASY_ADD_VER}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
|
||||||
ARG EASY_ADD_VER=0.3.0
|
|
||||||
ADD https://github.com/itzg/easy-add/releases/download/${EASY_ADD_VER}/easy-add_${EASY_ADD_VER}_linux_${ARCH} /usr/bin/easy-add
|
|
||||||
RUN chmod +x /usr/bin/easy-add
|
RUN chmod +x /usr/bin/easy-add
|
||||||
|
|
||||||
ARG RESTIFY_VER=1.2.1
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
RUN easy-add --file restify --from https://github.com/itzg/restify/releases/download/${RESTIFY_VER}/restify_${RESTIFY_VER}_linux_${ARCH}.tar.gz
|
--var version=1.2.0 --var app=restify --file {{.app}} \
|
||||||
|
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||||
|
|
||||||
ARG RCON_CLI_VER=1.4.7
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
RUN easy-add --file rcon-cli --from https://github.com/itzg/rcon-cli/releases/download/${RCON_CLI_VER}/rcon-cli_${RCON_CLI_VER}_linux_${ARCH}.tar.gz
|
--var version=1.4.7 --var app=rcon-cli --file {{.app}} \
|
||||||
|
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||||
|
|
||||||
ARG MC_RUN_VER=1.3.3
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
RUN easy-add --file mc-server-runner --from https://github.com/itzg/mc-server-runner/releases/download/${MC_RUN_VER}/mc-server-runner_${MC_RUN_VER}_linux_${ARCH}.tar.gz
|
--var version=0.1.7 --var app=mc-monitor --file {{.app}} \
|
||||||
|
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||||
|
|
||||||
COPY mcadmin.jq /usr/share
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
RUN chmod +x /usr/local/bin/*
|
--var version=1.3.3 --var app=mc-server-runner --file {{.app}} \
|
||||||
|
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||||
|
|
||||||
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
|
--var version=0.1.1 --var app=maven-metadata-release --file {{.app}} \
|
||||||
|
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||||
|
|
||||||
|
COPY mcstatus /usr/local/bin
|
||||||
|
|
||||||
VOLUME ["/data","/mods","/config"]
|
VOLUME ["/data","/mods","/config"]
|
||||||
COPY server.properties /tmp/server.properties
|
COPY server.properties /tmp/server.properties
|
||||||
|
COPY log4j2.xml /tmp/log4j2.xml
|
||||||
WORKDIR /data
|
WORKDIR /data
|
||||||
|
|
||||||
ENTRYPOINT [ "/start" ]
|
ENTRYPOINT [ "/start" ]
|
||||||
|
|||||||
65
README.md
65
README.md
@@ -2,7 +2,7 @@
|
|||||||
[](https://hub.docker.com/r/itzg/minecraft-server/)
|
[](https://hub.docker.com/r/itzg/minecraft-server/)
|
||||||
[](https://hub.docker.com/r/itzg/minecraft-server/)
|
[](https://hub.docker.com/r/itzg/minecraft-server/)
|
||||||
[](https://github.com/itzg/docker-minecraft-server/issues)
|
[](https://github.com/itzg/docker-minecraft-server/issues)
|
||||||
[](https://gitter.im/itzg/dockerfiles)
|
[](https://discord.gg/DXfKpjB)
|
||||||
[](https://www.buymeacoffee.com/itzg)
|
[](https://www.buymeacoffee.com/itzg)
|
||||||
|
|
||||||
This docker image provides a Minecraft Server that will automatically download the latest stable
|
This docker image provides a Minecraft Server that will automatically download the latest stable
|
||||||
@@ -106,9 +106,9 @@ and start the server again with `docker start CONTAINERID` to pick up the new co
|
|||||||
|
|
||||||
To use a different Minecraft version, pass the `VERSION` environment variable, which can have the value
|
To use a different Minecraft version, pass the `VERSION` environment variable, which can have the value
|
||||||
|
|
||||||
* LATEST
|
* LATEST (the default)
|
||||||
* SNAPSHOT
|
* SNAPSHOT
|
||||||
* (or a specific version, such as "1.7.9")
|
* or a specific version, such as "1.7.9"
|
||||||
|
|
||||||
For example, to use the latest snapshot:
|
For example, to use the latest snapshot:
|
||||||
|
|
||||||
@@ -118,6 +118,30 @@ or a specific version:
|
|||||||
|
|
||||||
docker run -d -e VERSION=1.7.9 ...
|
docker run -d -e VERSION=1.7.9 ...
|
||||||
|
|
||||||
|
When using "LATEST" or "SNAPSHOT" an upgrade can be performed by simply restarting the container.
|
||||||
|
During the next startup, if a newer version is available from the respective release channel, then
|
||||||
|
the new server jar file is downloaded and used. _NOTE: over time you might see older versions of
|
||||||
|
the server jar remain in the `/data` directory. It is safe to remove those._
|
||||||
|
|
||||||
|
## Running Minecraft server on different Java version
|
||||||
|
|
||||||
|
To use a different version of Java, please use a docker tag to run your Minecraft server.
|
||||||
|
|
||||||
|
| Tag name | Description | Linux |
|
||||||
|
|---------|-------------|-------|
|
||||||
|
| latest | **Default**. Uses Java version 8 update 212 | Alpine Linux |
|
||||||
|
| adopt13 | Uses Java version 13 latest update | Alpine Linux |
|
||||||
|
| adopt11 | Uses Java version 11 latest update | Alpine Linux |
|
||||||
|
| openj9 | Uses Eclipse OpenJ9 JVM | Alpine Linux |
|
||||||
|
| openj9-nightly | Uses Eclipse OpenJ9 JVM testing builds | Alpine Linux |
|
||||||
|
| multiarch | Uses Java version 8 latest update | Debian Linux |
|
||||||
|
|
||||||
|
For example, to use a Java version 13:
|
||||||
|
|
||||||
|
docker run --name mc itzg/minecraft-server:adopt13
|
||||||
|
|
||||||
|
Keep in mind that some versions of Minecraft server can't work on the newest versions of Java. Also, FORGE doesn't support openj9 JVM implementation.
|
||||||
|
|
||||||
## Healthcheck
|
## Healthcheck
|
||||||
|
|
||||||
This image contains [Dinnerbone's mcstatus](https://github.com/Dinnerbone/mcstatus) and uses
|
This image contains [Dinnerbone's mcstatus](https://github.com/Dinnerbone/mcstatus) and uses
|
||||||
@@ -146,6 +170,17 @@ description: "{u'text': u'A Minecraft Server Powered by Docker'}"
|
|||||||
players: 0/20 No players online
|
players: 0/20 No players online
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Deployment Templates and Examples
|
||||||
|
|
||||||
|
### Helm Charts
|
||||||
|
|
||||||
|
- [stable/minecraft](https://hub.helm.sh/charts/stable/minecraft) ([chart source](https://github.com/helm/charts/tree/master/stable/minecraft))
|
||||||
|
- [mcsh/server-deployment](https://github.com/mcserverhosting-net/charts)
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
The [examples directory](https://github.com/itzg/docker-minecraft-server/tree/master/examples) also provides examples of deploying the [itzg/minecraft-server](https://hub.docker.com/r/itzg/minecraft-server/) Docker image.
|
||||||
|
|
||||||
## Running a Forge Server
|
## Running a Forge Server
|
||||||
|
|
||||||
Enable Forge server mode by adding a `-e TYPE=FORGE` to your command-line.
|
Enable Forge server mode by adding a `-e TYPE=FORGE` to your command-line.
|
||||||
@@ -224,7 +259,7 @@ For those cases there is the option to replace defined variables inside your con
|
|||||||
with environment variables defined at container runtime.
|
with environment variables defined at container runtime.
|
||||||
|
|
||||||
If you set the enviroment variable `REPLACE_ENV_VARIABLES` to `TRUE` the startup script
|
If you set the enviroment variable `REPLACE_ENV_VARIABLES` to `TRUE` the startup script
|
||||||
will go thru all files inside your `/data` volume and replace variables that match your
|
will go thru all files inside your `/data` volume and replace variables that match your
|
||||||
defined environment variables. Variables that you want to replace need to be wrapped
|
defined environment variables. Variables that you want to replace need to be wrapped
|
||||||
inside `${YOUR_VARIABLE}` curly brackets and prefixed with a dollar sign. This is the regular
|
inside `${YOUR_VARIABLE}` curly brackets and prefixed with a dollar sign. This is the regular
|
||||||
syntax for enviromment variables inside strings or config files.
|
syntax for enviromment variables inside strings or config files.
|
||||||
@@ -384,7 +419,7 @@ If you are hosting your own copy of PaperSpigot you can override the download UR
|
|||||||
|
|
||||||
You can install Bukkit plugins in two ways...
|
You can install Bukkit plugins in two ways...
|
||||||
|
|
||||||
An example compose file is provided at
|
An example compose file is provided at
|
||||||
[examples/docker-compose-paper.yml](examples/docker-compose-paper.yml).
|
[examples/docker-compose-paper.yml](examples/docker-compose-paper.yml).
|
||||||
|
|
||||||
### Using the /data volume
|
### Using the /data volume
|
||||||
@@ -435,7 +470,7 @@ variable. An FTB/CurseForge server modpack is available together with its respec
|
|||||||
client modpack on https://www.feed-the-beast.com under "Additional Files." Similar you can
|
client modpack on https://www.feed-the-beast.com under "Additional Files." Similar you can
|
||||||
locate the modpacks for CurseForge at https://minecraft.curseforge.com/modpacks .
|
locate the modpacks for CurseForge at https://minecraft.curseforge.com/modpacks .
|
||||||
|
|
||||||
There are a couple of options for obtaining an FTB/CurseForge modpack.
|
There are a couple of options for obtaining an FTB/CurseForge modpack.
|
||||||
One options is that you can pre-download the **server** modpack and copy the modpack to the `/data`
|
One options is that you can pre-download the **server** modpack and copy the modpack to the `/data`
|
||||||
directory (see "Attaching data directory to host filesystem”).
|
directory (see "Attaching data directory to host filesystem”).
|
||||||
|
|
||||||
@@ -610,16 +645,16 @@ in either persistent volumes or a downloadable archive.
|
|||||||
## Running with a custom server JAR
|
## Running with a custom server JAR
|
||||||
|
|
||||||
If you would like to run a custom server JAR, set `-e TYPE=CUSTOM` and pass the custom server
|
If you would like to run a custom server JAR, set `-e TYPE=CUSTOM` and pass the custom server
|
||||||
JAR via `CUSTOM_SERVER`. It can either be a URL or a container path to an existing JAR file.
|
JAR via `CUSTOM_SERVER`. It can either be a URL or a container path to an existing JAR file.
|
||||||
|
|
||||||
If it is a URL, it will only be downloaded into the `/data` directory if it wasn't already. As
|
If it is a URL, it will only be downloaded into the `/data` directory if it wasn't already. As
|
||||||
such, if you need to upgrade or re-download the JAR, then you will need to stop the container,
|
such, if you need to upgrade or re-download the JAR, then you will need to stop the container,
|
||||||
remove the file from the container's `/data` directory, and start again.
|
remove the file from the container's `/data` directory, and start again.
|
||||||
|
|
||||||
## Force re-download of the server file
|
## Force re-download of the server file
|
||||||
|
|
||||||
For VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, CURSEFORGE, SPONGEVANILLA server types, set
|
For VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, CURSEFORGE, SPONGEVANILLA server types, set
|
||||||
`$FORCE_REDOWNLOAD` to some value (e.g. 'true) to force a re-download of the server file for
|
`$FORCE_REDOWNLOAD` to some value (e.g. 'true) to force a re-download of the server file for
|
||||||
the particular server type. by adding a `-e FORCE_REDOWNLOAD=true` to your command-line.
|
the particular server type. by adding a `-e FORCE_REDOWNLOAD=true` to your command-line.
|
||||||
|
|
||||||
For example, with PaperSpigot, it would look something like this:
|
For example, with PaperSpigot, it would look something like this:
|
||||||
@@ -826,7 +861,7 @@ Determines if monsters will be spawned.
|
|||||||
Determines if villagers will be spawned.
|
Determines if villagers will be spawned.
|
||||||
|
|
||||||
docker run -d -e SPAWN_NPCS=true
|
docker run -d -e SPAWN_NPCS=true
|
||||||
|
|
||||||
### Set spawn protection
|
### Set spawn protection
|
||||||
|
|
||||||
Sets the area that non-ops can not edit (0 to disable)
|
Sets the area that non-ops can not edit (0 to disable)
|
||||||
@@ -955,7 +990,7 @@ from `/worlds/basic`. Also notice in the example that you can use a
|
|||||||
read-only volume attachment to ensure the clone source remains pristine.
|
read-only volume attachment to ensure the clone source remains pristine.
|
||||||
|
|
||||||
```
|
```
|
||||||
docker run ... -v $HOME/worlds:/worlds:ro -e WORLD=/worlds/basic
|
docker run ... -v $HOME/worlds:/worlds:ro -e WORLD=/worlds/basic
|
||||||
```
|
```
|
||||||
|
|
||||||
### Downloadable mod/plugin pack for Forge, Bukkit, and Spigot Servers
|
### Downloadable mod/plugin pack for Forge, Bukkit, and Spigot Servers
|
||||||
@@ -973,7 +1008,7 @@ particular `TYPE` of server you are running.
|
|||||||
You may also download individual mods using the `MODS` environment variable and supplying the URL
|
You may also download individual mods using the `MODS` environment variable and supplying the URL
|
||||||
to the jar files. Multiple mods/plugins should be comma separated.
|
to the jar files. Multiple mods/plugins should be comma separated.
|
||||||
|
|
||||||
docker run -d -e MODS=https://www.example.com/mods/mod1.jar,https://www.example.com/mods/mod2.jar ...
|
docker run -d -e MODS=https://www.example.com/mods/mod1.jar,https://www.example.com/mods/mod2.jar ...
|
||||||
|
|
||||||
### Remove old mods/plugins
|
### Remove old mods/plugins
|
||||||
|
|
||||||
@@ -985,7 +1020,7 @@ To use this option pass the environment variable `REMOVE_OLD_MODS="TRUE"`, such
|
|||||||
docker run -d -e REMOVE_OLD_MODS="TRUE" -e MODPACK=http://www.example.com/mods/modpack.zip ...
|
docker run -d -e REMOVE_OLD_MODS="TRUE" -e MODPACK=http://www.example.com/mods/modpack.zip ...
|
||||||
|
|
||||||
**WARNING:** All content of the `mods` or `plugins` directory will be deleted
|
**WARNING:** All content of the `mods` or `plugins` directory will be deleted
|
||||||
before unpacking new content from the MODPACK or MODS.
|
before unpacking new content from the MODPACK or MODS.
|
||||||
|
|
||||||
### Online mode
|
### Online mode
|
||||||
|
|
||||||
@@ -1034,7 +1069,7 @@ environment variable. Options like `-X` that need to proceed general JVM options
|
|||||||
via a `JVM_XX_OPTS` environment variable.
|
via a `JVM_XX_OPTS` environment variable.
|
||||||
|
|
||||||
For some cases, if e.g. after removing mods, it could be necessary to startup minecraft with an additional `-D` parameter like `-Dfml.queryResult=confirm`. To address this you can use the environment variable `JVM_DD_OPTS`, which builds the params from a given list of values separated by space, but without the `-D` prefix. To make things running under systems (e.g. Plesk), which doesn't allow `=` inside values, a `:` (colon) could be used instead. The upper example would look like this:
|
For some cases, if e.g. after removing mods, it could be necessary to startup minecraft with an additional `-D` parameter like `-Dfml.queryResult=confirm`. To address this you can use the environment variable `JVM_DD_OPTS`, which builds the params from a given list of values separated by space, but without the `-D` prefix. To make things running under systems (e.g. Plesk), which doesn't allow `=` inside values, a `:` (colon) could be used instead. The upper example would look like this:
|
||||||
`JVM_DD_OPTS=fml.queryResult:confirm`, and will be converted to `-Dfml.queryResult=confirm`.
|
`JVM_DD_OPTS=fml.queryResult:confirm`, and will be converted to `-Dfml.queryResult=confirm`.
|
||||||
|
|
||||||
### HTTP Proxy
|
### HTTP Proxy
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#set -x
|
#set -x
|
||||||
# Use this variable to indicate a list of branches that docker hub is watching
|
# Use this variable to indicate a list of branches that docker hub is watching
|
||||||
branches_list=('openj9' 'openj9-nightly' 'adopt11')
|
branches_list=('openj9' 'openj9-nightly' 'adopt11' 'multiarch' 'armv7')
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
function TrapExit {
|
function TrapExit {
|
||||||
echo "Checking out back in master"
|
log "Checking out back in master"
|
||||||
git checkout master
|
git checkout master
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,46 +19,49 @@ do
|
|||||||
batchMode=true
|
batchMode=true
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unsupported arg $arg"
|
log "Unsupported arg $arg"
|
||||||
exit 2
|
exit 2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
${batchMode} && echo "Using batch mode"
|
${batchMode} && log "Using batch mode"
|
||||||
|
|
||||||
trap TrapExit EXIT SIGTERM
|
trap TrapExit EXIT SIGTERM
|
||||||
|
|
||||||
test -d ./.git || { echo ".git folder was not found. Please start this script from root directory of the project!";
|
test -d ./.git || { log ".git folder was not found. Please start this script from root directory of the project!";
|
||||||
exit 1; }
|
exit 1; }
|
||||||
|
|
||||||
# Making sure we are in master
|
# Making sure we are in master
|
||||||
git checkout master
|
git checkout master
|
||||||
git pull --all || { echo "Can't pull the repo!"; \
|
git pull --all || { log "Can't pull the repo!"; \
|
||||||
exit 1; }
|
exit 1; }
|
||||||
|
|
||||||
git_branches=$(git branch -a)
|
git_branches=$(git branch -a)
|
||||||
|
|
||||||
for branch in "${branches_list[@]}"; do
|
for branch in "${branches_list[@]}"; do
|
||||||
if [[ "$git_branches" != *"$branch"* ]]; then
|
if [[ "$git_branches" != *"$branch"* ]]; then
|
||||||
echo "Can't update $branch because I can't find it in the list of branches."
|
log "Can't update $branch because I can't find it in the list of branches."
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
echo "Branch $branch found. Working with it."
|
log "Branch $branch found. Working with it."
|
||||||
git checkout "$branch" || { echo "Can't checkout into the branch. Don't know the cause."; \
|
git checkout "$branch" || { log "Can't checkout into the branch. Don't know the cause."; \
|
||||||
exit 1; }
|
exit 1; }
|
||||||
proceed='False'
|
proceed='False'
|
||||||
while [[ "$proceed" == "False" ]]; do
|
while [[ "$proceed" == "False" ]]; do
|
||||||
|
# Ensure local branch is aligned with remote since docker-versions-create may have been run elsewhere
|
||||||
|
git pull
|
||||||
|
|
||||||
if git merge -m 'Auto-merging via docker-versions-create' master; then
|
if git merge -m 'Auto-merging via docker-versions-create' master; then
|
||||||
proceed="True"
|
proceed="True"
|
||||||
echo "Branch $branch updated to current master successfully"
|
log "Branch $branch updated to current master successfully"
|
||||||
# pushing changes to remote for this branch
|
# pushing changes to remote for this branch
|
||||||
git commit -m "Auto merge branch with master" -a
|
git commit -m "Auto merge branch with master" -a
|
||||||
# push may fail if remote doesn't have this branch yet. In this case - sending branch
|
# push may fail if remote doesn't have this branch yet. In this case - sending branch
|
||||||
git push || git push -u origin "$branch" || { echo "Can't push changes to the origin."; exit 1; }
|
git push || git push -u origin "$branch" || { log "Can't push changes to the origin."; exit 1; }
|
||||||
elif ${batchMode}; then
|
elif ${batchMode}; then
|
||||||
status=$?
|
status=$?
|
||||||
echo "Git merge failed in batch mode"
|
log "Git merge failed in batch mode"
|
||||||
exit ${status}
|
exit ${status}
|
||||||
# and trap exit gets us back to master
|
# and trap exit gets us back to master
|
||||||
else
|
else
|
||||||
|
|||||||
3
examples/README.md
Normal file
3
examples/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Deployment Examples
|
||||||
|
|
||||||
|
This directory contains various deployment examples of the [itzg/minecraft-server](https://hub.docker.com/r/itzg/minecraft-server/) Docker image.
|
||||||
50
examples/k8s/using-statefulset.yml
Normal file
50
examples/k8s/using-statefulset.yml
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: example
|
||||||
|
name: example
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
serviceName: example
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: example
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: example
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: mc
|
||||||
|
image: itzg/minecraft-server
|
||||||
|
env:
|
||||||
|
- name: EULA
|
||||||
|
value: "TRUE"
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /data
|
||||||
|
name: data
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: data
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
service: example
|
||||||
|
name: example
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 25565
|
||||||
|
targetPort: 25565
|
||||||
|
selector:
|
||||||
|
app: example
|
||||||
|
type: LoadBalancer
|
||||||
34
log4j2.xml
Normal file
34
log4j2.xml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Configuration status="WARN" packages="com.mojang.util">
|
||||||
|
<Appenders>
|
||||||
|
<Console name="SysOut" target="SYSTEM_OUT">
|
||||||
|
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />
|
||||||
|
</Console>
|
||||||
|
<Queue name="ServerGuiConsole">
|
||||||
|
<PatternLayout pattern="[%d{HH:mm:ss} %level]: %msg%n" />
|
||||||
|
</Queue>
|
||||||
|
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
|
||||||
|
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />
|
||||||
|
<Policies>
|
||||||
|
<TimeBasedTriggeringPolicy />
|
||||||
|
<OnStartupTriggeringPolicy />
|
||||||
|
</Policies>
|
||||||
|
<DefaultRolloverStrategy>
|
||||||
|
<Delete basePath="logs">
|
||||||
|
<IfFileName glob="*.log.gz" />
|
||||||
|
<IfLastModified age="7d" />
|
||||||
|
</Delete>
|
||||||
|
</DefaultRolloverStrategy>
|
||||||
|
</RollingRandomAccessFile>
|
||||||
|
</Appenders>
|
||||||
|
<Loggers>
|
||||||
|
<Root level="info">
|
||||||
|
<filters>
|
||||||
|
<MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL" />
|
||||||
|
</filters>
|
||||||
|
<AppenderRef ref="SysOut"/>
|
||||||
|
<AppenderRef ref="File"/>
|
||||||
|
<AppenderRef ref="ServerGuiConsole"/>
|
||||||
|
</Root>
|
||||||
|
</Loggers>
|
||||||
|
</Configuration>
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
.[] |
|
|
||||||
select(.elements | length > 1) |
|
|
||||||
select(.elements[].elements[] | select(.class == "version" and .text == $version)) |
|
|
||||||
.elements[].elements[] |
|
|
||||||
select(.class|contains("server-jar")) |
|
|
||||||
.elements[] | select(.name="a") |
|
|
||||||
.href
|
|
||||||
16
mcstatus
Executable file
16
mcstatus
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
##### mcstatus shim for mc-monitor
|
||||||
|
# handles translating calls to
|
||||||
|
# mcstatus (host:port) (command)
|
||||||
|
# where the actual command is ignore, but is typically ping or status
|
||||||
|
|
||||||
|
addr="$1"
|
||||||
|
|
||||||
|
IFS=':'
|
||||||
|
read -a parts <<< "${addr}"
|
||||||
|
if [[ ${#parts[*]} -gt 1 ]]; then
|
||||||
|
exec mc-monitor status --host ${parts[0]} --port ${parts[1]}
|
||||||
|
else
|
||||||
|
exec mc-monitor status --host ${parts[0]}
|
||||||
|
fi
|
||||||
36
start
36
start
@@ -1,22 +1,46 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
umask 0002
|
umask 0002
|
||||||
chmod g+w /data
|
chmod g+w /data
|
||||||
|
|
||||||
if [ $(id -u) = 0 ]; then
|
if [ $(id -u) = 0 ]; then
|
||||||
if [[ -v UID && $UID != $(id -u) ]]; then
|
runAsUser=minecraft
|
||||||
usermod -u $UID minecraft
|
runAsGroup=minecraft
|
||||||
|
|
||||||
|
if [[ -v UID ]]; then
|
||||||
|
if [[ $UID != 0 ]]; then
|
||||||
|
if [[ $UID != $(id -u minecraft) ]]; then
|
||||||
|
log "Changing uid of minecraft to $UID"
|
||||||
|
usermod -u $UID minecraft
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
runAsUser=root
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -v GID ]]; then
|
if [[ -v GID ]]; then
|
||||||
groupmod -o -g $GID minecraft
|
if [[ $GID != 0 ]]; then
|
||||||
|
if [[ $GID != $(id -g minecraft) ]]; then
|
||||||
|
log "Changing gid of minecraft to $GID"
|
||||||
|
groupmod -o -g $GID minecraft
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
runAsGroup=root
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $(stat -c "%u" /data) != $UID ]]; then
|
if [[ $(stat -c "%u" /data) != $UID ]]; then
|
||||||
echo "Changing ownership of /data to $UID ..."
|
log "Changing ownership of /data to $UID ..."
|
||||||
chown -R minecraft:minecraft /data
|
chown -R ${runAsUser}:${runAsGroup} /data
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec su-exec minecraft:minecraft /start-configuration $@
|
if [[ ${SKIP_NSSWITCH_CONF^^} != TRUE ]]; then
|
||||||
|
echo 'hosts: files dns' > /etc/nsswitch.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec su-exec ${runAsUser}:${runAsGroup} /start-configuration $@
|
||||||
else
|
else
|
||||||
exec /start-configuration $@
|
exec /start-configuration $@
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
shopt -s nullglob
|
shopt -s nullglob
|
||||||
|
|
||||||
#umask 002
|
#umask 002
|
||||||
@@ -8,28 +10,28 @@ export HOME=/data
|
|||||||
if [ ! -e /data/eula.txt ]; then
|
if [ ! -e /data/eula.txt ]; then
|
||||||
EULA="${EULA,,}"
|
EULA="${EULA,,}"
|
||||||
if [ "$EULA" != "true" ]; then
|
if [ "$EULA" != "true" ]; then
|
||||||
echo ""
|
log ""
|
||||||
echo "Please accept the Minecraft EULA at"
|
log "Please accept the Minecraft EULA at"
|
||||||
echo " https://account.mojang.com/documents/minecraft_eula"
|
log " https://account.mojang.com/documents/minecraft_eula"
|
||||||
echo "by adding the following immediately after 'docker run':"
|
log "by adding the following immediately after 'docker run':"
|
||||||
echo " -e EULA=TRUE"
|
log " -e EULA=TRUE"
|
||||||
echo ""
|
log ""
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "# Generated via Docker on $(date)" > eula.txt
|
echo "# Generated via Docker on $(date)" > eula.txt
|
||||||
echo "eula=$EULA" >> eula.txt
|
echo "eula=$EULA" >> eula.txt
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ]; then
|
||||||
echo "ERROR: unable to write eula to /data. Please make sure attached directory is writable by uid=${UID}"
|
log "ERROR: unable to write eula to /data. Please make sure attached directory is writable by uid=${UID}"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "Running as uid=$(id -u) gid=$(id -g) with /data as '$(ls -lnd /data)'"
|
log "Running as uid=$(id -u) gid=$(id -g) with /data as '$(ls -lnd /data)'"
|
||||||
|
|
||||||
if ! touch /data/.verify_access; then
|
if ! touch /data/.verify_access; then
|
||||||
echo "ERROR: /data doesn't seem to be writable. Please make sure attached directory is writable by uid=$(id -u)"
|
log "ERROR: /data doesn't seem to be writable. Please make sure attached directory is writable by uid=$(id -u)"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -38,14 +40,14 @@ rm /data/.verify_access || true
|
|||||||
if [[ $PROXY ]]; then
|
if [[ $PROXY ]]; then
|
||||||
export http_proxy="$PROXY"
|
export http_proxy="$PROXY"
|
||||||
export https_proxy="$PROXY"
|
export https_proxy="$PROXY"
|
||||||
echo "INFO: Giving proxy time to startup..."
|
log "INFO: Giving proxy time to startup..."
|
||||||
sleep 5
|
sleep 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export SERVER_PROPERTIES=/data/server.properties
|
export SERVER_PROPERTIES=/data/server.properties
|
||||||
export VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.json
|
export VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.json
|
||||||
|
|
||||||
echo "Checking version information."
|
log "Checking version information."
|
||||||
case "X$VERSION" in
|
case "X$VERSION" in
|
||||||
X|XLATEST|Xlatest)
|
X|XLATEST|Xlatest)
|
||||||
export VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.release'`
|
export VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.release'`
|
||||||
@@ -65,7 +67,7 @@ cd /data
|
|||||||
|
|
||||||
export ORIGINAL_TYPE=${TYPE^^}
|
export ORIGINAL_TYPE=${TYPE^^}
|
||||||
|
|
||||||
echo "Checking type information."
|
log "Checking type information."
|
||||||
case "${TYPE^^}" in
|
case "${TYPE^^}" in
|
||||||
*BUKKIT|SPIGOT)
|
*BUKKIT|SPIGOT)
|
||||||
exec /start-deployBukkitSpigot $@
|
exec /start-deployBukkitSpigot $@
|
||||||
@@ -100,8 +102,8 @@ case "${TYPE^^}" in
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
echo "Invalid type: '$TYPE'"
|
log "Invalid type: '$TYPE'"
|
||||||
echo "Must be: VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, FTB, CURSEFORGE, SPONGEVANILLA"
|
log "Must be: VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, FTB, CURSEFORGE, SPONGEVANILLA"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,27 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
function buildSpigotFromSource {
|
function buildSpigotFromSource {
|
||||||
echo "Building Spigot $VANILLA_VERSION from source, might take a while, get some coffee"
|
log "Building Spigot $VANILLA_VERSION from source, might take a while, get some coffee"
|
||||||
rm -rf /data/temp
|
rm -rf /data/temp
|
||||||
mkdir /data/temp
|
mkdir /data/temp
|
||||||
cd /data/temp
|
cd /data/temp
|
||||||
|
|
||||||
jvmOpts="-Xms${INIT_MEMORY:-$MEMORY} -Xmx${MAX_MEMORY:-$MEMORY}"
|
jvmOpts="-Xms${INIT_MEMORY:-$MEMORY} -Xmx${MAX_MEMORY:-$MEMORY}"
|
||||||
|
|
||||||
|
logn ''
|
||||||
curl -sSL -o /data/temp/BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar && \
|
curl -sSL -o /data/temp/BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar && \
|
||||||
java $jvmOpts -jar /data/temp/BuildTools.jar --rev $VANILLA_VERSION 2>&1 |tee /data/spigot_build.log| while read l; do echo -n .; done; echo "done"
|
java $jvmOpts -jar /data/temp/BuildTools.jar --rev $VANILLA_VERSION 2>&1 |tee /data/spigot_build.log| while read l; do echo -n .; done; log "done"
|
||||||
if ! mv spigot-*.jar /data/spigot_server.jar; then
|
if ! mv spigot-*.jar /data/spigot_server.jar; then
|
||||||
echo "ERR failed to build Spigot"
|
log "ERR failed to build Spigot"
|
||||||
cat /data/spigot_build.log
|
cat /data/spigot_build.log
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
mv craftbukkit-*.jar /data/craftbukkit_server.jar
|
mv craftbukkit-*.jar /data/${SERVER}
|
||||||
echo "Cleaning up"
|
log "Cleaning up"
|
||||||
rm -rf /data/temp
|
rm -rf /data/temp
|
||||||
cd /data
|
cd /data
|
||||||
}
|
}
|
||||||
@@ -38,18 +41,11 @@ function downloadSpigot {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
local downloadVersion
|
|
||||||
if [[ ${VERSION} == LATEST ]]; then
|
|
||||||
downloadVersion=${VANILLA_VERSION}
|
|
||||||
else
|
|
||||||
downloadVersion=${VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z $downloadUrl ]]; then
|
if [[ -z $downloadUrl ]]; then
|
||||||
downloadUrl="https://cdn.getbukkit.org/${getbukkitFlavor}/${getbukkitFlavor}-${downloadVersion}.jar"
|
downloadUrl="https://cdn.getbukkit.org/${getbukkitFlavor}/${getbukkitFlavor}-${VANILLA_VERSION}.jar"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Downloading $match from $downloadUrl ..."
|
log "Downloading $match from $downloadUrl ..."
|
||||||
curl -fsSL -o $SERVER "$downloadUrl"
|
curl -fsSL -o $SERVER "$downloadUrl"
|
||||||
if [[ $? != 0 || $(grep -c "DOCTYPE html" $SERVER) != 0 ]]; then
|
if [[ $? != 0 || $(grep -c "DOCTYPE html" $SERVER) != 0 ]]; then
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
@@ -66,10 +62,10 @@ EOF
|
|||||||
|
|
||||||
case "$TYPE" in
|
case "$TYPE" in
|
||||||
*BUKKIT|*bukkit)
|
*BUKKIT|*bukkit)
|
||||||
export SERVER=craftbukkit_server.jar
|
export SERVER=craftbukkit_server-${VANILLA_VERSION}.jar
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
export SERVER=spigot_server.jar
|
export SERVER=spigot_server-${VANILLA_VERSION}.jar
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|||||||
@@ -7,21 +7,21 @@ if isURL ${CUSTOM_SERVER}; then
|
|||||||
export SERVER=/data/${filename}
|
export SERVER=/data/${filename}
|
||||||
|
|
||||||
if [[ -f ${SERVER} ]] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
if [[ -f ${SERVER} ]] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
||||||
echo "Using previously downloaded jar at ${SERVER}"
|
log "Using previously downloaded jar at ${SERVER}"
|
||||||
else
|
else
|
||||||
echo "Downloading custom server jar from ${CUSTOM_SERVER} ..."
|
log "Downloading custom server jar from ${CUSTOM_SERVER} ..."
|
||||||
if ! curl -sSL -o ${SERVER} ${CUSTOM_SERVER}; then
|
if ! curl -sSL -o ${SERVER} ${CUSTOM_SERVER}; then
|
||||||
echo "Failed to download from ${CUSTOM_SERVER}"
|
log "Failed to download from ${CUSTOM_SERVER}"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
elif [[ -f ${CUSTOM_SERVER} ]]; then
|
elif [[ -f ${CUSTOM_SERVER} ]]; then
|
||||||
echo "Using custom server jar at ${CUSTOM_SERVER} ..."
|
log "Using custom server jar at ${CUSTOM_SERVER} ..."
|
||||||
export SERVER=${CUSTOM_SERVER}
|
export SERVER=${CUSTOM_SERVER}
|
||||||
|
|
||||||
else
|
else
|
||||||
echo "CUSTOM_SERVER is not properly set to a URL or existing jar file"
|
log "CUSTOM_SERVER is not properly set to a URL or existing jar file"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,11 @@ export TYPE=FEED-THE-BEAST
|
|||||||
|
|
||||||
FTB_SERVER_MOD=${FTB_SERVER_MOD:-$CF_SERVER_MOD}
|
FTB_SERVER_MOD=${FTB_SERVER_MOD:-$CF_SERVER_MOD}
|
||||||
|
|
||||||
echo "Looking for Feed-The-Beast / CurseForge server modpack."
|
log "Looking for Feed-The-Beast / CurseForge server modpack."
|
||||||
if [[ -z $FTB_SERVER_MOD ]]; then
|
if [[ -z $FTB_SERVER_MOD ]]; then
|
||||||
echo "Environment variable FTB_SERVER_MOD not set."
|
log "Environment variable FTB_SERVER_MOD not set."
|
||||||
echo "Set FTB_SERVER_MOD to the file name of the FTB server modpack."
|
log "Set FTB_SERVER_MOD to the file name of the FTB server modpack."
|
||||||
echo "(And place the modpack in the /data directory.)"
|
log "(And place the modpack in the /data directory.)"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ entryScriptExpr="-name ServerStart.sh -o -name ServerStartLinux.sh -o -name Laun
|
|||||||
if [[ -d ${FTB_BASE_DIR} ]]; then
|
if [[ -d ${FTB_BASE_DIR} ]]; then
|
||||||
startScriptCount=$(find ${FTB_BASE_DIR} $entryScriptExpr |wc -l)
|
startScriptCount=$(find ${FTB_BASE_DIR} $entryScriptExpr |wc -l)
|
||||||
if [[ $startScriptCount > 1 ]]; then
|
if [[ $startScriptCount > 1 ]]; then
|
||||||
echo "Conflicting FTB/CurseForge packages have been installed. Please cleanup ${FTB_BASE_DIR}"
|
log "Conflicting FTB/CurseForge packages have been installed. Please cleanup ${FTB_BASE_DIR}"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -45,7 +45,7 @@ if [[ $startScriptCount = 0 ]]; then
|
|||||||
file=$(basename $(dirname $srv_modpack))
|
file=$(basename $(dirname $srv_modpack))
|
||||||
downloaded=/data/${file}.zip
|
downloaded=/data/${file}.zip
|
||||||
if [ ! -e $downloaded ]; then
|
if [ ! -e $downloaded ]; then
|
||||||
echo "Downloading FTB modpack...
|
log "Downloading FTB modpack...
|
||||||
$srv_modpack -> $downloaded"
|
$srv_modpack -> $downloaded"
|
||||||
curl -sSL -o $downloaded $srv_modpack
|
curl -sSL -o $downloaded $srv_modpack
|
||||||
fi
|
fi
|
||||||
@@ -60,16 +60,16 @@ if [[ $startScriptCount = 0 ]]; then
|
|||||||
srv_modpack=/data/${srv_modpack}
|
srv_modpack=/data/${srv_modpack}
|
||||||
fi
|
fi
|
||||||
if [[ ! -f ${srv_modpack} ]]; then
|
if [[ ! -f ${srv_modpack} ]]; then
|
||||||
echo "FTB server modpack ${srv_modpack} not found."
|
log "FTB server modpack ${srv_modpack} not found."
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
if [[ ! ${srv_modpack: -4} == ".zip" ]]; then
|
if [[ ! ${srv_modpack: -4} == ".zip" ]]; then
|
||||||
echo "FTB server modpack ${srv_modpack} is not a zip archive."
|
log "FTB server modpack ${srv_modpack} is not a zip archive."
|
||||||
echo "Please set FTB_SERVER_MOD to a file with a .zip extension."
|
log "Please set FTB_SERVER_MOD to a file with a .zip extension."
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Unpacking FTB server modpack ${srv_modpack} ..."
|
log "Unpacking FTB server modpack ${srv_modpack} ..."
|
||||||
mkdir -p ${FTB_BASE_DIR}
|
mkdir -p ${FTB_BASE_DIR}
|
||||||
unzip -o ${srv_modpack} -d ${FTB_BASE_DIR} | awk '{printf "."} END {print ""}'
|
unzip -o ${srv_modpack} -d ${FTB_BASE_DIR} | awk '{printf "."} END {print ""}'
|
||||||
fi
|
fi
|
||||||
@@ -79,7 +79,7 @@ if [[ $(find ${FTB_BASE_DIR} $entryScriptExpr | wc -l) = 0 ]]; then
|
|||||||
forgeJar=$(find ${FTB_BASE_DIR} -name 'forge*.jar' -a -not -name 'forge*installer')
|
forgeJar=$(find ${FTB_BASE_DIR} -name 'forge*.jar' -a -not -name 'forge*installer')
|
||||||
if [[ "$forgeJar" ]]; then
|
if [[ "$forgeJar" ]]; then
|
||||||
export FTB_BASE_DIR=$(dirname "${forgeJar}")
|
export FTB_BASE_DIR=$(dirname "${forgeJar}")
|
||||||
echo "No entry script found, so building one for ${forgeJar}"
|
log "No entry script found, so building one for ${forgeJar}"
|
||||||
cat > "${FTB_BASE_DIR}/ServerStart.sh" <<EOF
|
cat > "${FTB_BASE_DIR}/ServerStart.sh" <<EOF
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. ./settings-local.sh
|
. ./settings-local.sh
|
||||||
@@ -87,18 +87,18 @@ java \${JAVA_PARAMETERS} -Xmx\${MAX_RAM} -jar $(basename "${forgeJar}") nogui
|
|||||||
EOF
|
EOF
|
||||||
chmod +x "${FTB_BASE_DIR}/ServerStart.sh"
|
chmod +x "${FTB_BASE_DIR}/ServerStart.sh"
|
||||||
else
|
else
|
||||||
echo "Please make sure you are using the server version of the FTB modpack!"
|
log "Please make sure you are using the server version of the FTB modpack!"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
scriptCount=$(find "${FTB_BASE_DIR}" $entryScriptExpr | wc -l)
|
scriptCount=$(find "${FTB_BASE_DIR}" $entryScriptExpr | wc -l)
|
||||||
if [[ $scriptCount = 0 ]]; then
|
if [[ $scriptCount = 0 ]]; then
|
||||||
echo "Please make sure you are using the server version of the FTB modpack!"
|
log "Please make sure you are using the server version of the FTB modpack!"
|
||||||
exit 2
|
exit 2
|
||||||
elif [[ $scriptCount > 1 ]]; then
|
elif [[ $scriptCount > 1 ]]; then
|
||||||
echo "Ambigous startup scripts in FTB modpack!"
|
log "Ambigous startup scripts in FTB modpack!"
|
||||||
echo "found:"
|
log "found:"
|
||||||
find ${FTB_BASE_DIR} $entryScriptExpr
|
find ${FTB_BASE_DIR} $entryScriptExpr
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
@@ -112,7 +112,7 @@ sed -i 's/.*read.*Restart now/#\0/' "${FTB_SERVER_START}"
|
|||||||
legacyJavaFixerPath="${FTB_DIR}/mods/legacyjavafixer.jar"
|
legacyJavaFixerPath="${FTB_DIR}/mods/legacyjavafixer.jar"
|
||||||
|
|
||||||
if isTrue ${FTB_LEGACYJAVAFIXER} && [ ! -e "${legacyJavaFixerPath}" ]; then
|
if isTrue ${FTB_LEGACYJAVAFIXER} && [ ! -e "${legacyJavaFixerPath}" ]; then
|
||||||
echo "Installing legacy java fixer to ${legacyJavaFixerPath}"
|
log "Installing legacy java fixer to ${legacyJavaFixerPath}"
|
||||||
curl -sSL -o "${legacyJavaFixerPath}" ${legacyJavaFixerUrl}
|
curl -sSL -o "${legacyJavaFixerPath}" ${legacyJavaFixerUrl}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -9,11 +9,10 @@ FABRIC_INSTALLER=${FABRIC_INSTALLER:-}
|
|||||||
FABRIC_INSTALLER_URL=${FABRIC_INSTALLER_URL:-}
|
FABRIC_INSTALLER_URL=${FABRIC_INSTALLER_URL:-}
|
||||||
FABRICVERSION=${FABRICVERSION:-LATEST}
|
FABRICVERSION=${FABRICVERSION:-LATEST}
|
||||||
if [[ -z $FABRIC_INSTALLER && -z $FABRIC_INSTALLER_URL ]]; then
|
if [[ -z $FABRIC_INSTALLER && -z $FABRIC_INSTALLER_URL ]]; then
|
||||||
echo "Checking Fabric version information."
|
log "Checking Fabric version information."
|
||||||
case $FABRICVERSION in
|
case $FABRICVERSION in
|
||||||
LATEST)
|
LATEST)
|
||||||
curl -fsSL https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml | xq -c . > /tmp/fabric.json
|
FABRIC_VERSION=$(maven-metadata-release https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml)
|
||||||
FABRIC_VERSION=$(< /tmp/fabric.json jq -r ".metadata.versioning.release")
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
@@ -26,7 +25,7 @@ if [[ -z $FABRIC_INSTALLER && -z $FABRIC_INSTALLER_URL ]]; then
|
|||||||
elif [[ -z $FABRIC_INSTALLER ]]; then
|
elif [[ -z $FABRIC_INSTALLER ]]; then
|
||||||
FABRIC_INSTALLER="/tmp/fabric-installer.jar"
|
FABRIC_INSTALLER="/tmp/fabric-installer.jar"
|
||||||
elif [[ ! -e $FABRIC_INSTALLER ]]; then
|
elif [[ ! -e $FABRIC_INSTALLER ]]; then
|
||||||
echo "ERROR: the given Fabric installer doesn't exist : $FABRIC_INSTALLER"
|
log "ERROR: the given Fabric installer doesn't exist : $FABRIC_INSTALLER"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -36,14 +35,14 @@ debug Checking for installMarker ${installMarker}
|
|||||||
if [[ ! -e $installMarker ]]; then
|
if [[ ! -e $installMarker ]]; then
|
||||||
if [[ ! -e $FABRIC_INSTALLER ]]; then
|
if [[ ! -e $FABRIC_INSTALLER ]]; then
|
||||||
if [[ -z $FABRIC_INSTALLER_URL ]]; then
|
if [[ -z $FABRIC_INSTALLER_URL ]]; then
|
||||||
echo "Downloading $FABRIC_VERSION"
|
log "Downloading $FABRIC_VERSION"
|
||||||
downloadUrl="https://maven.fabricmc.net/net/fabricmc/fabric-installer/$FABRIC_VERSION/fabric-installer-$FABRIC_VERSION.jar"
|
downloadUrl="https://maven.fabricmc.net/net/fabricmc/fabric-installer/$FABRIC_VERSION/fabric-installer-$FABRIC_VERSION.jar"
|
||||||
echo "...trying $downloadUrl"
|
log "...trying $downloadUrl"
|
||||||
curl -o $FABRIC_INSTALLER -fsSL $downloadUrl
|
curl -o $FABRIC_INSTALLER -fsSL $downloadUrl
|
||||||
else
|
else
|
||||||
echo "Downloading $FABRIC_INSTALLER_URL ..."
|
log "Downloading $FABRIC_INSTALLER_URL ..."
|
||||||
if ! curl -o $FABRIC_INSTALLER -fsSL $FABRIC_INSTALLER_URL; then
|
if ! curl -o $FABRIC_INSTALLER -fsSL $FABRIC_INSTALLER_URL; then
|
||||||
echo "Failed to download from given location $FABRIC_INSTALLER_URL"
|
log "Failed to download from given location $FABRIC_INSTALLER_URL"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -52,7 +51,7 @@ if [[ ! -e $installMarker ]]; then
|
|||||||
if isDebugging; then
|
if isDebugging; then
|
||||||
debug "Installing Fabric $FABRIC_VERSION using $FABRIC_INSTALLER with mcversion ${VANILLA_VERSION}"
|
debug "Installing Fabric $FABRIC_VERSION using $FABRIC_INSTALLER with mcversion ${VANILLA_VERSION}"
|
||||||
else
|
else
|
||||||
echo "Installing Fabric $FABRIC_VERSION using $FABRIC_INSTALLER"
|
log "Installing Fabric $FABRIC_VERSION using $FABRIC_INSTALLER"
|
||||||
fi
|
fi
|
||||||
tries=3
|
tries=3
|
||||||
set +e
|
set +e
|
||||||
@@ -64,11 +63,11 @@ if [[ ! -e $installMarker ]]; then
|
|||||||
done
|
done
|
||||||
set -e
|
set -e
|
||||||
if (($tries < 0)); then
|
if (($tries < 0)); then
|
||||||
echo "Fabric failed to install after several tries." >&2
|
log "Fabric failed to install after several tries." >&2
|
||||||
exit 10
|
exit 10
|
||||||
fi
|
fi
|
||||||
export SERVER=fabric-server-launch.jar
|
export SERVER=fabric-server-launch.jar
|
||||||
echo "Using server $SERVER"
|
log "Using server $SERVER"
|
||||||
echo $SERVER > $installMarker
|
echo $SERVER > $installMarker
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
export TYPE=FORGE
|
export TYPE=FORGE
|
||||||
|
|
||||||
if [[ -z $FORGE_INSTALLER && -z $FORGE_INSTALLER_URL ]]; then
|
if [[ -z $FORGE_INSTALLER && -z $FORGE_INSTALLER_URL ]]; then
|
||||||
@@ -14,7 +16,7 @@ if [[ -z $FORGE_INSTALLER && -z $FORGE_INSTALLER_URL ]]; then
|
|||||||
|
|
||||||
#################################################################################
|
#################################################################################
|
||||||
|
|
||||||
echo "Checking Forge version information."
|
log "Checking Forge version information."
|
||||||
case $FORGEVERSION in
|
case $FORGEVERSION in
|
||||||
RECOMMENDED)
|
RECOMMENDED)
|
||||||
curl -fsSL -o /tmp/forge.json http://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json
|
curl -fsSL -o /tmp/forge.json http://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json
|
||||||
@@ -22,8 +24,8 @@ if [[ -z $FORGE_INSTALLER && -z $FORGE_INSTALLER_URL ]]; then
|
|||||||
if [ $FORGE_VERSION = null ]; then
|
if [ $FORGE_VERSION = null ]; then
|
||||||
FORGE_VERSION=$(cat /tmp/forge.json | jq -r ".promos[\"$VANILLA_VERSION-latest\"]")
|
FORGE_VERSION=$(cat /tmp/forge.json | jq -r ".promos[\"$VANILLA_VERSION-latest\"]")
|
||||||
if [ $FORGE_VERSION = null ]; then
|
if [ $FORGE_VERSION = null ]; then
|
||||||
echo "ERROR: Version $VANILLA_VERSION is not supported by Forge"
|
log "ERROR: Version $VANILLA_VERSION is not supported by Forge"
|
||||||
echo " Refer to http://files.minecraftforge.net/ for supported versions"
|
log " Refer to http://files.minecraftforge.net/ for supported versions"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -41,7 +43,7 @@ if [[ -z $FORGE_INSTALLER && -z $FORGE_INSTALLER_URL ]]; then
|
|||||||
elif [[ -z $FORGE_INSTALLER ]]; then
|
elif [[ -z $FORGE_INSTALLER ]]; then
|
||||||
FORGE_INSTALLER="/tmp/forge-installer.jar"
|
FORGE_INSTALLER="/tmp/forge-installer.jar"
|
||||||
elif [[ ! -e $FORGE_INSTALLER ]]; then
|
elif [[ ! -e $FORGE_INSTALLER ]]; then
|
||||||
echo "ERROR: the given Forge installer doesn't exist : $FORGE_INSTALLER"
|
log "ERROR: the given Forge installer doesn't exist : $FORGE_INSTALLER"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -51,7 +53,7 @@ if [ ! -e $installMarker ]; then
|
|||||||
if [ ! -e $FORGE_INSTALLER ]; then
|
if [ ! -e $FORGE_INSTALLER ]; then
|
||||||
|
|
||||||
if [[ -z $FORGE_INSTALLER_URL ]]; then
|
if [[ -z $FORGE_INSTALLER_URL ]]; then
|
||||||
echo "Downloading $normForgeVersion"
|
log "Downloading $normForgeVersion"
|
||||||
|
|
||||||
forgeFileNames="
|
forgeFileNames="
|
||||||
$normForgeVersion/forge-$normForgeVersion-installer.jar
|
$normForgeVersion/forge-$normForgeVersion-installer.jar
|
||||||
@@ -60,25 +62,25 @@ if [ ! -e $installMarker ]; then
|
|||||||
"
|
"
|
||||||
for fn in $forgeFileNames; do
|
for fn in $forgeFileNames; do
|
||||||
if [ $fn == END ]; then
|
if [ $fn == END ]; then
|
||||||
echo "Unable to compute URL for $normForgeVersion"
|
log "Unable to compute URL for $normForgeVersion"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
downloadUrl=http://files.minecraftforge.net/maven/net/minecraftforge/forge/$fn
|
downloadUrl=http://files.minecraftforge.net/maven/net/minecraftforge/forge/$fn
|
||||||
echo "...trying $downloadUrl"
|
log "...trying $downloadUrl"
|
||||||
if curl -o $FORGE_INSTALLER -fsSL $downloadUrl; then
|
if curl -o $FORGE_INSTALLER -fsSL $downloadUrl; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
echo "Downloading $FORGE_INSTALLER_URL ..."
|
log "Downloading $FORGE_INSTALLER_URL ..."
|
||||||
if ! curl -o $FORGE_INSTALLER -fsSL $FORGE_INSTALLER_URL; then
|
if ! curl -o $FORGE_INSTALLER -fsSL $FORGE_INSTALLER_URL; then
|
||||||
echo "Failed to download from given location $FORGE_INSTALLER_URL"
|
log "Failed to download from given location $FORGE_INSTALLER_URL"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Installing Forge $shortForgeVersion using $FORGE_INSTALLER"
|
log "Installing Forge $shortForgeVersion using $FORGE_INSTALLER"
|
||||||
mkdir -p mods
|
mkdir -p mods
|
||||||
tries=3
|
tries=3
|
||||||
while ((--tries >= 0)); do
|
while ((--tries >= 0)); do
|
||||||
@@ -88,22 +90,22 @@ if [ ! -e $installMarker ]; then
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if (($tries < 0)); then
|
if (($tries < 0)); then
|
||||||
echo "Forge failed to install after several tries." >&2
|
log "Forge failed to install after several tries." >&2
|
||||||
exit 10
|
exit 10
|
||||||
fi
|
fi
|
||||||
# NOTE $shortForgeVersion will be empty if installer location was given to us
|
# NOTE $shortForgeVersion will be empty if installer location was given to us
|
||||||
echo "Finding installed server jar..."
|
log "Finding installed server jar..."
|
||||||
unset -v latest
|
unset -v latest
|
||||||
for file in *forge*.jar; do
|
for file in *forge*.jar; do
|
||||||
[[ $file =~ installer ]] || [[ $file -nt $latest ]] && latest=$file
|
[[ $file =~ installer ]] || [[ $file -nt $latest ]] && latest=$file
|
||||||
done
|
done
|
||||||
if [[ -z $latest ]]; then
|
if [[ -z $latest ]]; then
|
||||||
echo "Unable to derive server jar for Forge"
|
log "Unable to derive server jar for Forge"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export SERVER=$latest
|
export SERVER=$latest
|
||||||
echo "Using server $SERVER"
|
log "Using server $SERVER"
|
||||||
echo $SERVER > $installMarker
|
echo $SERVER > $installMarker
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
export SERVER=paper_server-${VANILLA_VERSION}.jar
|
export SERVER=paper_server-${VANILLA_VERSION}.jar
|
||||||
if [ ! -f "$SERVER" ] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
if [ ! -f "$SERVER" ] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
||||||
downloadUrl=${PAPER_DOWNLOAD_URL:-https://papermc.io/api/v1/paper/${VANILLA_VERSION}/latest/download}
|
downloadUrl=${PAPER_DOWNLOAD_URL:-https://papermc.io/api/v1/paper/${VANILLA_VERSION}/latest/download}
|
||||||
echo "Downloading Paper $VANILLA_VERSION from $downloadUrl ..."
|
log "Downloading Paper $VANILLA_VERSION from $downloadUrl ..."
|
||||||
curl -fsSL -o "$SERVER" "$downloadUrl"
|
curl -fsSL -o "$SERVER" "$downloadUrl"
|
||||||
if [ ! -f "$SERVER" ]; then
|
if [ ! -f "$SERVER" ]; then
|
||||||
echo "ERROR: failed to download from $downloadUrl (status=$?)"
|
log "ERROR: failed to download from $downloadUrl (status=$?)"
|
||||||
exit 3
|
exit 3
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
export TYPE=spongevanilla
|
export TYPE=spongevanilla
|
||||||
|
|
||||||
# Parse branch
|
# Parse branch
|
||||||
echo "Choosing branch for Sponge"
|
log "Choosing branch for Sponge"
|
||||||
case "$SPONGEBRANCH" in
|
case "$SPONGEBRANCH" in
|
||||||
|
|
||||||
EXPERIMENTAL|experimental|BLEEDING|bleeding)
|
EXPERIMENTAL|experimental|BLEEDING|bleeding)
|
||||||
@@ -18,7 +20,7 @@ esac
|
|||||||
|
|
||||||
# If not SPONGEVERSION selected, detect last version on selected branch
|
# If not SPONGEVERSION selected, detect last version on selected branch
|
||||||
if [ -z $SPONGEVERSION ]; then
|
if [ -z $SPONGEVERSION ]; then
|
||||||
echo "Choosing Version for Sponge"
|
log "Choosing Version for Sponge"
|
||||||
if [ "$SPONGEBRANCH" == "stable" ]; then
|
if [ "$SPONGEBRANCH" == "stable" ]; then
|
||||||
export SPONGEVERSION=`curl -fsSL https://dl-api.spongepowered.org/v1/org.spongepowered/$TYPE | jq -r '.buildTypes.stable.latest.version'`
|
export SPONGEVERSION=`curl -fsSL https://dl-api.spongepowered.org/v1/org.spongepowered/$TYPE | jq -r '.buildTypes.stable.latest.version'`
|
||||||
else
|
else
|
||||||
@@ -29,7 +31,7 @@ fi
|
|||||||
export SERVER="spongevanilla-$SPONGEVERSION.jar"
|
export SERVER="spongevanilla-$SPONGEVERSION.jar"
|
||||||
|
|
||||||
if [ ! -e $SERVER ] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
if [ ! -e $SERVER ] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
||||||
echo "Downloading $SERVER ..."
|
log "Downloading $SERVER ..."
|
||||||
curl -sSL -o $SERVER https://repo.spongepowered.org/maven/org/spongepowered/$TYPE/$SPONGEVERSION/$SERVER
|
curl -sSL -o $SERVER https://repo.spongepowered.org/maven/org/spongepowered/$TYPE/$SPONGEVERSION/$SERVER
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -6,16 +6,16 @@ set -o pipefail
|
|||||||
export SERVER="minecraft_server.${VANILLA_VERSION// /_}.jar"
|
export SERVER="minecraft_server.${VANILLA_VERSION// /_}.jar"
|
||||||
|
|
||||||
if [ ! -e $SERVER ] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
if [ ! -e $SERVER ] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
||||||
echo "Downloading $SERVER ..."
|
log "Downloading $SERVER ..."
|
||||||
debug "Finding version manifest for $VANILLA_VERSION"
|
debug "Finding version manifest for $VANILLA_VERSION"
|
||||||
versionManifestUrl=$(curl -fsSL 'https://launchermeta.mojang.com/mc/game/version_manifest.json' | jq --arg VANILLA_VERSION "$VANILLA_VERSION" --raw-output '[.versions[]|select(.id == $VANILLA_VERSION)][0].url')
|
versionManifestUrl=$(curl -fsSL 'https://launchermeta.mojang.com/mc/game/version_manifest.json' | jq --arg VANILLA_VERSION "$VANILLA_VERSION" --raw-output '[.versions[]|select(.id == $VANILLA_VERSION)][0].url')
|
||||||
result=$?
|
result=$?
|
||||||
if [ $result != 0 ]; then
|
if [ $result != 0 ]; then
|
||||||
echo "ERROR failed to obtain version manifest URL ($result)"
|
log "ERROR failed to obtain version manifest URL ($result)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [ $versionManifestUrl = "null" ]; then
|
if [ $versionManifestUrl = "null" ]; then
|
||||||
echo "ERROR couldn't find a matching manifest entry for $VANILLA_VERSION"
|
log "ERROR couldn't find a matching manifest entry for $VANILLA_VERSION"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
debug "Found version manifest at $versionManifestUrl"
|
debug "Found version manifest at $versionManifestUrl"
|
||||||
@@ -23,7 +23,7 @@ if [ ! -e $SERVER ] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
|||||||
serverDownloadUrl=$(curl -fsSL ${versionManifestUrl} | jq --raw-output '.downloads.server.url')
|
serverDownloadUrl=$(curl -fsSL ${versionManifestUrl} | jq --raw-output '.downloads.server.url')
|
||||||
result=$?
|
result=$?
|
||||||
if [ $result != 0 ]; then
|
if [ $result != 0 ]; then
|
||||||
echo "ERROR failed to obtain version manifest from $versionManifestUrl ($result)"
|
log "ERROR failed to obtain version manifest from $versionManifestUrl ($result)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ if [ ! -e $SERVER ] || [ -n "$FORCE_REDOWNLOAD" ]; then
|
|||||||
curl $verbose -fsSL -o $SERVER $serverDownloadUrl
|
curl $verbose -fsSL -o $SERVER $serverDownloadUrl
|
||||||
result=$?
|
result=$?
|
||||||
if [ $result != 0 ]; then
|
if [ $result != 0 ]; then
|
||||||
echo "ERROR failed to download server from $serverDownloadUrl ($result)"
|
log "ERROR failed to download server from $serverDownloadUrl ($result)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
if [ $TYPE = "FEED-THE-BEAST" ]; then
|
if [ $TYPE = "FEED-THE-BEAST" ]; then
|
||||||
worldDest=$FTB_BASE_DIR/$LEVEL
|
worldDest=$FTB_BASE_DIR/$LEVEL
|
||||||
else
|
else
|
||||||
@@ -10,24 +12,24 @@ fi
|
|||||||
if [[ "$WORLD" ]] && [ ! -d "$worldDest" ]; then
|
if [[ "$WORLD" ]] && [ ! -d "$worldDest" ]; then
|
||||||
case "X$WORLD" in
|
case "X$WORLD" in
|
||||||
X[Hh][Tt][Tt][Pp]*)
|
X[Hh][Tt][Tt][Pp]*)
|
||||||
echo "Downloading world from $WORLD"
|
log "Downloading world from $WORLD"
|
||||||
curl -sSL -o - "$WORLD" > /data/world.zip
|
curl -sSL -o - "$WORLD" > /data/world.zip
|
||||||
echo "Unzipping world"
|
log "Unzipping world"
|
||||||
unzip -o -q /data/world.zip
|
unzip -o -q /data/world.zip
|
||||||
rm -f /data/world.zip
|
rm -f /data/world.zip
|
||||||
if [ ! -d $worldDest ]; then
|
if [ ! -d $worldDest ]; then
|
||||||
echo World directory not found
|
log World directory not found
|
||||||
for i in /data/*/level.dat; do
|
for i in /data/*/level.dat; do
|
||||||
if [ -f "$i" ]; then
|
if [ -f "$i" ]; then
|
||||||
d=`dirname "$i"`
|
d=`dirname "$i"`
|
||||||
echo Renaming world directory from $d
|
log Renaming world directory from $d
|
||||||
mv -f "$d" $worldDest
|
mv -f "$d" $worldDest
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
if [ "$TYPE" = "SPIGOT" ]; then
|
if [ "$TYPE" = "SPIGOT" ]; then
|
||||||
# Reorganise if a Spigot server
|
# Reorganise if a Spigot server
|
||||||
echo "Moving End and Nether maps to Spigot location"
|
log "Moving End and Nether maps to Spigot location"
|
||||||
[ -d "$worldDest/DIM1" ] && mv -f "$worldDest/DIM1" "/data/${LEVEL}_the_end"
|
[ -d "$worldDest/DIM1" ] && mv -f "$worldDest/DIM1" "/data/${LEVEL}_the_end"
|
||||||
[ -d "$worldDest/DIM-1" ] && mv -f "$worldDest/DIM-1" "/data/${LEVEL}_nether"
|
[ -d "$worldDest/DIM-1" ] && mv -f "$worldDest/DIM-1" "/data/${LEVEL}_nether"
|
||||||
fi
|
fi
|
||||||
@@ -35,13 +37,13 @@ case "X$WORLD" in
|
|||||||
*)
|
*)
|
||||||
if [[ -d $WORLD ]]; then
|
if [[ -d $WORLD ]]; then
|
||||||
if [[ ! -d $worldDest ]]; then
|
if [[ ! -d $worldDest ]]; then
|
||||||
echo "Cloning world directory from $WORLD ..."
|
log "Cloning world directory from $WORLD ..."
|
||||||
cp -r $WORLD $worldDest
|
cp -r $WORLD $worldDest
|
||||||
else
|
else
|
||||||
echo "Skipping clone from $WORLD since $worldDest exists"
|
log "Skipping clone from $WORLD since $worldDest exists"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Invalid URL given for world: Must be HTTP or HTTPS and a ZIP file"
|
log "Invalid URL given for world: Must be HTTP or HTTPS and a ZIP file"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -21,28 +21,28 @@ if [[ "$MODPACK" ]]; then
|
|||||||
EFFECTIVE_MODPACK_URL=$(curl -Ls -o /dev/null -w %{url_effective} $MODPACK)
|
EFFECTIVE_MODPACK_URL=$(curl -Ls -o /dev/null -w %{url_effective} $MODPACK)
|
||||||
case "X$EFFECTIVE_MODPACK_URL" in
|
case "X$EFFECTIVE_MODPACK_URL" in
|
||||||
X[Hh][Tt][Tt][Pp]*.zip)
|
X[Hh][Tt][Tt][Pp]*.zip)
|
||||||
echo "Downloading mod/plugin pack via HTTP"
|
log "Downloading mod/plugin pack via HTTP"
|
||||||
echo " from $EFFECTIVE_MODPACK_URL ..."
|
log " from $EFFECTIVE_MODPACK_URL ..."
|
||||||
if ! curl -sSL -o /tmp/modpack.zip "$EFFECTIVE_MODPACK_URL"; then
|
if ! curl -sSL -o /tmp/modpack.zip "$EFFECTIVE_MODPACK_URL"; then
|
||||||
echo "ERROR: failed to download from $EFFECTIVE_MODPACK_URL"
|
log "ERROR: failed to download from $EFFECTIVE_MODPACK_URL"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$TYPE" = "SPIGOT" ]; then
|
if [ "$TYPE" = "SPIGOT" ]; then
|
||||||
mkdir -p /data/plugins
|
mkdir -p /data/plugins
|
||||||
if ! unzip -o -d /data/plugins /tmp/modpack.zip; then
|
if ! unzip -o -d /data/plugins /tmp/modpack.zip; then
|
||||||
echo "ERROR: failed to unzip the modpack from $EFFECTIVE_MODPACK_URL"
|
log "ERROR: failed to unzip the modpack from $EFFECTIVE_MODPACK_URL"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
mkdir -p /data/mods
|
mkdir -p /data/mods
|
||||||
if ! unzip -o -d /data/mods /tmp/modpack.zip; then
|
if ! unzip -o -d /data/mods /tmp/modpack.zip; then
|
||||||
echo "ERROR: failed to unzip the modpack from $EFFECTIVE_MODPACK_URL"
|
log "ERROR: failed to unzip the modpack from $EFFECTIVE_MODPACK_URL"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
rm -f /tmp/modpack.zip
|
rm -f /tmp/modpack.zip
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid URL given for modpack: Must be HTTP or HTTPS and a ZIP file"
|
log "Invalid URL given for modpack: Must be HTTP or HTTPS and a ZIP file"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
@@ -54,10 +54,10 @@ do
|
|||||||
EFFECTIVE_MOD_URL=$(curl -Ls -o /dev/null -w %{url_effective} $i)
|
EFFECTIVE_MOD_URL=$(curl -Ls -o /dev/null -w %{url_effective} $i)
|
||||||
case "X$EFFECTIVE_MOD_URL" in
|
case "X$EFFECTIVE_MOD_URL" in
|
||||||
X[Hh][Tt][Tt][Pp]*.jar)
|
X[Hh][Tt][Tt][Pp]*.jar)
|
||||||
echo "Downloading mod/plugin via HTTP"
|
log "Downloading mod/plugin via HTTP"
|
||||||
echo " from $EFFECTIVE_MOD_URL ..."
|
log " from $EFFECTIVE_MOD_URL ..."
|
||||||
if ! curl -sSL -o /tmp/${EFFECTIVE_MOD_URL##*/} $EFFECTIVE_MOD_URL; then
|
if ! curl -sSL -o /tmp/${EFFECTIVE_MOD_URL##*/} $EFFECTIVE_MOD_URL; then
|
||||||
echo "ERROR: failed to download from $EFFECTIVE_MOD_URL to /tmp/${EFFECTIVE_MOD_URL##*/}"
|
log "ERROR: failed to download from $EFFECTIVE_MOD_URL to /tmp/${EFFECTIVE_MOD_URL##*/}"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ do
|
|||||||
rm -f /tmp/${EFFECTIVE_MOD_URL##*/}
|
rm -f /tmp/${EFFECTIVE_MOD_URL##*/}
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid URL given for modpack: Must be HTTP or HTTPS and a JAR file"
|
log "Invalid URL given for modpack: Must be HTTP or HTTPS and a JAR file"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -85,7 +85,7 @@ if [[ "$MANIFEST" ]]; then
|
|||||||
EFFECTIVE_MANIFEST_URL=$(curl -Ls -o /dev/null -w %{url_effective} $MANIFEST)
|
EFFECTIVE_MANIFEST_URL=$(curl -Ls -o /dev/null -w %{url_effective} $MANIFEST)
|
||||||
curl -Ls -o $EFFECTIVE_MANIFEST_FILE "$EFFECTIVE_MANIFEST_URL"
|
curl -Ls -o $EFFECTIVE_MANIFEST_FILE "$EFFECTIVE_MANIFEST_URL"
|
||||||
else
|
else
|
||||||
echo "MANIFEST='$MANIFEST' is not a valid manifest url or location"
|
log "MANIFEST='$MANIFEST' is not a valid manifest url or location"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -95,27 +95,27 @@ case "X$EFFECTIVE_MANIFEST_FILE" in
|
|||||||
MOD_DIR=${FTB_BASE_DIR:-/data}/mods
|
MOD_DIR=${FTB_BASE_DIR:-/data}/mods
|
||||||
if [ ! -d "$MOD_DIR" ]
|
if [ ! -d "$MOD_DIR" ]
|
||||||
then
|
then
|
||||||
echo "Creating mods dir $MOD_DIR"
|
log "Creating mods dir $MOD_DIR"
|
||||||
mkdir -p "$MOD_DIR"
|
mkdir -p "$MOD_DIR"
|
||||||
fi
|
fi
|
||||||
echo "Starting manifest download..."
|
log "Starting manifest download..."
|
||||||
cat "${EFFECTIVE_MANIFEST_FILE}" | jq -r '.files[] | (.projectID|tostring) + " " + (.fileID|tostring)'| while read -r p f
|
cat "${EFFECTIVE_MANIFEST_FILE}" | jq -r '.files[] | (.projectID|tostring) + " " + (.fileID|tostring)'| while read -r p f
|
||||||
do
|
do
|
||||||
if [ ! -f $MOD_DIR/${p}_${f}.jar ]
|
if [ ! -f $MOD_DIR/${p}_${f}.jar ]
|
||||||
then
|
then
|
||||||
redirect_url="$(curl -Ls -o /dev/null -w %{url_effective} ${CURSE_URL_BASE}/${p})"
|
redirect_url="$(curl -Ls -o /dev/null -w %{url_effective} ${CURSE_URL_BASE}/${p})"
|
||||||
url="$redirect_url/download/${f}/file"
|
url="$redirect_url/download/${f}/file"
|
||||||
echo Downloading curseforge mod $url
|
log Downloading curseforge mod $url
|
||||||
# Manifest usually doesn't have mod names. Using id should be fine, tho
|
# Manifest usually doesn't have mod names. Using id should be fine, tho
|
||||||
curl -sSL "${url}" -o $MOD_DIR/${p}_${f}.jar
|
curl -sSL "${url}" -o $MOD_DIR/${p}_${f}.jar
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
echo "Could not find manifest file, unsufficient privs, or malformed path."
|
log "Could not find manifest file, unsufficient privs, or malformed path."
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid manifest file for modpack. Please make sure it is a .json file."
|
log "Invalid manifest file for modpack. Please make sure it is a .json file."
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
@@ -124,7 +124,7 @@ if [[ "${GENERIC_PACK}" ]]; then
|
|||||||
if isURL "${GENERIC_PACK}"; then
|
if isURL "${GENERIC_PACK}"; then
|
||||||
generic_pack_url=${GENERIC_PACK}
|
generic_pack_url=${GENERIC_PACK}
|
||||||
GENERIC_PACK=/tmp/$(basename ${generic_pack_url})
|
GENERIC_PACK=/tmp/$(basename ${generic_pack_url})
|
||||||
echo "Downloading generic pack from ${generic_pack_url} ..."
|
log "Downloading generic pack from ${generic_pack_url} ..."
|
||||||
curl -fsSL -o ${GENERIC_PACK} ${generic_pack_url}
|
curl -fsSL -o ${GENERIC_PACK} ${generic_pack_url}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ if [[ "${GENERIC_PACK}" ]]; then
|
|||||||
mkdir -p ${base_dir}
|
mkdir -p ${base_dir}
|
||||||
unzip -q -d ${base_dir} ${GENERIC_PACK}
|
unzip -q -d ${base_dir} ${GENERIC_PACK}
|
||||||
depth=$(( ${GENERIC_PACK_STRIP_DIRS:-1} + 1 ))
|
depth=$(( ${GENERIC_PACK_STRIP_DIRS:-1} + 1 ))
|
||||||
echo "Applying generic pack, stripping $(( depth - 1 )) level ..."
|
log "Applying generic pack, stripping $(( depth - 1 )) level ..."
|
||||||
find ${base_dir} -type d -mindepth $depth -maxdepth $depth -exec cp -r {} /data/ +
|
find ${base_dir} -type d -mindepth $depth -maxdepth $depth -exec cp -r {} /data/ +
|
||||||
rm -rf ${base_dir}
|
rm -rf ${base_dir}
|
||||||
sha256sum ${GENERIC_PACK} > ${sum_file}
|
sha256sum ${GENERIC_PACK} > ${sum_file}
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
# If supplied with a URL for a config (simple zip of configurations), download it and unpack
|
# If supplied with a URL for a config (simple zip of configurations), download it and unpack
|
||||||
if [[ "$MODCONFIG" ]]; then
|
if [[ "$MODCONFIG" ]]; then
|
||||||
case "X$MODCONFIG" in
|
case "X$MODCONFIG" in
|
||||||
X[Hh][Tt][Tt][Pp]*[Zz][iI][pP])
|
X[Hh][Tt][Tt][Pp]*[Zz][iI][pP])
|
||||||
echo "Downloading mod/plugin configs via HTTP"
|
log "Downloading mod/plugin configs via HTTP"
|
||||||
echo " from $MODCONFIG ..."
|
log " from $MODCONFIG ..."
|
||||||
curl -sSL -o /tmp/modconfig.zip "$MODCONFIG"
|
curl -sSL -o /tmp/modconfig.zip "$MODCONFIG"
|
||||||
if [ "$TYPE" = "SPIGOT" ]; then
|
if [ "$TYPE" = "SPIGOT" ]; then
|
||||||
mkdir -p /data/plugins
|
mkdir -p /data/plugins
|
||||||
@@ -17,7 +19,7 @@ case "X$MODCONFIG" in
|
|||||||
rm -f /tmp/modconfig.zip
|
rm -f /tmp/modconfig.zip
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid URL given for modconfig: Must be HTTP or HTTPS and a ZIP file"
|
log "Invalid URL given for modconfig: Must be HTTP or HTTPS and a ZIP file"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
# FUNCTIONS
|
# FUNCTIONS
|
||||||
function setServerProp {
|
function setServerProp {
|
||||||
local prop=$1
|
local prop=$1
|
||||||
@@ -10,16 +12,16 @@ function setServerProp {
|
|||||||
TRUE|FALSE)
|
TRUE|FALSE)
|
||||||
var=${var,,} ;;
|
var=${var,,} ;;
|
||||||
esac
|
esac
|
||||||
echo "Setting ${prop} to '${var}' in ${SERVER_PROPERTIES}"
|
log "Setting ${prop} to '${var}' in ${SERVER_PROPERTIES}"
|
||||||
sed -i "/^${prop}\s*=/ c ${prop}=${var}" "$SERVER_PROPERTIES"
|
sed -i "/^${prop}\s*=/ c ${prop}=${var}" "$SERVER_PROPERTIES"
|
||||||
else
|
else
|
||||||
echo "Skip setting ${prop}"
|
log "Skip setting ${prop}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function customizeServerProps {
|
function customizeServerProps {
|
||||||
if [ -n "$WHITELIST" ]; then
|
if [ -n "$WHITELIST" ]; then
|
||||||
echo "Creating whitelist"
|
log "Creating whitelist"
|
||||||
setServerProp "whitelist" "true"
|
setServerProp "whitelist" "true"
|
||||||
setServerProp "white-list" "true"
|
setServerProp "white-list" "true"
|
||||||
fi
|
fi
|
||||||
@@ -41,6 +43,7 @@ function customizeServerProps {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
setServerProp "server-name" "$SERVER_NAME"
|
setServerProp "server-name" "$SERVER_NAME"
|
||||||
|
setServerProp "server-ip" "$SERVER_IP"
|
||||||
setServerProp "server-port" "$SERVER_PORT"
|
setServerProp "server-port" "$SERVER_PORT"
|
||||||
setServerProp "motd" "$MOTD"
|
setServerProp "motd" "$MOTD"
|
||||||
setServerProp "allow-nether" "$ALLOW_NETHER"
|
setServerProp "allow-nether" "$ALLOW_NETHER"
|
||||||
@@ -89,7 +92,7 @@ function customizeServerProps {
|
|||||||
DIFFICULTY=3
|
DIFFICULTY=3
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "DIFFICULTY must be peaceful, easy, normal, or hard."
|
log "DIFFICULTY must be peaceful, easy, normal, or hard."
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -97,7 +100,7 @@ function customizeServerProps {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$MODE" ]; then
|
if [ -n "$MODE" ]; then
|
||||||
echo "Setting mode"
|
log "Setting mode"
|
||||||
MODE_LC=$( echo $MODE | tr '[:upper:]' '[:lower:]' )
|
MODE_LC=$( echo $MODE | tr '[:upper:]' '[:lower:]' )
|
||||||
case $MODE_LC in
|
case $MODE_LC in
|
||||||
0|1|2|3)
|
0|1|2|3)
|
||||||
@@ -115,7 +118,7 @@ function customizeServerProps {
|
|||||||
MODE=3
|
MODE=3
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "ERROR: Invalid game mode: $MODE"
|
log "ERROR: Invalid game mode: $MODE"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -126,11 +129,11 @@ function customizeServerProps {
|
|||||||
# Deploy server.properties file
|
# Deploy server.properties file
|
||||||
if [[ ${TYPE} == "FEED-THE-BEAST" ]]; then
|
if [[ ${TYPE} == "FEED-THE-BEAST" ]]; then
|
||||||
export SERVER_PROPERTIES=${FTB_DIR}/server.properties
|
export SERVER_PROPERTIES=${FTB_DIR}/server.properties
|
||||||
echo "detected FTB, changing properties path to ${SERVER_PROPERTIES}"
|
log "detected FTB, changing properties path to ${SERVER_PROPERTIES}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -e "$SERVER_PROPERTIES" ]; then
|
if [ ! -e "$SERVER_PROPERTIES" ]; then
|
||||||
echo "Creating server.properties in ${SERVER_PROPERTIES}"
|
log "Creating server.properties in ${SERVER_PROPERTIES}"
|
||||||
cp /tmp/server.properties "$SERVER_PROPERTIES"
|
cp /tmp/server.properties "$SERVER_PROPERTIES"
|
||||||
customizeServerProps
|
customizeServerProps
|
||||||
elif [ -n "${OVERRIDE_SERVER_PROPERTIES}" ]; then
|
elif [ -n "${OVERRIDE_SERVER_PROPERTIES}" ]; then
|
||||||
@@ -139,11 +142,11 @@ elif [ -n "${OVERRIDE_SERVER_PROPERTIES}" ]; then
|
|||||||
customizeServerProps
|
customizeServerProps
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "server.properties already created, skipping"
|
log "server.properties already created, skipping"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
echo "server.properties already created, skipping"
|
log "server.properties already created, skipping"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec /start-finalSetup05EnvVariables $@
|
exec /start-finalSetup05EnvVariables $@
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
. /start-utils
|
||||||
|
|
||||||
if [ "${REPLACE_ENV_VARIABLES^^}" = "TRUE" ]; then
|
if [ "${REPLACE_ENV_VARIABLES^^}" = "TRUE" ]; then
|
||||||
echo "Replacing env variables in configs that match the prefix $ENV_VARIABLE_PREFIX..."
|
log "Replacing env variables in configs that match the prefix $ENV_VARIABLE_PREFIX..."
|
||||||
while IFS='=' read -r name value ; do
|
while IFS='=' read -r name value ; do
|
||||||
# check if name of env variable matches the prefix
|
# check if name of env variable matches the prefix
|
||||||
# sanity check environment variables to avoid code injections
|
# sanity check environment variables to avoid code injections
|
||||||
if [[ "$name" = $ENV_VARIABLE_PREFIX* ]] \
|
if [[ "$name" = $ENV_VARIABLE_PREFIX* ]] \
|
||||||
&& [[ $value =~ ^[0-9a-zA-Z_:/=?.+\-]*$ ]] \
|
&& [[ $value =~ ^[0-9a-zA-Z_:/=?.+\-]*$ ]] \
|
||||||
&& [[ $name =~ ^[0-9a-zA-Z_\-]*$ ]]; then
|
&& [[ $name =~ ^[0-9a-zA-Z_\-]*$ ]]; then
|
||||||
echo "Replacing $name with $value ..."
|
log "Replacing $name with $value ..."
|
||||||
find /data/ -type f \
|
find /data/ -type f \
|
||||||
\( -name "*.yml" -or -name "*.yaml" -or -name "*.txt" -or -name "*.cfg" \
|
\( -name "*.yml" -or -name "*.yaml" -or -name "*.txt" -or -name "*.cfg" \
|
||||||
-or -name "*.conf" -or -name "*.properties" \) \
|
-or -name "*.conf" -or -name "*.properties" \) \
|
||||||
|
|||||||
@@ -3,36 +3,46 @@
|
|||||||
. /start-utils
|
. /start-utils
|
||||||
|
|
||||||
if [ -n "$OPS" ]; then
|
if [ -n "$OPS" ]; then
|
||||||
echo "Setting/adding ops"
|
log "Setting/adding ops"
|
||||||
rm -rf ops.txt.converted
|
rm -rf ops.txt.converted
|
||||||
echo $OPS | awk -v RS=, '{print}' > ops.txt
|
echo $OPS | awk -v RS=, '{print}' > ops.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$WHITELIST" ]; then
|
if [ -n "$WHITELIST" ]; then
|
||||||
echo "Setting whitelist"
|
log "Setting whitelist"
|
||||||
rm -rf white-list.txt.converted
|
rm -rf white-list.txt.converted
|
||||||
echo $WHITELIST | awk -v RS=, '{print}' > white-list.txt
|
echo $WHITELIST | awk -v RS=, '{print}' > white-list.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$ICON" -a ! -e server-icon.png ]; then
|
if [ -n "$ICON" -a ! -e server-icon.png ]; then
|
||||||
echo "Using server icon from $ICON..."
|
log "Using server icon from $ICON..."
|
||||||
# Not sure what it is yet...call it "img"
|
# Not sure what it is yet...call it "img"
|
||||||
curl -sSL -o /tmp/icon.img $ICON
|
curl -sSL -o /tmp/icon.img $ICON
|
||||||
specs=$(identify /tmp/icon.img | awk '{print $2,$3}')
|
specs=$(identify /tmp/icon.img | awk '{print $2,$3}')
|
||||||
if [ "$specs" = "PNG 64x64" ]; then
|
if [ "$specs" = "PNG 64x64" ]; then
|
||||||
mv /tmp/icon.img /data/server-icon.png
|
mv /tmp/icon.img /data/server-icon.png
|
||||||
else
|
else
|
||||||
echo "Converting image to 64x64 PNG..."
|
log "Converting image to 64x64 PNG..."
|
||||||
convert /tmp/icon.img -resize 64x64! /data/server-icon.png
|
convert /tmp/icon.img -resize 64x64! /data/server-icon.png
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Set up log configuration
|
||||||
|
LOGFILE="/data/log4j2.xml"
|
||||||
|
if [ ! -e "$LOGFILE" ]; then
|
||||||
|
log "Creating log4j2.xml in ${LOGFILE}"
|
||||||
|
cp /tmp/log4j2.xml "$LOGFILE"
|
||||||
|
else
|
||||||
|
log "log4j2.xml already created, skipping"
|
||||||
|
fi
|
||||||
|
JVM_OPTS="-Dlog4j.configurationFile=/data/log4j2.xml ${JVM_OPTS}"
|
||||||
|
|
||||||
# Make sure files exist and are valid JSON (for pre-1.12 to 1.12 upgrades)
|
# Make sure files exist and are valid JSON (for pre-1.12 to 1.12 upgrades)
|
||||||
echo "Checking for JSON files."
|
log "Checking for JSON files."
|
||||||
JSON_FILES=$(find . -maxdepth 1 -name '*.json')
|
JSON_FILES=$(find . -maxdepth 1 -name '*.json')
|
||||||
for j in $JSON_FILES; do
|
for j in $JSON_FILES; do
|
||||||
if [[ $(python -c "print open('$j').read().strip()==''") = True ]]; then
|
if [[ $(cat $j | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') == "" ]]; then
|
||||||
echo "Fixing JSON $j"
|
log "Fixing JSON $j"
|
||||||
echo '[]' > $j
|
echo '[]' > $j
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -41,7 +51,7 @@ done
|
|||||||
# If any modules have been provided, copy them over
|
# If any modules have been provided, copy them over
|
||||||
mkdir -p /data/mods
|
mkdir -p /data/mods
|
||||||
if [ -d /mods ]; then
|
if [ -d /mods ]; then
|
||||||
echo "Copying any mods over..."
|
log "Copying any mods over..."
|
||||||
rsync -a --out-format="update:%f:Last Modified %M" --prune-empty-dirs --update /mods /data
|
rsync -a --out-format="update:%f:Last Modified %M" --prune-empty-dirs --update /mods /data
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -49,7 +59,7 @@ fi
|
|||||||
for c in /config/*
|
for c in /config/*
|
||||||
do
|
do
|
||||||
if [ -f "$c" ]; then
|
if [ -f "$c" ]; then
|
||||||
echo Copying configuration `basename "$c"`
|
log Copying configuration `basename "$c"`
|
||||||
cp -rf "$c" /data/config
|
cp -rf "$c" /data/config
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -57,7 +67,7 @@ done
|
|||||||
mkdir -p /data/plugins
|
mkdir -p /data/plugins
|
||||||
if [ "$TYPE" = "SPIGOT" ]; then
|
if [ "$TYPE" = "SPIGOT" ]; then
|
||||||
if [ -d /plugins ]; then
|
if [ -d /plugins ]; then
|
||||||
echo "Copying any Bukkit plugins over..."
|
log "Copying any Bukkit plugins over..."
|
||||||
# Copy plugins over using rsync to allow deeply nested updates of plugins
|
# Copy plugins over using rsync to allow deeply nested updates of plugins
|
||||||
# only updates files if the source file is newer and print updated files
|
# only updates files if the source file is newer and print updated files
|
||||||
rsync -a --out-format="update:%f:Last Modified %M" --prune-empty-dirs --update /plugins /data
|
rsync -a --out-format="update:%f:Last Modified %M" --prune-empty-dirs --update /plugins /data
|
||||||
@@ -76,7 +86,7 @@ if [[ ${GUI} = false || ${GUI} = FALSE ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# put these prior JVM_OPTS at the end to give any memory settings there higher precedence
|
# put these prior JVM_OPTS at the end to give any memory settings there higher precedence
|
||||||
echo "Setting initial memory to ${INIT_MEMORY:=${MEMORY}} and max to ${MAX_MEMORY:=${MEMORY}}"
|
log "Setting initial memory to ${INIT_MEMORY:=${MEMORY}} and max to ${MAX_MEMORY:=${MEMORY}}"
|
||||||
|
|
||||||
expandedDOpts=
|
expandedDOpts=
|
||||||
if [ -n "$JVM_DD_OPTS" ]; then
|
if [ -n "$JVM_DD_OPTS" ]; then
|
||||||
@@ -111,7 +121,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
cd "${FTB_DIR}"
|
cd "${FTB_DIR}"
|
||||||
echo "Running FTB ${FTB_SERVER_START} in ${FTB_DIR} ..."
|
log "Running FTB ${FTB_SERVER_START} in ${FTB_DIR} ..."
|
||||||
if isTrue ${DEBUG_EXEC}; then
|
if isTrue ${DEBUG_EXEC}; then
|
||||||
set -x
|
set -x
|
||||||
fi
|
fi
|
||||||
@@ -122,7 +132,7 @@ else
|
|||||||
bootstrapArgs="--bootstrap /data/bootstrap.txt"
|
bootstrapArgs="--bootstrap /data/bootstrap.txt"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Starting the Minecraft server..."
|
log "Starting the Minecraft server..."
|
||||||
JVM_OPTS="-Xms${INIT_MEMORY} -Xmx${MAX_MEMORY} ${JVM_OPTS}"
|
JVM_OPTS="-Xms${INIT_MEMORY} -Xmx${MAX_MEMORY} ${JVM_OPTS}"
|
||||||
if isTrue ${DEBUG_EXEC}; then
|
if isTrue ${DEBUG_EXEC}; then
|
||||||
set -x
|
set -x
|
||||||
|
|||||||
10
start-utils
10
start-utils
@@ -37,6 +37,14 @@ function isDebugging {
|
|||||||
|
|
||||||
function debug {
|
function debug {
|
||||||
if isDebugging; then
|
if isDebugging; then
|
||||||
echo "DEBUG: $*"
|
log "DEBUG: $*"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function logn {
|
||||||
|
echo -n "[init] $*"
|
||||||
|
}
|
||||||
|
|
||||||
|
function log {
|
||||||
|
echo "[init] $*"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user