l4d start script refactor
This commit is contained in:
		
							parent
							
								
									776654970e
								
							
						
					
					
						commit
						e6312a2318
					
				
					 5 changed files with 111 additions and 35 deletions
				
			
		|  | @ -90,17 +90,31 @@ test -f /opt/l4d2/steam-workshop-download || \ | |||
|     steam wget -4 https://git.sublimity.de/cronekorkn/steam-workshop-downloader/raw/branch/master/steam-workshop-download -P /opt/l4d2 | ||||
| steam chmod +x /opt/l4d2/steam-workshop-download | ||||
| 
 | ||||
| # -- OVERLAY PVE -- # | ||||
| # -- OVERLAY VANILLA -- # | ||||
| 
 | ||||
| steam mkdir -p /opt/l4d2/overlays/pve | ||||
| steam mkdir -p /opt/l4d2/overlays/vanilla | ||||
| 
 | ||||
| # server config | ||||
| steam mkdir -p /opt/l4d2/overlays/pve/left4dead2/cfg | ||||
| steam cat <<'EOF' > /opt/l4d2/overlays/pve/left4dead2/cfg/server.cfg | ||||
| steam mkdir -p /opt/l4d2/overlays/vanilla/left4dead2/cfg | ||||
| steam cat <<'EOF' > /opt/l4d2/overlays/vanilla/left4dead2/cfg/server.cfg | ||||
| motd_enabled 0 | ||||
| 
 | ||||
| EOF | ||||
| 
 | ||||
| # admin system | ||||
| install_addon vanilla Ions_Vocalizer | ||||
| install_admin_system vanilla | ||||
| 
 | ||||
| # -- OVERLAY TICKRATE -- # | ||||
| 
 | ||||
| steam mkdir -p /opt/l4d2/overlays/tickrate | ||||
| 
 | ||||
| # server config | ||||
| steam mkdir -p /opt/l4d2/overlays/tickrate/left4dead2/cfg | ||||
| steam cat <<'EOF' > /opt/l4d2/overlays/tickrate/left4dead2/cfg/server.cfg | ||||
| motd_enabled 0 | ||||
| 
 | ||||
| sv_steamgroup "38347879" | ||||
| #sv_steamgroup_exclusive 0 | ||||
| 
 | ||||
| # https://github.com/SirPlease/L4D2-Competitive-Rework/blob/7ecc3a32a5e2180d6607a40119ff2f3c072502a9/cfg/server.cfg#L58-L69 | ||||
| sv_minrate 100000 | ||||
|  | @ -113,15 +127,10 @@ nb_update_frequency 0.014 | |||
| net_splitpacket_maxrate 50000 | ||||
| net_maxcleartime 0.0001 | ||||
| fps_max 0 | ||||
| 
 | ||||
| #sv_cheats 1 | ||||
| #sb_all_bot_game 1 | ||||
| EOF | ||||
| 
 | ||||
| # admin system | ||||
| install_addon pve Ions_Vocalizer | ||||
| install_admin_system pve | ||||
| install_tickrate_enabler pve | ||||
| install_tickrate_enabler tickrate | ||||
| 
 | ||||
| # -- OVERLAY COMPETITIVE REWORK WIP -- # | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,10 +2,41 @@ | |||
| 
 | ||||
| set -xeuo pipefail | ||||
| 
 | ||||
| name=$1 | ||||
| overlay=$2 | ||||
| port=$3 | ||||
| params=$4 | ||||
| name="" | ||||
| port="" | ||||
| configfile="" | ||||
| overlays="" | ||||
| arguments="" | ||||
| 
 | ||||
| while [[ $# -gt 0 ]]; do | ||||
|   case "$1" in | ||||
|     -n|--name) | ||||
|       name="$2"; shift 2 | ||||
|       ;; | ||||
|     -p|--port) | ||||
|       port="$2"; shift 2 | ||||
|       ;; | ||||
|     -c|--config) | ||||
|       configfile="$2"; shift 2 | ||||
|       ;; | ||||
|     -o|--overlay) | ||||
|       overlays="/opt/l4d2/overlays/$2:$overlays"; shift 2 | ||||
|       ;; | ||||
|     --) | ||||
|       shift | ||||
|       arguments+="$@" | ||||
|       break | ||||
|       ;; | ||||
|     *) | ||||
|       echo "ERROR: unknown argument $1"; exit 1 | ||||
|       ;; | ||||
|   esac | ||||
| done | ||||
| 
 | ||||
| [[ -n "${name}" ]] || { echo "ERROR: -n/--name missing"; exit 1; } | ||||
| [[ -n "${port}" ]] || { echo "ERROR: -p/--port missing"; exit 1; } | ||||
| 
 | ||||
| # -- HELPER FUNCTIONS -- # | ||||
| 
 | ||||
| function steam() { | ||||
|     # für systemd, damit es den prozess beenden kann | ||||
|  | @ -13,23 +44,33 @@ function steam() { | |||
|     export HOME=/opt/l4d2/steam | ||||
| } | ||||
| 
 | ||||
| # -- TIDY UP -- # | ||||
| 
 | ||||
| mountpoint -q "/opt/l4d2/servers/$name/merged" && umount "/opt/l4d2/servers/$name/merged" | ||||
| steam rm -rf "/opt/l4d2/servers/$name" | ||||
| 
 | ||||
| # -- CREATE DIRECTORIES -- # | ||||
| 
 | ||||
| steam mkdir -p \ | ||||
|   "/opt/l4d2/servers/$name" \ | ||||
|   "/opt/l4d2/servers/$name/work" \ | ||||
|   "/opt/l4d2/servers/$name/upper" \ | ||||
|   "/opt/l4d2/servers/$name/merged" | ||||
| 
 | ||||
| # -- MOUNT OVERLAYFS -- # | ||||
| 
 | ||||
| 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" \ | ||||
|   -o "lowerdir=$overlays/opt/l4d2/installation,upperdir=/opt/l4d2/servers/$name/upper,workdir=/opt/l4d2/servers/$name/work" \ | ||||
|   "/opt/l4d2/servers/$name/merged" | ||||
| 
 | ||||
| # TODO: pass config file paht instead of expecting it here | ||||
| steam mv "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server.cfg" "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server_original.cfg" | ||||
| steam touch "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server.cfg" | ||||
| echo "exec server_original.cfg" > "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server.cfg" | ||||
| cat "/opt/l4d2/configs/$name.cfg" >> "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server.cfg" | ||||
| # -- REPLACE SERVER.CFG -- # | ||||
| 
 | ||||
| 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" $params +map c1m1_hotel | ||||
| if [[ -n "$configfile" ]]; then | ||||
|   cp "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server.cfg" "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server_original.cfg" | ||||
|   cp "$configfile" "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server.cfg" | ||||
|   chown steam:steam "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server.cfg" | ||||
| fi | ||||
| 
 | ||||
| # -- RUN L4D2 -- # | ||||
| 
 | ||||
| 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 $arguments | ||||
							
								
								
									
										19
									
								
								bundles/left4dead2/files/stop
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								bundles/left4dead2/files/stop
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| set -xeuo pipefail | ||||
| 
 | ||||
| name="" | ||||
| 
 | ||||
| while [[ $# -gt 0 ]]; do | ||||
|   case "$1" in | ||||
|     -n|--name) | ||||
|       name="$2"; shift 2 | ||||
|       ;; | ||||
|     *) | ||||
|       echo "ERROR: unknown argument $1"; exit 1 | ||||
|       ;; | ||||
|   esac | ||||
| done | ||||
| 
 | ||||
| mountpoint -q "/opt/l4d2/servers/$name/merged" && umount "/opt/l4d2/servers/$name/merged" | ||||
| steam rm -rf "/opt/l4d2/servers/$name" | ||||
|  | @ -46,12 +46,18 @@ def server_units(metadata): | |||
| 
 | ||||
|     for name, config in metadata.get('left4dead2').items(): | ||||
|         assert match(r'^[A-z0-9-_-]+$', name) | ||||
|         assert config["overlay"] in {'pve', 'competitive_rework'} | ||||
|         assert 27000 <= config["port"] <= 27100 | ||||
| 
 | ||||
|         params = config.get("params", "") | ||||
|         if config.get("tickrate"): | ||||
|             params = f"-tickrate {config['tickrate']} " + params | ||||
|         cmd = f'/opt/l4d2/start -n {name} -p {config["port"]}' | ||||
| 
 | ||||
|         if 'config' in config: | ||||
|             cmd += f' -c /opt/l4d2/configs/{name}.cfg' | ||||
| 
 | ||||
|         for overlay in config.get('overlays', []): | ||||
|             cmd += f' -o {overlay}' | ||||
| 
 | ||||
|         if 'arguments' in config: | ||||
|             cmd += ' -- ' + ' '.join(config['arguments']) | ||||
| 
 | ||||
|         units[f'left4dead2-{name}.service'] = { | ||||
|             'Unit': { | ||||
|  | @ -61,7 +67,8 @@ def server_units(metadata): | |||
|             }, | ||||
|             'Service': { | ||||
|                 'Type': 'simple', | ||||
|                 'ExecStart': f'/opt/l4d2/start "{name}" "{config["overlay"]}" "{config["port"]}" "{params}"', | ||||
|                 'ExecStart': cmd, | ||||
|                 'ExecStop': f'/opt/l4d2/stop -n {name}', | ||||
|                 'Restart': 'on-failure', | ||||
|                 'Nice': -10, | ||||
|                 'CPUWeight': 200, | ||||
|  |  | |||
|  | @ -27,21 +27,21 @@ | |||
|             }, | ||||
|         }, | ||||
|         'left4dead2': { | ||||
|             'server1': { | ||||
|                 'overlay': 'pve', | ||||
|             'vanilla': { | ||||
|                 'port': 27015, | ||||
|                 'tickrate': '100', | ||||
|                 'overlays': ['vanilla'], | ||||
|             }, | ||||
|             'server2': { | ||||
|                 'overlay': 'pve', | ||||
|             'tick100': { | ||||
|                 'port': 27016, | ||||
|                 'tickrate': '100', | ||||
|                 'overlays': ['vanilla', 'tickrate'], | ||||
|                 'arguments': ['-tickrate 100'], | ||||
|             }, | ||||
|             'server3_comp1': { | ||||
|                 'overlay': 'competitive_rework', | ||||
|                 'port': 27017, | ||||
|                 'tickrate': '100', | ||||
|                 'overlays': ['competitive_rework'], | ||||
|                 'arguments': ['-tickrate 60'], | ||||
|                 'config': [ | ||||
|                     'exec server_original.cfg', | ||||
|                     'sm_forcematch zonemod', | ||||
|                     'hostname server3_comp1_test', | ||||
|                     'motd_enabled 0', | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue