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 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
|
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
|
# server config
|
||||||
steam mkdir -p /opt/l4d2/overlays/pve/left4dead2/cfg
|
steam mkdir -p /opt/l4d2/overlays/vanilla/left4dead2/cfg
|
||||||
steam cat <<'EOF' > /opt/l4d2/overlays/pve/left4dead2/cfg/server.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
|
motd_enabled 0
|
||||||
|
|
||||||
sv_steamgroup "38347879"
|
sv_steamgroup "38347879"
|
||||||
#sv_steamgroup_exclusive 0
|
|
||||||
|
|
||||||
# https://github.com/SirPlease/L4D2-Competitive-Rework/blob/7ecc3a32a5e2180d6607a40119ff2f3c072502a9/cfg/server.cfg#L58-L69
|
# https://github.com/SirPlease/L4D2-Competitive-Rework/blob/7ecc3a32a5e2180d6607a40119ff2f3c072502a9/cfg/server.cfg#L58-L69
|
||||||
sv_minrate 100000
|
sv_minrate 100000
|
||||||
|
|
@ -113,15 +127,10 @@ nb_update_frequency 0.014
|
||||||
net_splitpacket_maxrate 50000
|
net_splitpacket_maxrate 50000
|
||||||
net_maxcleartime 0.0001
|
net_maxcleartime 0.0001
|
||||||
fps_max 0
|
fps_max 0
|
||||||
|
|
||||||
#sv_cheats 1
|
|
||||||
#sb_all_bot_game 1
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# admin system
|
# admin system
|
||||||
install_addon pve Ions_Vocalizer
|
install_tickrate_enabler tickrate
|
||||||
install_admin_system pve
|
|
||||||
install_tickrate_enabler pve
|
|
||||||
|
|
||||||
# -- OVERLAY COMPETITIVE REWORK WIP -- #
|
# -- OVERLAY COMPETITIVE REWORK WIP -- #
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,41 @@
|
||||||
|
|
||||||
set -xeuo pipefail
|
set -xeuo pipefail
|
||||||
|
|
||||||
name=$1
|
name=""
|
||||||
overlay=$2
|
port=""
|
||||||
port=$3
|
configfile=""
|
||||||
params=$4
|
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() {
|
function steam() {
|
||||||
# für systemd, damit es den prozess beenden kann
|
# für systemd, damit es den prozess beenden kann
|
||||||
|
|
@ -13,23 +44,33 @@ function steam() {
|
||||||
export HOME=/opt/l4d2/steam
|
export HOME=/opt/l4d2/steam
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# -- TIDY UP -- #
|
||||||
|
|
||||||
mountpoint -q "/opt/l4d2/servers/$name/merged" && umount "/opt/l4d2/servers/$name/merged"
|
mountpoint -q "/opt/l4d2/servers/$name/merged" && umount "/opt/l4d2/servers/$name/merged"
|
||||||
steam rm -rf "/opt/l4d2/servers/$name"
|
steam rm -rf "/opt/l4d2/servers/$name"
|
||||||
|
|
||||||
|
# -- CREATE DIRECTORIES -- #
|
||||||
|
|
||||||
steam mkdir -p \
|
steam mkdir -p \
|
||||||
"/opt/l4d2/servers/$name" \
|
"/opt/l4d2/servers/$name" \
|
||||||
"/opt/l4d2/servers/$name/work" \
|
"/opt/l4d2/servers/$name/work" \
|
||||||
"/opt/l4d2/servers/$name/upper" \
|
"/opt/l4d2/servers/$name/upper" \
|
||||||
"/opt/l4d2/servers/$name/merged"
|
"/opt/l4d2/servers/$name/merged"
|
||||||
|
|
||||||
|
# -- MOUNT OVERLAYFS -- #
|
||||||
|
|
||||||
mount -t overlay overlay \
|
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"
|
"/opt/l4d2/servers/$name/merged"
|
||||||
|
|
||||||
# TODO: pass config file paht instead of expecting it here
|
# -- REPLACE SERVER.CFG -- #
|
||||||
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"
|
|
||||||
|
|
||||||
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():
|
for name, config in metadata.get('left4dead2').items():
|
||||||
assert match(r'^[A-z0-9-_-]+$', name)
|
assert match(r'^[A-z0-9-_-]+$', name)
|
||||||
assert config["overlay"] in {'pve', 'competitive_rework'}
|
|
||||||
assert 27000 <= config["port"] <= 27100
|
assert 27000 <= config["port"] <= 27100
|
||||||
|
|
||||||
params = config.get("params", "")
|
cmd = f'/opt/l4d2/start -n {name} -p {config["port"]}'
|
||||||
if config.get("tickrate"):
|
|
||||||
params = f"-tickrate {config['tickrate']} " + params
|
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'] = {
|
units[f'left4dead2-{name}.service'] = {
|
||||||
'Unit': {
|
'Unit': {
|
||||||
|
|
@ -61,7 +67,8 @@ def server_units(metadata):
|
||||||
},
|
},
|
||||||
'Service': {
|
'Service': {
|
||||||
'Type': 'simple',
|
'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',
|
'Restart': 'on-failure',
|
||||||
'Nice': -10,
|
'Nice': -10,
|
||||||
'CPUWeight': 200,
|
'CPUWeight': 200,
|
||||||
|
|
|
||||||
|
|
@ -27,21 +27,21 @@
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'left4dead2': {
|
'left4dead2': {
|
||||||
'server1': {
|
'vanilla': {
|
||||||
'overlay': 'pve',
|
|
||||||
'port': 27015,
|
'port': 27015,
|
||||||
'tickrate': '100',
|
'overlays': ['vanilla'],
|
||||||
},
|
},
|
||||||
'server2': {
|
'tick100': {
|
||||||
'overlay': 'pve',
|
|
||||||
'port': 27016,
|
'port': 27016,
|
||||||
'tickrate': '100',
|
'overlays': ['vanilla', 'tickrate'],
|
||||||
|
'arguments': ['-tickrate 100'],
|
||||||
},
|
},
|
||||||
'server3_comp1': {
|
'server3_comp1': {
|
||||||
'overlay': 'competitive_rework',
|
|
||||||
'port': 27017,
|
'port': 27017,
|
||||||
'tickrate': '100',
|
'overlays': ['competitive_rework'],
|
||||||
|
'arguments': ['-tickrate 60'],
|
||||||
'config': [
|
'config': [
|
||||||
|
'exec server_original.cfg',
|
||||||
'sm_forcematch zonemod',
|
'sm_forcematch zonemod',
|
||||||
'hostname server3_comp1_test',
|
'hostname server3_comp1_test',
|
||||||
'motd_enabled 0',
|
'motd_enabled 0',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue