Setting up CS:GO dedicated server with eBot – on Ubuntu 16.04

Robert Andresen PC and apps, Tutorials 40 Comments

This little project took me about 25 hours, because of a lot of debugging and very little documentation for error messages regarding eBot. With this tutorial I will hopefully help someone else (and future me) to do this in 1-2 hours instead 🙂

My setup

  • Ubuntu 16.04 running as a VM in ESXi 6
  • eBot v3.1

My local IP for the server is 192.168.2.101. Remember to change it with your own server IP. Most of this guide also uses default config, and has not been optimized.

I also recommend to read the sources I have added, as they helped me a lot, so all credits to them. They could also help you if I forgot something in this article.

Video

Update 24.10.2016: I recorded a video with installing Ubuntu, CS:GO server (with LGSM) and eBot.

 

Install Ubuntu

I will not include install of Ubuntu in this tutorial. I just installed a default Ubuntu server with SSH server and LAMP package.

Ubuntu and CS takes about 18 GB, so make sure to allocate enough space for future updates and logs.

Prepare

If you are using a template server or something from a hosting company, you are probably are connected with SSH already. If so, just jump to “Update” before installing CS:GO.

I usually like to change the SSH port for some extra security, and allow root login to make it more simple.

change:
Port 41144
PermitRootLogin yes

(WARNING: Allow root login is not best practice, but I like to have full and easy access when testing and debugging:-) PermitRootLogin should only be enabled in the setup-process, demo environment or home/private network…)

 

Set a password for root-user

*Set password for root*

 

Restart SSH service

 

Find IP-address

 

Now connect with SSH (putty?).

 

Firewall

I disabled my firewall to prevent any problems with blocked ports, do NOT do this on a public server. See documentation to open ports. You should most likely open port 27015 for CS (if using default) and 12360 for eBot (can be changed in config).

 

Update

Make sure server is up to date

 

 

Install Counter Strike: GO dedicated server

Update 25.10.2016: The guide below shows how to install a CS:GO server from scratch (to original way). In my last setups I have started to use Linux Game Server Managers (LGSM) instead. You can look at it here: https://gameservermanagers.com/. I also use LGSM in my video-tutorial at the top of the article. If you use LGSM to install the server, you can just jump to the eBot part after the server is up and running.

 

Sources:
https://www.globo.tech/learning-center/install-counterstrike-go-ubuntu-16/

Prepare

Add a local steam user to the Ubuntu-server
Just add name, room, etc. blank –  and enter “Y” at the end.

Install the gameserver

 

Now you should be running the steamcmd, you should see «Steam>» when entering the command.

 

It will look something like this:

 

Troubleshoot:

Error! App ‘740’ state is 0x202 after update job.
Solution: Just try again.
Error! App ‘740’ state is 0x602 after update job.
Solution: Ran out of diskspace on server. I was working on a VirtualMachine, so I just booted from Ubuntu Desktop Live CD, started gparted and expanded the disk. Just Google if you need to do this.

 

Configure CS

Create/edit server.cfg

 

Create a service

If you are putting the server on the Internet (not LAN), you need to request the GSLT key from Steam, on the Game Server Account Management. I used the app-ID 730 for CS:GO, but installed app-ID 740 above, I’m not sure if there is a difference, but it worked for me.

You can find the command line options on this page. You should configure the start parameters for your own needs. The example below is copied from the tutorial in sources and are missing IP that can give an eBot error. I have included my working config at the end.

 

eBot

Using eBot version 3.1 (both bot and web).

Sources:

eBot has three parts:

The bot
Collects data from the game and communicate with RCON.

Panel / Website
Web-page – allows you to create matches, control them and see stats.

Gameserver / addon
CSay and allows eBot to communicate in the in-game chat.

 

Installing eBot

 

I assume you have installed the LAMP package (apache2, MySQL and PHP) when you installed the server. If not, you have to install apache2 and MySQL by yourself (Google it or see this guide for eBot).

PHP in the other hand, we actually should remove – because we need a lower version and we need to compile in pthreads. I didn’t want to take the chance of removing my php packages, as there is no direct uninstaller – so I just installed the old PHP over the previous one with the steps below.

 

Compile and install PHP

 

 

Install eBot – bot

If using Ubuntu 16 as me, you probably need to write apt-get install nodejs-legacy and apt-get install npm. You would most likely get an error for the nodejs package.
The steps above are critical to get eBot to communicate over socket.io. Please check the feedback to see that everything was installed OK. I had some problems with nodejs and npm while using the tutorial i followed.

 

Install eBot – web

 

Edit config files

I have added my working config-files at the bottom.

ebot_ip: <YOUR_SERVER_IP>
(If you used net, don’t put localhost or 127.0.0.1 here. It will not work. You need to put your server IP)
ebot_port: 12360
mode: net (for Internet, or LAN for local)

 

host: 127.0.0.1
username: ebotv3
password: <MYSQL_PASSWORD>

 

Set access and user to database, to allow you to login on the eBot web-page

Adding www-data group to the /home/ebot/ebot-web/ is important, if not, the apache can’t access the webpage files and you will get a forbidden error.

I’m not used to the chown-syntax above, so I used chown -R user:www-data /home/ebot/ebot-web/, where you set user to root or the user you created on install.

If the php sumfony steps fail, you will not be able to login on the eBot webpage.

 

Config apache

 

(I tried to set alias to /ebot istead of just /, but it looks like the web-path is hard-coded somewhere, giving a load error for images and files in the browsers console.)
I changed to a public subdomain after, with this config:

 

Enable the site / URL:

 

Webpage

You should now be able to open the eBot webpage and log in. You will probably get a socket error or something before you run eBot (next step).

http://YOUR_SERVER_IP/

User: admin
Password: admin

(See troubleshooting at the end of the article if you get error “Forbidden”, or if you get 500 error on the admin.php)

ebot_admin_login

If all works, it should be able to see green status messages in the sidebar. If not, just continue and look at the Troubleshoot section in the end of this article.

ebot_admin_websocket_ok

 

Create startup script

You can also write /etc/init.d/ebot restart|stop|status.

 

Install CSay addon to CS server

I recommend going to http://www.esport-tools.net/ebot/requirements, and click on the green label CS:GO under Gameserver part – to download it.

Here is the direct download link (but it could get out of date as this article gets older): http://www.esport-tools.net/download/CSay-CSGO.zip

  1. Download CSay addon to your computer
  2. Extract the .zip file
  3. Upload the “addon” folder under /home/steam/csgo/csgo/ on your server.

I used WinSCP to upload the files.
The addon folder probably doesn’t exist in /home/steam/csgo/csgo/ before you upload it.
It should be loaded automatically, but recommend to write “service csgo restart” or restart the server.

The reason for allowing root login at the start of this article, is to get full access with WinSCP. If you don’t have access to upload the folder, you need to change the user in SSH with chown.

 

Run eBot

If you started the service you created above, the eBot should be running. But by running the bootstrap.php, you will get a log of what is happening.

The first time I got error on MySQL and pthreads. The PHP version was also PHP 7 and is not working with eBot at the moment.

 

After restart of the server all changed to YES, and the php version changed down to 5.5.

But still some problems after the restart… “Websocket server crashed”.

The IP should be the same in most config files. Trying and failing IP-addresses in the different config files was probably the most time-consuming in my case. Should I use 127.0.0.1 as I hosted all on the same server? or the LAN IP? Or the public IP, as my server was public?

I also had different errors and some weird stuff happening between restarts, my conclusion is that some of the config is not reloaded properly. So remember, restart could help 🙂

Here are my current working config

/home/steam/csgo/csgo/cfg/server.cfg

 

/lib/systemd/system/csgo.service

 

/home/ebot/ebot-web/config/databases.yml

 

/home/ebot/ebot-web/config/app_user.yml

 

/home/ebot/ebot-csgo/config/config.ini

 

 

Your own config (cfg) in eBot

Update 11.10.2016: If you want to run your own config with eBot, you can write the name of the config-file when creating a match (without the .cfg extenion). This cfg-file should be located under the default csgo/cfg folder in your CS Server installation.

I have noticed some other problems, if the .cfg is also set in the startparameters of CS:GO, there can be some issues when loading the config on knife- and matchround. So make sure to create a brand new .cfg file only for use with eBot.

When I used csgo-server.cfg in both startparameters and in the eBot match, the kniferound didn’t get rid of the guns and match-rounds didn’t execute things like mp_roundtime. Not sure why… It all started working fine when I created a new single competative .cfg file for the eBot to load.

The other problem was with the freeze-time, if the game-mode was not set to competitive. I have only seen this option in the config for gameservermanagers.com so far – not sure if this is an issue on a clean install from Valve.

 

Troubleshooting and debugging

Push F12 to get the developer console in the browser. Works in most browsers, but I like Google Chrome.

If Websocket is not avalible, it will say Loading in the sidebar and you would get a connection error in the console.

ebot_admin_websocket_error

In my case it took some time to figure out what and how the connection was made. I was debugging firewall-log and more. I think the problem was what IP to use. 127, 192 or the public IP.

I tested by creating multiple servers.

ebot_servers

When running the bootstrap.php I could see what was going on…

I changed the IP in the start parameters for CS:GO (/lib/systemd/system/csgo.service) and it started working.

But then got a whole lot of other error messages. It looked like the CounterStrike client could talk back to the eBot.

As CS:GO and eBot was on the same server, I changed almost all IP-addresses in the config files to my local IP (192…). I usually set 127.0.0.1 if it’s the same host. The default config also used 127 – but that didn’t work so well in my case.

After changing most of my IP-addresses to the 192 address, everything started working. But I probably had to restart the server a couple of times due to some reload config bug – or I am just missing a service or something to restart/reload.

See my config files above to see where I added my local IP-address.

 

File access, Apache forbidden…

Another possible error-source could be file access. E.g. if you get “Forbidden” in Apache, then the apache does not have access to the eBot web-files.

Change myuser with your username.

 

500 error

If eBot webpage is working, but you get an 500 error when opening /admin.php.

Check the apache log.

tail parameter is to get the bottom of the log, and -f parameter is to follow the log. Push CTRL+C to quit.

In the access log I could see the same as in the browser. The request had an 500 error.

So i checked the error.log:

 

It’s a lot of text, but if you look for the sentences, and not the file paths, you can see “Failed to make cache directory”.

I probably forgot to create the cache directory, created it in the wrong folder or just forgot to set correct access to it.

Solution:

 

 

Full fileaccess

If you get really annoyed and nothing is working, you could do…

…then there is nothing stopping access to the files. But this is also a security risk! I was testing on a virtual machine for testing purposes, but don’t do stuff like this if you still have some hope to get it working 🙂