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