Preface
This installation guide is based on Ubuntu 22.04 server. Commands may vary for other Linux distributions.
A recent and systemd-based Linux is highly recommended.
Supported Version
This guide refers to the following versions:
Router management | 2025.03.0 |
Autoupdate | 2025.03.0 |
System Requirements
Application Server
Ubuntu ≥ 22.04 Server
8 vCPUs
16 GB RAM
100 GB Storage
Optional: Dedicated Database Server
Ubuntu ≥ 22.04 Server
8 vCPUs
16 GB RAM
100 GB Storage
Setting Up the PostgreSQL Database
Install a PostgreSQL database server on the application server or on a dedicated database server:
sudo apt update
sudo apt install postgresql-14 -y
Then log in as the PostgreSQL user, start the psql
command-line tool, and execute the SQL commands:
sudo -u postgres psql
Now execute the following SQL commands to create the database and user:
create database insysicomroutermgmt;
create user u4insysicomroutermgmt with encrypted password 'pw4insysicomroutermgmt';
alter database insysicomroutermgmt owner to u4insysicomroutermgmt;
grant all privileges on database insysicomroutermgmt to u4insysicomroutermgmt;
\q
Additional Steps for a Dedicated PostgreSQL Server (Optional Step)
Information
A dedicated database server can offer advantages, especially in larger or security-critical environments — such as improved performance, load separation, and a clearer division of responsibilities within IT infrastructure. It also allows for more granular access control and network segmentation, contributing to overall security.
However, operating a separate database server involves additional administrative overhead and infrastructure costs. For smaller installations or test environments, a dedicated server is not necessary — in such cases, the database can run on the same system as the iRM application.
If the database runs on a separate server, remote access must be enabled. The path to the configuration files may vary depending on the PostgreSQL version (in this example: version 14).
Open the postgresql.conf
configuration file:
sudo vi /etc/postgresql/14/main/postgresql.conf
Look for the following line:
#listen_addresses = 'localhost'
Uncomment it and change the value to allow external access:
listen_addresses = '*'
Save and close the file. Now edit the pg_hba.conf
file to allow external connections:
sudo vi /etc/postgresql/{db-psql-version}/main/pg_hba.conf
Replace the following entry:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
with:
# IPv4 local connections:
host all all 0.0.0.0/0 md5
If a firewall is active, open the PostgreSQL port:
sudo ufw allow 5432/tcp
Finally, restart the database service:
sudo systemctl restart postgresql
Setup application server
Create a directory in your home and copy the installation zip file irm_linux_2025_03_0.zip
into this directory. Extract the content and remember the path. You need the router management executable for the next steps.
mkdir dist
unzip irm_linux_2025_03_0.zip -d dist
ls -aFl dist
The list command should show the following files:
insysicom-routermgmt
insysicom-autoupdate
VERSIONS.txt.
You should see the insysicom-routermgmt and insysicom-autoupdate binaries in the dist directory.
Mark the new binaries as executable if the ls
command did not show the executable flag indicated by *
behind the file name.
For the insysicom-routermgmt binary:
sudo chmod +x dist/insysicom-routermgmt
For the insysicom-autoupdate binary:
sudo chmod +x dist/insysicom-autoupdate
Create a service user and all required directories. Populate the directories with the configurations and application binaries.
sudo mkdir /var/opt/insysicom-routermgmt
sudo adduser --home /var/opt/insysicom-routermgmt --no-create-home --gecos '' --disabled-password insysicom-routermgmt
sudo mkdir -p /opt/insysicom-routermgmt/etc
sudo mkdir -p /opt/insysicom-routermgmt/bin
sudo cp ./dist/insysicom-routermgmt /opt/insysicom-routermgmt/bin
sudo cp ./dist/insysicom-autoupdate /opt/insysicom-routermgmt/bin
sudo chown -R insysicom-routermgmt:insysicom-routermgmt /opt/insysicom-routermgmt
sudo chown -R insysicom-routermgmt:insysicom-routermgmt /var/opt/insysicom-routermgmt
Setting Up the Application Server
Create a directory in your home directory and copy the installation ZIP file irm_linux_2025_03_0.zip
into this directory. Extract the contents and take note of the path. You will need the router management executable for the next steps.
mkdir dist
unzip irm_linux_2025_03_0.zip -d dist
ls -aFl dist
The ls
command should list the following files:
insysicom-routermgmt
insysicom-autoupdate
VERSIONS.txt
You should see both insysicom-routermgmt
and insysicom-autoupdate
in the dist
directory.
Make the new binaries executable if the ls
output does not indicate the executable flag *
after the file name.
For the insysicom-routermgmt
binary:
sudo chmod +x dist/insysicom-routermgmt
For the insysicom-autoupdate
binary:
sudo chmod +x dist/insysicom-autoupdate
Create a system user and all required directories. Then populate them with the application’s configuration files and binaries:
sudo mkdir /var/opt/insysicom-routermgmt
sudo adduser --home /var/opt/insysicom-routermgmt --no-create-home --gecos '' --disabled-password insysicom-routermgmt
sudo mkdir -p /opt/insysicom-routermgmt/etc
sudo mkdir -p /opt/insysicom-routermgmt/bin
sudo cp ./dist/insysicom-routermgmt /opt/insysicom-routermgmt/bin
sudo cp ./dist/insysicom-autoupdate /opt/insysicom-routermgmt/bin
sudo chown -R insysicom-routermgmt:insysicom-routermgmt /opt/insysicom-routermgmt
sudo chown -R insysicom-routermgmt:insysicom-routermgmt /var/opt/insysicom-routermgmt
Preparing Router Management for Installation
The application will now be initialized for the first time. Switch to the previously created user insysicom-routermgmt
and navigate to the /opt/insysicom-routermgmt/etc
directory. The generated configuration file will later be placed there. The environment variables are required for the database connection. The initialization process prepares the database and then writes the configuration file to the current directory. This file contains central application settings.
Note
If you are using a dedicated database server, adapt the value of
BARRACUDA_DATABASE_ARGS
to match the hostname or IP address of your database server, for example:BARRACUDA_DATABASE_ARGS="... host=mydbserver port=5432 ..."
sudo -i -u insysicom-routermgmt
cd /opt/insysicom-routermgmt/etc/
export BARRACUDA_DATABASE_DIALECT="postgres"
export BARRACUDA_DATABASE_ARGS="user=u4insysicomroutermgmt password=pw4insysicomroutermgmt dbname=insysicomroutermgmt host=localhost port=5432 sslmode=disable"
/opt/insysicom-routermgmt/bin/insysicom-routermgmt system upgrade --init --dump-config=insysicom-routermgmt.conf
Edit the configuration in the file insysicom-routermgmt.conf
to allow communication between this service and the autoupdate service:
vi /opt/insysicom-routermgmt/etc/insysicom-routermgmt.conf
Example content of /opt/insysicom-routermgmt/etc/insysicom-routermgmt.conf
:
barracuda_admin_api_port: 9201
barracuda_admin_api_host: "127.0.0.1"
barracuda_grpc_server_port: 50051
barracuda_grpc_server_host: "127.0.0.1"
bonaventure_grpc_server_port: 50052
bonaventure_grpc_server_host: "127.0.0.1"
barracuda_service_port: 9202
barracuda_service_host: "127.0.0.1"
barracuda_api_port: 9203
barracuda_api_host: "127.0.0.1"
barracuda_swagger_host: localhost
barracuda_swagger_port: 9203
barracuda_data_path: /var/opt/insysicom-routermgmt
These settings ensure that the router management daemon is only accessible via localhost and avoids conflicts with standard IP ports. The application is secured by a front-facing NGINX web server. The barracuda_data_path
must be adjusted since the initialization process adds a hidden .barracuda
directory (not required on a dedicated application server).
Preparing the Autoupdate Service
To configure the autoupdate service, create an environment file in the same directory as the router management configuration file:
vi /opt/insysicom-routermgmt/etc/insysicom-autoupdate.env
Insert the following content:
AUTOUPDATE_HTTP_PORT=8082
AUTOUPDATE_GRPC_PORT=50052
AUTOUPDATE_HTTP_READ_TIMEOUT=60s
AUTOUPDATE_SHUTDOWN_TIMEOUT=10s
FILE_STORAGE_TYPE=filesystem
Add additional required environment variables that are already defined in the router management configuration:
echo "MASTER_KEY=$(grep -oP '(?<=barracuda_master_key: ).*' /opt/insysicom-routermgmt/etc/insysicom-routermgmt.conf)" >> /opt/insysicom-routermgmt/etc/insysicom-autoupdate.env
echo "DATABASE_ARGS=\"$(grep -oP '(?<=barracuda_database_args: ).*' /opt/insysicom-routermgmt/etc/insysicom-routermgmt.conf) $(grep -oP 'dbname=.*' /opt/insysicom-routermgmt/etc/insysicom-routermgmt.conf)\"" >> /opt/insysicom-routermgmt/etc/insysicom-autoupdate.env
echo "DATA_DIRECTORY=$(grep -oP '(?<=barracuda_data_path: ).*' /opt/insysicom-routermgmt/etc/insysicom-routermgmt.conf)" >> /opt/insysicom-routermgmt/etc/insysicom-autoupdate.env
Then execute the following command to prepare the database for the autoupdate service:
set -a
source /opt/insysicom-routermgmt/etc/insysicom-autoupdate.env
set +a
/opt/insysicom-routermgmt/bin/insysicom-autoupdate -migrate
The result should either be Migration completed successfully
or No pending migrations
, depending on the current state of the database.
Creating systemd Services
Switch back to your administrative user:
exit
Create systemd service for Router Management
sudo vi /etc/systemd/system/insysicom-routermgmt.service
Note: If PostgreSQL is not running on the same system, remove the line After=postgresql.service
from the [Unit]
section.
[Unit]
Description=INSYS icom Router Management
After=postgresql.service
[Service]
Type=simple
User=insysicom-routermgmt
Group=insysicom-routermgmt
WorkingDirectory=/var/opt/insysicom-routermgmt
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=insysicom-routermgmt
ExecStart=/opt/insysicom-routermgmt/bin/insysicom-routermgmt serve all -c /opt/insysicom-routermgmt/etc/insysicom-routermgmt.conf
[Install]
WantedBy=multi-user.target
Create systemd service for Autoupdate
sudo vi /etc/systemd/system/insysicom-autoupdate.service
Note
If PostgreSQL is not running on the same system, remove the line
After=postgresql.service
from the[Unit]
section.
[Unit]
Description=INSYS icom Autoupdateserver
After=postgresql.service
[Service]
Type=simple
User=insysicom-routermgmt
Group=insysicom-routermgmt
WorkingDirectory=/var/opt/insysicom-routermgmt
StandardOutput=file:/var/opt/insysicom-routermgmt/autoupdate_stdout.log
StandardError=file:/var/opt/insysicom-routermgmt/autoupdate_stderr.log
SyslogIdentifier=insysicom_autoupdate
EnvironmentFile=/opt/insysicom-routermgmt/etc/insysicom-autoupdate.env
ExecStart=/opt/insysicom-routermgmt/bin/insysicom-autoupdate -serve-autoupdate
[Install]
WantedBy=multi-user.target
Start systemd Services
sudo systemctl enable insysicom-routermgmt.service
sudo systemctl start insysicom-routermgmt.service
sudo systemctl enable insysicom-autoupdate.service
sudo systemctl start insysicom-autoupdate.service
Verify service status (should show active (running)
with green indicator):
sudo systemctl status insysicom-routermgmt.service
sudo systemctl status insysicom-autoupdate.service
Setup Cronjob to Fetch Device Information
sudo crontab -e
Add the following lines at the end of the file:
30 4 * * * /opt/insysicom-routermgmt/bin/insysicom-routermgmt system fetchDeviceInfo -c /opt/insysicom-routermgmt/etc/insysicom-routermgmt.conf;
0 0 * * * /opt/insysicom-routermgmt/bin/insysicom-routermgmt system updateLicenseStatus -c /opt/insysicom-routermgmt/etc/insysicom-routermgmt.conf;
Configure NGINX Web Server
Note
It is strongly recommended to start with the HTTP-only configuration to verify correct operation of the application before enabling TLS.
Install NGINX
sudo apt update
sudo apt install nginx
Create new NGINX server config
sudo vi /etc/nginx/sites-available/insysicom-routermgmt
server {
listen 80;
listen [::]:80;
server_name _;
client_max_body_size 300M;
client_header_timeout 600;
client_body_timeout 600;
send_timeout 600;
proxy_read_timeout 600;
location = / {
return 301 /ui;
}
location /ui/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:9203;
}
location /api/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:9203;
}
location /auth/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:9203;
}
location /graphql {
proxy_read_timeout 180s;
proxy_connect_timeout 180s;
proxy_send_timeout 180s;
send_timeout 180s;
proxy_pass http://127.0.0.1:9203/graphql;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
server {
listen 8080;
listen [::]:8080;
server_name _;
location /devicecontrol {
proxy_read_timeout 180s;
proxy_connect_timeout 180s;
proxy_send_timeout 180s;
send_timeout 180s;
proxy_pass http://127.0.0.1:9202/devicecontrol;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /autoupdate/ {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Enable NGINX Configuration
sudo ln -s /etc/nginx/sites-available/insysicom-routermgmt /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
Adjust Server Settings
sudo vi /etc/nginx/nginx.conf
...
worker_rlimit_nofile 40000;
events {
worker_connections 20000;
# multi_accept on;
}
http {
...
server_names_hash_bucket_size 64;
...
}
...
Validate and Restart Web Server
sudo nginx -t
sudo systemctl restart nginx
Adjust System Settings
To enable router connections, system settings must be changed. Otherwise, the download of a router’s startup configuration will fail.
Open your browser and navigate to the installed application:
http://myserver_or_ip_address
Login using the default credentials (these can be changed later):
Username: default
Password: secret
Navigate to:
System Administration ⇒ System settings
Update the following settings:
Name | Value |
---|---|
DEVICECONTROL_SERVER_CERT | NONE |
AUTOUPDATE_SERVER_CERT | NONE |
INVENTORY_CONNECTION_PROFILE_HOSTNAME | IP address or FQDN of your server |
Configuration Verification
Navigate to the router list, register a new router using dummy values, and attempt to download the startup configuration.
Note
If registration or download fails, the application may not be properly configured. Check network/firewall settings or contact support.
Extract the tarball and open ConnectionProfile_xxx.txt
. Content should resemble:
host = "164.90.225.14"
path = "devicecontrol"
active_https = "0"
port = "8080"
device_id = "9a201fa4-c022-49ae-a5ba-86ee79acbbdd"
realm_uri = "devices.insys-tec.net"
cli("administration.remote_management.active=1")
cli("administration.remote_management.host=" .. host)
cli("administration.remote_management.path=" .. path)
cli("administration.remote_management.port=" .. port)
cli("administration.remote_management.device_id=" .. device_id)
cli("administration.remote_management.realm_uri=" .. realm_uri)
cli("administration.remote_management.active_https=" .. active_https)
cli("administration.remote_management.client_cert=" .. cert_name)
cli("administration.remote_management.client_key=" .. key_name)
cli("administration.profiles.activate")
The host
parameter must match your server’s IP or FQDN.
Verify WebSocket Access
On another machine, run:
curl http://164.90.225.14:8080/devicecontrol
Note
If you receive
handshake error: bad "Upgrade" header
, the connection is working correctly. Otherwise, check network/firewall settings.
HTTP-only Mode Operation
The router management application is now ready for HTTP-only operation. TLS is not necessary if:
The network is fully private or inaccessible from outside
Routers are connected via secure VPN (e.g., IPSec) to the enterprise network
Otherwise, TLS setup as outlined in the next section is recommended.
TLS Protection
Since iRM is a fully web-based application, TLS can be implemented in various ways. This guide uses private certificates and separates web and router connections via different IP ports on the same server IP.
Application (web interface): Port 80
Router connections: Port 8080
After enabling TLS: Port 443 (web) and 8443 (router)
Note
If you wish to use public certificates, dedicated IP addresses, or DNS-based NGINX virtual hosts, please contact support.
Issue a Server Certificate
⚠️ Warning
Self-signed certificates are not supported!
A server certificate tailored to your environment is required. The Common Name (CN) must match the server's FQDN. For IP-based access, a Subject Alternative Name (SAN) with the IP address must also be included.
Example certificate output (truncated):
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 5909721596463708658 (0x52038c7b1eac79f2)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=DE, L=Regensburg, O=INSYS MICROELECTRONICS GmbH, CN=iRM Install Guide Certificate Services
Validity
Not Before: May 24 12:40:00 2022 GMT
Not After : May 24 12:40:00 2032 GMT
Subject: C=DE, L=Regensburg, O=INSYS MICROELECTRONICS GmbH, CN=iRM Install Guide Certificate Services
X509v3 extensions:
X509v3 Basic Constraints:
CA:TRUE
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
Enable TLS Support in Router Management
To enable TLS communication, router management needs access to the new server certificate. Since TLS termination is handled by NGINX, only the public certificate (e.g., irmop1.icomcloud.net.crt
) must be uploaded.
Steps:
Open the router management UI in a browser
Navigate to Certificate Management ⇒ Certificates
Upload the certificate (name and optional password required)
Select Action ⇒ Use as server certificate
Then, go to System Administration ⇒ System settings and set:
Name | Value |
---|---|
INVENTORY_CONNECTION_PROFILE_PORT | 8443 |
After these changes, router management will accept HTTPS connections. Test by downloading the startup configuration of a previously registered test router (e.g., ConnectionProfile_xxx.txt
). It should now include a client certificate, private key, and additional parameters.
Note
If the download fails, TLS configuration may be incomplete.
Add TLS Client Authentication
When a new router is registered, a client certificate is automatically generated and included in the startup configuration.
Note
It is strongly recommended to create a dedicated certificate authority (CA) for signing client certificates. The default CA generated by iRM contains INSYS icom identifiers. Alternatively, you may upload your own CA from an existing PKI. Contact support for guidance on PKI integration.
Important
Never use HTTPS as the CRL distribution endpoint — this may cause download errors. Use plain HTTP instead. CRLs are signed and do not contain sensitive data.
Steps:
Navigate to Certificate Management ⇒ Certificate Authorities
Click Upload, select your CA file (e.g.,
your_client_authentication-ca.crt
)Choose New certificate authority with key (Format: PKCS#12)
Assign a name and password (if applicable)
After upload, select Action ⇒ Configure client CA
Confirm all prompts
Then:
Delete all routers and register a new test router
The new client certificate will be signed by the uploaded CA
If registration fails, verify your setup or contact support.
Enable TLS Client Authentication in NGINX
Download the new certificate authority in PEM format and copy it to the SSL directory:
sudo cp your_client_authentication-ca.crt /etc/nginx/ssl
Update the NGINX configuration for port 8443:
sudo vi /etc/nginx/sites-available/insysicom-routermgmt
server {
listen 8443 ssl;
...
ssl_client_certificate /etc/nginx/ssl/your_client_authentication-ca.crt;
ssl_verify_client on;
...
}
Test configuration and restart NGINX:
sudo nginx -t
sudo systemctl restart nginx
Verify WebSocket Endpoint
Test without client certificate:
curl https://164.90.225.14:8443/devicecontrol
Expected error
Error page showing
400 No required SSL certificate was sent
Test with valid client certificate:
curl --cert client.crt --key client.key --cacert iRM_Install_Guide_Certificate_Services.crt https://164.90.225.14:8443/devicecontrol
Note
If you receive
bad "Upgrade" header
, client authentication is working as expected.
Forward Client Certificate to iRM
To forward the client certificate to iRM, modify NGINX:
sudo vi /etc/nginx/sites-available/insysicom-routermgmt
server {
listen 8443 ssl;
...
location /devicecontrol {
...
proxy_set_header X-Forwarded-Client-Cert $ssl_client_cert;
}
location /autoupdate/ {
...
proxy_set_header X-Forwarded-Client-Cert $ssl_client_cert;
}
}
sudo nginx -t
sudo systemctl restart nginx
Connecting an icom OS Router
Because this guide uses private certificates, the icom OS router does not initially trust the CA. Therefore:
Upload CA certificates manually via Administration ⇒ Certificates
Respect CA chain order: Root CA first, then intermediates
Test connection:
Open Administration ⇒ Debugging in the router UI
Ping the iRM server's IP or FQDN
Then:
Register the router in iRM
Upload the startup configuration via Administration ⇒ icom Router Management
If everything is configured correctly, the router will connect and show status as "online".
Installation Completion
Attention
Installation is only considered complete after support team approval. A post-installation checklist is available for final verification.