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