Last active
July 5, 2022 17:07
-
-
Save kythyria/f0f9a6aac182b3a2e7ccc07932b339d2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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