initial
This commit is contained in:
commit
dc940d4afe
11 changed files with 796 additions and 0 deletions
5
README.md
Normal file
5
README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
### images
|
||||
|
||||
a collection of docker images
|
||||
|
||||
they can be pulled at `g.freya.cat/freya/<folder_name>`
|
9
bind9/Dockerfile
Normal file
9
bind9/Dockerfile
Normal file
|
@ -0,0 +1,9 @@
|
|||
FROM alpine:3.19
|
||||
|
||||
# install packages
|
||||
RUN apk add --no-cache tini bind
|
||||
RUN rm -fr /var/cache/apk/*
|
||||
|
||||
# execute
|
||||
ENTRYPOINT ["/sbin/tini", "--" ]
|
||||
CMD ["/usr/sbin/named", "-c", "/etc/bind/named.conf", "-g", "-u", "named"]
|
7
bind9/README.md
Normal file
7
bind9/README.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
### images/bind9
|
||||
|
||||
runs a bind9 server!
|
||||
|
||||
#### config
|
||||
|
||||
the named.conf file is loaded from /etc/bind/named.conf, put a volume at /etc/bind to modify it.
|
21
build.sh
Executable file
21
build.sh
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/bin/sh
|
||||
|
||||
remote="g.freya.cat"
|
||||
user="freya"
|
||||
|
||||
docker login "$remote" -u "$user"
|
||||
|
||||
build() {
|
||||
image="$(echo "$1" | tr -d './')"
|
||||
echo "building $image"
|
||||
docker build "$image" -t "$remote/$user/$image:latest"
|
||||
docker push "$remote/$user/$image"
|
||||
}
|
||||
|
||||
if [ "$#" -gt 0 ]; then
|
||||
build "$1"
|
||||
else
|
||||
images="$(find . -mindepth 1 -type d \( -name '.*' -prune -o -print \))"
|
||||
IFS=$'\n'
|
||||
for image in $images; do build "$image"; done;
|
||||
fi
|
13
caddy/Dockerfile
Normal file
13
caddy/Dockerfile
Normal file
|
@ -0,0 +1,13 @@
|
|||
FROM alpine:3.19
|
||||
|
||||
# install packages
|
||||
RUN apk add --no-cache tini wget
|
||||
RUN rm -fr /var/cache/apk/*
|
||||
|
||||
# copy entrypoint
|
||||
COPY ./entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
RUN chmod +x /usr/local/bin/entrypoint.sh
|
||||
|
||||
# execute
|
||||
ENTRYPOINT ["/sbin/tini", "--" ]
|
||||
CMD ["/usr/local/bin/entrypoint.sh"]
|
19
caddy/README.md
Normal file
19
caddy/README.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
### images/caddy
|
||||
|
||||
runs a caddy server!
|
||||
|
||||
#### volumes
|
||||
|
||||
- /data - stores certificates, ocsp, and most of caddys state
|
||||
- /config - stores autosave.json
|
||||
|
||||
#### environment
|
||||
|
||||
using the MODULES environment variables you can configure
|
||||
extra modules to add to caddy. view the modules [here](https://caddyserver.com/download).
|
||||
|
||||
MODULES should be seperated by a space and not include the github.com/ part. (e.g. "caddy-dns/cloudflare aksdb/caddy-cgi/v2")
|
||||
|
||||
#### config
|
||||
|
||||
the caddy file is run at /etc/caddy/Caddyfile, put a volume at /etc/caddy to modify it.
|
23
caddy/entrypoint.sh
Normal file
23
caddy/entrypoint.sh
Normal file
|
@ -0,0 +1,23 @@
|
|||
#!/bin/sh
|
||||
|
||||
URL="https://caddyserver.com/api/download?os=linux&arch=amd64"
|
||||
IFS=" "
|
||||
for module in $MODULES
|
||||
do
|
||||
module=$(echo "$module" | sed 's/\//%2F/g')
|
||||
URL="$URL&p=github.com/$module"
|
||||
done
|
||||
|
||||
wget "$URL" -O /usr/sbin/caddy
|
||||
chmod +x /usr/sbin/caddy
|
||||
|
||||
if [ ! -f "/etc/caddy/Caddyfile" ]; then
|
||||
cp /etc/default/Caddyfile /etc/caddy/Caddyfile
|
||||
fi
|
||||
|
||||
export XDG_CONFIG_HOME=/config
|
||||
export XDG_DATA_HOME=/data
|
||||
|
||||
exec /usr/sbin/caddy run \
|
||||
--config /etc/caddy/Caddyfile \
|
||||
--adapter caddyfile
|
32
minecraft/Dockerfile
Normal file
32
minecraft/Dockerfile
Normal file
|
@ -0,0 +1,32 @@
|
|||
FROM alpine:3.19
|
||||
|
||||
# set environment
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV JAVA_HOME=/usr/lib/jvm/java-21-openjdk
|
||||
ENV PATH=/usr/lib/jvm/java-21-openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
|
||||
# install packages
|
||||
RUN apk add --no-cache tini wget openjdk21-jre jq curl shadow fontconfig ttf-dejavu
|
||||
RUN rm -fr /var/cache/apk/*
|
||||
|
||||
# copy scripts
|
||||
COPY ./mcjar /usr/local/bin/mcjar
|
||||
COPY ./mclauncher /usr/local/bin/mclauncher
|
||||
RUN chmod +x /usr/local/bin/mcjar
|
||||
RUN chmod +x /usr/local/bin/mclauncher
|
||||
|
||||
# make user
|
||||
RUN addgroup -S mc && adduser -S mc -G mc
|
||||
RUN groupmod --gid 1000 mc
|
||||
RUN usermod --uid 1000 mc
|
||||
|
||||
# make volumes
|
||||
RUN mkdir /data && chown mc:mc /data
|
||||
VOLUME /data
|
||||
|
||||
# final
|
||||
USER mc
|
||||
WORKDIR /data
|
||||
ENV SERVER_DIR=/data
|
||||
ENTRYPOINT ["/sbin/tini", "--" ]
|
||||
CMD ["/usr/local/bin/mclauncher", "-l"]
|
22
minecraft/README.md
Normal file
22
minecraft/README.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
### images/minecraft
|
||||
|
||||
runs a miencraft server, very cool
|
||||
|
||||
#### volumes
|
||||
|
||||
- /data stores the minecraft server files
|
||||
|
||||
#### environment
|
||||
|
||||
- MC_TYPE can be `vanilla`,`paper`,`waterfall`,`velocity`,`folia`,`fabric`, or `forge`
|
||||
- MC_VERSION is the minecraft version [`latest`,`snapshot`,`<version>`]
|
||||
|
||||
extra environment variables include
|
||||
- PAPERMC_BUILD
|
||||
- FABRIC_LOADER
|
||||
- FABRIC_INSTALLER
|
||||
- FORGE_VERSION [`recommended`, `latest`, `<version>`]
|
||||
|
||||
jvm configuration
|
||||
- JVMARGS - overwrites the default jvm args
|
||||
- MEMORY - sets the jvm memory amount (default 1G)
|
386
minecraft/mcjar
Normal file
386
minecraft/mcjar
Normal file
|
@ -0,0 +1,386 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
lower() {
|
||||
echo "$1" | tr '[:upper:]' '[:lower:]'
|
||||
}
|
||||
|
||||
upper() {
|
||||
echo "$1" | tr '[:lower:]' '[:upper:]'
|
||||
}
|
||||
|
||||
# global
|
||||
MC_TYPE="$(lower "${MC_TYPE:-vanilla}")"
|
||||
MC_VERSION="$(lower "${MC_VERSION:-latest}")"
|
||||
|
||||
# papermc
|
||||
PAPERMC_BUILD="$(lower "${PAPERMC_BUILD:-latest}")"
|
||||
|
||||
# fabric
|
||||
FABRIC_LOADER="$(lower "${FABRIC_LOADER:-latest}")"
|
||||
FABRIC_INSTALLER="$(lower "${FABRIC_INSTALLER:-latest}")"
|
||||
|
||||
# forge
|
||||
FORGE_VERSION="$(lower "${FORGE_VERSION:-recommended}")"
|
||||
|
||||
# other
|
||||
QUIET=1
|
||||
|
||||
# all output
|
||||
ALL=0
|
||||
|
||||
req() {
|
||||
res=$(curl --fail --silent "$1")
|
||||
code=$?
|
||||
|
||||
if [ $code -ne 0 ] || [ "$res" = "" ]; then
|
||||
echo "null";
|
||||
else
|
||||
echo "$res";
|
||||
fi
|
||||
}
|
||||
|
||||
error() {
|
||||
printf '\x1b[31m[ERROR]\t\x1b[0m%s\n' "$*" > /dev/stderr
|
||||
exit 1;
|
||||
}
|
||||
|
||||
log() {
|
||||
if [ "$QUIET" -eq 0 ]; then
|
||||
printf '\x1b[0m[LOG]\t%s\n' "$*" > /dev/stderr
|
||||
fi
|
||||
}
|
||||
|
||||
index_array() {
|
||||
array="$1"
|
||||
key="$2"
|
||||
type="$3"
|
||||
|
||||
if [ "$key" = "latest" ]; then
|
||||
index=$(echo "$array" | jq ". | index( last )");
|
||||
else
|
||||
index=$(echo "$array" | jq ". | index( \"$key\" )");
|
||||
fi
|
||||
|
||||
if [ "$index" = "null" ]; then
|
||||
error "Invalid $type: $key"
|
||||
else
|
||||
echo "$array" | jq -r ".[$index]";
|
||||
fi
|
||||
}
|
||||
|
||||
#https://api.papermc.io/v2/projects/velocity/versions/3.3.0-SNAPSHOT/
|
||||
|
||||
papermc() {
|
||||
api="https://api.papermc.io/v2/projects"
|
||||
|
||||
log "Using papermc api v2"
|
||||
|
||||
get_version() {
|
||||
log "Getting VERSION for '$MC_TYPE'"
|
||||
versions=$(req "$api/$MC_TYPE" | jq -r '.versions')
|
||||
if [ "$versions" = "null" ]; then
|
||||
error "Invalid TYPE: $MC_TYPE (no versions)"
|
||||
fi
|
||||
MC_VERSION=$(index_array "$versions" "$MC_VERSION" "VERSION")
|
||||
log "VERSION: $MC_VERSION"
|
||||
}
|
||||
|
||||
get_build() {
|
||||
log "Getting BUILD for '$MC_TYPE@$MC_VERSION'"
|
||||
builds=$(req "$api/$MC_TYPE/versions/$MC_VERSION" | jq -r ".builds")
|
||||
if [ "$builds" = "null" ]; then
|
||||
error "Invalid VERSION: $MC_TYPE@$MC_TYPE (no builds)"
|
||||
fi
|
||||
PAPERMC_BUILD=$(index_array "$builds" "$PAPERMC_BUILD" "BUILD")
|
||||
log "BUILD: $PAPERMC_BUILD"
|
||||
}
|
||||
|
||||
get_version
|
||||
get_build
|
||||
|
||||
name="$MC_TYPE-$MC_VERSION-$PAPERMC_BUILD.jar"
|
||||
url="$api/$MC_TYPE/versions/$MC_VERSION/builds/$PAPERMC_BUILD/downloads/$name"
|
||||
|
||||
if [ $ALL -eq 1 ]; then
|
||||
echo "JAR_NAME=$name"
|
||||
echo "JAR_URL=$url"
|
||||
echo "MC_TYPE=$MC_TYPE"
|
||||
echo "MC_VERSION=$MC_VERSION"
|
||||
echo "PAPERMC_BUILD=$PAPERMC_BUILD"
|
||||
else
|
||||
echo "$url"
|
||||
fi
|
||||
}
|
||||
|
||||
fabric() {
|
||||
api="https://meta.fabricmc.net/v2/versions"
|
||||
|
||||
log "Using fabric api v2"
|
||||
|
||||
get_fabric_impl() {
|
||||
type="$1"
|
||||
value="$2"
|
||||
res=""
|
||||
if [ "$value" = "latest" ]; then
|
||||
res=$(req "$api/$type" | jq -r 'map(select(.stable == true) | .version) | reverse')
|
||||
else
|
||||
res=$(req "$api/$type" | jq -r 'map(.version) | reverse')
|
||||
fi;
|
||||
echo $res;
|
||||
}
|
||||
|
||||
get_game() {
|
||||
log "Getting VERSION for '$MC_TYPE'"
|
||||
games=$(get_fabric_impl "game" "$MC_VERSION")
|
||||
MC_VERSION=$(index_array "$games" "$MC_VERSION" "VERSION")
|
||||
log "VERSION: $MC_VERSION"
|
||||
}
|
||||
|
||||
get_loader() {
|
||||
log "Getting LOADER for '$MC_TYPE'"
|
||||
loaders=$(get_fabric_impl "loader" "$FABRIC_LOADER")
|
||||
FABRIC_LOADER=$(index_array "$loaders" "$FABRIC_LOADER" "LOADER")
|
||||
log "LOADER: $FABRIC_LOADER"
|
||||
}
|
||||
|
||||
get_installer() {
|
||||
log "Getting INSTALLER for '$MC_TYPE'"
|
||||
installers=$(get_fabric_impl "installer" "$FABRIC_INSTALLER")
|
||||
FABRIC_INSTALLER=$(index_array "$installers" "$FABRIC_INSTALLER" "INSTALLER")
|
||||
log "INSTALLER: $FABRIC_INSTALLER"
|
||||
}
|
||||
|
||||
get_game
|
||||
get_loader
|
||||
get_installer
|
||||
|
||||
url="$api/loader/$MC_VERSION/$FABRIC_LOADER/$FABRIC_INSTALLER/server/jar"
|
||||
|
||||
if [ $ALL -eq 1 ]; then
|
||||
echo "JAR_NAME=fabric-$MC_VERSION-$FABRIC_LOADER-$FABRIC_INSTALLER.jar"
|
||||
echo "JAR_URL=$url"
|
||||
echo "MC_TYPE=$MC_TYPE"
|
||||
echo "MC_VERSION=$MC_VERSION"
|
||||
echo "FABRIC_LOADER=$FABRIC_LOADER"
|
||||
echo "FABRIC_INSTALLER=$FABRIC_INSTALLER"
|
||||
else
|
||||
echo "$url"
|
||||
fi
|
||||
}
|
||||
|
||||
vanilla() {
|
||||
versions=$(req 'https://launchermeta.mojang.com/mc/game/version_manifest.json' | jq '.versions | map({ "id": .id, "type": .type, "url": .url }) | reverse');
|
||||
|
||||
map_type_impl() {
|
||||
type="$1"
|
||||
echo "$versions" | jq -r "map(select(.type == \"$type\"))"
|
||||
}
|
||||
|
||||
url=""
|
||||
|
||||
get_version() {
|
||||
log "Getting VERSION for '$MC_TYPE'"
|
||||
version=""
|
||||
case "$MC_VERSION" in
|
||||
"latest")
|
||||
version=$(map_type_impl "release" | jq -r 'last')
|
||||
;;
|
||||
"snapshot")
|
||||
version=$(map_type_impl "snapshot" | jq -r 'last')
|
||||
;;
|
||||
*)
|
||||
version=$(echo "$versions" | jq ".[] | select(.id == \"$MC_VERSION\")")
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$version" = "null" ] || [ "$version" = "" ]; then
|
||||
error "Invalid VERSION: $MC_VERSION"
|
||||
fi
|
||||
|
||||
MC_VERSION=$(echo "$version" | jq -r '.id')
|
||||
log "VERSION: $MC_VERSION"
|
||||
|
||||
json=$(echo "$version" | jq -r '.url')
|
||||
url=$(req "$json" | jq -r '.downloads.server.url')
|
||||
|
||||
if [ "$url" = "null" ]; then
|
||||
error "Cannot get server jar for VERSION: $MC_VERSION"
|
||||
fi
|
||||
}
|
||||
|
||||
get_version
|
||||
|
||||
if [ $ALL -eq 1 ]; then
|
||||
echo "JAR_NAME=minecraft-$MC_VERSION.jar"
|
||||
echo "JAR_URL=$url"
|
||||
echo "MC_TYPE=$MC_TYPE"
|
||||
echo "MC_VERSION=$MC_VERSION"
|
||||
else
|
||||
echo "$url"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
forge() {
|
||||
versions=$(req "https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json" | jq -r '.promos');
|
||||
|
||||
log "Using forge promotions slim json"
|
||||
|
||||
url=""
|
||||
|
||||
get_forge_url() {
|
||||
url="https://maven.minecraftforge.net/net/minecraftforge/forge/$1/forge-$1-installer.jar"
|
||||
code=0
|
||||
wget -q --spider "$url" || code=$?
|
||||
if [ $code -eq 0 ]; then
|
||||
echo "$url";
|
||||
fi
|
||||
}
|
||||
|
||||
get_version() {
|
||||
log "Getting VERSION for '$MC_TYPE'"
|
||||
if [ "$MC_VERSION" = "latest" ]; then
|
||||
MC_VERSION=$(echo "$versions" | jq -r '. | keys | .[]' | awk -F '-' '{print $1}' | sort -t "." -n -k1,1 -k2,2 -k3,3 | tail -n1)
|
||||
fi
|
||||
log "VERSION: $MC_VERSION"
|
||||
}
|
||||
|
||||
try_forge_version() {
|
||||
ver=$(echo "$versions" | jq -r ".\"$MC_VERSION-$FORGE_VERSION\"")
|
||||
if [ "$ver" = "null" ] && [ "$FORGE_VERSION" != "latest" ]; then
|
||||
FORGE_VERSION=latest
|
||||
try_forge_version
|
||||
else
|
||||
echo "$ver"
|
||||
fi
|
||||
}
|
||||
|
||||
get_forge_version() {
|
||||
log "Getting FORGE VERSION for '$MC_TYPE'"
|
||||
if [ "$FORGE_VERSION" != "latest" ] && [ "$FORGE_VERSION" != "recommended" ]; then
|
||||
return;
|
||||
fi
|
||||
ver=$(try_forge_version)
|
||||
if [ "$ver" = "null" ]; then
|
||||
error "Invalid VERSION: $MC_VERSION-$FORGE_VERSION"
|
||||
fi
|
||||
FORGE_VERSION="$ver"
|
||||
log "FORGE VERSION: $FORGE_VERSION"
|
||||
}
|
||||
|
||||
search_for_url() {
|
||||
log "Searching for forge URL"
|
||||
log "Trying MC_VERSION-FORGE_VERSION"
|
||||
ver=$(get_forge_url "$MC_VERSION-$FORGE_VERSION")
|
||||
if [ "$ver" != "" ]; then url="$ver"; return 0; fi
|
||||
log "Trying MC_VERSION-FORGE_VERSION-MC_VERSION"
|
||||
ver=$(get_forge_url "$MC_VERSION-$FORGE_VERSION-$MC_VERSION")
|
||||
if [ "$ver" != "" ]; then url="$ver"; return 0; fi
|
||||
log "Trying MC_VERSION-FORGE_VERSION-mc172"
|
||||
ver=$(get_forge_url "$MC_VERSION-$FORGE_VERSION-mc172")
|
||||
if [ "$ver" != "" ]; then url="$ver"; return 0; fi
|
||||
error "Invalid VERSION: $MC_VERSION-$FORGE_VERSION"
|
||||
}
|
||||
|
||||
get_version
|
||||
get_forge_version
|
||||
search_for_url
|
||||
|
||||
if [ $ALL -eq 1 ]; then
|
||||
echo "JAR_NAME=forge-$MC_VERSION-$FORGE_VERSION-installer.jar"
|
||||
echo "JAR_URL=$url"
|
||||
echo "MC_TYPE=$MC_TYPE"
|
||||
echo "MC_VERSION=$MC_VERSION"
|
||||
echo "FORGE_VERSION=$FORGE_VERSION"
|
||||
else
|
||||
echo "$url"
|
||||
fi
|
||||
}
|
||||
|
||||
get_url() {
|
||||
log "TYPE: $MC_TYPE"
|
||||
|
||||
case "$MC_TYPE" in
|
||||
"vanilla")
|
||||
vanilla
|
||||
;;
|
||||
"paper" | "waterfall" | "velocity" | "folia")
|
||||
papermc
|
||||
;;
|
||||
"fabric")
|
||||
fabric
|
||||
;;
|
||||
"forge")
|
||||
forge
|
||||
;;
|
||||
*)
|
||||
error "Invalid TYPE: $MC_TYPE"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
usage() {
|
||||
printf "usage: mcjar [options]\n"
|
||||
}
|
||||
|
||||
help() {
|
||||
printf "usage: mcjar [options]\n\n"
|
||||
printf "options:\n"
|
||||
printf "\t-h\tshow this message\n"
|
||||
printf "\t-l\tshow logging (verbose)\n\n"
|
||||
printf "\t-a\toutput all variables\n\n"
|
||||
|
||||
printf "\t-t TYPE\t\tset the mc server type\n"
|
||||
printf "\t [vanilla,fabric,forge,paper,folia,velocity,waterfall]\n\n"
|
||||
printf "\t-v VERSION\tset the mc server version\n"
|
||||
printf "\t [latest,snapshot,<version>]\n\n"
|
||||
|
||||
printf "environment:\n"
|
||||
printf "\tMC_TYPE\t\tsets the mc server type (same as -t TYPE)\n"
|
||||
printf "\tMC_VERSION\tsets the mc server version (same as -v VERSION)\n\n"
|
||||
|
||||
printf "\tPAPERMC_BUILD\tsets the papermc build\n\n"
|
||||
|
||||
printf "\tFABRIC_LOADER\t\tsets the fabric loder version\n"
|
||||
printf "\tFABRIC_INSTALLER\tsets the fabric installer version\n\n"
|
||||
|
||||
printf "\tFORGE_VERSION\tsets the forge loader version\n\n"
|
||||
}
|
||||
|
||||
chk_command() {
|
||||
if ! command -v "$1" > /dev/null; then
|
||||
>&2 echo "error: command '$1' could not be found"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
chk_command jq
|
||||
chk_command curl
|
||||
chk_command getopts
|
||||
|
||||
while getopts "hlat:v:" arg 2> /dev/null; do
|
||||
case $arg in
|
||||
h)
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
l)
|
||||
QUIET=0
|
||||
;;
|
||||
a)
|
||||
ALL=1
|
||||
;;
|
||||
t)
|
||||
MC_TYPE=${OPTARG}
|
||||
;;
|
||||
v)
|
||||
MC_VERSION=${OPTARG}
|
||||
;;
|
||||
?)
|
||||
error "unknown option"
|
||||
;;
|
||||
esac;
|
||||
done;
|
||||
|
||||
get_url
|
259
minecraft/mclauncher
Normal file
259
minecraft/mclauncher
Normal file
|
@ -0,0 +1,259 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
#
|
||||
# DEFAULT VARIABLE GENERATORS
|
||||
#
|
||||
|
||||
jvm_args() {
|
||||
MEMORY="${MEMORY:-1G}"
|
||||
printf -- "-Xms$MEMORY -Xmx$MEMORY "
|
||||
printf -- "-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 "
|
||||
printf -- "-XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch "
|
||||
printf -- "-XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M "
|
||||
printf -- "-XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 "
|
||||
printf -- "-XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 "
|
||||
printf -- "-XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem "
|
||||
printf -- "-XX:MaxTenuringThreshold=1 "
|
||||
}
|
||||
|
||||
#
|
||||
# ENV VARS
|
||||
#
|
||||
|
||||
SERVER_DIR="$(realpath ${MC_DIR:-./server})"
|
||||
JVMARGS=${JVMARGS:-$(jvm_args)}
|
||||
|
||||
#
|
||||
# PREDEFINE VARS
|
||||
#
|
||||
|
||||
MCLAUNCHER_INFO=""
|
||||
MCLAUNCHER_BINARY=""
|
||||
MCLAUNCHER_QUIET=1
|
||||
|
||||
#
|
||||
# HELPERS
|
||||
#
|
||||
|
||||
error() {
|
||||
printf '\x1b[31m[ERROR]\t\x1b[0m%s\n' "$*" > /dev/stderr
|
||||
exit 1;
|
||||
}
|
||||
|
||||
log() {
|
||||
if [ "$MCLAUNCHER_QUIET" -eq 0 ]; then
|
||||
printf '\x1b[0m[LOG]\t%s\n' "$*" > /dev/stderr
|
||||
fi
|
||||
}
|
||||
|
||||
step() {
|
||||
if [ "$MCLAUNCHER_QUIET" -eq 0 ]; then
|
||||
printf '\x1b[36m[STEP]\t\x1b[0m%s\n' "$*" > /dev/stderr
|
||||
fi
|
||||
}
|
||||
|
||||
get_key() {
|
||||
echo "$MCLAUNCHER_INFO" | grep "$1=" | awk -F '=' '{ print $2 }'
|
||||
}
|
||||
|
||||
#
|
||||
# INFO STEP
|
||||
# gets the up to date information from mcjar
|
||||
#
|
||||
|
||||
info_step() {
|
||||
step "info"
|
||||
|
||||
# getting latest info from mcjar
|
||||
MCLAUNCHER_INFO="$(mcjar -a)"
|
||||
|
||||
[ "$MCLAUNCHER_QUIET" -eq 1 ] || echo "$MCLAUNCHER_INFO";
|
||||
}
|
||||
|
||||
#
|
||||
# BINARY STEP
|
||||
# attempts to find the current binary installed on the system
|
||||
#
|
||||
|
||||
binary_step_forge() {
|
||||
jar_name="$(get_key "JAR_NAME")"
|
||||
jar_prefix="${jar_name%-installer.jar}"
|
||||
suffixs="$(echo ".jar;-shim.jar;-universal.jar" | tr ";" "\n")"
|
||||
|
||||
IFS=$'\n'
|
||||
for suffix in $suffixs; do
|
||||
if [ -f "$SERVER_DIR/$jar_prefix$suffix" ]; then
|
||||
MCLAUNCHER_BINARY="$jar_prefix$suffix"
|
||||
return;
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
binary_step_default() {
|
||||
jar_name="$(get_key "JAR_NAME")"
|
||||
if [ -f "$SERVER_DIR/$jar_name" ]; then
|
||||
MCLAUNCHER_BINARY="$jar_name"
|
||||
fi
|
||||
}
|
||||
|
||||
binary_step() {
|
||||
step "binary"
|
||||
|
||||
MCLAUNCHER_BINARY=""
|
||||
type="$(get_key "MC_TYPE")"
|
||||
case "$type" in
|
||||
"forge")
|
||||
binary_step_forge
|
||||
;;
|
||||
*)
|
||||
binary_step_default
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$MCLAUNCHER_BINARY" != "" ]; then
|
||||
log "found binary '$MCLAUNCHER_BINARY'"
|
||||
else
|
||||
log "could not locate binary... will download"
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# DOWNLOAD STEP
|
||||
# download the binary if it needs to needs updated
|
||||
#
|
||||
|
||||
download_step() {
|
||||
step "download"
|
||||
|
||||
if [ "$MCLAUNCHER_BINARY" != "" ]; then
|
||||
log "jar is up to date... skipping"
|
||||
return;
|
||||
fi
|
||||
|
||||
# clean up old files
|
||||
rm -f "$SERVER_DIR"/*.jar
|
||||
rm -f "$SERVER_DIR"/*.jar.log
|
||||
rm -f "$SERVER_DIR"/*.bat
|
||||
rm -f "$SERVER_DIR/run.sh"
|
||||
|
||||
# update the jar
|
||||
log "jar is out of date... updating"
|
||||
jar_url="$(get_key "JAR_URL")"
|
||||
jar_name="$(get_key "JAR_NAME")"
|
||||
log "downloading '$jar_url'"
|
||||
wget -q "$jar_url" -O "$SERVER_DIR/$jar_name"
|
||||
MCLAUNCHER_BINARY="$jar_name"
|
||||
}
|
||||
|
||||
#
|
||||
# INSTALL STEP
|
||||
# some mc types need an extra install step to setup the server files before running
|
||||
#
|
||||
|
||||
install_step_forge() {
|
||||
log "installing forge server"
|
||||
jar_name="$(get_key "JAR_NAME")"
|
||||
java -jar "$SERVER_DIR/$jar_name" --installServer
|
||||
|
||||
binary_step_forge
|
||||
if [ "$MCLAUNCHER_BINARY" = "" ]; then
|
||||
error "could not locate forge binary"
|
||||
fi
|
||||
}
|
||||
|
||||
install_step() {
|
||||
step "install"
|
||||
|
||||
type="$(get_key "MC_TYPE")"
|
||||
case "$type" in
|
||||
"forge")
|
||||
install_step_forge
|
||||
;;
|
||||
*)
|
||||
log "install step not needed for '$type'"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
#
|
||||
# EXECUTE STEP
|
||||
# run the thing!!!!!!
|
||||
#
|
||||
|
||||
execute_step_default() {
|
||||
jar_name="$(get_key "JAR_NAME")"
|
||||
exec java $JVMARGS -jar "$SERVER_DIR/$jar_name" nogui
|
||||
}
|
||||
|
||||
execute_step_forge() {
|
||||
if [ -f "$SERVER_DIR/run.sh" ]; then
|
||||
echo "$JVMARGS" > "$SERVER_DIR/user_jvm_args.txt"
|
||||
chmod +x "$SERVER_DIR/run.sh"
|
||||
exec "$SERVER_DIR/run.sh" nogui
|
||||
else
|
||||
exec java $JVMARGS -jar "$SERVER_DIR/$MCLAUNCHER_BINARY" nogui
|
||||
fi
|
||||
}
|
||||
|
||||
execute_step() {
|
||||
step "execute"
|
||||
|
||||
echo "eula=true" > "$SERVER_DIR/eula.txt"
|
||||
|
||||
type="$(get_key "MC_TYPE")"
|
||||
case "$type" in
|
||||
"forge")
|
||||
execute_step_forge
|
||||
;;
|
||||
*)
|
||||
execute_step_default
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
chk_command() {
|
||||
if ! command -v "$1" > /dev/null; then
|
||||
>&2 echo "error: command '$1' could not be found"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
help() {
|
||||
printf "usage: mclauncher [options]\n\n"
|
||||
printf "options:\n"
|
||||
printf "\t-h\tshow this message\n"
|
||||
printf "\t-l\tshow logging (verbose)\n\n"
|
||||
printf "environment:\n"
|
||||
printf "\tsee 'mcjar -h' for environment\n"
|
||||
}
|
||||
|
||||
chk_command mcjar
|
||||
chk_command java
|
||||
chk_command awk
|
||||
chk_command getopts
|
||||
|
||||
while getopts "hl" arg 2>/dev/null; do
|
||||
case "$arg" in
|
||||
h)
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
l)
|
||||
MCLAUNCHER_QUIET=0
|
||||
;;
|
||||
?)
|
||||
error "unknown option"
|
||||
;;
|
||||
esac;
|
||||
done;
|
||||
|
||||
mkdir -p "$SERVER_DIR"
|
||||
cd "$SERVER_DIR"
|
||||
|
||||
info_step
|
||||
binary_step
|
||||
download_step
|
||||
install_step
|
||||
execute_step
|
Loading…
Reference in a new issue