Table of Contents
This howto, for Fedora Linux, can be found here.
How To Build and Run your own SuperTuxKart Server On Debian 11
How to build and run your own SuperTuxKart server on Debian GNU Linux 11. SuperTuxKart is a 3D open-source arcade racer with a variety characters, tracks, and modes to play.
Sources
Hardware Sizing
I've been running a SuperTuxKart server for 8 players including AI-bots on the smallest available VPS package (CX11) at Hetzner with just a single 2.2 GHz core, 2 GB RAM and 20 GB HDD.
Installation
Create a user account to run SuperTuxKart with
useradd -m -s /bin/bash supertuxkartuser passwd supertuxkartuserInstall the required packages for building the SuperTuxKart server
apt update apt -y install build-essential cmake libbluetooth-dev libsdl2-dev libcurl4-openssl-dev libenet-dev libfreetype6-dev libharfbuzz-dev libjpeg-dev libogg-dev libopenal-dev libpng-dev libssl-dev libvorbis-dev libmbedtls-dev pkg-config zlib1g-devAdd a little convenience and structure
apt -y install git subversion tmux vim-nox mkdir -pv /home/supertuxkartuser/repos/
Both stk-code and stk-assets must be in the same directory, otherwise the build will fail!
Clone the SuperTuxKart and SuperTuxKart-Assets repositories.
cd /home/supertuxkartuser/repos/ git clone https://github.com/supertuxkart/stk-code.git stk-code svn co https://svn.code.sf.net/p/supertuxkart/code/stk-assets stk-assetsCompile the server and install it system wide
cd /home/supertuxkartuser/repos/stk-code mkdir -pv /home/supertuxkartuser/repos/stk-code/cmake_build cd /home/supertuxkartuser/repos/stk-code/cmake_build cmake -DBUILD_RECORDER=off -DSERVER_ONLY=ON .. make -j$(nproc) make install
online.supertuxkart.net User Account
A user account at online.supertuxkart.net is required to run the server. You can sign up/create it here. You will receive an e-mail with a link to confirm your e-mail address (yes, you should click that link before proceeding).
User Initialization And SuperTuxKart Server Configuration
Either log in to your Debian box with the user for running the server or su to it.
su - supertuxkartuserUse the following command to initialize your installation with your local run-user (named 'supertuxkartuser').
supertuxkart --init-user --login=<YOUR USER @ online.supertuxkart.net> --password=<YOUR PASSWORD @ online.supertuxkart.net>Now create the configuration file with the following command
vim /home/supertuxkartuser/supertuxkart_config.xml
<?xml version="1.0"?> <server-config version="6" > <!-- Name of server, encode in XML if you want to use unicode characters. --> <server-name value="THE NAME OF YOUR SERVER" /> <!-- Port used in server, if you specify 0, it will use the server port specified in stk_config.xml. If you wish to use a random port, set random-server-port to '1' in user config. STK will automatically switch to a random port if the port you specify fails to be bound. --> <server-port value="0" /> <!-- Game mode in server, 0 is normal race (grand prix), 1 is time trial (grand prix), 3 is normal race, 4 time trial, 6 is soccer, 7 is free-for-all and 8 is capture the flag. Notice: grand prix server doesn't allow for players to join and wait for ongoing game. --> <server-mode value="3" /> <!-- Difficulty in server, 0 is beginner, 1 is intermediate, 2 is expert and 3 is supertux (the most difficult). --> <server-difficulty value="1" /> <!-- Number of grand prix tracks per game (If grand prix enabled). --> <gp-track-count value="3" /> <!-- Use goal target in soccer. --> <soccer-goal-target value="false" /> <!-- Enable wan server, which requires you to have an stk-addons account with a saved session. Check init-user command for details. --> <wan-server value="true" /> <!-- Enable network console, which can do for example kickban. --> <enable-console value="true" /> <!-- Maximum number of players on the server, setting this to a value greater than 8 can cause performance degradation. --> <server-max-players value="8" /> <!-- Maximum number of players in the game, all other players on the server are spectators. Specify 0 to allow all players on the server to play. --> <max-players-in-game value="0" /> <!-- Password for private server, leave empty for a public server. --> <private-server-password value="YOUR-SUPER-SECURE-SERVER-PASSWORD" /> <!-- Message of today shown in lobby, you can enter encoded XML words here or a file.txt and let STK load it. --> <motd value="YOUR WELCOME MESSAGE" /> <!-- If this value is set to false, the server will ignore chat messages from all players. --> <chat value="true" /> <!-- If client sends more than chat-consecutive-interval / 2 chats within this value (read in seconds), it will be ignore, negative value to disable. --> <chat-consecutive-interval value="8" /> <!-- Allow players to vote for which track to play. If this value is set to false, the server will randomly pick the next track to play. --> <track-voting value="true" /> <!-- Timeout in seconds for selecting karts and (or) voting tracks in server, you may want to use a lower value if you have track-voting off. --> <voting-timeout value="30" /> <!-- Timeout in seconds for validation of clients in wan, currently STK will use the stk-addons server to share AES key between the client and server. --> <validation-timeout value="20" /> <!-- By default WAN server will always validate player and LAN will not, disable it to allow non-validated player in WAN. --> <validating-player value="true" /> <!-- Disable it to turn off all stun related code in server, it allows for saving of server resources if your server is not behind a firewall. --> <firewalled-server value="false" /> <!-- Enable to allow IPv6 connection if you have a public IPv6 address. STK currently uses dual-stack mode which requires server to have both IPv4 and IPv6 and listen to same port. If STK detects your server has no public IPv6 address or port differs between IPv4 and IPv6 then it will use IPv4 only socket. For system which doesn't support dual-stack socket (like OpenBSD) you may fail to be connected by IPv4 clients. You can override the detection in config.xml at supertuxkart config-0.10 folder, with default-ip-type option. --> <ipv6-connection value="true" /> <!-- No server owner in lobby which can control the starting of game or kick any players. --> <owner-less value="true" /> <!-- Time to wait before entering kart selection screen if satisfied min-start-game-players below for owner less or ranked server. --> <start-game-counter value="60" /> <!-- Clients below this value will be rejected from joining this server. It's determined by number of official karts in client / number of official karts in server --> <official-karts-threshold value="1" /> <!-- Clients below this value will be rejected from joining this server. It's determined by number of official tracks in client / number of official tracks in server, setting this value too high will prevent android players from joining this server, because STK android apk has some official tracks removed. --> <official-tracks-threshold value="0.7" /> <!-- Only auto start kart selection when number of connected player is larger than or equals this value, for owner less or ranked server, after start-game-counter reaches 0. --> <min-start-game-players value="1" /> <!-- Automatically end linear race game after 1st player finished for some time (currently his finished time * 0.25 + 15.0). --> <auto-end value="false" /> <!-- Enable team choosing in lobby in team game (soccer and CTF). If owner-less is enabled and live-spectate is not enabled, than this option is always disabled. --> <team-choosing value="true" /> <!-- If strict-players is on, no duplicated online id or split screen players are allowed, which can prevent someone using more than 1 network AI with this server. --> <strict-players value="false" /> <!-- Server will submit ranking to stk-addons server for linear race games, you require permission for that. validating-player, auto-end, strict-player and owner-less will be turned on. --> <ranked value="false" /> <!-- If true, the server owner can config the difficulty and game mode in the GUI of lobby. This option cannot be used with owner-less or grand prix server, and will be automatically turned on if the server was created using the in-game GUI. The changed difficulty and game mode will not be saved in this config file. --> <server-configurable value="false" /> <!-- If true, players can live join or spectate the in-progress game. Currently live joining is only available if the current game mode used in server is FFA, CTF or soccer, also official-karts-threshold will be made 1.0. If false addon karts will use their original hitbox other than tux, all players having it restriction applies. --> <live-spectate value="true" /> <!-- Time in seconds when a flag is dropped a by player in CTF returning to its own base. --> <flag-return-timeout value="20" /> <!-- Time in seconds to deactivate a flag when it's captured or returned to own base by players. --> <flag-deactivated-time value="3" /> <!-- Hit limit of free for all, zero to disable hit limit. --> <hit-limit value="20" /> <!-- Time limit of free for all in seconds, zero to disable time limit. --> <time-limit-ffa value="360" /> <!-- Capture limit of CTF, zero to disable capture limit. --> <capture-limit value="5" /> <!-- Time limit of CTF in seconds, zero to disable time limit. --> <time-limit-ctf value="600" /> <!-- Value used by server to automatically estimate each game time. For races, it decides the lap of each race in network game, if more than 0.0f, the number of lap of each track vote in linear race will be determined by max(1.0f, auto-game-time-ratio * default lap of that track). For soccer if more than 0.0f, for time limit game it will be auto-game-time-ratio * soccer-time-limit in UserConfig, for goal limit game it will be auto-game-time-ratio * numgoals in UserConfig, -1 to disable for all. --> <auto-game-time-ratio value="-1" /> <!-- Maximum ping allowed for a player (in ms), it's recommended to use default value if live-spectate is on. --> <max-ping value="300" /> <!-- Tolerance of jitter in network allowed (in ms), it's recommended to use default value if live-spectate is on. --> <jitter-tolerance value="100" /> <!-- Kick players whose ping is above max-ping. --> <kick-high-ping-players value="false" /> <!-- Allow players exceeding max-ping to have a playable game, if enabled kick-high-ping-players will be disabled, please also use a default value for max-ping and jitter-tolerance with it. --> <high-ping-workaround value="true" /> <!-- Kick idle player which has no network activity to server for more than some seconds during game, unless he has finished the race. Negative value to disable, and this option will always be disabled for LAN server. --> <kick-idle-player-seconds value="60" /> <!-- Set how many states the server will send per second, the higher this value, the more bandwidth requires, also each client will trigger more rewind, which clients with slow device may have problem playing this server, use the default value is recommended. --> <state-frequency value="10" /> <!-- Use sql database for handling server stats and maintenance, STK needs to be compiled with sqlite3 supported. --> <sql-management value="false" /> <!-- Database filename for sqlite to use, it can be shared for all servers created in this machine, and STK will create specific table for each server. You need to create the database yourself first, see NETWORKING.md for details --> <database-file value="stkservers.db" /> <!-- Specified in millisecond for maximum time waiting in sqlite3_busy_handler. You may need a higher value if your database is shared by many servers or having a slow hard disk. --> <database-timeout value="1000" /> <!-- IPv4 ban list table name, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. STK can auto kick active peer from ban list (update per minute) whichallows live kicking peer by inserting record to database. --> <ip-ban-table value="ip_ban" /> <!-- IPv6 ban list table name, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. STK can auto kick active peer from ban list (update per minute) which allows live kicking peer by inserting record to database. --> <ipv6-ban-table value="ipv6_ban" /> <!-- Online ID ban list table name, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. STK can auto kick active peer from ban list (update per minute) which allows live kicking peer by inserting record to database. --> <online-id-ban-table value="online_id_ban" /> <!-- Player reports table name, which will be written when a player reports player in the network user dialog, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. --> <player-reports-table value="player_reports" /> <!-- Days to keep player reports, older than that will be auto cleared, 0 to keep them forever. --> <player-reports-expired-days value="3" /> <!-- IP geolocation table, you only need this table if you want to geolocate IP from non-stk-addons connection, as all validated players connecting from stk-addons will provide the location info, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. --> <ip-geolocation-table value="ip_mapping" /> <!-- IPv6 geolocation table, you only need this table if you want to geolocate IP from non-stk-addons connection, as all validated players connecting from stk-addons will provide the location info, you need to create the table first, see NETWORKING.md for details, empty to disable. This table can be shared for all servers if you use the same name. --> <ipv6-geolocation-table value="ipv6_mapping" /> <!-- If true this server will auto add / remove AI connected with network-ai=x, which will kick N - 1 bot(s) where N is the number of human players. Only use this for non-GP racing server. --> <ai-handling value="true" /> <!-- If true this server will allow AI instance to be connected from anywhere. (other than LAN network only) --> <ai-anywhere value="false" /> </server-config>
Running The Server And Connecting Bots To It
Log in to your Debian box as the run-user ('supertuxkartuser') and start the SuperTuxKart server in tmux
tmux supertuxkart --server-config=supertuxkart_config.xml --network-consoleCreate a new tmux shell by pressing Ctrl+B followed by C. To add some AI-bots, use the following command
supertuxkart --connect-now=127.0.0.1:2759 --network-ai=7 --server-password=<YOUR-SUPER-SECURE-SERVER-PASSWORD>
You can use Ctrl+B - N to switch between the two shells and Ctrl+B - D to disconnect from tmux (the shells will keep running). To reattach to tmux, use the command
tmux attachYou can terminate the SuperTuxServer processes by pressing Ctrl+C.
~~DISCUSSION~~