Conan Exiles... Is Exiled.

Sad Conan
Sad Conan

Angry woof woof! Today I'm going to rag on Conan Exiles. This game itself actually isn't too bad. But, I'm not here to talk about playing the game. I'm here to talk about hosting the game.

I started this project to offer friends and others an easy method to host their own game servers. That means I intend to accept a level of responsibility for making the hard parts, easy. That is fine and fair, it all makes sense. But Conan, all I have to say: what the fuck?!

Being provided second-class server software

I've never ran game servers professionally until this project. But I've ran game servers ever since I was 12. I wouldn't call myself an expert, but these lessons helped drive me into my professional career as a Linux Systems Engineer.

Each piece of software I interact with, I've learned I should just expect there to be differences in how you manage them. For example, one piece of software might expect a config file in /etc to be populated to determine how its ran. Another may just expect cli flags be attached.

I also realize not all software can be build for all OSes. Something built for Linux might not have a Windows alternative. And that is okay. But, overall there is a pretty steady constant. Most game servers choose Linux for their server software.

Why Choose Linux?

Linux traditionally is very light weight. Out of the box it generally comes headless (without a GUI) and allows you really run it without a lot of bloat. Sure, you can reduce your bloat on Windows, but Linux seems to have won this place in the market.

Along with running lightweight, I would argue the ecosystem for Linux is better suited for running servers. There are far more tools, and a lot more support for running Linux as a server. Again Windows offers support, but often for a price. What you find online is hit or miss with quality.

But Conan Exiles did NOT choose Linux.

Windows Only Server.

You read that right. A Windows-only server.

My face when I discover Conan Exiles only has a windows executable for server

Call me a fan-boy, but no thank you. Its like I was setup for failure the second I decided to make Conan my 2nd attempt at a server. Which to be honest, of all the servers I've selected to start with. Conan is the only one I've not ran before. So its not all the Conan Exiles's dev's fault. And while I'm at it, I'll say, if it works for their needs, who am I to call them wrong? But, I still don't like it :P

While I never attempted to run the server on Windows, it looked like there we 2 ways to run the server on Windows.

  1. Run the server via steam / cli
  2. Download their server manager  [screenshot below]
Conan Exiles Dedicated Server Launcher

Take me back to my younger days, I would have loved this and thought it was so cool. But this is so difficult for me to work with when it comes to running a game server in Kubernetes.  I was about to give up. But, then I found someone someone has already done the work to get the server working with wine & docker.

GitHub - alinmear/docker-conanexiles: A docker container to easily provision and manage a conanexiles dedicated server using wine
A docker container to easily provision and manage a conanexiles dedicated server using wine - GitHub - alinmear/docker-conanexiles: A docker container to easily provision and manage a conanexiles d...

This project I thought was a lifesaver! So I loaded it up into Agones.

Actually Running a Conan Exiles Server...Sorta.

apiVersion: "agones.dev/v1"
kind: GameServer
metadata:
  generateName: "conan-"
spec:
  container: conan
  ports:
    - name: conan-default
      container: conan-gameserver
      portPolicy: Static
      containerPort: 7777
      hostPort: 7003
      protocol: TCP
  health:
    initialDelaySeconds: 60
  template:
    spec:
       spec:
      containers:
      - name: conan-gameserver
        image: alinmear/docker-conanexiles:latest
        env:
          # Env Vars borrowed from docker-conanexiles readme
          - name: CONANEXILES_ServerSettings_ServerSettings_AdminPassword 
            value: "ThanksForThisSmartSolution"
          - name: CONANEXILES_Engine_OnlineSubSystemSteam_ServerName 
            value: "My Cool Server"
          - name: CONANEXILES_Engine_OnlineSubSystemSteam_ServerPassword 
            value: "MySecret"
          - name: CONANEXILES_INSTANCENAME 
            value: "exiles0"

          - name: CONANEXILES_Game_RconPlugin_RconEnabled 
            value: "1"
          - name: CONANEXILES_Game_RconPlugin_RconPassword 
            value: "REDACTED"
          - name: CONANEXILES_Game_RconPlugin_RconPort 
            value: "25575"
          - name: CONANEXILES_Game_RconPlugin_RconMaxKarma 
            value: "60"

          - name: CONANEXILES_MODS 
            value: "880454836,1159180273,1389908968,1369743238,2050780234,2356146223,1701136207"

          - name: CONANEXILES_Engine_/script/onlinesubsystemutils.ipnetdriver_NetServerMaxTickRate 
            value: "30" #INSERT A VALUE OF 30 OR HIGHER
          - name: CONANEXILES_Engine_/script/onlinesubsystemutils.ipnetdriver_MaxClientRate 
            value: "600000"
          - name: CONANEXILES_Engine_/script/onlinesubsystemutils.ipnetdriver_MaxInternetClientRate 
            value: "600000"
          - name: CONANEXILES_Engine_SystemSettings_dw.NetClientFloatsDuringNavWalking 
            value: "0"
          - name: CONANEXILES_Engine_/script/conansandbox.systemsettings_dw.EnableAISpawning 
            value: "1"
          - name: CONANEXILES_Engine_/script/conansandbox.systemsettings_dw.EnableInitialAISpawningPass 
            value: "1"
          - name: CONANEXILES_Engine_/script/conansandbox.systemsettings_dw.NPCsTargetBuildings 
            value: "1"
          - name: CONANEXILES_Engine_/script/conansandbox.systemsettings_dw.nav.AvoidNonPawns 
            value: "1"
            
          ... many more env vars
        volumeMounts:
          - mountPath: /conanexiles
            name: conan-game-data

      volumes:
      - name: conan-game-data
        persistentVolumeClaim:
          claimName: conan-7003

I could then create the gameserver.

kubectl create -f conan/conan-gameserver.yml

But sadly it failed. Turns out, k8s doesn't like environment variables with special characters like / and @ in them. Go figure.

Luckily, using the following I got a working server...sorta.

apiVersion: "agones.dev/v1"
kind: GameServer
metadata:
  generateName: "conan-"
spec:
  container: conan
  ports:
    - name: conan-default
      container: conan-gameserver
      portPolicy: Static
      containerPort: 7777
      hostPort: 7003
      protocol: TCP
  health:
    initialDelaySeconds: 60
  template:
    spec:
       spec:
      containers:
      - name: conan-gameserver
        image: alinmear/docker-conanexiles:latest
        env:
          # Env Vars borrowed from docker-conanexiles readme
          - name: CONANEXILES_ServerSettings_ServerSettings_AdminPassword 
            value: "ThanksForThisSmartSolution"
          - name: CONANEXILES_Engine_OnlineSubSystemSteam_ServerName 
            value: "My Cool Server"
          - name: CONANEXILES_Engine_OnlineSubSystemSteam_ServerPassword 
            value: "MySecret"
          - name: CONANEXILES_INSTANCENAME 
            value: "exiles0"

          - name: CONANEXILES_Game_RconPlugin_RconEnabled 
            value: "1"
          - name: CONANEXILES_Game_RconPlugin_RconPassword 
            value: "REDACTED"
          - name: CONANEXILES_Game_RconPlugin_RconPort 
            value: "25575"
          - name: CONANEXILES_Game_RconPlugin_RconMaxKarma 
            value: "60"

          - name: CONANEXILES_MODS 
            value: "880454836,1159180273,1389908968,1369743238,2050780234,2356146223,1701136207"

        volumeMounts:
          - mountPath: /conanexiles
            name: conan-game-data

      volumes:
      - name: conan-game-data
        persistentVolumeClaim:
          claimName: conan-7003

I say sorta, because I ran into one more problem that eventually just lead me to taking a break from Conan.

Ephemeral Storage. Every time I would spin up the server, my entire node would get evicted due to exceeding the amount of requested ephemeral-storage. My disk space still had enough room, but I couldn't figure out what was causing it.

Overall, I decided I would stop with Conan Exiles. Take a break and work on a server type that I knew how to manage: Factorio. Which I actually got up and running in no time! But that is for another article.

Conclusion

So unfortunately, I don't have a working Conan Exiles server that I can offer. But that is okay, I'm going to try and make progress in other areas. I'll use my time away from working on the Conan server  to instead learn more things. That way, when I come back to it, it'll be easy as pie.

Additionally, I want to thank the Conan Exiles team. I really do enjoy the game. I'm bummed out about their server software, but that doesn't mean they suck or anything. Maybe they'll take some time and improve this situation in the near future. At least, I can hope.

Conan being himself.

Until next time! Bork Bork