Database Backends¶
rasdaemon supports SQLite, MySQL/MariaDB, and PostgreSQL. Multiple backends
may be compiled in, but only one can be active in a daemon process. Connection
parameters are environment variables, normally set in the installed
sysconfig/rasdaemon file.
The common settings are:
RASDAEMON_DB_BACKENDSelect
sqlite3,mysql, orpostgresql. The default issqlite3.RASDAEMON_HOSTNAMEOverride the hostname stored by the MySQL/MariaDB or PostgreSQL backend. This is not used by SQLite.
SQLite¶
RAS_SQLITE3_DATABASE specifies the full database path. It defaults to
/var/lib/rasdaemon/ras-mc_event.db; rasdaemon creates the parent directory
when needed. Change the compiled default with:
$ meson setup build \
-Dsqlite3-database=/path/to/ras-mc_event.db
On Ubuntu or Debian, install the SQLite build dependencies with:
$ sudo apt-get update
$ sudo apt-get install -y build-essential meson ninja-build pkg-config \
git cmake libsqlite3-dev sqlite3 libtraceevent-dev libtraceevent1 \
libpci-dev
PostgreSQL¶
The PostgreSQL backend accepts:
RAS_PG_HOSTHostname or address. The default is an empty string, which selects a local Unix socket.
RAS_PG_PORTTCP port. The default is
5432.RAS_PG_USERUser name. The default is
rasdaemon.RAS_PG_PASSWORDPassword. The default is empty.
RAS_PG_SCHEMASchema. The default is
rasdaemon.RAS_PG_DATABASEDatabase name. The default is
rasdaemon.RAS_PG_SSL_MODEOptional libpq SSL mode. The libpq default is
prefer.RAS_PG_USE_SSLRequire TLS when no explicit SSL mode is supplied. The value is
trueorfalseand defaults tofalse.RAS_PG_CONNECT_TIMEOUTConnection timeout in seconds. The default is
10.
For example:
RAS_PG_HOST=""
RAS_PG_PORT="5432"
RAS_PG_USER="rasdaemon"
RAS_PG_PASSWORD=""
RAS_PG_DATABASE="rasdaemon"
RAS_PG_SCHEMA="rasdaemon"
RAS_PG_SSL_MODE="prefer"
RAS_PG_USE_SSL="false"
RAS_PG_CONNECT_TIMEOUT="10"
Install libpq-devel or libpq-dev to build this backend. On Debian or
Ubuntu, install and start PostgreSQL with:
$ sudo apt-get install -y postgresql postgresql-client libpq-dev
$ sudo systemctl start postgresql
$ pg_isready --host=127.0.0.1 --port=5432
For a simple local setup, create a role, database, and schema before starting rasdaemon:
$ sudo -u postgres psql --set ON_ERROR_STOP=1 << EOF
CREATE USER rasdaemon WITH PASSWORD 'some_password';
CREATE DATABASE rasdaemon OWNER rasdaemon;
EOF
$ PGPASSWORD='some_password' \
psql -h /var/run/postgresql -U rasdaemon -d rasdaemon \
--set ON_ERROR_STOP=1 << EOF
CREATE SCHEMA rasdaemon AUTHORIZATION rasdaemon;
EOF
If local authentication does not allow the rasdaemon role to connect,
configure the appropriate rule in pg_hba.conf and restart PostgreSQL.
MySQL and MariaDB¶
The MySQL/MariaDB backend accepts:
RAS_MYSQL_HOSTHostname or address. The default is an empty string, which selects a local Unix socket.
RAS_MYSQL_PORTTCP port. The default is
3306.RAS_MYSQL_USERUser name. The default is
rasdaemon.RAS_MYSQL_PASSWORDPassword. The default is empty.
RAS_MYSQL_DATABASEDatabase name. The default is
rasdaemon.RAS_MYSQL_SOCKETOptional Unix socket path for local connections.
RAS_MYSQL_USE_SSLRequire TLS. The value is
trueorfalseand defaults tofalse.RAS_MYSQL_CONNECT_TIMEOUTConnection timeout in seconds. The default is
10.
For example:
RAS_MYSQL_HOST=""
RAS_MYSQL_PORT="3306"
RAS_MYSQL_USER="rasdaemon"
RAS_MYSQL_PASSWORD=""
RAS_MYSQL_DATABASE="rasdaemon"
RAS_MYSQL_SOCKET=""
RAS_MYSQL_USE_SSL="false"
RAS_MYSQL_CONNECT_TIMEOUT="10"
The required C development package depends on the implementation and distribution:
Fedora/RHEL with MariaDB:
mariadb-connector-c-develFedora/RHEL with Oracle MySQL:
mysql-community-develDebian/Ubuntu with MariaDB:
libmariadb-devand, on some releases,libmariadb-dev-compatDebian/Ubuntu with MySQL:
default-libmysqlclient-dev
Only one C client development package is needed. Meson recognizes the
mysqlclient, mariadb, and libmariadb pkg-config interfaces. The
ras-mc-ctl Python tool also requires python3-mysqlclient on Fedora/RHEL
or python3-mysqldb on Debian/Ubuntu.
Start the server using the service name supplied by the distribution, commonly
mariadb.service, mysqld.service, or mysql.service. A simple setup
can be created with:
$ sudo mysql << EOF
CREATE USER 'rasdaemon'@'%' IDENTIFIED BY 'some_password';
CREATE DATABASE rasdaemon;
GRANT ALL PRIVILEGES ON rasdaemon.* TO 'rasdaemon'@'%';
FLUSH PRIVILEGES;
EOF