Created
January 13, 2025 15:00
-
-
Save troyfontaine/da231c30eb6bac55d4ae8bcadd29c9b5 to your computer and use it in GitHub Desktop.
Minecraft Bedrock Upgrade Script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
############################################################################### | |
# Minecraft Bedrock Server Update Script | |
# | |
# Intended to be used on Linux with a dedicated Bedrock Minecraft Server | |
# | |
# NOT COMPATIBLE WITH JAVA EDITION | |
# | |
# This script is intended to be used only in the following installation scenario | |
# if yours is different, then please modify the variables to fit your | |
# installation | |
# - The Minecraft install is using a dedicated user | |
# - The Minecraft install user has the username mcserver | |
# - The Minecraft install is located at /home/mcserver/minecraft_bedrock | |
# - The Minecraft server is managed via Systemd unit file | |
# - The Minecraft server's unit file is mcbedrock.service | |
############################################################################### | |
# Check for dependencies | |
if ! command -v date 2>&1 >/dev/null; then | |
echo "'date' command was not found. Exiting!" | |
exit 1 | |
fi | |
if ! command -v curl 2>&1 >/dev/null; then | |
echo "'curl' command was not found. Exiting!" | |
exit 1 | |
fi | |
if ! command -v wget 2>&1 >/dev/null; then | |
echo "'wget' command was not found. Exiting!" | |
exit 1 | |
fi | |
CURRENT_DATE=$(date +%Y-%m-%d) | |
DOWNLOAD_URL=$(curl -H "Accept-Encoding: identity" -H "Accept-Language: en" -s -L -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BEDROCK-UPDATER)" https://minecraft.net/en-us/download/server/bedrock/ | grep -o 'https.*/bin-linux/.*.zip') | |
BEDROCK_USERNAME="mcserver" | |
BEDROCK_USER_HOME="/home/${BEDROCK_USERNAME}" | |
BEDROCK_EXTRACT_DIR="${BEDROCK_USER_HOME}/extract" | |
BEDROCK_INSTALL_DIR="${BEDROCK_USER_HOME}/minecraft_bedrock" | |
BEDROCK_BACKUP_DIR="${BEDROCK_USER_HOME}/backup/${CURRENT_DATE}" | |
if [ "$EUID" -ne 0 ]; then | |
echo "Please execute this script as root" | |
exit 1 | |
fi | |
if ! id -u "${BEDROCK_USERNAME}" >/dev/null 2>&1; then | |
echo "Required user '${BEDROCK_USERNAME}' not found. Exiting!" | |
exit 1 | |
fi | |
# if [ -d "${BEDROCK_USER_HOME}/" ]; then | |
# echo "Expected home directory for Bedrock User '${BEDROCK_USERNAME}' at ${BEDROCK_USER_HOME} does not exist. Please check configuration! Exiting!" | |
# exit 1 | |
# fi | |
if [ -f "${BEDROCK_USER_HOME}/bedrock-server.zip" ]; then | |
rm -rf "${BEDROCK_USER_HOME}/bedrock-server.zip" | |
fi | |
# Download the latest server installation files | |
wget -U "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BEDROCK-UPDATER)" "${DOWNLOAD_URL}" -O "${BEDROCK_USER_HOME}/bedrock-server.zip" | |
if [ ! -f "${BEDROCK_USER_HOME}/bedrock-server.zip" ]; then | |
echo "Failed to download bedrock server. Please check your connection or if the download url has changed on 'minecraft.net'. Exiting!" | |
exit 1 | |
fi | |
if [ ! -d "${BEDROCK_EXTRACT_DIR}/" ]; then | |
mkdir -p "${BEDROCK_EXTRACT_DIR}" | |
else | |
rm -rf "${BEDROCK_EXTRACT_DIR}" | |
mkdir -p "${BEDROCK_EXTRACT_DIR}" | |
fi | |
# Extract the upgrade | |
unzip "${BEDROCK_USER_HOME}/bedrock-server.zip" -d "${BEDROCK_EXTRACT_DIR}/" | |
# Check the extracted contents | |
if [ ! -f "${BEDROCK_EXTRACT_DIR}/server.properties" ];then | |
echo "Failed to locate required file in downloaded zip file extraction directory. Exiting!" | |
exit 1 | |
fi | |
# Backup the existing install | |
# Make our backup directory | |
mkdir -p "${BEDROCK_BACKUP_DIR}/${CURRENT_DATE}" | |
systemctl stop mcbedrock.service | |
echo "Backing up the Bedrock Server Files" | |
# Backup the Bedrock server files | |
rsync -avz "${BEDROCK_INSTALL_DIR}/" "${BEDROCK_BACKUP_DIR}/" | |
echo "Syncing the new files to the existing Bedrock Folder" | |
# Copy the updated server files into the installation directory | |
rsync -avrz "${BEDROCK_EXTRACT_DIR}/bedrock_server" "${BEDROCK_INSTALL_DIR}/" | |
rsync -avrz "${BEDROCK_EXTRACT_DIR}/behavior_packs" "${BEDROCK_INSTALL_DIR}/" | |
rsync -avrz "${BEDROCK_EXTRACT_DIR}/config" "${BEDROCK_INSTALL_DIR}/" | |
rsync -avrz "${BEDROCK_EXTRACT_DIR}/definitions" "${BEDROCK_INSTALL_DIR}/" | |
rsync -avrz "${BEDROCK_EXTRACT_DIR}/permissions.json" "${BEDROCK_INSTALL_DIR}/" | |
rsync -avrz "${BEDROCK_EXTRACT_DIR}/release-notes.txt" "${BEDROCK_INSTALL_DIR}/" | |
rsync -avrz "${BEDROCK_EXTRACT_DIR}/resource_packs" "${BEDROCK_INSTALL_DIR}/" | |
# Fix permissions on the copied files | |
chown mcserver:mcserver "${BEDROCK_INSTALL_DIR}" | |
systemctl start mcbedrock.service | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment