Gameserver/scripts/deploy_cortexcommand.sh

118 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
# Collection of scripts to deploy a server hosting several open-source games
# Copyright (C) 2022 Jarno van der Kolk
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
set -e
if [ -e /etc/systemd/system/cortexcommand.service ]; then
systemctl stop cortexcommand
fi
apt-get -y install build-essential libsdl2-dev libloadpng4-dev libflac++-dev luajit-5.1-dev liblua5.1-dev libminizip-dev liblz4-dev libpng++-dev libtbb-dev ninja-build xvfb
# Install Cortex Command
mkdir -p ${TMPDIR:-/tmp}/cortexcommand-build
cd ${TMPDIR:-/tmp}/cortexcommand-build
if [ -d cortexcommand ]; then
rm -rf cortexcommand
fi
git clone --depth=1 https://github.com/cortex-command-community/Cortex-Command-Community-Project-Source.git
git clone --depth=1 https://github.com/cortex-command-community/Cortex-Command-Community-Project-Data.git
cd Cortex-Command-Community-Project-Source
virtualenv mesonenv
pip install meson
source mesonenv/bin/activate
meson setup --prefix=/opt/cortexcommand --buildtype=debug build
ninja -C build
ninja install -C build
deactivate
cd ..
rm -rf ${TMPDIR:-/tmp}/cortexcommand-build
# Patch startup script to get rid of weird directories
cd /opt/cortexcommand/bin
patch -l <<EOF
--- CortexCommand 2023-04-27 21:46:03.667870056 -0400
+++ CortexCommand 2023-04-27 21:46:32.457638889 -0400
@@ -10,7 +10,7 @@
link_user_files() {
local user_files=("LogConsole.txt" "LogLoading.txt" "LogLoadingWarning.txt" "AbortScreen.bmp" "AbortScreen.png" "Settings.ini")
- local user_directories=("Metagames.rte" "Scenes.rte" "_ScreenShots")
+ local user_directories=("_ScreenShots")
if ! [[ -d "\${user_data}" ]]; then
mkdir -p "\${user_data}"
@@ -20,16 +20,6 @@
ln -s "\${user_data}/\$file" \$tmp_dir
done
- if ! [[ -d "\${user_data}/Metagames.rte" ]]; then
- mkdir -p "\${user_data}/Metagames.rte"
- echo -e "DataModule\n\tModuleName = Metagame Saves" > "\${user_data}/Metagames.rte/Index.ini"
- fi
-
- if ! [[ -d "\${user_data}/Scenes.rte" ]]; then
- mkdir -p "\${user_data}/Scenes.rte"
- echo -e "DataModule\n\tModuleName = Saves" > "\${user_data}/Scenes.rte/Index.ini"
- fi
-
for directory in \${user_directories[@]}; do
if ! [[ -d "\${user_data}/\${directory}" ]]; then
mkdir -p "\${user_data}/\${directory}"
EOF
sudo -u ${systemuser} mkdir -p "${systemuserhome}/.local/share/Cortex Command"
echo -e "ServerSleepWhenIdle = 1\nServerSimSleepWhenIdle = 1" | sudo -u ${systemuser} tee "${systemuserhome}/.local/share/Cortex Command/Settings.ini"
# Create SystemD unit
cat > /etc/systemd/system/cortexcommand.service <<EOF
[Unit]
Description=Cortex Command server
After=network.target cortexcommand-fakex.service
BindsTo=cortexcommand-fakex.service
[Service]
Environment="DISPLAY=:100"
ExecStart=/opt/cortexcommand/bin/CortexCommand -server
Restart=on-failure
User=${systemuser}
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/systemd/system/cortexcommand-fakex.service <<EOF
[Unit]
Description=Fake X server for Cortex Command server
BindsTo=cortexcommand.service
[Service]
ExecStart=/usr/bin/Xvfb :100
Restart=on-failure
User=${systemuser}
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now cortexcommand.service
# Add firewall rules
firewall-cmd --zone=public --add-port=8000/udp --permanent