diff --git a/bundles/left4dead2/files/setup b/bundles/left4dead2/files/setup index e20633b..270230a 100644 --- a/bundles/left4dead2/files/setup +++ b/bundles/left4dead2/files/setup @@ -2,6 +2,46 @@ set -xeuo pipefail +# -- DEFINE FUNCTIONS AND VARIABLES -- # + +function steam() { + # for systemd, so it can terminate the process (for other things sudo would have been enough) + setpriv --reuid=steam --regid=steam --init-groups "$@" + export HOME=/opt/l4d2/steam +} + +declare -A addons=( + [Ions_Vocalizer]=698857882 + [EMS_Admin_System]=1376314661 +) + +function install_addon() { + local overlay="$1" + local addon_name="$2" + local addon_id="${addons[${addon_name}]}" + steam mkdir -p "/opt/l4d2/overlays/${overlay}/left4dead2/addons" + test -f "/opt/l4d2/overlays/${overlay}/left4dead2/addons/${addon_id}.vpk" || \ + steam /opt/l4d2/steam-workshop-download "${addon_id}" --out "/opt/l4d2/overlays/${overlay}/left4dead2/addons" +} + +function install_admin_system() { + local overlay="$1" + install_addon "${overlay}" EMS_Admin_System + steam mkdir -p "/opt/l4d2/overlays/${overlay}/left4dead2/ems/admin system" + steam echo "STEAM_1:0:12376499" > "/opt/l4d2/overlays/${overlay}/left4dead2/ems/admin system/admins.txt" +} + +function install_tickrate_enabler() { + local overlay="$1" + steam mkdir -p "/opt/l4d2/overlays/${overlay}/left4dead2/addons" + for file in tickrate_enabler.dll tickrate_enabler.so tickrate_enabler.vdf + do + curl -L "https://github.com/SirPlease/L4D2-Competitive-Rework/raw/refs/heads/master/addons/${file}" -o "/opt/l4d2/overlays/${overlay}/left4dead2/addons/${file}" + done +} + +# -- PREPARE SYSTEM -- # + getent passwd steam >/dev/null || useradd -M -d /opt/l4d2 -s /bin/bash steam mkdir -p /opt/l4d2 /tmp/dumps chown steam:steam /opt/l4d2 /tmp/dumps @@ -9,12 +49,6 @@ dpkg --add-architecture i386 apt update DEBIAN_FRONTEND=noninteractive apt install -y libc6:i386 lib32z1 -function steam() { - # für systemd, damit es den prozess beenden kann - setpriv --reuid=steam --regid=steam --init-groups "$@" - export HOME=/opt/l4d2/steam -} - # -- STEAM -- # steam mkdir -p /opt/l4d2/steam @@ -77,18 +111,47 @@ net_splitpacket_maxrate 60000 EOF # admin system -steam mkdir -p /opt/l4d2/overlays/pve/left4dead2/addons -test -f /opt/l4d2/overlays/pve/left4dead2/addons/2524204971.vpk || \ - steam /opt/l4d2/steam-workshop-download 2524204971 --out /opt/l4d2/overlays/pve/left4dead2/addons -steam mkdir -p "/opt/l4d2/overlays/pve/left4dead2/ems/admin system" -steam echo "STEAM_1:0:12376499" > "/opt/l4d2/overlays/pve/left4dead2/ems/admin system/admins.txt" +install_addon pve Ions_Vocalizer +install_admin_system pve +install_tickrate_enabler pve -# ions vocalizer -test -f /opt/l4d2/overlays/pve/left4dead2/addons/698857882.vpk || \ - steam /opt/l4d2/steam-workshop-download 698857882 --out /opt/l4d2/overlays/pve/left4dead2/addons +# -- OVERLAY 100TICK -- # -test -f /opt/l4d2/overlays/pve/left4dead2/addons/1575673903.vpk || \ - steam /opt/l4d2/steam-workshop-download 1575673903 --out /opt/l4d2/overlays/pve/left4dead2/addons +# steam mkdir -p /opt/l4d2/overlays/100tick + +# install_tickrate_enabler 100tick + +# # server config +# steam mkdir -p /opt/l4d2/overlays/100tick/left4dead2/cfg +# steam cat <<'EOF' > /opt/l4d2/overlays/100tick/left4dead2/cfg/server.cfg +# motd_enabled 0 +# sv_steamgroup "38347879" +# sv_minrate 60000 +# sv_maxrate 0 +# EOF + +# -- OVERLAY COMPETITIVE REWORK WIP -- # + +# https://github.com/SirPlease/L4D2-Competitive-Rework + +# steam mkdir -p /opt/l4d2/overlays/competitive_rework +# steam mkdir -p /opt/l4d2/overlays/competitive_rework/left4dead2 +# test -d /opt/l4d2/overlays/competitive_rework/left4dead2/README.md || \ +# curl -L https://github.com/SirPlease/L4D2-Competitive-Rework/archive/refs/heads/master.zip | steam unzip -d /opt/l4d2/overlays/competitive_rework/left4dead2 + +# # admin system +# steam mkdir -p /opt/l4d2/overlays/pve/left4dead2/addons +# test -f /opt/l4d2/overlays/pve/left4dead2/addons/2524204971.vpk || \ +# steam /opt/l4d2/steam-workshop-download 2524204971 --out /opt/l4d2/overlays/pve/left4dead2/addons +# steam mkdir -p "/opt/l4d2/overlays/pve/left4dead2/ems/admin system" +# steam echo "STEAM_1:0:12376499" > "/opt/l4d2/overlays/pve/left4dead2/ems/admin system/admins.txt" + +# # ions vocalizer +# test -f /opt/l4d2/overlays/pve/left4dead2/addons/698857882.vpk || \ +# steam /opt/l4d2/steam-workshop-download 698857882 --out /opt/l4d2/overlays/pve/left4dead2/addons + +# test -f /opt/l4d2/overlays/pve/left4dead2/addons/1575673903.vpk || \ +# steam /opt/l4d2/steam-workshop-download 1575673903 --out /opt/l4d2/overlays/pve/left4dead2/addons # -- SERVERS -- # diff --git a/bundles/left4dead2/files/start b/bundles/left4dead2/files/start index 4d64020..b05fd40 100644 --- a/bundles/left4dead2/files/start +++ b/bundles/left4dead2/files/start @@ -5,6 +5,7 @@ set -xeuo pipefail name=$1 overlay=$2 port=$3 +params=$4 function steam() { # für systemd, damit es den prozess beenden kann @@ -25,4 +26,4 @@ mount -t overlay overlay \ -o "lowerdir=/opt/l4d2/overlays/$overlay:/opt/l4d2/installation,upperdir=/opt/l4d2/servers/$name/upper,workdir=/opt/l4d2/servers/$name/work" \ "/opt/l4d2/servers/$name/merged" -steam "/opt/l4d2/servers/$name/merged/srcds_run" -norestart -pidfile "/opt/l4d2/servers/$name/pid" -game left4dead2 -ip 0.0.0.0 -port "$port" +hostname "Crone_$name" +map c1m1_hotel \ No newline at end of file +steam "/opt/l4d2/servers/$name/merged/srcds_run" -norestart -pidfile "/opt/l4d2/servers/$name/pid" -game left4dead2 -ip 0.0.0.0 -port "$port" $params +hostname "Crone_$name" +map c1m1_hotel \ No newline at end of file diff --git a/bundles/left4dead2/items.py b/bundles/left4dead2/items.py index fecec4d..8a9f6c7 100644 --- a/bundles/left4dead2/items.py +++ b/bundles/left4dead2/items.py @@ -1,6 +1,9 @@ files = { '/opt/l4d2/setup': { 'mode': '755', + 'triggers': { + 'svc_systemd:left4dead2-initialize.service:restart', + }, }, '/opt/l4d2/start': { 'mode': '755', @@ -12,6 +15,7 @@ svc_systemd = { 'enabled': True, 'running': None, 'needs': { + 'file:/opt/l4d2/setup', 'file:/usr/local/lib/systemd/system/left4dead2-initialize.service', }, }, @@ -27,5 +31,5 @@ for server_name in node.metadata.get('left4dead2').keys(): 'needs': { 'svc_systemd:left4dead2-initialize.service', f'file:/usr/local/lib/systemd/system/left4dead2-{server_name}.service', - } + }, } diff --git a/bundles/left4dead2/metadata.py b/bundles/left4dead2/metadata.py index 02c73c3..480ee0a 100644 --- a/bundles/left4dead2/metadata.py +++ b/bundles/left4dead2/metadata.py @@ -46,9 +46,13 @@ def server_units(metadata): for name, config in metadata.get('left4dead2').items(): assert match(r'^[A-z0-9-_-]+$', name) - assert config["overlay"] in {'pve'} + assert config["overlay"] in {'pve', '100tick'} assert 27000 <= config["port"] <= 27100 + params = config.get("params", "") + if config.get("tickrate"): + params += f" -tickrate {config['tickrate']}" + units[f'left4dead2-{name}.service'] = { 'Unit': { 'Description': f'left4dead2 server {name}', @@ -57,7 +61,7 @@ def server_units(metadata): }, 'Service': { 'Type': 'simple', - 'ExecStart': f'/opt/l4d2/start {name} {config["overlay"]} {config["port"]}', + 'ExecStart': f'/opt/l4d2/start "{name}" "{config["overlay"]}" "{config["port"]}" "{params}"', 'Restart': 'on-failure', 'Nice': -10, 'CPUWeight': 200, @@ -67,6 +71,9 @@ def server_units(metadata): 'Install': { 'WantedBy': {'multi-user.target'}, }, + 'triggers': { + f'svc_systemd:left4dead2-{name}.service:restart', + }, } return { diff --git a/bundles/systemd/items.py b/bundles/systemd/items.py index 7816130..26cbf22 100644 --- a/bundles/systemd/items.py +++ b/bundles/systemd/items.py @@ -1,5 +1,8 @@ from bundlewrap.utils.dicts import merge_dict +files = {} +svc_systemd = {} + directories = { '/usr/local/lib/systemd/system': { 'purge': True, @@ -42,6 +45,9 @@ for name, unit in node.metadata.get('systemd/units').items(): else: raise Exception(f'unknown type {extension}') + for attribute in ['needs', 'needed_by', 'triggers', 'triggered_by']: + if attribute in unit: + dependencies[attribute] = unit.pop(attribute) files[path] = { 'content': repo.libs.systemd.generate_unitfile(unit), diff --git a/nodes/ovh.secondary.py b/nodes/ovh.secondary.py index f262978..6a94efb 100644 --- a/nodes/ovh.secondary.py +++ b/nodes/ovh.secondary.py @@ -34,10 +34,7 @@ 'server2': { 'overlay': 'pve', 'port': 27016, - }, - 'server3': { - 'overlay': 'pve', - 'port': 27017, + 'tickrate': '100', }, }, 'bind': {