Page MenuHomeFeedback Tracker

Linux DayZ Server Experimental 1.14.154166 - Unable to load mods by absolute path
Closed, ResolvedPublic

Description

On Windows, it is possible to load mods by passing the absolute path where the mod is located. For example:

.\DayZServer_x64.exe -mod=P:\MyLocalMod ...

This also works for server-side mods:

.\DayZServer_x64.exe -servermod=P:\MyLocalMod ...

This is very useful for testing local builds of mods before publishing them to the workshop and for when you configure SteamCMD to install mods in a non-standard location.

On Linux, passing absolute paths to the -mod= and -servermod= parameters results in the mods not getting loaded. It appears as though DayZ Server is treating absolute paths as if they are relative paths and appending them onto the end of the current directory. For example, when I run the command:

strace -o trace.txt ./DayZServer -config=serverDZ.cfg -profile=/home/steam/dayz/profile -mod=/home/steam/dayz/mods/@CF
                                                                                             ^^^^^^^^^^^^^^^^^^^^^^^^^

The @CF mod does not get loaded. When I grep the resulting strace for @CF, I see:

$ grep "@CF" trace.txt 
execve("./DayZServer", ["./DayZServer", "-config=serverDZ.cfg", "-profile=/home/steam/dayz/profil"..., "-mod=/home/steam/dayz/mods/@CF"], 0x7ffd1a338a58 /* 29 vars */) = 0
access("/home/steam/dayz/mods/@CF", R_OK|W_OK) = 0
access("/home/steam/.steam/steamapps/common/DayZ Server Exp//home/steam/dayz/mods/@CF", R_OK|W_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/steam/dayz/mods/@CF/Anims/cfg/skeletons.anim.xml", O_RDONLY) = -1 ENOENT (No such file or directory)

However, if I copy the @CF directory into my DayZ Server Exp installation directory and run the command:

strace -o trace.txt ./DayZServer -config=serverDZ.cfg -profile=/home/steam/dayz/profile -mod=@CF
                                                                                             ^^^

Because the server treats @CF as a relative directory, it actually tries to load the mod and the resulting strace contains many more matches:

$ grep "@CF" trace.txt 
execve("./DayZServer", ["./DayZServer", "-config=serverDZ.cfg", "-profile=/home/steam/dayz/profil"..., "-mod=@CF"], 0x7ffef5c0e868 /* 29 vars */) = 0
access("@CF", R_OK|W_OK)                = 0
access("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF", R_OK|W_OK) = 0
openat(AT_FDCWD, "/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/dta", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/addons", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/mpmissions", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 132
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/mod.cpp", {st_mode=S_IFREG|0775, st_size=551, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/mod.cpp", {st_mode=S_IFREG|0775, st_size=551, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/meta.cpp", {st_mode=S_IFREG|0775, st_size=90, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/meta.cpp", {st_mode=S_IFREG|0775, st_size=90, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Keys", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Keys", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
openat(AT_FDCWD, "/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 133
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/GUI.pbo", {st_mode=S_IFREG|0775, st_size=36731, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/GUI.pbo", {st_mode=S_IFREG|0775, st_size=36731, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Defines.pbo", {st_mode=S_IFREG|0775, st_size=376, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Defines.pbo", {st_mode=S_IFREG|0775, st_size=376, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/XML.pbo.Jacob_Mango_V3.bisign", {st_mode=S_IFREG|0775, st_size=567, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/XML.pbo.Jacob_Mango_V3.bisign", {st_mode=S_IFREG|0775, st_size=567, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/XML.pbo", {st_mode=S_IFREG|0775, st_size=6498, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/XML.pbo", {st_mode=S_IFREG|0775, st_size=6498, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Defines.pbo.Jacob_Mango_V3.bisign", {st_mode=S_IFREG|0775, st_size=567, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Defines.pbo.Jacob_Mango_V3.bisign", {st_mode=S_IFREG|0775, st_size=567, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Scripts.pbo", {st_mode=S_IFREG|0775, st_size=63050, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Scripts.pbo", {st_mode=S_IFREG|0775, st_size=63050, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/GUI.pbo.Jacob_Mango_V3.bisign", {st_mode=S_IFREG|0775, st_size=567, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/GUI.pbo.Jacob_Mango_V3.bisign", {st_mode=S_IFREG|0775, st_size=567, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Legacy.pbo", {st_mode=S_IFREG|0775, st_size=274, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Legacy.pbo", {st_mode=S_IFREG|0775, st_size=274, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Scripts.pbo.Jacob_Mango_V3.bisign", {st_mode=S_IFREG|0775, st_size=567, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Scripts.pbo.Jacob_Mango_V3.bisign", {st_mode=S_IFREG|0775, st_size=567, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Legacy.pbo.Jacob_Mango_V3.bisign", {st_mode=S_IFREG|0775, st_size=567, ...}) = 0
stat("/home/steam/.steam/steamapps/common/DayZ Server Exp/@CF/Addons/Legacy.pbo.Jacob_Mango_V3.bisign", {st_mode=S_IFREG|0775, st_size=567, ...}) = 0

Details

Severity
Minor
Resolution
Won't Fix
Reproducibility
Always
Operating System
Linux x64
Operating System Version
Ubuntu 20.04
Category
Modding
Steps To Reproduce

See description.

Due to T160665, the only way I've found to debug this issue is using the Linux strace command, which tracks and logs system calls in a running process. This command allows me to see what files and directories DayZ Server tries to read or write when it runs.

Additional Information

Please preserve the ability to load mods by absolute path in the Linux version of DayZ Server so that we don't have to clutter our server installation directories with mods.

Event Timeline

tjensen created this task.Sat, Sep 11, 9:26 PM
dedmen added a subscriber: dedmen.Tue, Sep 14, 2:23 PM

Same as with Arma 3 linux server, absolute paths are not supported.
Even on windows absolute paths shouldn't be supported afaik.

As a workaround you can use symlinks.

dedmen closed this task as Resolved.Tue, Sep 14, 2:23 PM
dedmen changed Resolution from Open to Won't Fix.

@dedmen Hi, thanks for your response. I'm not sure that is true about absolute paths not being supported.

When I use the official DayZ Launcher to start the game to load mods that have been installed via the Steam workshop, the resulting DayZ client command line contains absolute paths in the -mod= argument, as can be seen in the %LOCALAPPDATA%\DayZ\DayZ_x64_*.RPT log files. For example:

=====================================================================
== C:\Program Files (x86)\Steam\steamapps\common\DayZ\DayZ_x64.exe
== "C:\Program Files (x86)\Steam\steamapps\common\DayZ\DayZ_x64.exe" -noPause "-mod=C:\Program Files (x86)\Steam\steamapps\common\DayZ\!Workshop\@Namalsk Island" -connect=192.169.82.235 -port=2302
=====================================================================
Exe timestamp: 2021/08/03 08:16:50
Current time:  2021/09/14 08:10:26

Version 1.13.154080
...

I realize this is DayZ client, not server, but it seems odd for the client and server to behave so differently when loading mods.

In Arma 3 linux server its intentional.
And DayZ uses the same code as A3 for that stuff