Press "Enter" to skip to content

Efficiently host multiple game server using OverlayFS

Using OverlayFS can save a lot of disk space, by using single Game Server files across multiple instance or multiple mods

In this guide, assume you have steamcmd installed on your Ubuntu Server and use default install path (eg: ~/.local/share/Steam)

Example use of OverlayFS

You plan to host multiple instance of Left 4 Dead 2 dedicated server, but want to run different SourceMod, let say Mods 1 and Mods 2

You also plan to host Synergy Half-Life 2 co-op dedicated server but just single Mods

Use Case

As example above, if you install like normal way, it will eat a lot of disk space, as per installation per Mods

So, let’s make use of OverlayFS!

User base container

Instead of using single user, best case to create new user per Mods or Games, example:

  • User anime4000 (UID 1000) is Layer 1 that have steamcmd @ ~/.local/share/Steam
  • User l4d2mod1 (UID 1001) is Layer 2 for Left 4 Dead 2 Mods 1
  • User l4d2mod2 (UID 1002) is Layer 2 for Left 4 Dead 2 Mods 2
  • User freeman (UID 1003) is Layer 2 for Synergy Half-Life

Layer 1 is lower layer (original), then Layer 2 is top layer which re-writable and replaceable without effecting original files.

Having main sudo user (eg: anime4000) are responsible for game update and os update, thus not use for hosting game, as remain for containing original files from steamcmd

Make OverlayFS

Once you have all game server downloaded and users has been created, let’s proceed:

Add steam Group

for effective steam file can be access across users, create new group that member of related user:

sudo groupadd steam

Then add user to steam group:

sudo usermod -a -G steam l4d2mod1
sudo usermod -a -G steam l4d2mod2
sudo usermod -a -G steam freeman

File Folder Permission

sudo chown -R :steam ~/.local/share/Steam
sudo chmod g+s ~/.local/share/Steam

As l4d2mod1 user

Type su - l4d2mod1 to login that user then do:

mkdir -p ~/.overlay/steam_upper
mkdir -p ~/.overlay/steam_work
mkdir ~/steam

Type exit to return previous sudo user

As anime4000 (sudo user)

Type sudo nano /etc/fstab to make OverlayFS automatic mount when VM starts:

overlay /home/l4d2mod1/steam overlay noauto,x-systemd.automount,lowerdir=/home/anime4000/.local/share/Steam,upperdir=/home/l4d2mod1/.overlay/steam_data,workdir=/home/l4d2mod1/.overlay/steam_work 0 0

To mount right now, type this in Terminal:

sudo mount -t overlay overlay -o lowerdir=/home/anime4000/.local/share/Steam,upperdir=/home/l4d2mod1/.overlay/steam_upper,workdir=/home/l4d2mod1/.overlay/steam_work /home/l4d2mod1/steam

Done!

That’s it, simple as that, to make another mods, just create new user and repeat same step above

Troubleshooting

Permission

When you make changes at Layer 1 (lower layer) like update, upper layer must refresh by unmount and remount, example (as sudo user):

sudo unmount /home/l4d2mod1/steam

Remount:

sudo mount -t overlay overlay -o lowerdir=/home/anime4000/.local/share/Steam,upperdir=/home/l4d2mod1/.overlay/steam_upper,workdir=/home/l4d2mod1/.overlay/steam_work /home/l4d2mod1/steam

libncurses.so

WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5.
  Please install (lib32tinfo5 / ncurses-libs.i686 / equivalent) to enable readline.

If this WARNING show up, you need do this since Ubuntu 24.04 has remove legacy 32-bit libs:

sudo apt-get update
wget https://launchpad.net/ubuntu/+source/ncurses/6.4-2/+build/25522504/+files/libtinfo5_6.4-2_i386.deb
sudo dpkg -i libtinfo5_6.4-2_i386.deb
sudo apt-get install lib32z1 libbz2-1.0:i386 lib32gcc-s1 lib32stdc++6 libtinfo5:i386 libcurl3-gnutls:i386 libsdl2-2.0-0:i386

Steam support library

dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
dlopen failed trying to load:
/home/freeman/.steam/sdk32/steamclient.so
with error:
/home/freeman/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Sys_LoadModule failed to load: /home/freeman/.steam/sdk32/steamclient.so
*********************************************************
*********************************************************
*       Unable to load Steam support library.*
*       Unable to load Steam support library.*
*       This server will operate in LAN mode only.*
*       This server will operate in LAN mode only.*
*********************************************************
*********************************************************

If this ERROR show up, you need make symbolic link to steamcmd folder, some game still looking old path, thus making symbolic is required (it will propagate through OverlayFS)

Enter this command as sudo user (anime4000):

cd ~/.local/share/Steam
sudo ln -s ./steamcmd/linux32 sdk32
sudo ln -s ./steamcmd/linux64 sdk64
cd ~

To update new symbolic link, you need umount then mount again.

Then, make symbolic link for effected user as root:

sudo -i
cd /home/l4d2mod1
ln -s steam .steam
exit

this make a legacy path ~/.steam back to OverlayFS steam folder

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.