Page MenuHomePhabricator

The Dedicated Server wont load all mods on linux
Assigned, WishlistPublic

Description

Dear Community,

I made a server with some mode, well allot of mods. we run it on linux and for some reason when i start with allot of mods it wont show in the arma 3 client but is does get listed on the arma 3 server list websites and when i use gameq to query the server it does respond. when i remove a few mods from the startup parameters it does show but as soon as i add 1 more and it does not matter which it does not show anymore,

The init script:
#!/bin/bash

    1. BEGIN INIT INFO
  1. Provides: 2442
  2. Required-Start: $local_fs $remote_fs $network
  3. Required-Stop: $local_fs $remote_fs $network
  4. Default-Start: 2 3 4 5
  5. Default-Stop: 0 1 6
  6. Short-Description: TAW.net - EU - Optionals
  7. Description: TAW.net - EU - Optionals
    1. END INIT INFO

set -e
PATH=${PATH}:/data/arma3
NAME=2442
PIDFILE=/data/arma3/instances/2442/server.pid
DAEMON="/data/arma3/arma3server"
DAEMON_OPTS="-cpuCount=4 -exThreads=7 -maxMem=2047 -server -nosplash -nosound -noPause -noCB -loadMissionToMemory -name=arma3 -profiles=/data/arma3/instances/2442/profile -pid=/data/arma3/instances/2442/server.pid -config=/data/arma3/instances/2442/server.cfg -cfg=/data/arma3/instances/2442/basic.cfg -par=/data/arma3/instances/2442/parameters.cfg -ranking=/data/arma3/instances/2442/logs/ranking.log -bepath=/data/arma3/instances/2442/battleye -port=2442"
USER=gameserver
GROUP=gameserver
APPDIR=/data/arma3

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/arma3:/home/gameserver/.steam/steam/linux32
export LD_LIBRARY_PATH

ulimit -n 65536

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

case "$1" in

start)
    log_daemon_msg "Starting"
    log_progress_msg $NAME
    if ! start-stop-daemon --start --chdir $APPDIR --quiet --chuid $USER:$GROUP --make-pidfile --pidfile $PIDFILE --background --startas /bin/bash -- -c "exec $DAEMON $DAEMON_OPTS 1>/data/arma3/instances/2442/logs/server.log 2>/data/arma3/instances/2442/logs/error.log"; then
        log_end_msg 1
        exit 1
    fi
    log_end_msg 0
;;
stop)
    log_daemon_msg "Stopping"
    log_progress_msg $NAME
    if ! start-stop-daemon --stop --chdir $APPDIR --quiet --chuid $USER:$GROUP --oknodo --pidfile $PIDFILE; then
        log_end_msg 1
        exit 1
    fi
    TIMESTAMP=$(date +%Y-%m-%d-%H-%M-%S)
    PID=$(cat $PIDFILE)
    if [ -f /data/arma3/instances/2442/logs/server.log ]; then
        mv /data/arma3/instances/2442/logs/server.log "/data/arma3/instances/2442/logs/$TIMESTAMP-server.log"
    fi
    if [ -f /data/arma3/instances/2442/logs/error.log ]; then
        mv /data/arma3/instances/2442/logs/error.log "/data/arma3/instances/2442/logs/$TIMESTAMP-error.log"
    fi
    if [ -f /data/arma3/instances/2442/logs/console_$PID.log ]; then
        mv /data/arma3/instances/2442/logs/console_$PID.log "/data/arma3/instances/2442/logs/$TIMESTAMP-console.log"
    fi
    if [ -f /data/arma3/instances/2442/logs/mpStatistics_$PID.log ]; then
        mv /data/arma3/instances/2442/logs/mpStatistics_$PID.log "/data/arma3/instances/2442/logs/$TIMESTAMP-mp-statistics.log"
    fi
    rm -rf $PIDFILE
    log_end_msg 0
;;
restart)
    $0 stop
    sleep 1
    $0 start
;;
status)
    status="0"
    status_of_proc -p $PIDFILE $DAEMON $NAME || status=$?
    exit $status
;;
*)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
;;

esac
exit 0
the server.cfg:
hostname = "TAW.net - EU - Optionals";
password = "***";
passwordAdmin = "
*****";
steamport = 2443;
steamqueryport = 2444;
motd[] = {

"Welcome to TAW.net - EU - Optionals, Watch each others backs and have fun"

};
motdInterval = 300;
BattlEye = 0;
allowedLoadFileExtensions[] = {"hpp","sqs","sqf","fsm","cpp","paa","txt","xml","inc","ext","sqm","ods","fxy","lip","csv","kb","bik","bikb","html","htm","biedi"};
allowedPreprocessFileExtensions[] = {"hpp","sqs","sqf","fsm","cpp","paa","txt","xml","inc","ext","sqm","ods","fxy","lip","csv","kb","bik","bikb","html","htm","biedi"};
allowedHTMLLoadExtensions[] = {"htm","html","xml","txt"};
forceRotorLibSimulation = 1;
logFile = "../logs/console.log";
kickDuplicate = 1;
verifySignatures = 0;
equalModRequired = 0;
requiredSecureId = 0;
maxPlayers = 32;
voteMission = 2;
voteThreshold = 2;
disableVoN = 0;
vonCodecQuality = 10;
persistent = 1;
localClient[] = {127.0.0.1};
timeStampFormat = "full";
onUserConnected = "";
onUserDisconnected = "";
doubleIdDetected = "";
onUnsignedData = "";
onHackedData = "";
onDifferentData = "";
class Missions
{

class Mission1
{
    template                    = "Into_The_Frey.malden2010";
    difficulty                  = "regular";
    
};

};
missionWhitelist[] = {

"Into_The_Frey.malden2010",

};
the basic.cfg:
language = "English";
adapter = -1;
3D_Performance = 1.0000000000;
Resolution_W = 0;
Resolution_H = 0;
Resolution_Bpp = 32;
Windowed = 0;
MinBandwidth = 209715200;
MaxBandwidth = 2147483647;
MaxMsgSend = 512;
MaxSizeGuaranteed = 256;
MaxSizeNonguaranteed = 128;
MinErrorToSendNear = 0.0300000000;
MinErrorToSend = 0.0100000000;
MaxCustomFileSize = 0;
serverLongitude = 2.16;
serverLatitude = 51.02;
serverLongitudeAuto = 2.16;
serverLatitudeAuto = 51.02;
the parameters.cfg:
-mod=curator;heli;kart;mark;@allinarmaterrainpack_am2;@cba_am2;@taw_am2_content;@taw_am2_maps;@taw_div_core;@optionals;
-autoinit
the beserver.cfg
RConPassword ******
MaxPing 2000
the profile settings:
version=1;
blood=1;
singleVoice=0;
gamma=1;
brightness=1;
maxSamplesPlayed=128;
activeKeys[]=
{

};
class Difficulties
{

class recruit
{
    class Flags
    {
        Armor=0;
        FriendlyTag=1;
        EnemyTag=1;
        MineTag=1;
        HUD=1;
        HUDPerm=1;
        HUDWp=1;
        HUDWpPerm=1;
        HUDGroupInfo=1;
        AutoSpot=1;
        Map=1;
        WeaponCursor=1;
        AutoGuideAT=1;
        ClockIndicator=1;
        3rdPersonView=0;
        UltraAI=0;
        CameraShake=0;
        UnlimitedSaves=0;
        DeathMessages=1;
        NetStats=0;
        VonID=1;
        ExtendedInfoType=1;
    };
    skillFriendly=0.6000000200;
    skillEnemy=0.6000000200;
    precisionFriendly=0.2800000000;
    precisionEnemy=0.2800000000;
};
class regular
{
    class Flags
    {
        Armor=0;
        FriendlyTag=1;
        EnemyTag=0;
        MineTag=1;
        HUD=0;
        HUDPerm=1;
        HUDWp=1;
        HUDWpPerm=1;
        HUDGroupInfo=0;
        AutoSpot=0;
        Map=0;
        WeaponCursor=1;
        AutoGuideAT=1;
        ClockIndicator=0;
        3rdPersonView=0;
        UltraAI=0;
        CameraShake=1;
        UnlimitedSaves=0;
        DeathMessages=1;
        NetStats=1;
        VonID=1;
        ExtendedInfoType=1;
    };
    skillFriendly=0.6000000200;
    skillEnemy=0.6000000200;
    precisionFriendly=0.2800000000;
    precisionEnemy=0.2800000000;
};
class veteran
{
    class Flags
    {
        Armor=0;
        FriendlyTag=0;
        EnemyTag=0;
        MineTag=0;
        HUD=0;
        HUDPerm=0;
        HUDWp=0;
        HUDWpPerm=0;
        HUDGroupInfo=0;
        AutoSpot=0;
        Map=1;
        WeaponCursor=1;
        AutoGuideAT=0;
        ClockIndicator=0;
        3rdPersonView=0;
        UltraAI=0;
        CameraShake=0;
        UnlimitedSaves=0;
        DeathMessages=1;
        NetStats=0;
        VonID=1;
        ExtendedInfoType=1;
    };
    skillFriendly=0.6000000200;
    skillEnemy=0.6000000200;
    precisionFriendly=0.2800000000;
    precisionEnemy=0.2800000000;
};
class mercenary
{
    class Flags
    {
        Armor=0;
        FriendlyTag=0;
        EnemyTag=0;
        MineTag=0;
        HUD=0;
        HUDPerm=0;
        HUDWp=0;
        HUDWpPerm=0;
        HUDGroupInfo=0;
        AutoSpot=0;
        Map=1;
        WeaponCursor=0;
        AutoGuideAT=0;
        ClockIndicator=0;
        3rdPersonView=0;
        UltraAI=0;
        CameraShake=0;
        UnlimitedSaves=0;
        DeathMessages=1;
        NetStats=1;
        VonID=1;
        ExtendedInfoType=1;
    };
    skillFriendly=0.6000000200;
    skillEnemy=0.6000000200;
    precisionFriendly=0.2800000000;
    precisionEnemy=0.2800000000;
};

};
difficulty="regular";
sceneComplexity=1000000;
shadowZDistance=100;
viewDistance=6000;
preferredObjectViewDistance=4000;
terrainGrid=3;
volumeCD=10;
volumeFX=10;
volumeSpeech=10;
volumeVoN=10;
vonRecThreshold=0.0299999999;

as soon we remove 3 to 4 mods and it does not matter which just removing 3 to 4 mods makes it start and show up, when we start it with all the mods it starts up it show up if you filter for the server name but on joining it says connection failed, and when you use the remote option is does not show up, but the server query port works as the php GameQ Libraries get the server info. but onbody can join. so somewhere there must be a wierd file limit because it does work when you remove about 9 to 12 mods file.

i really hope somebody can help me with this.
greetings, FeralDude {F27352} {F27353}

Details

Legacy ID
2841541731
Severity
None
Resolution
Open
Reproducibility
Always
Category
Server
Steps To Reproduce

Download the mods from our ArmA 3 sync repo

http://am2.taw.net/repo/normal/.a3s/autoconfig
http://am2.taw.net/repo/optional/.a3s/autoconfig

start the server with our config file supplied in this report, and also change some os files:

add the following line to:
/etc/sysctl.conf:
fs.file-max = 65536

and the following lines to:
/etc/security/limits.conf:

  • hard nofile 65536
  • soft nofile 65536

these settings allow the use of ulimit -n 65536 which removes the linux open file limit of 1024 and ups it to 65536. all the file in our modpack combined with arma just top in over 1024 files so maybe its overkill to set it to max int but still.

Additional Information

The issue is only on the linux server

Event Timeline

jaapjolman edited Additional Information. (Show Details)
jaapjolman set Category to Server.
jaapjolman set Reproducibility to Always.
jaapjolman set Severity to None.
jaapjolman set Resolution to Open.
jaapjolman set Legacy ID to 2841541731.May 8 2016, 1:03 PM
Adam added a comment.Nov 6 2015, 2:40 PM

Are you by any chance using some 3rd party program to launch the server?

nope i made a init file in the /etc/init.d/ folder, and made a custom control panel. but it does not matter if i do sudo service 2442 start from the terminal or in php shell_exec('sudo service 2442 start'); it has the same result. all file i use are in the description

QA_Sec added a subscriber: QA_Sec.May 8 2016, 1:03 PM
QA_Sec added a comment.Nov 6 2015, 3:54 PM

Although I see using PHP shell as an impressive approach, we are unable to debug all of your mods, although we would like to.

I would personally try to run all my mods following Mod Installation guide on this site in order to find out if it is even possible.

https://medium.com/arma-3-server-administration/installation-and-configuration-of-an-arma-3-linux-dedicated-server-7875c9030b7

If this will not help, I would like to invite you to state your issue on our server administration forum.

https://forums.bistudio.com/forum/159-arma-3-servers-administration/

well the thing is, the mods are fine, when we run it on windows it start and players can join. but on linux it wont fully start / the server show up on the port 2442 and external api can access it but no client can join, we also have servers on it that run the normal pack so without @optionals and they run fine, it really when you add just like 9 files more then that are at the list it wont work so it must be a max files included limit somewhere in the server code.

well i do allot more then just shell_exec

i make a real linux daemon file like i included then just use the default linux service "name of service" start command with start the server in the background.

also in the log files it look like it start up normally

i will add all log files

It's not fixed.
~# ll /proc/15446/fd | wc -l
1053 <--- server can not find

1051 <--- work fine

similar issue