75 lines
No EOL
1.8 KiB
Bash
75 lines
No EOL
1.8 KiB
Bash
#!/bin/bash
|
|
|
|
set -xeuo pipefail
|
|
|
|
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
|
|
setpriv --reuid=steam --regid=steam --init-groups "$@"
|
|
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=$overlays/opt/l4d2/installation,upperdir=/opt/l4d2/servers/$name/upper,workdir=/opt/l4d2/servers/$name/work" \
|
|
"/opt/l4d2/servers/$name/merged"
|
|
|
|
# -- REPLACE SERVER.CFG -- #
|
|
|
|
if [[ -n "$configfile" ]]; then
|
|
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 |