Last active
April 6, 2023 07:31
-
-
Save ConoHa/d16fedf984db8484cbeb867fcbce5534 to your computer and use it in GitHub Desktop.
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
#!/bin/bash | |
set -eu | |
yum install -y jq | |
readonly MINECRAFT_DIR="/opt/minecraft_server" | |
readonly BACKUP_DIR_PREFIX="backup" | |
readonly MINECRAFT_SERVER_SERVICE="/etc/systemd/system/minecraft-server.service" | |
readonly MINECRAFT_SERVER_LATEST_VER=$( curl https://launchermeta.mojang.com/mc/game/version_manifest.json|jq -r '."latest"."release"' ) | |
readonly MINECRAFT_SERVER_LATEST_MANIFEST_URL=$( curl https://launchermeta.mojang.com/mc/game/version_manifest.json | jq -r ".\"versions\"[] | select (.\"id\"==\"${MINECRAFT_SERVER_LATEST_VER}\") | .\"url\" " ) | |
readonly MINECRAFT_SERVER_LATEST_JAR_URL=$( curl "${MINECRAFT_SERVER_LATEST_MANIFEST_URL}" | jq -r ".\"downloads\".\"server\".\"url\"" ) | |
readonly MINECRAFT_SERVER_CURRENT_INSTALLED_VER=$( find /opt/minecraft_server -maxdepth 1 -name "*.jar" | cut -d '/' -f4 | sed -e "s/minecraft_server\.//" -e "s/\.jar//" ) | |
readonly BACKUP_DIR="${MINECRAFT_SERVER_CURRENT_INSTALLED_VER}-$(date --iso-8601='minutes')" | |
function fullfill_requirements(){ | |
echo "Fullfill requirements" | |
yum install -y screen | |
groupadd minecraft || true | |
useradd -g minecraft minecraft || true | |
} | |
function backup_installed_minecraft(){ | |
echo "Backup installed minecraft" | |
mkdir -p "${MINECRAFT_DIR}/${BACKUP_DIR_PREFIX}/${BACKUP_DIR}" | |
cp -r ${MINECRAFT_DIR}/[^backup]* "${MINECRAFT_DIR}/${BACKUP_DIR_PREFIX}/${BACKUP_DIR}" | |
mv /etc/systemd/system/minecraft-server.service "${MINECRAFT_DIR}/${BACKUP_DIR_PREFIX}/${BACKUP_DIR}" | |
} | |
function install_latest_openjdk(){ | |
echo "Install latest openjdk" | |
yum install -y java-latest-openjdk | |
local latest_java_profile_number | |
readonly latest_java_profile_number=$(echo '' | alternatives --config java | grep 'latest'|awk '{print $1}') | |
echo "${latest_java_profile_number}" | alternatives --config java | |
} | |
function install_latest_minecraft_server(){ | |
echo "Install latest minecraft server: ${MINECRAFT_SERVER_LATEST_VER}" | |
rm "${MINECRAFT_DIR}/minecraft_server.${MINECRAFT_SERVER_CURRENT_INSTALLED_VER}.jar" | |
wget "${MINECRAFT_SERVER_LATEST_JAR_URL}" -O "${MINECRAFT_DIR}/minecraft_server.${MINECRAFT_SERVER_LATEST_VER}.jar" | |
chown -R minecraft:minecraft ${MINECRAFT_DIR} | |
} | |
function generate_systemd_service(){ | |
local jvm_xmx_param | |
readonly jvm_xmx_param=${1} | |
echo "Generate newer systemd.service for Minecraft server" | |
cat >> ${MINECRAFT_SERVER_SERVICE} <<EOF | |
[Unit] | |
Description=Minecraft Server | |
After=network.target | |
[Service] | |
WorkingDirectory=${MINECRAFT_DIR} | |
User=minecraft | |
Group=minecraft | |
ProtectSystem=full | |
ProtectHome=true | |
ExecStart=/bin/sh -c '/usr/bin/screen -DmS minecraft /usr/bin/java -server -Xms512M -Xmx${jvm_xmx_param} -XX:+UseG1GC -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -jar ${MINECRAFT_DIR}/minecraft_server.${MINECRAFT_SERVER_LATEST_VER}.jar --forceUpgrade nogui' | |
ExecReload=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "reload"\\015' | |
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say SERVER SHUTTING DOWN. Saving map..."\\015' | |
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "save-all"\\015' | |
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "stop"\\015' | |
ExecStop=/bin/sleep 5 | |
Restart=on-failure | |
RestartSec=60s | |
[Install] | |
WantedBy=multi-user.target | |
EOF | |
systemctl daemon-reload | |
} | |
function get_java_xmx_param(){ | |
for line in $(grep ExecStart ${MINECRAFT_SERVER_SERVICE});do | |
if echo "${line}" | grep -q "\-Xmx"; then | |
echo "${line}" | tr -d "\-Xmx" | |
fi | |
done | |
} | |
function main(){ | |
yum makecache | |
systemctl disable --now minecraft-server.service | |
fullfill_requirements | |
local jvm_xmx_param | |
readonly jvm_xmx_param=$(get_java_xmx_param) | |
backup_installed_minecraft | |
local default_java_version | |
readonly default_java_version=$(java -version |& grep version | awk '{print $3}' | tr -d '"') | |
local query_java_180="1.8.0*" | |
if [[ ${default_java_version} =~ ${query_java_180} ]];then | |
install_latest_openjdk | |
fi | |
install_latest_minecraft_server | |
generate_systemd_service "${jvm_xmx_param}" | |
systemctl enable --now minecraft-server.service | |
} | |
main |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment