diff --git a/bundles/left4dead2/files/setup b/bundles/left4dead2/files/setup index 03603b3..98213db 100644 --- a/bundles/left4dead2/files/setup +++ b/bundles/left4dead2/files/setup @@ -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 -- # diff --git a/bundles/left4dead2/files/start b/bundles/left4dead2/files/start index 75f8ff3..b8008af 100644 --- a/bundles/left4dead2/files/start +++ b/bundles/left4dead2/files/start @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/bundles/left4dead2/files/stop b/bundles/left4dead2/files/stop new file mode 100644 index 0000000..e9542b9 --- /dev/null +++ b/bundles/left4dead2/files/stop @@ -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" \ No newline at end of file diff --git a/bundles/left4dead2/metadata.py b/bundles/left4dead2/metadata.py index 9e9a99d..09698b8 100644 --- a/bundles/left4dead2/metadata.py +++ b/bundles/left4dead2/metadata.py @@ -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, diff --git a/nodes/ovh.secondary.py b/nodes/ovh.secondary.py index 334b91f..ed7a3f3 100644 --- a/nodes/ovh.secondary.py +++ b/nodes/ovh.secondary.py @@ -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',