====== 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.