I've covered this subject in french back in 2010, but things have evolved, and installing scrds
on FreeBSD is not as straightforward as it used to be. Prerequisites are the same, you must first install the linux compatibility layer:
# As root, load the module & make sure it will be loaded after reboot: kldload /boot/kernel/linux.ko echo 'linux_enable="YES"' >> /etc/rc.conf
Then, and only after loading the linux module, install linux_base
:
portinstall -PP linux_base-f10 (or portinstall linux_base-f10 if the command above fails)
Add linproc to /etc/fstab,
linproc /compat/linux/proc linprocfs rw 0 0
and mount it:
mount -a
Install linux-steam:
portinstall linux-steam
Add a steamuser
user (or whatever name you want). The user must be unprivileged, and must not be able to log into the machine. Set its home to /usr/local/steam
and its shell to /usr/sbin/nologin
.
Then, update the client linux-steam
:
chown -R steamuser /usr/local/steam cd /usr/local/steam sudo -u steamuser ./steam sudo -u steamuser ./steam (yes, do it twice, to make sure it's up to date)
Back in past, you would have used the steam client to install and update games, but people at steam thought it was way too easy. So they made it more complicated. Now you have to install a dedicated tool in order to install games and keep them updated: steamcmd
.
Point your browser to the SteamCMD wiki page at Valvesoftware and read it. Then, download the linux version and extract in a dedicated directory (/usr/games
for example).
cd /usr/games fetch http://media.steampowered.com/client/steamcmd_linux.tar.gz tar -xzf steamcmd_linux.tar.gz
By default, the steamcmd
command will maintain your game library into /usr/local/steam/Steam/SteamApps
, you might want to create a soft link in order to put your game library somewhere else (the force_install_dir
option of steamcmd
would not work on my server). At least, change owners for /usr/games/SteamCMD
directory, to make sure steamuser
can update its content:
mkdir /usr/local/steam/Steam mkdir /usr/games/SteamApps ln -s /usr/games/SteamApps /usr/local/steam/Steam/SteamApps chown steamuser /usr/games/SteamApps chown -R steamuser /usr/games/SteamCMD
Then you might have to change shebangs in SteamCMD/steam.sh
and SteamCMD/steamcmd.sh
to use your own bash (probably /usr/local/bin/bash
instead of /bin/bash
). After what you can launch steamcmd.sh
:
cd /usr/games/SteamCMD sudo -u steamuser ./steamcmd.sh
The program should auto-update, and present you with a Steam>
prompt.
Then, you must login. For L4D2, and most games, you can login anonymously:
login anonymous
Choose your game from the list on the wiki, and use its ID to install/update:
app_update 222860 validate
It's possible to automate SteamCMD
, for daily update of your games. For example you can create a shell script like this one:
#!/usr/local/bin/bash cd /usr/games/SteamCMD || exit 1 /usr/local/bin/sudo -u steamuser ./steamcmd.sh +login anonymous +app_update 222860 validate +quit
Running your game server does not change much from my previous post. The path of game folder is the only important modification. I've created a shell script to launch L4D2 server:
#!/usr/local/bin/bash ROOT="/patpro/games/SteamApps/common/Left 4 Dead 2 Dedicated Server" SUDO="/usr/local/bin/sudo -u steamuser" SCREEN=/usr/local/bin/screen NICE="/usr/bin/nice -n -5" STEAMRUNARGS="-ip PUT-YOUR-IP-ADDRESS-HERE -fps_max 0 -sys_ticrate 1000" cd "${ROOT}" || exit 1 ${SCREEN} ${NICE} ${SUDO} ./srcds_run ${STEAMRUNARGS}
Open TCP and UDP ports 26901 and 27015 in your firewall, and edit SteamApps/common/Left 4 Dead 2 Dedicated Server/left4dead2/cfg/server.cfg
to tweak your settings.
Happy gaming!
You need to run steamcmd.sh with "/compat/linux/bin/bash ./steamcmd.sh", otherwise the output of uname(1) reads FreeBSD and not Linux - which is a problem in the latest steamcmd versions.
Thank you nico for the tip.
Unfortunately the shift between linux compat in FreeBSD and steam's prerequisite makes me fear for source dedicated server on FreeBSD.
Now it's epoll syscall family that is missing, but the game still runs. 10-Release is here without a fix. May be tomorrow srcds won't launch at all.
epoll has been added to the Linux compatibility layer for freebsd 11. when that gets released we may have hope hosting reliable dedicated steam servers on freebsd.
sounds great :) thanks for the tip.