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 havesteamcmd
@~/.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