Files
pyMCDPS/deploy.sh

213 lines
6.3 KiB
Bash
Raw Permalink Normal View History

2024-10-11 18:12:24 +02:00
#!/bin/bash
2024-10-11 20:40:56 +02:00
2024-10-11 18:12:24 +02:00
# Script in strict mode
2024-10-11 20:46:15 +02:00
set -eu
2024-10-11 18:12:24 +02:00
# --------------------------------------------------------------------------
# Imports
# --------------------------------------------------------------------------
# Beginning Of the Script by cerberus
cat <<EOF
__ __ ____ ____ ____
| \/ / ___|| _ \/ ___|
| |\/| \___ \| | | \___ \\
| | | |___) | |_| |___) |
|_| |_|____/|____/|____/
EOF
2024-10-12 13:38:26 +02:00
2024-10-11 19:50:01 +02:00
# --------------------------------------------------------
# Checking Dependencies
# --------------------------------------------------------
2024-10-12 13:38:26 +02:00
2024-10-12 13:08:09 +02:00
echo "Checking dependencies..."
2024-10-12 14:07:39 +02:00
sleep 2
2024-10-12 14:47:01 +02:00
2024-10-12 15:44:07 +02:00
# Check if Java is installed by checking the output of 'java -version'
if ! java -version &>/dev/null; then
echo "Java is not installed. Installing Java and necessary packages..."
2024-10-12 14:47:01 +02:00
2024-10-12 15:44:07 +02:00
# Update and install necessary packages
sudo apt update && sudo apt upgrade -y
sudo apt install -y openjdk-17-jdk openjdk-17-jre-headless tmux
# Add necessary commands to /etc/rc.local if not already present
if ! grep -q "exec 1>/tmp/rc.local.log" /etc/rc.local; then
sudo tee -a /etc/rc.local > /dev/null <<EOL
2024-10-12 14:47:01 +02:00
#!/bin/bash
exec 1>/tmp/rc.local.log 2>&1
set -x
EOL
2024-10-12 15:24:09 +02:00
fi
2024-10-12 15:44:07 +02:00
# Make /etc/rc.local executable
sudo chmod +x /etc/rc.local
2024-10-12 15:18:48 +02:00
else
2024-10-12 15:44:07 +02:00
echo "Java is already installed, proceeding..."
2024-10-12 14:47:01 +02:00
fi
2024-10-12 15:09:08 +02:00
2024-10-12 15:24:09 +02:00
# Final message
2024-10-12 15:09:08 +02:00
echo "All required programs are already installed and rc.local is configured. Proceeding with installation..."
2024-10-12 15:24:09 +02:00
2024-10-12 14:47:01 +02:00
sleep 2
2024-10-12 13:38:26 +02:00
# --------------------------------------------------------
# Installation Directories
# --------------------------------------------------------
echo "Give your server a name. Under the ~/servername you can later"
echo "find all server files and the management script."
2024-10-12 13:40:08 +02:00
echo 'Use "-" or "_" as name seperator!'
2024-10-12 13:38:26 +02:00
read -p "Servername: " name
2024-10-27 12:05:40 +01:00
# Setting directoriy variables
2024-10-12 13:38:26 +02:00
working_dir="$HOME/$name"
management_dir="$HOME/$name/management"
2024-10-12 13:42:05 +02:00
management_logs="$HOME/$name/management/installation_logs"
2024-10-12 13:38:26 +02:00
server_dir="$HOME/$name/server"
echo "Creating directories"
mkdir $working_dir
mkdir $management_dir
mkdir $management_logs
2024-10-12 14:02:08 +02:00
mkdir $server_dir
# --------------------------------------------------------
# Modloader Selection
# --------------------------------------------------------
echo What Modloader should be used?
2024-10-27 12:05:40 +01:00
modloader=("Forge" "Fabric" "Paper")
2024-10-12 14:02:08 +02:00
select opt in "${modloader[@]}"
do
case $opt in
"Forge")
break
;;
"Fabric")
echo "Fabric is not supported yet"
exit 1
break
;;
2024-10-27 12:05:40 +01:00
"Paper")
echo "Paper is not supported yet"
exit 1
break
;;
2024-10-12 14:02:08 +02:00
*)
echo "Invalid selection"
;;
esac
done
# --------------------------------------------------------
# Select MC-Version
# --------------------------------------------------------
echo "Give the minecraft and forge version in following format:"
echo "mc.version-forge.version e.g.: 1.20.1-47.3.0"
read -p "Version: " version
2024-10-12 14:09:57 +02:00
# echo $version # Logging output
# sleep 1
2024-10-12 14:05:34 +02:00
# Building installer download URL
URL="https://maven.minecraftforge.net/net/minecraftforge/forge/${version}/forge-${version}-installer.jar"
2024-10-12 14:09:57 +02:00
# echo $URL # Logging output
# --------------------------------------------------------
# Downloading Installer
# --------------------------------------------------------
2024-10-12 14:05:34 +02:00
2024-10-12 14:13:07 +02:00
echo "Downloading Installer..."
2024-10-12 14:42:38 +02:00
wget -P $server_dir "$URL" -o "$management_logs/wget.log" & # no output for wget
2024-10-12 14:09:57 +02:00
PID=$!
(
while kill -0 $PID 2> /dev/null; do
echo "Downloading....."
2024-10-12 16:00:45 +02:00
sleep 5
2024-10-12 14:09:57 +02:00
done
echo "Download finished."
2024-10-12 14:28:23 +02:00
) &
2024-10-12 14:42:38 +02:00
wait $PID
2024-10-12 17:53:43 +02:00
sleep 6
2024-10-12 14:26:07 +02:00
# --------------------------------------------------------
# Installing Server
# --------------------------------------------------------
echo "Installing Server"
2024-10-12 14:42:38 +02:00
cd "${server_dir}"
2024-10-12 14:26:07 +02:00
sleep 1
2024-10-12 14:42:38 +02:00
java -jar forge-${version}-installer.jar --installServer > /dev/null 2>&1 &
2024-10-12 14:26:07 +02:00
# Store the PID of the installer process
PID=$!
# Progress monitoring while the server is installing
(
while kill -0 $PID 2> /dev/null; do
echo "Installing server....."
sleep 5
done
echo "Server installation finished."
)
echo "Removing Installer"
2024-10-12 14:46:09 +02:00
rm "forge-${version}-installer.jar"
mv "forge-${version}-installer.jar.log" $management_logs
2024-10-12 15:56:14 +02:00
rm run.sh
2024-10-12 14:48:42 +02:00
2024-10-12 15:58:10 +02:00
# --------------------------------------------------------
2024-10-13 11:10:38 +02:00
# Creating Launch Script
2024-10-12 15:58:10 +02:00
# --------------------------------------------------------
# Will be reworked soon. Aim is to create an stattic
# script, server_manager.sh. Version and important information
# from the install script will be passed in a seperate file
# which needs to be sourced by the manager.
2024-10-13 11:10:38 +02:00
echo "Creating Launch Hook"
2024-10-12 18:18:05 +02:00
echo "There is for now only a headles version available!"
sleep 5
touch $server_dir/start_server.sh
echo "#!/bin/bash" > "${server_dir}/start_server.sh"
2024-10-15 20:02:49 +02:00
echo "java -Djava.awt.headless=true @user_jvm_args.txt @libraries/net/minecraftforge/forge/${version}/unix_args.txt" >> "${server_dir}/start_server.sh"
2024-10-12 18:18:05 +02:00
chmod +x $server_dir/start_server.sh
2024-10-12 15:58:10 +02:00
2024-10-12 18:20:25 +02:00
2024-10-13 12:31:41 +02:00
# --------------------------------------------------------
# Creating .env for server_manager
# --------------------------------------------------------
touch $management_dir/.env
chmod 600 $management_dir/.env
2024-10-13 14:54:47 +02:00
echo "# General Information" >> $management_dir/.env
2024-10-15 14:49:18 +02:00
echo "server_name=${name}" >> $management_dir/.env
echo "version=${version}" >> $management_dir/.env
2024-10-13 14:54:47 +02:00
echo " " >> $management_dir/.env
echo "# Paths" >> $management_dir/.env
echo "main=${working_dir}" >> $management_dir/.env
echo "server=${server_dir}" >> $management_dir/.env
echo "management=${management_dir}" >> $management_dir/.env
echo "logs=${management_logs}" >> $management_dir/.env
echo " " >> $management_dir/.env
echo "# Start Script" >> $management_dir/.env
echo "s_start=${server_dir}/start_server.sh" >> $management_dir/.env
2024-10-13 12:31:41 +02:00
2024-10-12 18:20:25 +02:00
# --------------------------------------------------------
2024-10-13 11:10:38 +02:00
# Downloading Start Script
2024-10-12 18:20:25 +02:00
# --------------------------------------------------------
2024-10-13 11:10:38 +02:00
echo "Downloading Start Script"
curl -sS "https://raw.githubusercontent.com/CerberusV1/minecraft_deploy/refs/heads/main/server_manager.sh" >> "${management_dir}/server_manager.sh"
chmod +x $management_dir/server_manager.sh
2024-10-12 15:56:14 +02:00
echo "You can now find the management script in $management_dir "
2024-10-15 18:13:09 +02:00
echo "--------------------------------------------------------------------------------------------"
echo "To run the ServerManager copy following line:"
echo "${management_dir}/./server_manager.sh"