Skip to content

Instantly share code, notes, and snippets.

@kythyria
Last active July 5, 2022 17:07
Show Gist options
  • Save kythyria/f0f9a6aac182b3a2e7ccc07932b339d2 to your computer and use it in GitHub Desktop.
Save kythyria/f0f9a6aac182b3a2e7ccc07932b339d2 to your computer and use it in GitHub Desktop.
#!/bin/bash
# You need the 32-bit libs installed!
# Fedoranoids: glibc.i686 libstdc++.i686
# Debianoids: lib32gcc1
# Also need tmux python3
set -x
steam_user="anonymous"
steam_pass=""
steam_workshopcollection="871935760"
server_hostname=;exit 1 # FILL IN!
server_rconpass=;exit 1 # FILL IN!
#server_motd="https://berigora.net/static/l4d2/motd.html"
server_motd="" # set to blank to suppress motd display;
server_banner="https://berigora.net/static/l4d2/banner.html"
rootdir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
logdir="${rootdir}/logs"
steamcmddir="${rootdir}/steamcmd"
serverfiles="${rootdir}/serverfiles"
servercfgdir="${serverfiles}/left4dead2/cfg"
servercfg="server.cfg"
server_addondir="${serverfiles}/left4dead2/addons"
server_motdfile="custom_motd.txt"
server_bannerfile="custom_banner.txt"
fn_install() {
cd "${rootdir}"
mkdir -p "${steamcmddir}" "${serverfiles}" "${logdir}"
curl -o - --progress-bar http://media.steampowered.com/client/steamcmd_linux.tar.gz | tar xvvz -C "${steamcmddir}"
"${steamcmddir}/steamcmd.sh" +login "${steam_user}" "${steam_pass}" +force_install_dir "${serverfiles}" +app_update "222860" +quit
"${steamcmddir}/steamcmd.sh" +login "${steam_user}" "${steam_pass}" +force_install_dir "${serverfiles}" +app_update "222860" validate +quit
echo "${server_banner}" >"${serverfiles}/left4dead2/${server_bannerfile}"
echo "${server_motd}" > "${serverfiles}/left4dead2/${server_motdfile}"
cat >"${servercfgdir}/${servercfg}" <<SERVER_CONFIG
// Hostname for server.
hostname "${server_hostname}"
// RCON - remote console password.
rcon_password "${server_rconpass}"
// Server password - for private servers.
//sv_password ""
// Server Logging
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
sv_log_onefile 0
// Try to do something sensible about visibility
sv_lan 0
sv_allow_lobby_connect_only 0
sv_search_key "calraiths_holodeck"
// Decorate the banners
hostfile ${server_bannerfile}
motdfile ${server_motdfile}
SERVER_CONFIG
if [ -n "$steam_workshopcollection" ]; then
curl -L -o steam_workshop_downloader.py 'https://github.com/Geam/steam_workshop_downloader/raw/master/workshop.py'
chmod +x steam_workshop_downloader.py
./steam_workshop_downloader.py -o "${server_addondir}" "${steam_workshopcollection}"
fi
}
fn_install_rootpart() {
yum install glibc.i686 libstdc++.i686 tmux python3
adduser l4d2
cp "${BASH_SOURCE[0]}" ~l4d2/l4d2server
chmod +x ~l4d2/l4d2server
cat >"/etc/systemd/system/l4d2server.service" <<SYSTEMD_UNIT
[Unit]
Description=Left 4 Dead 2 Dedicated Server
After=network.target
[Service]
Type=forking
User=l4d2
ExecStart=/home/l4d2/l4d2server start
ExecStop=/home/l4d2/l4d2server stop
[Install]
WantedBy=multi-user.target
SYSTEMD_UNIT
systemctl daemon-reload
systemctl enable l4d2server
}
fn_install_full() {
sudo "${BASH_SOURCE[0]}" install_rootpart
sudo -u l4d2 "${BASH_SOURCE[0]}" install
}
fn_start() {
extip=$(curl -S http://169.254.169.254/latest/meta-data/public-ipv4)
parms="-game left4dead2 -strictportbind -ip 0.0.0.0 -port 27015 -hostip ${extip} +clientport 27005 +map c5m1_waterfront +servercfgfile ${servercfg} -maxplayers 8"
cd "${serverfiles}" || exit 2
tmux new-session -d -s "l4d2server" "./srcds_run ${parms}"
tmux pipe-pane -t "l4d2server" "exec cat >>'${logdir}/console.log'"
}
fn_stop() {
tmux send-keys -t "l4d2server" Enter Q U I T Enter
}
case $1 in
"install_full")
fn_install_full
;;
"install_rootpart"
fn_install_rootpart
;;
"install")
fn_install
;;
"start")
fn_start
;;
"stop")
fn_stop
;;
*)
echo "Unknown subcommand"
exit 1
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment