Open-RMBT is an open source, multi-threaded bandwidth measurement system.
It consists of the following components:
- Web site
- JavaScript client
- Android client
- iOS client
- Measurement server
- QoS measurement server (in this repository)
- Control server
- Statistics server (in this repository)
- Map server (in this repository)
Open-RMBT is released under the Apache License, Version 2.0. It was developed by the Austrian Regulatory Authority for Broadcasting and Telecommunications (RTR-GmbH).
- RMBT specification
- RTR-NetTest/rmbt-server - Test Server for conducting measurements based on the RMBT protocol
- RTR-NetTest/rmbtws - JavaScript client for conducting RMBT-based speed measurements
- RTR-NetTest/open-rmbt-control - Control server
- RTR-NetTest/open-rmbt-ios - iOS app
- RTR-NetTest/open-rmbt-android - Android app
- RTR-NetTest/rtr-nettest/open-rmbt-website - Web site
-
1-3 servers
-
Everything can be installed on a single server
-
The test servers (RMBT and Websocket) should run on a physical machine
-
Base system Debian 11 or newer (or similar)
-
At least one static IPv4 address (IPv6 support recommended, more addresses allow to run more services on port 443)
NOTE: other Linux distributions can also be used, but commands and package names may be different
- Setup IP/DNS/hostname
- firewall (e.g. iptables)
- Install git
- Install and configure sshd
- Install and configure ntp
- dpkg-reconfigure locales (database requires en_US.UTF-8)
- dpkg-reconfigure tzdata
- Install and configure letsencrypt
-
Install:
- postgresql (version 13 and higher)
- postgresql-common
- postgresql-contrib
- postgis
- postgresql-13-postgis-3
- for quantile extension; Install:
- devscripts
- sudo
- postgresql-server-dev-all (or ..-10)
- pgxnclient
- Run:
pgxn install quantile
-
Run:
su - postgres createuser -lSRD rmbt # (set db pass) createuser -lSRDP rmbt_control # (set db pass) createuser -LSRD rmbt_group_control createuser -LSRD rmbt_group_read_only echo 'GRANT rmbt_group_read_only TO rmbt_group_control;' | psql echo 'GRANT rmbt_group_control TO rmbt_control;' | psql createdb -O rmbt rmbt # (additional users might be needed for replication and nagios) # if not using postgis 3, set the correct version #> sed -i "s/postgis-3/postgis-X\.Y/g rmbt.sql" cat rmbt.sql | psql rmbt -1 cat rmbt_init.sql | psql rmbt -1
(optional: add additional open databases, eg. Corine)
-
Edit table "test_server"
You need to add the test server key to the test_server table.
-
Optimise postgres settings
Check the values of
- shared_buffers
- work_mem
- max_worker_processes
- max_parallel_workers_per_gather
- max_parallel_workers
- Install:
- Apache Tomcat 8 or higher
- nginx (optional, highly recommended)
- openjdk-8-jre (do not use a higher version)
- libservlet3.1-java
- Maxmind GeoLite2 database
- Optional: For StatisticServer pdf export functionality
- Prince or
- Weasyprint. For weasyprint, install as user tomcat (not as root):
- python3
- python3-pip
- run
pip3 install weasyprint
-
Edit
/etc/tomcat8/context.xml
(substitute parts with[]
), add to<Context>
:For control server:
<Context> <!-- [...] --> <Resource name="jdbc/rmbt" auth="Container" type="javax.sql.DataSource" maxActive="200" maxIdle="10" maxWait="10000" url="jdbc:postgresql://[db host]/rmbt" driverClassName="org.postgresql.Driver" username="rmbt_control" password="[db r/w pass]" description="DB RW Connection" /> <Parameter name="RMBT_SECRETKEY" value="[rmbt qos secret key]" override="false" /> <!-- [...] --> </Context>
For statistic/map servers:
<Context> <!-- [...] --> <Resource name="jdbc/rmbtro" auth="Container" type="javax.sql.DataSource" maxActive="200" maxIdle="10" maxWait="10000" url="jdbc:postgresql://[db host]/rmbt" driverClassName="org.postgresql.Driver" username="rmbt" password="[read only pass]" description="DB RO Connection" /> <!-- [...] --> </Context>
-
Build the servers
The servers can be built with gradle:
./gradlew :RMBTControlServer:war :RMBTMapServer:war :RMBTStatisticServer:war
The war files are then located in
RMBT[Control|Map|Statistic]Server/build/lib
. -
Copy
RMBTControlServer.war
,RMBTMapServer.war
and/orRMBTStatisticServer.war
to/var/lib/tomcat8/webapps/
In case the Java-Postgres connector is missing: Add the package
libpostgresql-jdbc-java
and restart tomcat8. -
Run
service tomcat8 restart
-
Optimize tomcat settings
Check the values in /etc/default/tomcat8
- JAVA_OPTS -Xmms MEM -Xmx MEM
- RTR-Netztest on the web