====== ArmA 2 Linux Dedicated Server Steam Install ======
[[https://www.pmctactical.org/forum/viewforum.php?f=50|ArmA 2 Forum]], [[:arma2|ArmA 2 Home]], [[arma2:config|ArmA 2 Config]], [[arma2:file_formats|ArmA 2 File Formats]], [[arma2:missions|ArmA 2 Missions]], [[arma2:modeling|ArmA 2 3D Modeling]], [[arma2:scripting|ArmA 2 Scripting]], [[arma2:terrain|ArmA 2 Terrain]], [[arma2:texturing|ArmA 2 Texturing]], [[arma2:tools|ArmA 2 Tools]]
**ArmA 2 Linux Dedicated Server Steam Install** instructions.
You can install ArmA 2 and ArmA 2 Operation Arrowhead into your Linux shell by using using Steam's SteamCMD command. No more packing your arma dir and uploading it to your server as you can handle everything from the Linux shell.
Please note that the files you are downloading with SteamCMD are not any kind of dedicated server package but just the normal windows game install files. There are no Linux dedicated server data package for ArmA 2/ArmA 2 Operation Arrowhead.
You obviously need an Steam account where you have purchased ArmA 2 and ArmA 2 Operation Arrowhead games, there is no "free server data package" for ArmA 2 in Steam.
Also please read [[arma2:linux-dedicated-server-install|ArmA 2 Linux Dedicated Server Install]] page for further Linux specific issues like some libs etc. This Steam tutorial only covers how you download the game files with SteamCMD, not how to make them work in your Linux shell. SteamCMD will not download the linux binarys for your dedicated server either.
Alright here is the ArmA 2 Linux dedicated server steam install tutorial.
Go to your home directory. Make "steam/" directory there.
mkdir steam
Make "arma2/" directory there.
mkdir arma2
Go to steam directory and download the steam client.
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
Unpack it.
tar xvf steamcmd_linux.tar.gz
And run it the first time when it should upgrade itself automatically.
./steamcmd.sh
Exit steam shell by using "quit" command.
Go to your arma2 directory and create upgrade-arma-2 file there.
nano upgrade-arma-2
Write the following line there.
/home//steam/steamcmd.sh +runscript /home//arma2/update-arma-2.txt
Where you obviously replace with your name or fix the path with where ever you installed steam/ dir.
Now create permissions for that file.
chmod 755 upgrade-arma-2
Now open the update-arma-2.txt file and write there the following.
// Stop the script if any commands fail
@ShutdownOnFailedCommand 1
// Do not prompt for a password, use the one specified in the login command
@NoPromptForPassword 1
// force it to believe were in windows
@sSteamCmdForcePlatformType windows
// Login to the given steam account
login
// Set the directory where A2 is/will be installed
force_install_dir /home//arma2
// Install or update the files for App ID
// arma2 (notice that 33900 app_id does NOT work!)
app_update 33910 validate
// arma2 Operation Arrowhead
app_update 33930 validate
// Exit the Steam shell
quit
Again you obviously replace with your login/password and with the proper directory.
Now install ArmA 2 files from steam using upgrade-arma-2 command.
./upgrade-arma-2
At this time it will download all the ArmA 2 game files for you.
After the download is complete, you can safely delete these following files, here is our current delete command line:
rm readme*txt
rm bis.url
rm changelog.txt
rm arma2.changelog109
rm arma2oa_manual.pdf
rm arma2oa_patch_1_59_readme.txt
rm arma2oa_update_162_readme.txt
rm arma2oa_update_163_readme.txt
rm directx/ -rf
rm dlcsetup/ -rf
rm 339*_install.vdf
Then download the ArmA 2 linux dedicated server package from bis, unpack it to your server directory.
At the moment of writing / updating this tutorial, the latest ArmA 2 Linux binary can be found from bis forums ARMA-2-Operation-Arrowhead-Linux-Server-beta-1-63-126652 topic.
Please note that you have now downloaded the Windows files into your Linux shell, they are not lowercase as they need to be so use "tolower" script found in the ArmA 2 linux dedicated server package you downloaded from bis pages.
**ArmA 2 Dedicated Server Configs**
Here are some config files. These config files are not really an good examples of how you should set your server up, they aren't meant for that, they are here just to complete this tutorial so you can copy paste (and change few parts) and get your server up and running with as little fuss as possible. You definitely should go through and learn how to make proper server configuration files for your own unique server.
Basic.cfg:
language="English";
adapter=-1;
3D_Performance=30612;
Resolution_Bpp=32;
Windowed=0;
MaxBandwidth=10485760;
MinBandwidth=2097152;
MaxMsgSend=1024;
MaxSizeGuaranteed=512;
MaxSizeNonguaranteed=256;
MinErrorToSend=0.0080000004;
MinErrorToSendNear=0.079999998;
MaxCustomFileSize=110000;
serverLongitude=0;
serverLatitude=52;
serverLongitudeAuto=0;
serverLatitudeAuto=52;
This following is the basic server config file, we call it pmc.cfg here, often its named server.cfg file name.
pmc.cfg:
// GLOBAL SETTINGS
hostname = "PMC Tactical"; // The name of the server that shall be displayed in the public server list
//password = "ServerAccessPassword"; // Password for joining, eg connecting to the server
passwordAdmin = "MyPassword"; // Password to become server admin. When you're in Arma MP and connected to the server, type '#login xyz'
// gamespy went down, the following config is obsolete
//reportingIP = "noreport";
// new v1.63 patch steam browser support
// STEAM
steamport = 8766; //default 8766, needs to be unique if multiple serves on same box
steamqueryport = 27016; //default 27016, needs to be unique if multiple servers on same box
logFile = "logs_pmc/server_console_pmc.log";
verifySignatures = 2;
equalModRequired = 0; // kick if data/mods aren't equal
requiredSecureId = 2; // was used to define type of secureID
// WELCOME MESSAGE ("message of the day")
// It can be several lines, separated by comma
// Empty messages "" will not be displayed at all but are only for increasing the interval
motd[]={
"PMC Tactical",
"https://www.pmctactical.org/",
"Enjoy"
};
motdInterval = 30; // Time interval (in seconds) between each message
// JOINING RULES
maxPlayers = 32; // Maximum amount of players. Civilians and watchers, beholder, bystanders and so on also count as player.
kickDuplicate = 1; // Each ArmA version has its own ID. If kickDuplicate is set to 1, a player will be kicked
//requiredBuild = 12345 // Require clients joining to have at least build 12345 of game, preventing obsolete clients to connect
// VOTING
voteMissionPlayers = 1; // Tells the server how many people must connect so that it displays the mission selection screen.
voteThreshold = 0.33; // 33% or more players need to vote for something, for example an admin or a new map, to become effective
//voteMissionPlayers = 0;
// INGAME SETTINGS
disableVoN = 0; // If set to 1, Voice over Net will not be available
vonCodecQuality = 11; // supports range 1-30 //8kHz is 0-10 (narrowband), 16kHz is 11-20 (wideband), 32kHz is 21-30 (ultrawideband)
persistent = 1; // If 1, missions still run on even after the last player disconnected.
timeStampFormat = "full"; // Set the timestamp format used on each report line in server-side RPT file. Possible values are "none" (default),"short","full".
BattlEye = 1; // Server to use BattlEye system
localClient[] = {127.0.0.1}; // To indicate clients with unlimited bandwidth
// SCRIPTING ISSUES
onUserConnected = "";
onUserDisconnected = "";
doubleIdDetected = "";
// SIGNATURE VERIFICATION
onUnsignedData = "kick (_this select 0)"; // unsigned data detected
onHackedData = "kick (_this select 0)"; //"ban (_this select 0)"; // tampering of the signature detected
onDifferentData = "";
This is the server starting script, with this you start, stop and check the server status. This is key for getting your server up (or down heh).
pmc-arma2-server:
#!/bin/bash
#
#=======================================================================
#======== CONFIGURATION PARAMETERS ========
#======== MUST BE EDITED MANUALLY TO FIT YOUR SYSTEM PARAMETERS ========
#=======================================================================
ARMA_DIR=/home//arma2
CONFIG=pmc.cfg
PORT=2302
NAME=pmc
PIDFILE=${ARMA_DIR}/${PORT}.pid
RUNFILE=${ARMA_DIR}/${PORT}.run
LOGFILE=${ARMA_DIR}/logs_pmc/log.pmc.${PORT}.txt
SERVER=${ARMA_DIR}/arma2server
OTHERPARAMS="-cpucount=2 -beta=expansion/beta;expansion/beta/expansion"
#=======================================================================
ulimit -c 1000000
case "$1" in
start)
if [ -f ${RUNFILE} ]; then
$0 stop
fi
echo "Starting ArmA 2 server..."
# file to mark we want server running...
echo "go" >${RUNFILE}
# launch the background watchdog process to run the server
nohup /dev/null $0 watchdog &
;;
stop)
echo "Stopping ArmA 2 server..."
if [ -f ${RUNFILE} ]; then
# ask watcher process to exit by deleting its runfile...
rm -f ${RUNFILE}
fi
# and terminate ArmA 2 server process
if [ -f ${PIDFILE} ]; then
kill -TERM $(< ${PIDFILE})
if [ -f ${PIDFILE} ]; then
rm -f ${PIDFILE}
fi
fi
;;
status)
if [ -f ${RUNFILE} ]; then
echo "Server should be running..."
else
echo "Server should not be running..."
fi
if [ -f ${PIDFILE} ]; then
PID=$(< ${PIDFILE})
echo "PID file exists (PID=${PID})..."
if [ -f /proc/${PID}/cmdline ]; then
echo "Server process seems to be running..."
fi
echo "Server process seems to be running..."
fi
fi
;;
check)
echo -n "ArmA 2 directory: ${ARMA_DIR} "
if [ -d ${ARMA_DIR} ]; then
echo "OK"
else
echo "MISSING!"
fi
echo -n "Server executable: ${SERVER} "
if [ -x ${SERVER} ]; then
echo "OK"
else
echo "ERROR!"
fi
echo "Port number: ${PORT}"
echo -n "Config file: ${CONFIG} "
if [ -f ${CONFIG} ]; then
echo "OK"
else
echo "MISSING!"
fi
echo "PID file: ${PIDFILE}"
echo "RUN file: ${RUNFILE}"
;;
restart)
$0 stop
$0 start
;;
watchdog)
# this is a background watchdog process. Do not start directly
while [ -f ${RUNFILE} ]; do
# launch the server...
cd ${ARMA_DIR}
echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Starting server (port ${PORT})..."
${SERVER} >>${LOGFILE} 2>&1 -server -config=${CONFIG} -name=${NAME} -port=${PORT} -pid=${PIDFILE} ${OTHERPARAMS}
if [ -f ${RUNFILE} ]; then
echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Server died, waiting to restart..."
sleep 5s
else
echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Server shutdown intentional, watchdog terminating"
fi
done
;;
*)
echo "$0 (start|stop|restart|status|check)"
;;
esac
Here you also replace with whatever directory you are using. Also note the "logs_pmc/" directory this example uses, you should change this to what directory you prefer.
All done. Hopefully this tutorial was helpful :)
====== ArmA 2 SteamCMD Validate ======
// arma2 (notice that 33900 app_id does NOT work!)
app_update 33910
// arma2 OA
app_update 33930
Validate parameter:
// arma2 (notice that 33900 app_id does NOT work!)
app_update 33910 validate
// arma2 OA
app_update 33930 validate
Validate parameter checks all the files in your ArmA 2 installation for errors, if it finds any it will download and fix them. Validate option takes some time to process, if you are in hurry or just generally don't break your installations, you can lave out validate parameter.