110 lines
3.1 KiB
Bash
Executable File
110 lines
3.1 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
############
|
|
# 常量定义 #
|
|
############
|
|
|
|
REPO_URL="${REPO_URL:-https://gitea.service.jazzwhom.top/Passthem/pt-minecraft-modpack}"
|
|
REPO_REF="${REPO_REF:-main}"
|
|
PT_SERVER="${PT_SERVER:-server-02-skygrid}"
|
|
INSTALL_DIR="${INSTALL_DIR:-$(pwd)/pt-minecraft-modpack}"
|
|
ARCHIVE_PATH="${ARCHIVE_PATH:-$(pwd)/pt-minecraft-modpack.tar.gz}"
|
|
TMP_DIR="${TMP_DIR:-$(pwd)/pt-minecraft-modpack.__tmp}"
|
|
PT_JAVA_VERSION="${PT_JAVA_VERSION:-17}"
|
|
SERVER_MEMORY="${SERVER_MEMORY:-2048}"
|
|
PACKWIZ_INSTALLER_URL="${PACKWIZ_INSTALLER_URL:-https://github.com/packwiz/packwiz-installer/releases/latest/download/packwiz-installer.jar}"
|
|
|
|
openjdk8="/usr/bin/jdk/jdk1.8.0_361/bin/java"
|
|
openjdk11="/usr/bin/jdk/jdk-11.0.18/bin/java"
|
|
openjdk17="/usr/bin/jdk/jdk-17.0.6/bin/java"
|
|
openjdk19="/usr/bin/jdk/jdk-19.0.2/bin/java"
|
|
openjdk21="/usr/bin/jdk/jdk-21.0.2/bin/java"
|
|
openjdk25="/usr/bin/jdk/jdk-25.0.2/bin/java"
|
|
|
|
maxmem=$((SERVER_MEMORY - 1000))
|
|
|
|
case "$PT_JAVA_VERSION" in
|
|
8) JAVA_BIN="$openjdk8" ;;
|
|
11) JAVA_BIN="$openjdk11" ;;
|
|
17) JAVA_BIN="$openjdk17" ;;
|
|
19) JAVA_BIN="$openjdk19" ;;
|
|
21) JAVA_BIN="$openjdk21" ;;
|
|
25) JAVA_BIN="$openjdk25" ;;
|
|
*) JAVA_BIN="java" ;;
|
|
esac
|
|
|
|
PT_JAVA_ARGS="${PT_JAVA_ARGS:--Xms1024M -Xmx${maxmem}M}"
|
|
|
|
############
|
|
# 辅助函数 #
|
|
############
|
|
|
|
log() {
|
|
printf '[panel-entry] %s\n' "$*"
|
|
}
|
|
|
|
fail() {
|
|
printf '[panel-entry] ERROR: %s\n' "$*" >&2
|
|
exit 1
|
|
}
|
|
|
|
need_cmd() {
|
|
command -v "$1" >/dev/null 2>&1 || fail "缺少命令: $1"
|
|
}
|
|
|
|
need_cmd sh
|
|
need_cmd tar
|
|
need_cmd find
|
|
|
|
rm -rf "$TMP_DIR"
|
|
mkdir -p "$TMP_DIR"
|
|
|
|
log "下载仓库归档: $REPO_URL ($REPO_REF)"
|
|
if command -v curl >/dev/null 2>&1; then
|
|
curl -fL --retry 3 --retry-delay 2 -o "$ARCHIVE_PATH" "$REPO_URL/archive/$REPO_REF.tar.gz"
|
|
elif command -v wget >/dev/null 2>&1; then
|
|
wget -O "$ARCHIVE_PATH" "$REPO_URL/archive/$REPO_REF.tar.gz"
|
|
else
|
|
fail "缺少 curl 或 wget"
|
|
fi
|
|
|
|
log "解压仓库归档"
|
|
tar -xzf "$ARCHIVE_PATH" -C "$TMP_DIR"
|
|
|
|
EXTRACTED_DIR="$(find "$TMP_DIR" -mindepth 1 -maxdepth 1 -type d | head -n 1)"
|
|
[ -n "$EXTRACTED_DIR" ] || fail "解压失败"
|
|
|
|
if [ ! -d "$INSTALL_DIR" ]; then
|
|
mv "$EXTRACTED_DIR" "$INSTALL_DIR"
|
|
else
|
|
log "保留现有安装目录,仅覆盖仓库文件"
|
|
cp -r "$EXTRACTED_DIR"/. "$INSTALL_DIR"/
|
|
rm -rf "$EXTRACTED_DIR"
|
|
fi
|
|
rm -rf "$TMP_DIR" "$ARCHIVE_PATH"
|
|
|
|
cd "$INSTALL_DIR"
|
|
mkdir -p .pt-panel-runtime/downloads
|
|
|
|
log "下载 packwiz-installer"
|
|
if command -v curl >/dev/null 2>&1; then
|
|
curl -fL --retry 3 --retry-delay 2 -o .pt-panel-runtime/downloads/packwiz-installer.jar "$PACKWIZ_INSTALLER_URL"
|
|
elif command -v wget >/dev/null 2>&1; then
|
|
wget -O .pt-panel-runtime/downloads/packwiz-installer.jar "$PACKWIZ_INSTALLER_URL"
|
|
else
|
|
fail "缺少 curl 或 wget"
|
|
fi
|
|
|
|
log "调用仓库内 start.sh"
|
|
PT_REPO_URL="$REPO_URL" \
|
|
PT_REPO_REF="$REPO_REF" \
|
|
PT_SERVER="$PT_SERVER" \
|
|
PT_JAVA_ARGS="$PT_JAVA_ARGS" \
|
|
PT_JAVA_VERSION="$PT_JAVA_VERSION" \
|
|
SERVER_MEMORY="$SERVER_MEMORY" \
|
|
JAVA_BIN="$JAVA_BIN" \
|
|
PT_PACKWIZ_BOOTSTRAP_NO_UPDATE="${PT_PACKWIZ_BOOTSTRAP_NO_UPDATE:-1}" \
|
|
PT_PACKWIZ_BOOTSTRAP_MAIN_JAR="$(pwd)/.pt-panel-runtime/downloads/packwiz-installer.jar" \
|
|
bash ./start.sh
|