l4d2: tickrate enabler
This commit is contained in:
parent
b4cba98564
commit
084cf958a0
6 changed files with 102 additions and 24 deletions
|
|
@ -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 -- #
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
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
|
||||
|
|
@ -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',
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -34,10 +34,7 @@
|
|||
'server2': {
|
||||
'overlay': 'pve',
|
||||
'port': 27016,
|
||||
},
|
||||
'server3': {
|
||||
'overlay': 'pve',
|
||||
'port': 27017,
|
||||
'tickrate': '100',
|
||||
},
|
||||
},
|
||||
'bind': {
|
||||
|
|
|
|||
Loading…
Reference in a new issue