Linux Server Setup
THE TRIBESNEXT PATCHES DO NOT SUPPORT THE NATIVE LINUX CLIENT/SERVER. THE ONLY WAY TO GET TRIBESNEXT TO WORK IN LINUX IS TO USE WINE OR USE A VIRTUAL MACHINE. This guide will tell you how to make a DEDICATED SERVER on a headless server using Wine.
This is a guide for setting up Tribes 2 to work in Linux and TribesNext without using a virtual machine. I made it because, apparently, I was the only person as of this writing to have gotten it to work (or even bothered trying, who knows). To do this, you'll need a few things:
I will assume your shell server doesn't have a full X environment to use. Otherwise, why the hell would you be reading this guide?
The first thing I did was installed Tribes 2 on my box. This involves, of course, installing the game, patching the game (if you installed from CD instead of GSA) and installing the TribesNext patch. You may also wish to verify that it works on your box, but this doesn't matter a whole lot since it won't be running on your box for long, maybe. However, don't install any addons, especially client-side, as it doesn't make much sense.
Once the Tribes 2 install is squared away, compress it and upload it. The actual compression method obviously doesn't matter so long as you can extract it from your server. Hell, you can elect not to compress it, I don't care. Just make sure that GameData makes it to your server, as all of the required bits are inside that directory (outside of that are just shortcuts).
You might want to run the server using a different account than your normal one in case Tribes 2 gets compromised. That way, the damage is limited to that account (and not your own). Either way, extract the game files somewhere in your account. Now you'll want to spend time configuring your server. If you don't have an X server that isn't Xvfb, you won't be able to use the GUI to do this. You won't even be able to see the console window. However, the magic of Xvfb is the fact that it doesn't have any video requirements, and the framebuffer it creates is virtualized. The upside is that things that require GUIs (Wine command prompts, for one) will run on a headless server, but the downside is that it's not easy getting screenshots of what's actually going on inside the framebuffer. For Tribes 2, you probably won't care once the server is running.
Use your favorite text editor to edit the config scripts (vim is the most popular, I use nano). If you have multiple IP addresses, I highly recommend binding Tribes 2 to one of them (use $Host::BindAddress in ServerPrefs.cs). Look elsewhere for detailed server configuring.
Now it's time to tie it all together and stick a bow on it. I made a small shell script to automate the server process (having made one before for Garry's Mod, also in Wine). First I use a series of loops to find and delete DSOs. It's not pretty, but it works:
ScratchMonkey recommends this instead (it does basically the same thing in one line; see his post for the technical details):
Then a line to start the server itself:
The first "line" is for Wine (it works without it, but I put it in for good measure). The second launches a per-user Xvfb process. On a Debian box (or any other box, who knows), Xvfb runs like any other X client, so it would have to be started ahead of time (on Debian, this was done with sudo /etc/init.d/Xvfb start), but Ubuntu here uses seperate processes. The third line tells taskset (and, by extension, the kernel) to run the process on only the first CPU (it uses a bitmask, so 0x00000003 would let it run on the first two CPUs).
Stick the code in a shell script, mark it as executable and, optionally, run it in a screen session. That way, you can run it, detach and log out, and the server will keep running. You could also launch the script using & (./server.sh &) to automatically background it if you want too. Doesn't matter a whole lot.
Once you actually run the executable, the only way you'll know that it's working is if you can connect to it from your client. Even if it doesn't show up in the server listing, it might be taking connections anyway. If this is the case, and you're using the modified T2csri.vl2 that's made for Wine users, then REMOVE that one and restore the original. If it STILL doesn't work, I either missed something (doubtful) or there is something wrong with your config/box.
Addendum: Thyth had something to say about getting Ruby to work or something in his post further down.
This is a guide for setting up Tribes 2 to work in Linux and TribesNext without using a virtual machine. I made it because, apparently, I was the only person as of this writing to have gotten it to work (or even bothered trying, who knows). To do this, you'll need a few things:
- A Linux box of some kind. The kernel should probably be fairly recent (any 2.6 without any glaring bugs should be fine), but that's usually not a problem. Alternatively, you could use something else like FreeBSD or even Solaris, but you need to be able to use Wine (explained below).
- A decent shell. A good portion use Bash, but the actual shell matters not. It should preferrably have decent scripting support.
- Wine. Since TribesNext is Windows only, you'll be using this to run it. Using a recent version is preferred, but any version is basically a roll of the dice as to if it'll run and to what extent.
- An X client. Most shell servers don't have one, so I highly recommend Xvfb.
- OPTIONAL: GNU Screen or equivalent. Useful to background the server and bring it back later (so you can log off and go to sleep or whatever).
- OPTIONAL: taskset. This is useful for boxes with more than one CPU, as it allows you to specify which CPU(s) the program's threads will run on.
- Some time. Useful because, without time, there is only space.
I will assume your shell server doesn't have a full X environment to use. Otherwise, why the hell would you be reading this guide?
The first thing I did was installed Tribes 2 on my box. This involves, of course, installing the game, patching the game (if you installed from CD instead of GSA) and installing the TribesNext patch. You may also wish to verify that it works on your box, but this doesn't matter a whole lot since it won't be running on your box for long, maybe. However, don't install any addons, especially client-side, as it doesn't make much sense.
Once the Tribes 2 install is squared away, compress it and upload it. The actual compression method obviously doesn't matter so long as you can extract it from your server. Hell, you can elect not to compress it, I don't care. Just make sure that GameData makes it to your server, as all of the required bits are inside that directory (outside of that are just shortcuts).
You might want to run the server using a different account than your normal one in case Tribes 2 gets compromised. That way, the damage is limited to that account (and not your own). Either way, extract the game files somewhere in your account. Now you'll want to spend time configuring your server. If you don't have an X server that isn't Xvfb, you won't be able to use the GUI to do this. You won't even be able to see the console window. However, the magic of Xvfb is the fact that it doesn't have any video requirements, and the framebuffer it creates is virtualized. The upside is that things that require GUIs (Wine command prompts, for one) will run on a headless server, but the downside is that it's not easy getting screenshots of what's actually going on inside the framebuffer. For Tribes 2, you probably won't care once the server is running.
Use your favorite text editor to edit the config scripts (vim is the most popular, I use nano). If you have multiple IP addresses, I highly recommend binding Tribes 2 to one of them (use $Host::BindAddress in ServerPrefs.cs). Look elsewhere for detailed server configuring.
Now it's time to tie it all together and stick a bow on it. I made a small shell script to automate the server process (having made one before for Garry's Mod, also in Wine). First I use a series of loops to find and delete DSOs. It's not pretty, but it works:
find /home/t2s/.wine/drive_c/Tribes2/GameData/base -name *.dso | while read line do rm $line done
ScratchMonkey recommends this instead (it does basically the same thing in one line; see his post for the technical details):
find /home/t2s/.wine/drive_c/Tribes2/GameData/base -name \*.dso -execdir /bin/rm {} \+
Then a line to start the server itself:
env WINEPREFIX=/home/t2s/.wine \ xvfb-run -a -w 5 \ taskset 0x00000001 \ wine Tribes2.exe -online -dedicated -mission Katabatic CTF
The first "line" is for Wine (it works without it, but I put it in for good measure). The second launches a per-user Xvfb process. On a Debian box (or any other box, who knows), Xvfb runs like any other X client, so it would have to be started ahead of time (on Debian, this was done with sudo /etc/init.d/Xvfb start), but Ubuntu here uses seperate processes. The third line tells taskset (and, by extension, the kernel) to run the process on only the first CPU (it uses a bitmask, so 0x00000003 would let it run on the first two CPUs).
Stick the code in a shell script, mark it as executable and, optionally, run it in a screen session. That way, you can run it, detach and log out, and the server will keep running. You could also launch the script using & (./server.sh &) to automatically background it if you want too. Doesn't matter a whole lot.
Once you actually run the executable, the only way you'll know that it's working is if you can connect to it from your client. Even if it doesn't show up in the server listing, it might be taking connections anyway. If this is the case, and you're using the modified T2csri.vl2 that's made for Wine users, then REMOVE that one and restore the original. If it STILL doesn't work, I either missed something (doubtful) or there is something wrong with your config/box.
Addendum: Thyth had something to say about getting Ruby to work or something in his post further down.
Comments
Works fine with wine 1.0.1 but when using current (1.1.6 as of now) it throws an error when trying to join the server.
Out of curiousity, was the TN support for wine improved? Last time i've checked it just didn't work.
LINK : http://koov.net/file/tribes2_resource/t2-linux.zip
maybe it can be run dedicated server... but need some mod or patches..
below...
devel:~/t2-linux# ./tribes2d -dedicated
Dedicated server by:
Loki Software, Inc.
http://www.lokigames.com
Binding server port to default IP
UDP initialized on port 28000
exporting server prefs...
Loading compiled script scripts/commanderMapIcons.cs.
Loading compiled script scripts/markers.cs.
Loading compiled script scripts/serverAudio.cs.
Loading compiled script scripts/damageTypes.cs.
Loading compiled script scripts/deathMessages.cs.
Loading compiled script scripts/inventory.cs.
Loading compiled script scripts/camera.cs.
Loading compiled script scripts/particleEmitter.cs.
Loading compiled script scripts/particleDummies.cs.
Loading compiled script scripts/projectiles.cs.
Loading compiled script scripts/player.cs.
Loading compiled script scripts/light_male.cs.
Loading compiled script scripts/medium_male.cs.
Loading compiled script scripts/heavy_male.cs.
Loading compiled script scripts/light_female.cs.
Loading compiled script scripts/medium_female.cs.
Loading compiled script scripts/bioderm_light.cs.
Loading compiled script scripts/bioderm_medium.cs.
Loading compiled script scripts/bioderm_heavy.cs.
Validation required for shape: light_male.dts
Validation required for shape: medium_male.dts
Validation required for shape: heavy_male.dts
Validation required for shape: light_female.dts
Validation required for shape: medium_female.dts
Validation required for shape: heavy_male.dts
Validation required for shape: bioderm_light.dts
Validation required for shape: bioderm_medium.dts
Validation required for shape: bioderm_heavy.dts
Loading compiled script scripts/gameBase.cs.
Loading compiled script scripts/staticShape.cs.
Warning: shape int_flagstand.dts collision detail 0 (Collision-5) bounds exceed that of shape.
Loading compiled script scripts/weapons.cs.
Loading compiled script scripts/weapons/blaster.cs.
Loading compiled script scripts/weapons/plasma.cs.
Loading compiled script scripts/weapons/chaingun.cs.
Validation required for shape: ammo_chaingun.dts
Validation required for shape: weapon_chaingun.dts
Loading compiled script scripts/weapons/disc.cs.
Loading compiled script scripts/weapons/grenadeLauncher.cs.
Validation required for shape: ammo_grenade.dts
Validation required for shape: weapon_grenade_launcher.dts
Loading compiled script scripts/weapons/sniperRifle.cs.
Validation required for shape: weapon_sniper.dts
Loading compiled script scripts/weapons/ELFGun.cs.
Validation required for shape: weapon_elf.dts
Loading compiled script scripts/weapons/mortar.cs.
Validation required for shape: ammo_mortar.dts
Validation required for shape: weapon_mortar.dts
Loading compiled script scripts/weapons/missileLauncher.cs.
Validation required for shape: ammo_missile.dts
Validation required for shape: weapon_missile.dts
Loading compiled script scripts/weapons/targetingLaser.cs.
Validation required for shape: weapon_targeting.dts
Loading compiled script scripts/weapons/shockLance.cs.
Validation required for shape: weapon_shocklance.dts
Loading compiled script scripts/weapons/mine.cs.
Validation required for shape: mine.dts
Validation required for shape: ammo_mine.dts
Loading compiled script scripts/weapons/grenade.cs.
Validation required for shape: grenade.dts
Validation required for shape: grenade.dts
Loading compiled script scripts/weapons/flashGrenade.cs.
Validation required for shape: grenade.dts
Validation required for shape: grenade.dts
Loading compiled script scripts/weapons/flareGrenade.cs.
Validation required for shape: grenade.dts
Validation required for shape: grenade.dts
Loading compiled script scripts/weapons/concussionGrenade.cs.
Validation required for shape: grenade.dts
Loading compiled script scripts/weapons/cameraGrenade.cs.
Validation required for shape: camera.dts
Loading compiled script scripts/turret.cs.
Loading compiled script scripts/turrets/mortarBarrelLarge.cs.
Loading compiled script scripts/turrets/aaBarrelLarge.cs.
Loading compiled script scripts/turrets/missileBarrelLarge.cs.
Loading compiled script scripts/turrets/plasmaBarrelLarge.cs.
Loading compiled script scripts/turrets/ELFBarrelLarge.cs.
Loading compiled script scripts/turrets/outdoorDeployableBarrel.cs.
Loading compiled script scripts/turrets/indoorDeployableBarrel.cs.
Loading compiled script scripts/turrets/sentryTurret.cs.
Loading compiled script scripts/weapTurretCode.cs.
Loading compiled script scripts/pack.cs.
Loading compiled script scripts/packs/ammopack.cs.
Validation required for shape: pack_upgrade_ammo.dts
Loading compiled script scripts/packs/cloakingpack.cs.
Validation required for shape: pack_upgrade_cloaking.dts
Loading compiled script scripts/packs/energypack.cs.
Validation required for shape: pack_upgrade_energy.dts
Loading compiled script scripts/packs/repairpack.cs.
Validation required for shape: pack_upgrade_repair.dts
Loading compiled script scripts/packs/shieldpack.cs.
Validation required for shape: pack_upgrade_shield.dts
Loading compiled script scripts/packs/satchelCharge.cs.
Validation required for shape: pack_upgrade_satchel.dts
Validation required for shape: pack_upgrade_satchel.dts
Loading compiled script scripts/packs/sensorjammerpack.cs.
Validation required for shape: pack_upgrade_sensorjammer.dts
Loading compiled script scripts/packs/aabarrelpack.cs.
Validation required for shape: pack_barrel_aa.dts
Loading compiled script scripts/packs/missilebarrelpack.cs.
Validation required for shape: pack_barrel_missile.dts
Loading compiled script scripts/packs/mortarbarrelpack.cs.
Validation required for shape: pack_barrel_mortar.dts
Loading compiled script scripts/packs/plasmabarrelpack.cs.
Validation required for shape: pack_barrel_fusion.dts
Loading compiled script scripts/packs/ELFbarrelpack.cs.
Validation required for shape: pack_barrel_elf.dts
Loading compiled script scripts/vehicles/vehicle_spec_fx.cs.
Loading compiled script scripts/vehicles/serverVehicleHud.cs.
Loading compiled script scripts/vehicles/vehicle_shrike.cs.
Validation required for shape: vehicle_air_scout.dts
Loading compiled script scripts/vehicles/vehicle_bomber.cs.
Validation required for shape: vehicle_air_bomber.dts
Validation required for shape: repair_kit.dts
Loading compiled script scripts/vehicles/vehicle_havoc.cs.
Validation required for shape: vehicle_air_hapc.dts
Loading compiled script scripts/vehicles/vehicle_wildcat.cs.
Validation required for shape: vehicle_grav_scout.dts
Loading compiled script scripts/vehicles/vehicle_tank.cs.
Validation required for shape: vehicle_grav_tank.dts
Validation required for shape: repair_kit.dts
Loading compiled script scripts/vehicles/vehicle_mpb.cs.
Validation required for shape: vehicle_land_mpbase.dts
Loading compiled script scripts/vehicles/vehicle.cs.
Loading compiled script scripts/ai.cs.
Loading compiled script scripts/aiDebug.cs.
scripts/aiDebug.cs (340): Unable to find object: 'Canvas' attempting to call function 'popDialog'
Loading compiled script scripts/aiDefaultTasks.cs.
Loading compiled script scripts/aiObjectives.cs.
Loading compiled script scripts/aiInventory.cs.
Loading compiled script scripts/aiChat.cs.
Loading compiled script scripts/aiHumanTasks.cs.
Loading compiled script scripts/aiObjectiveBuilder.cs.
Loading compiled script scripts/aiBotProfiles.cs.
Loading compiled script scripts/item.cs.
Validation required for shape: repair_kit.dts
Validation required for shape: repair_patch.dts
Validation required for shape: flag.dts
Validation required for shape: Huntersflag.dts
Validation required for shape: Huntersflag.dts
Validation required for shape: Huntersflag.dts
Validation required for shape: Huntersflag.dts
Validation required for shape: nexus_effect.dts
Validation required for shape: beacon.dts
Loading compiled script scripts/station.cs.
Loading compiled script scripts/simGroup.cs.
Loading compiled script scripts/trigger.cs.
Loading compiled script scripts/forceField.cs.
Loading compiled script scripts/lightning.cs.
Loading compiled script scripts/weather.cs.
Loading compiled script scripts/deployables.cs.
Validation required for shape: pack_deploy_inventory.dts
Validation required for shape: pack_deploy_sensor_motion.dts
Validation required for shape: pack_deploy_sensor_pulse.dts
Validation required for shape: pack_deploy_turreto.dts
Validation required for shape: pack_deploy_turreti.dts
Loading compiled script scripts/stationSetInv.cs.
Loading compiled script scripts/navGraph.cs.
Loading compiled script scripts/targetManager.cs.
Loading compiled script scripts/serverCommanderMap.cs.
Loading compiled script scripts/environmentals.cs.
Loading compiled script scripts/power.cs.
Loading compiled script scripts/serverTasks.cs.
Loading compiled script scripts/admin.cs.
Missing file: prefs/banlist.cs!
Loading compiled script scripts/aiBountyGame.cs.
Loading compiled script scripts/TeamHuntersGame.cs.
Loading compiled script scripts/aiTeamHunters.cs.
Loading compiled script scripts/aiHunters.cs.
Loading compiled script scripts/SinglePlayerGame.cs.
Loading compiled script scripts/spDialog.cs.
Loading compiled script scripts/SiegeGame.cs.
Loading compiled script scripts/aiSiege.cs.
Loading compiled script scripts/RabbitGame.cs.
Loading compiled script scripts/aiRabbit.cs.
Loading compiled script scripts/HuntersGame.cs.
Loading compiled script scripts/aiHunters.cs.
Loading compiled script scripts/DnDGame.cs.
Loading compiled script scripts/aiDnD.cs.
Loading compiled script scripts/DMGame.cs.
Loading compiled script scripts/aiDeathMatch.cs.
Loading compiled script scripts/CnHGame.cs.
Loading compiled script scripts/aiCnH.cs.
Loading compiled script scripts/CTFGame.cs.
Loading compiled script scripts/aiCTF.cs.
Loading compiled script scripts/BountyGame.cs.
Loading compiled script scripts/aiBountyGame.cs.
Loading compiled script scripts/defaultGame.cs.
Loading compiled script scripts/TR2Game.cs.
Loading compiled script scripts/TR2Packages.cs.
Loading compiled script scripts/TR2Particles.cs.
Loading compiled script scripts/TR2Physics.cs.
Loading compiled script scripts/TR2light_male.cs.
Loading compiled script scripts/TR2light_female.cs.
Loading compiled script scripts/TR2medium_male.cs.
Loading compiled script scripts/TR2medium_female.cs.
Loading compiled script scripts/TR2heavy_male.cs.
Loading compiled script scripts/TR2Items.cs.
Loading compiled script scripts/weapons/TR2disc.cs.
Validation required for shape: TR2weapon_disc.dts
Loading compiled script scripts/weapons/TR2grenadeLauncher.cs.
Validation required for shape: TR2weapon_grenade_launcher.dts
Loading compiled script scripts/weapons/TR2chaingun.cs.
Validation required for shape: TR2weapon_chaingun.dts
Loading compiled script scripts/weapons/TR2grenade.cs.
Loading compiled script scripts/weapons/TR2targetingLaser.cs.
Loading compiled script scripts/packs/TR2energypack.cs.
Loading compiled script scripts/weapons/TR2shocklance.cs.
Validation required for shape: TR2weapon_shocklance.dts
Loading compiled script scripts/weapons/TR2mortar.cs.
Validation required for shape: TR2weapon_mortar.dts
Attempting to re-link namespace Launcher from StaticShapeData to Launcher with non-zero refcount.
Attempting to re-link namespace Goal from StaticShapeData to Goal with non-zero refcount.
Warning: shape goal_panel.dts collision detail 0 (Collision-1) bounds exceed that of shape.
Attempting to re-link namespace GoalPost from StaticShapeData to GoalPost with non-zero refcount.
Attempting to re-link namespace GoalCrossbar from StaticShapeData to GoalCrossbar with non-zero refcount.
Attempting to re-link namespace GoalBack from StaticShapeData to GoalBack with non-zero refcount.
Attempting to re-link namespace GoldPole from StaticShapeData to GoldPole with non-zero refcount.
Warning: shape golden_pole.dts collision detail 0 (Collision-1) bounds exceed that of shape.
Attempting to re-link namespace SilverPole from StaticShapeData to SilverPole with non-zero refcount.
Warning: shape silver_pole.dts collision detail 0 (Collision-1) bounds exceed that of shape.
Loading compiled script scripts/TR2Bonuses.cs.
Loading compiled script scripts/TR2BonusSounds.cs.
Loading compiled script scripts/TR2BonusCategories.cs.
Loading compiled script scripts/TR2Prefixes.cs.
Loading compiled script scripts/TR2Nouns.cs.
Loading compiled script scripts/TR2Qualifiers.cs.
Loading compiled script scripts/TR2Descriptions.cs.
Loading compiled script scripts/TR2WeaponBonuses.cs.
Loading compiled script scripts/TR2OtherBonuses.cs.
Loading compiled script scripts/TR2ObserverQueue.cs.
Loading compiled script scripts/TR2Roles.cs.
Validation required for shape: TR2Flag.dts
Validation required for shape: TR2Flag.dts
Validation required for shape: TR2Flag.dts
Validation required for shape: TR2Flag.dts
Validation required for shape: TR2Flag.dts
Loading compiled script t2csri/serverGlue.cs.
Loading compiled script t2csri/rubyUtils.cs.
Loading Ruby script t2csri/crypto.rb.
t2csri/rubyUtils.cs (20): Unable to find function rubyEval
Loading compiled script t2csri/serverSide.cs.
Loading compiled script t2csri/serverSideClans.cs.
Loading compiled script t2csri/bans.cs.
Loading compiled script t2csri/ipv4.cs.
Loading compiled script t2csri/base64.cs.
Loading compiled script t2csri/serverGlue.cs.
Loading compiled script t2csri/rubyUtils.cs.
Loading Ruby script t2csri/crypto.rb.
t2csri/rubyUtils.cs (20): Unable to find function rubyEval
Loading compiled script t2csri/serverSide.cs.
ActivatePackage called for a currently active package!
Loading compiled script t2csri/serverSideClans.cs.
Loading compiled script t2csri/bans.cs.
Loading compiled script t2csri/ipv4.cs.
Loading compiled script t2csri/base64.cs.
-- Sent heartbeat to TN Master. (master.tribesnext.com:80)
LOADING MISSION: Katabatic
Stage 2 load
Executing missions/Katabatic.mis.
Memory consumed = 0
team 1 objectives load...
team 2 objectives load...
navGraph(): register permanent (static object) threat on the graph
navGraph(): register permanent (static object) threat on the graph
navGraph(): register permanent (static object) threat on the graph
navGraph(): register permanent (static object) threat on the graph
navGraph(): register permanent (static object) threat on the graph
navGraph(): register permanent (static object) threat on the graph
Default game mission load done.
starting camp thread...
starting mission countdown...
%
devel:~/t2-linux# find ./ -name rubyUtils.cs
devel:~/t2-linux# grep -R rubyUtils *
Binary file base/T2csri.vl2 matches
devel:~/t2-linux# grep -R rubyEval *
Binary file base/T2csri.vl2 matches
Binary file t2dll.dll matches
devel:~/t2-linux#
It's not working
maybe it cause YELLOW CONTENT.
who can help?
Maybe that's what Turkeh meant when he said there is no TribesNext support for the Linux native version of T2.
Credit goes to P!nkP?nther.
Try this, instead:
Note the need for a backslash to escape the shell's special characters, asterisk and plus.
While researching this post, I discovered the -execdir option (I've always used -exec) and the plus option to -exec and -execdir. The terminating plus causes the rm command to be issued with multiple filenames, so there will be far fewer invocations of the rm command. (Spawning a subprocess is expensive, so this can be quite a bit more efficient.)
To test the result, substitute echo for /bin/rm, and it will show you what files would be deleted.
I don't know what's in the Windows DLL so I don't know how extensive this work would be.
These are the commands I ran just recently to set up a T2 server on one of my x86_64 Linux servers.
The game installer and TN patch will need to connect to an X server if you install the game via Wine (remote X servers work, obviously), but you can use wineconsole as above to run the server itself without X (like in a screen).
Wine version is 1.1.29 on this system. Those commands are exactly what I ran to make it work.
I have a TribesNext server up in the masterlist now that is running on Linux using Wine. It is called BearTown Tribes2.
The version of Linux being used is Debian Squeeze and the version of Wine being used is the latest available for this distro at this time direct from WineHQ. (1.1.42)
The initial method used to install TribesNext was based on Thyth's method described in this thread. Other than pre-downloading the needed files everything else was done exactly as he described.
This got me to a mostly working server that would generate errors upon client connect requests. At this point I decided to go a bit farther and see if I could resolve some of the issues I was seeing.
I downloaded a copy of "Winetricks" from http://wiki.winehq.org/winetricks and also http://code.google.com/p/winetricks/
Winetricks is a handy little script that downloads and installs various applications and libraries one might need in the the Wine environment
Using Winetricks I installed a number of the usual dll libraries one might see in a copy of Windows.
After doing this the server began to perform more or less the way it is supposed to. It does crash once in a while but within acceptable limits. I'm sorry to say I did not take notes during this part of the process. I should have. If its of any assistance to those wanting to try this I did download the obvious suspects, all the visual basic vcr related crap I could find in Winetricks.
While this is working I look forward to seeing what Thyth has in mind for the future TribesNext version that hopefully has better out of the box Linux support.
As to the server itself.
It is running only CTF maps and mostly client side maps. I am gradually adding in more of the better quality ones as I find them. Since there are already plenty of servers running server side maps I have little interest in adding mine to that list. There are some really nice client side maps available so my goal for this server is to highlight some of that talent.
Eventually, after I have had time to sift through the various maps I might like to add I will release a mappack specifically tailored to the server so that players who might like to visit will have an easier time of it. For those interested in playing now, most of the maps are coming from TribalOutpost ( http://www.tribaloutpost.com/tribes2 )
Hope that helps my fellow "Penguins" out there. BTW, I am also running TribesNext on my Linux gaming system using Wine with no problems as well.
I followed Thyth's procedure to install and replace msvcrt-ruby190.dll with the 191 version. At this point, clients were unable to connect. I figured out there was some issue with msvcrt and then decided to try creating an override so that the tribes2 MSVCRT.dll would be used instead of the internal wine version. The override was the key in solving the problem. It appears that winetricks is not needed.
Steps to install:
Note: you will need to have an active X session running for the setup wizards (you can use vnc if you are unable to use a monitor on the system.) It is assumed you have wine installed.
1. Acquire tribes2_gsi.exe and TribesNext_rc2a.exe from www.tribesnext.com.
2. (Optional) Verify the integrity of the files with md5sum (should match what is shown here):
3. In a terminal, run the following command to install Tribes 2:
Follow the setup wizard.
4. Do the same for the TribesNext patch:
Follow the setup wizard.
5. Download ruby-1.9.0-2 i386 mswin32: [ftp=ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/unstable/ruby-1.9.0-2-i386-mswin32.zip]ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/unstable/ruby-1.9.0-2-i386-mswin32.zip[/ftp]. The latest 1.9.1 i386 mswin32 version found at [ftp=ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/]ftp.ruby-lang.org/pub/ruby/binaries/mswin32/[/ftp] also works, but only for running a dedicated server.
6. Extract the ruby archive and copy bin/msvcrt-ruby190.dll (or whatever version you are trying) over the original Tribes2 GameData/msvcrt-ruby190.dll created by the tribesnext patch. (you may want to first backup the original msvcrt-ruby190.dll.)
7. Run 'winecfg' and click the Libraries tab. In the 'New override for library:' box, type 'msvcrt' and click 'Add.' 'native' should be first.
8. Add a command to fix server stuttering; create a *.cs file such as GameData/base/scripts/autoexec/auto.cs with the following line:
9. Make sure to open/forward the server port (default: UDP 28000)
10. Test that the server works at this point:
You should see:
If you don't see 'Heartbeat confirmed.', verify the port is really open from step 9.
11. Quit the server:
12. Modify your ServerPrefs.cs to how you want them.
13. Make sure to delete the *.dso files whenever you make changes to the *.cs files.
Run server in a terminal without wine graphics:
1. Install xvfb
2. Run the server like this:
Note: If the curses option is unavailable, wine will need to be rebuilt.
Also, from my testing, if you attempt to run the server without an active X session and without xvfb:
The Tribes2/wine processes will use around 100% cpu and you won't see '- Heartbeat confirmed.', meaning your server won't show up on the server list.
Using: Ubuntu 13.10 32bit, Wine 1.4.
Instead of VNC, if you're using putty to SSH into your server. Look up how to use Xming to render the X session on your computer while setting up. Then use xvfb to run the server program itself.
My current bash file is:
Run from inside Screen this works but not when run using "&" to separate it into a different instance.
with wine hosted server on ubuntu 17.04
after a few hours, server sets itself off
If you set it up as a bunch of systemd services and auto restart it every few days (just kill the Tribes2.exe binary, ispawn restarts the server then with the right core affinity), it runs without any special maintenance.