-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathsetup_bedrock.sh
More file actions
executable file
·86 lines (72 loc) · 3.59 KB
/
setup_bedrock.sh
File metadata and controls
executable file
·86 lines (72 loc) · 3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env bash
set -euo pipefail
# ── Minecraft Bedrock Server Installer ── v3.0 ──
apt update
apt install -y unzip wget screen curl ca-certificates
if ! id -u minecraft >/dev/null 2>&1; then useradd -r -m -s /bin/bash minecraft; fi
mkdir -p /opt/minecraft-bedrock
chown -R minecraft:minecraft /opt/minecraft-bedrock
cd /opt/minecraft-bedrock
# Scrape Mojang page for the latest Linux ZIP link
# NOTE: Regex matches both old (1.x.x) and new (26.x) Mojang versioning schemes
HTML=$(curl -fsSL --http1.1 -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "https://www.minecraft.net/en-us/download/server/bedrock")
LATEST_URL=$(printf '%s' "$HTML" | grep -Eo 'https://www\.minecraft\.net/bedrockdedicatedserver/bin-linux/bedrock-server-[0-9.]+\.zip' | head -1)
if [[ -z "${LATEST_URL:-}" ]]; then
echo "ERROR: Could not find Bedrock server URL on Mojang page" >&2
exit 1
fi
# HEAD check for MIME type and optional size
if ! curl -fsSI --http1.1 -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "$LATEST_URL" | grep -iqE '^content-type:\s*(application/zip|application/octet-stream)'; then
echo "ERROR: Unexpected Content-Type for Bedrock ZIP (must be application/zip or octet-stream)" >&2
exit 1
fi
echo "Downloading: $LATEST_URL"
curl -fL --http1.1 -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" --retry 3 --retry-delay 2 -o bedrock-server.zip "$LATEST_URL"
zip_size=$(stat -c '%s' bedrock-server.zip)
if (( zip_size < 1048576 )); then # 1MB sanity check
echo "ERROR: Downloaded bedrock-server.zip is too small (${zip_size} bytes)." >&2
exit 1
fi
ACTUAL_SHA=$(sha256sum bedrock-server.zip | awk '{print $1}')
echo "bedrock-server.zip sha256: ${ACTUAL_SHA}"
# NOTE: Enforce checksum by default; require REQUIRED_BEDROCK_SHA256 when REQUIRE_BEDROCK_SHA=1
if [[ "${REQUIRE_BEDROCK_SHA:=1}" = "1" ]]; then
if [[ -z "${REQUIRED_BEDROCK_SHA256:-}" ]]; then
echo "ERROR: Set REQUIRED_BEDROCK_SHA256 to a known-good value (export REQUIRED_BEDROCK_SHA256=<sha>)" >&2
exit 1
fi
if [[ "${ACTUAL_SHA}" != "${REQUIRED_BEDROCK_SHA256}" ]]; then
echo "ERROR: SHA256 mismatch (expected ${REQUIRED_BEDROCK_SHA256}, got ${ACTUAL_SHA})" >&2
exit 1
fi
fi
# Test and extract the archive
unzip -tq bedrock-server.zip >/dev/null
unzip -o bedrock-server.zip && rm -f bedrock-server.zip
if [[ ! -f bedrock_server ]]; then
echo "ERROR: bedrock_server binary missing after extraction" >&2
exit 1
fi
cat > start.sh <<'E2'
#!/usr/bin/env bash
exec env LD_LIBRARY_PATH=. ./bedrock_server
E2
chmod +x start.sh
chown -R minecraft:minecraft /opt/minecraft-bedrock
# Ensure screen runtime directory exists with correct ownership and mode
# NOTE: Required on Debian 12/13 so screen can create sockets.
# In LXC, utmp group may not exist; fall back to root:root with 0777
if getent group utmp >/dev/null 2>&1; then
install -d -m 0775 -o root -g utmp /run/screen || true
printf 'd /run/screen 0775 root utmp -\n' > /etc/tmpfiles.d/screen.conf
else
install -d -m 0777 -o root -g root /run/screen || true
printf 'd /run/screen 0777 root root -\n' > /etc/tmpfiles.d/screen.conf
fi
systemd-tmpfiles --create /etc/tmpfiles.d/screen.conf || true
if command -v runuser >/dev/null 2>&1; then
runuser -u minecraft -- bash -lc 'cd /opt/minecraft-bedrock && screen -dmS bedrock ./start.sh'
else
su -s /bin/bash -c 'cd /opt/minecraft-bedrock && screen -dmS bedrock ./start.sh' minecraft
fi
echo "✅ Setup complete. Attach: screen -r bedrock"