diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-12 13:53:16 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-12 13:53:16 -0400 |
commit | fefed51ba577431c18b6f703b9ea3c5fa43a73d3 (patch) | |
tree | d31d253816b690da1fe840ab09863d013825f8a6 | |
parent | openrc (diff) | |
download | images-fefed51ba577431c18b6f703b9ea3c5fa43a73d3.tar.gz images-fefed51ba577431c18b6f703b9ea3c5fa43a73d3.tar.bz2 images-fefed51ba577431c18b6f703b9ea3c5fa43a73d3.zip |
update minecraft image
-rwxr-xr-x | env | 32 | ||||
-rw-r--r-- | minecraft/Dockerfile | 13 | ||||
-rwxr-xr-x | minecraft/build | 23 | ||||
-rwxr-xr-x | minecraft/mcjar | 43 | ||||
-rwxr-xr-x[-rw-r--r--] | minecraft/mclauncher | 77 |
5 files changed, 176 insertions, 12 deletions
@@ -0,0 +1,32 @@ +#!/bin/sh + +# container registry +REMOTE="g.freya.cat" +USER="freya" + +# image info +IMAGE="image" +TAG="latest" +ARCH="linux/amd64,linux/arm64" + +# builder args +ALPINE_VERSION="3.21" + +init() { + docker login "$REMOTE" -u "$USER" + current="$(docker buildx inspect | head -n 1 | awk '{ print $2 }')" + if [ "$current" != "builder" ]; then + docker buildx create --name builder + docker buildx use builder + fi +} + +buildx() { + docker buildx build \ + --push \ + --platform "$ARCH" \ + -t "$REMOTE/$USER/$IMAGE:$TAG" \ + --build-arg "ALPINE_VERSION=$ALPINE_VERSION" \ + $@ \ + . +} diff --git a/minecraft/Dockerfile b/minecraft/Dockerfile index 58b536e..058e450 100644 --- a/minecraft/Dockerfile +++ b/minecraft/Dockerfile @@ -1,12 +1,15 @@ -FROM alpine +ARG JAVA_VERSION="21" +ARG ALPINE_VERSION="3.21" +FROM alpine:${ALPINE_VERSION} # 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 +ARG JAVA_VERSION +ENV LANG=en_US.UTF-8 +ENV JAVA_HOME=/usr/lib/jvm/java-${JAVA_VERSION}-openjdk +ENV PATH=/usr/lib/jvm/java-${JAVA_VERSION}-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 apk add --no-cache tini wget openjdk${JAVA_VERSION}-jre jq curl shadow fontconfig ttf-dejavu p7zip # copy scripts COPY ./mcjar /usr/local/bin/mcjar diff --git a/minecraft/build b/minecraft/build new file mode 100755 index 0000000..8fd2655 --- /dev/null +++ b/minecraft/build @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e + +. ../env + +IMAGE=minecraft + +build() { + local TAG="$1" + local ARCH="$ARCH" + if [ $2 -eq 8 ]; then + ARCH="$ARCH,linux/386,linux/arm/v6,linux/arm/v7" + fi + buildx --build-arg "JAVA_VERSION=$2" +} + +init +build java8 8 +build java11 11 +build java17 17 +build java21 21 +build latest 21 diff --git a/minecraft/mcjar b/minecraft/mcjar index 54e95d5..957032e 100755 --- a/minecraft/mcjar +++ b/minecraft/mcjar @@ -23,6 +23,9 @@ FABRIC_INSTALLER="$(lower "${FABRIC_INSTALLER:-latest}")" # forge FORGE_VERSION="$(lower "${FORGE_VERSION:-recommended}")" +# neoforged +NEOFORGED_VERSION="$(lower "${NEOFORGED_VERSION:-latest}")" + # other QUIET=1 @@ -303,6 +306,43 @@ forge() { fi } +neoforged() { + versions=$(req "https://maven.neoforged.net/api/maven/versions/releases/net/neoforged/neoforge" | jq -r '.versions[]') + prefix="${MC_VERSION#"1."}" + + # get requested server version + if [ "$MC_VERSION" != "latest" ]; then + versions="$(echo "$versions" | grep "$prefix" || true)" + fi + + # get neoforged version + if [ "$NEOFORGED_VERSION" = "latest" ]; then + version="$(echo "$versions" | tail -n1)" + if [ "$version" = "" ]; then + error "invalid MC_VERSION: $MC_VERSION" + fi + else + version="$NEOFORGED_VERSION" + if ! echo "$versions" | grep -q "$version"; then + error "invalid NEOFORGED_VERSION: $version" + fi + fi + + # get jar url + url="https://maven.neoforged.net/releases/net/neoforged/neoforge/$version/neoforge-$version-installer.jar" + + if [ $ALL -eq 1 ]; then + echo "JAR_NAME=neoforge-$version-installer.jar" + echo "JAR_URL=$url" + echo "MC_TYPE=$MC_TYPE" + echo "MC_VERSION=$MC_VERSION" + echo "NEOFORGED_VERSION=$version" + else + echo "$url" + fi + +} + get_url() { log "TYPE: $MC_TYPE" @@ -319,6 +359,9 @@ get_url() { "forge") forge ;; + "neoforged") + neoforged + ;; *) error "Invalid TYPE: $MC_TYPE" ;; diff --git a/minecraft/mclauncher b/minecraft/mclauncher index 487c929..98a2610 100644..100755 --- a/minecraft/mclauncher +++ b/minecraft/mclauncher @@ -6,8 +6,9 @@ set -e # DEFAULT VARIABLE GENERATORS # +MEMORY="${MEMORY:-1G}" + 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 " @@ -18,6 +19,10 @@ jvm_args() { printf -- "-XX:MaxTenuringThreshold=1" } +lower() { + echo "$1" | tr '[:upper:]' '[:lower:]' +} + # # ENV VARS # @@ -25,13 +30,24 @@ jvm_args() { SERVER_DIR="$(realpath ${SERVER_DIR:-./server})" JVMARGS=${JVMARGS:-$(jvm_args)} +MC_TYPE="$(lower "${MC_TYPE:-vanilla}")" +MC_VERSION="$(lower "${MC_VERSION:-latest}")" + # # PREDEFINE VARS # MCLAUNCHER_INFO="" MCLAUNCHER_BINARY="" -MCLAUNCHER_QUIET=1 +MCLAUNCHER_QUIET=0 +MCLAUNCHER_CACHE="$SERVER_DIR/.mclauncher" + +# +# INTERNET CHECK +# + +HAS_INTERNET=1 +UPDATED=0 # # HELPERS @@ -48,6 +64,12 @@ log() { fi } +warn() { + if [ "$MCLAUNCHER_QUIET" -eq 0 ]; then + printf '\x1b[33m[WARN]\t\x1b[0m%s\n' "$*" > /dev/stderr + fi +} + step() { if [ "$MCLAUNCHER_QUIET" -eq 0 ]; then printf '\x1b[36m[STEP]\t\x1b[0m%s\n' "$*" > /dev/stderr @@ -66,9 +88,29 @@ get_key() { info_step() { step "info" - # getting latest info from mcjar - MCLAUNCHER_INFO="$(mcjar -a)" + # check if we can use the internet + if ! nc -zw1 google.com 443 &>/dev/null; then + warn "Cannot internet access internet" + HAS_INTERNET=0 + fi + + # get the latest from mcjar if possible + if [ $HAS_INTERNET -eq 1 ]; then + if ! MCLAUNCHER_INFO="$(mcjar -a)"; then + warn "Failed to get newest information from mcjar" + MCLAUNCHER_INFO="" + fi + fi + # get information from cache if latest failed + if [ "$MCLAUNCHER_INFO" == "" ]; then + if [ ! -e "$MCLAUNCHER_CACHE" ]; then + error "No offline cache file found" + fi + MCLAUNCHER_INFO="$(cat "$MCLAUNCHER_CACHE")" + fi + + echo "$MCLAUNCHER_INFO" > "$MCLAUNCHER_CACHE" [ "$MCLAUNCHER_QUIET" -eq 1 ] || echo "$MCLAUNCHER_INFO"; } @@ -128,15 +170,24 @@ download_step() { step "download" if [ "$MCLAUNCHER_BINARY" != "" ]; then - log "jar is up to date... skipping" - return; + # check if jar file is valid + if ! 7z t "$MCLAUNCHER_BINARY" &>/dev/null; then + warn "jar file is corrupted" + else + log "jar is up to date... skipping" + return; + fi + fi + + if [ $HAS_INTERNET -eq 0 ]; then + error "Cannot download jar due to lack of internet" 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" + rm -f "$SERVER_DIR"/run.sh # update the jar log "jar is out of date... updating" @@ -145,6 +196,7 @@ download_step() { log "downloading '$jar_url'" wget -q "$jar_url" -O "$SERVER_DIR/$jar_name" MCLAUNCHER_BINARY="$jar_name" + UPDATED=1 } # @@ -166,11 +218,19 @@ install_step_forge() { install_step() { step "install" + if [ "$UPDATED" -eq 0 ]; then + log "jar not updated... skipping" + return; + fi + type="$(get_key "MC_TYPE")" case "$type" in "forge") install_step_forge ;; + "neoforged") + install_step_forge + ;; *) log "install step not needed for '$type'" ;; @@ -207,6 +267,9 @@ execute_step() { "forge") execute_step_forge ;; + "neoforged") + execute_step_forge + ;; *) execute_step_default ;; |