NetXMS Support Forum

Development => General => Topic started by: cold on April 20, 2026, 07:51:02 PM

Title: [Docker] Hardcoded pgsql in dbinit.sh and missing dbinit_mariadb.sql template
Post by: cold on April 20, 2026, 07:51:02 PM
I am deploying NetXMS via Docker using the official deployment-example/compose.yaml from netxms/docker (commit 55e823c), but replacing the built-in PostgreSQL container with an existing MariaDB instance.

During the database initialization phase, I encountered two related issues:

1. The server/files/dbinit.sh script has "pgsql" strictly hardcoded (nxdbmgr init pgsql), which forces PostgreSQL initialization regardless of the DBDriver configured in /etc/netxmsd.conf or environment variables.

2. If we manually override /dbinit.sh on init container to initialize MariaDB (nxdbmgr init mariadb), the process fails because nxdbmgr looks for a specific dbinit_mariadb.sql file in a directory that does not exist in the Docker image.

Environment:

- NetXMS Version: 6.1.1 (Build 6.1-452-gc20a8a4247)
- Deployment: Docker (using official deployment-example/compose.yaml)
- Database: MariaDB 10.11

Steps to Reproduce:

1. Setup the deployment using the example compose.yml file, pointing /etc/netxmsd.conf to a MariaDB database (DBDriver = mariadb.ddr).
2. Override /dbinit.sh (entrypoint) on init container via bind mount to execute nxdbmgr init mariadb.
3. Start the init container.

Error Log (when using mariadb driver for init):

NetXMS Database Manager Version 6.1.1 Build 6.1-452-gc20a8a4247
Initializing database...
ERROR: Cannot load SQL command file /usr/share/netxms/sql/dbinit_mariadb.sql
Database initialization failed
Unable to determine database syntax

Note: I verified inside the container that the directory /usr/share/netxms does not exist on the NetXMS Server Docker image.

If I change the /etc/netxmsd.conf  to use mysql instead (nxdbmgr init mysql), the database initializes perfectly, even though I am using a MariaDB container:

NetXMS Database Manager Version 6.1.1 Build 6.1-452-gc20a8a4247
Initializing database...
IMPORTANT: Generated admin password
   Login:    admin
   Password: PaSsWd
Please save this password - it will not be shown again.
You will be required to change it on first login.
Database initialized successfully

Suggested Fixes:

1. Dynamic Driver Selection: Update /dbinit.sh to dynamically read the database driver from a Docker environment variable (e.g., NETXMS_DB_DRIVER) or directly from /etc/netxmsd.conf, falling back to pgsql only if nothing is set. Changing nxdbmgr init pgsql to simply nxdbmgr init allows the utility to dynamically deduce the driver from /etc/netxmsd.conf, as intended by the documentation.
2. Template Mapping: Either include the dbinit_mariadb.sql template in the image build process or alias the mariadb initialization argument to use the mysql SQL template internally, since the schema structure is identical.
Title: Re: [Docker] Hardcoded pgsql in dbinit.sh and missing dbinit_mariadb.sql template
Post by: Alex Kirhenshtein on April 21, 2026, 09:40:16 AM
Hi cold,

Thanks for the report. This has been fixed in commit 4e26775 (https://github.com/netxms/docker/commit/4e26775).

The dbinit.sh script now auto-detects the database driver from the DBDriver setting in netxmsd.conf instead of hardcoding pgsql. If you set DBDriver=mariadb (or mysql) in your netxmsd.conf, the initialization will work automatically.

For the second issue — the missing dbinit_mariadb.sql — this is expected behavior. NetXMS uses "mysql" as the umbrella driver name for both MySQL and MariaDB SQL templates. So you should use DBDriver=mariadb in your config (the driver itself handles the connection correctly), but the schema initialization template is shared. With this fix, nxdbmgr init auto-selects the correct template, so you don't need to worry about it.

As a bonus, the fix also adds support for TimescaleDB initialization via the NETXMS_PG_TYPE environment variable (set NETXMS_PG_TYPE=tsdb on the init service).

The fix will be included in the next Docker image release (already in :latest).
Title: Re: [Docker] Hardcoded pgsql in dbinit.sh and missing dbinit_mariadb.sql template
Post by: cold on April 22, 2026, 11:25:35 AM
Hello Alex!
Thank you for your fast reply.
The documentation states that there's a specific MariaDB driver and the "netxms-dbdrv-mariadb" package for Debian: https://www.netxms.org/documentation/adminguide/installation.html#mariadb
So it didn't exist on Docker image and I should use MySQL instead even after DB init? Because DB initialization still fails when using MariaDB as DBDriver on Docker, I think that there's some issue that the code is not sharing the same code init template with MySQL for some reason.