Welcome to QLDS Manager’s documentation!

QLDS Manager is a tool dedicated for Quake Live Server administrators

Core functionality allows to:

  • Download SteamCMD and QL server files to specified location
  • Update QL server files
  • Easily configure multiple servers

Additional functionality:

  • Generating supervisord configuration (requires supervisord)
  • Keep servers alive
  • Start/stop/restart server
  • Connect to rcon console (requires zmq)

Documenatation

Installation

Requirements

Optional requirements

  • ØMQ - if you want to use RCON
  • Supervisor - if you want to start/stop servers

Preferred way

Use pip

pip3 install qlds-manager

It will install qldsmanager script, that will allow you to use Manager as command

Use setuptools manually

For that method to work, you’ll need setuptools installed for your version of Python

Go to the QLDS-Manager dir and run

python3 setup.py install

Just like in pip installation, it will create script to use Manage as command

Manual

You can install all dependencies manually and use QLDS Manager with

python3 /path/to/qlds-manager/qldsmanager

Configuration

Manager configuration

Here you can find informations about QLDS Manager configuration

Default values
Description Location
steamcmd ~/steamcmd
QL files ~/QLserver
   
Servers configuration ~/.qldsmanager/servers
Rcon configuration ~/.qldsmanager/rcon
   
Supervisord ~/.local/bin/supervisord
Supervisorctl ~/.local/bin/supervisorctl
Setting new values

To set new paths and file locations, run Manager like:

qldsmanager configure <arguments>

Note

You can get list of available arguments with

qldsmanager configure --help

It will display help block

Available arguments are

Argument Type Description
--steamcmd Directory Location for SteamCMD
--ql Directory Location for QL server files
     
--servers File Server list configuration file
--rcon File Optional rcon list configuration file
     
--supervisor Executable Supervisord executable (eg.: /usr/bin/supervisord)
--supervisorctl Executable Supervisorctl executable (eg.: /usr/bin/supervisorctl)

Note

You can set more than one argument at a time in any order, eg..:

qldsmanager configure --servers ~/qlds_servers --ql ~/qlds_ql_files

Configuration syntax

Configuration is held in simple .ini file

The file is parsed before passing it to command like, so you can use or define parameters

Parameters

You can set parameters used later in configuration. For example, if you want to use same passwords in every server, you can put something like that

[parameters]
rcon_password = secret-rcon-pass
stats_password = stats-password
private_password = elite-only

Now to use those parameters in configuration, call them with ${parameters.*} where * is parameter name

Note

To get parameter, use

${parameters.*}
Global parameters

There are 2 pre-defined global parameters, which cannot be overwritten. Those parameters are:

  • ${loop}
  • ${global.loop}

${loop} is gives current iteration in server group, so its value increases by 1 after each server parsed in servers group

${global.loop} is global iteration pointer, so its value increases by 1 after each server parsed, regardless of group it’s in

Self parameters

With the parameters above, you can set some contants. But what if you want to get current server configuration value?

Instead of using ${parameter.*} use ${server.*}.

Note

To get server variable, use

${server.net_port.*}
Math

You can use mathematical expressions in You configuration!

Each expression has to be between >> and <<

Note

Example math expression, where we set zmq_rcon_port 1000 higher than server’s port

zmq_rcon_port = >>${server.net_port} + 1000<<
Sections

In addition to [parameters] section, all other sections have to start with pre-defined words. Those words are:

Word Purpose
server Single server configuration
defaults Server’s group defaults/fallback configuration
extra Extras added to server’s group

Servers

Configuring server is easy. One section is one server. In section you provide arguments that are passed to command line.

The parameter net_port is required!

Single server configuration

Tip

If you don’t want the server so start automatically when supervisor starts, add __autostart = 0 in its configuration. This variable will be ignored in command line but will tell Manager to disable autostart.

First thing you have to notice is section name. It’s server:public1. public1 is your local server identifier. You can use it to start/stop server, attach rcon console or even server process. It’s used for fs_homepath too, so each server gets its own directory with config files.

Then goes the listing. Even if you set sv_hostname in server.cfg, commandline overrides it, so you can use some default server.cfg and use Manager for instance-specific variables.

Look at the example below:

Note

Each server’s section has to start with word server

[server:public1]
zmq_rcon_enable = 1
zmq_rcon_password = ${parameters.rcon_password}
zmq_rcon_port = >>${server.net_port} + 1000<<
zmq_stats_enable = 1
zmq_stats_password = ${parameters.stats_password}
zmq_stats_port = ${server.net_port}
net_port = 27960
sv_hostname = QLDS Managed Server
sv_privatepassword = ${parameters.private_password}

As you can see, all passwords are passed from parameters and rcon port is 100 higher than server port (27960 + 1000 = 28960)

Server grouping

If you have multiple servers with similar configuration, you can create group for them. To start 3 servers with same configuration as in previous example, you have to create group first. Group name has to start with word defaults. Then, in server’s configuration name, after its name, add name of the group to extend delimited with colon. Eg.:

Note

Each servers group has to start with word defaults

[defaults:publics]
zmq_rcon_enable = 1
zmq_rcon_password = ${parameters.rcon_password}
zmq_rcon_port = >>${server.net_port} + 1000<<
zmq_stats_enable = 1
zmq_stats_password = ${parameters.stats_password}
zmq_stats_port = ${server.net_port}
net_port = >>27959 + ${loop}<<
sv_hostname = QLDS Managed Server #${loop}
sv_privatepassword = ${parameters.private_password}

[server:public1:publics]

[server:public2:publics]

[server:public3:publics]
sv_hostname = Custom Hostname

Notice that net_port starts with 27959, not default 27960. It’s because ${loop} is added to it, and this parameter starts from 1

public3 configuration will override group’s hostname, so you’ll end with servers:

Port Hostname
27960 QLDS Managed Server #1
27961 QLDS Managed Server #2
27962 Custom Hostname
Additional parsing of group variables

Let’s say you want all server hostnames to use same schema for naming, even when you override it for single server. Of course you can remember, when overriding, to set hostname according to schema, but there’s a better way. The extra section.

extra section takes prepared server configuration, looks for defined variables and changes them according to its own schema.

Note

The extra section has to “extend” servers group

Goal: use schema -= QLDS Managed [server name] #[number] =- for servers

First of all, we need servers group:

[defaults:publics]
net_port = >>27959 + ${loop}<<
sv_hostname = Server

It’s simplified as much as it can be. Now, we have to “extend” it. Create [extra:publics] section. publics is the name of servers group.

[extra:publics]
sv_hostname = "-= QLDS Manager ${self} #{$loop} =-"

As you can see, there is ${self} parameter introduced. It’s replaced with original value of variable (sv_hostname) in this case, so you’’ end up with desired hostname