|
20 | 20 | sudo mkdir -p /opt/minecraft |
21 | 21 | if ! id -u minecraft >/dev/null 2>&1; then sudo useradd -r -m -s /bin/bash minecraft; fi |
22 | 22 | sudo chown -R minecraft:minecraft /opt/minecraft |
23 | | -sudo chown "$(whoami)":"$(whoami)" /opt/minecraft |
24 | 23 | cd /opt/minecraft || exit 1 |
25 | 24 |
|
26 | 25 | # Fetch the latest PaperMC version |
|
60 | 59 | chmod +x start.sh |
61 | 60 |
|
62 | 61 | # Create update script |
63 | | -cat <<EOF > update.sh |
| 62 | +cat <<'EOF' > update.sh |
64 | 63 | #!/bin/bash |
| 64 | +set -euo pipefail |
65 | 65 | cd /opt/minecraft || exit 1 |
66 | | -LATEST_VERSION=\$(curl -s https://api.papermc.io/v2/projects/paper | jq -r '.versions | last') |
67 | | -LATEST_BUILD=\$(curl -s https://api.papermc.io/v2/projects/paper/versions/\$LATEST_VERSION | jq -r '.builds | last') |
| 66 | +LATEST_VERSION=$(curl -s https://api.papermc.io/v2/projects/paper | jq -r '.versions | last') |
| 67 | +LATEST_BUILD=$(curl -s https://api.papermc.io/v2/projects/paper/versions/"$LATEST_VERSION" | jq -r '.builds | last') |
| 68 | +BUILD_JSON="$(curl -s "https://api.papermc.io/v2/projects/paper/versions/${LATEST_VERSION}/builds/${LATEST_BUILD}")" |
| 69 | +EXPECTED_SHA="$(printf '%s' "$BUILD_JSON" | jq -r '.downloads.application.sha256')" |
| 70 | +JAR_NAME="$(printf '%s' "$BUILD_JSON" | jq -r '.downloads.application.name')" |
68 | 71 |
|
69 | | -wget -O server.jar "https://api.papermc.io/v2/projects/paper/versions/\$LATEST_VERSION/builds/\$LATEST_BUILD/downloads/paper-\$LATEST_VERSION-\$LATEST_BUILD.jar" |
70 | | -echo "✅ Update complete." |
| 72 | +wget -O "server.jar" "https://api.papermc.io/v2/projects/paper/versions/${LATEST_VERSION}/builds/${LATEST_BUILD}/downloads/${JAR_NAME}" |
| 73 | +ACTUAL_SHA="$(sha256sum server.jar | awk '{print $1}')" |
| 74 | +if [ -n "$EXPECTED_SHA" ] && [ "$EXPECTED_SHA" != "null" ]; then |
| 75 | + if [ "$ACTUAL_SHA" != "$EXPECTED_SHA" ]; then |
| 76 | + echo "ERROR: SHA256 mismatch for PaperMC (expected ${EXPECTED_SHA}, got ${ACTUAL_SHA})" |
| 77 | + exit 1 |
| 78 | + fi |
| 79 | + echo "SHA256 verified: ${ACTUAL_SHA}" |
| 80 | +else |
| 81 | + echo "WARNING: No upstream SHA provided; computed: ${ACTUAL_SHA}" |
| 82 | +fi |
| 83 | +
|
| 84 | +echo "✅ Update complete to version $LATEST_VERSION (build $LATEST_BUILD)" |
71 | 85 | EOF |
72 | 86 | chmod +x update.sh |
73 | 87 |
|
| 88 | +# Ensure all files are owned by the runtime user |
| 89 | +sudo chown -R minecraft:minecraft /opt/minecraft |
| 90 | + |
74 | 91 | # Start server in detached screen session |
75 | 92 | if command -v runuser >/dev/null 2>&1; then runuser -u minecraft -- bash -lc 'cd /opt/minecraft && screen -dmS minecraft ./start.sh'; else sudo -u minecraft bash -lc 'cd /opt/minecraft && screen -dmS minecraft ./start.sh'; fi |
76 | 93 |
|
77 | 94 | echo "✅ Minecraft Server setup complete!" |
78 | | -echo "To access console: sudo -u $(whoami) screen -r minecraft" |
| 95 | +echo "To access console: sudo -u minecraft screen -r minecraft" |
0 commit comments