Installing FIXEdge RPM package on Linux (RHEL 7+)

Introduction

FIXEdge can be installed using RPM packages on Red Hat Enterprise Linux 7 and newer and binary compatible distributions. RPM package features support for controlling FIXEdge via systemd and running under a constrained user account.

Installing FIXEdge

  1. Add the repository file
sudo tee -a /etc/yum.repos.d/fixedge.repo << EOF 
[fixedge]
name=fixedge
baseurl=https://USERNAME:PASSWORD@packages.b2bits.com/fixedge
skip_if_unavailable=true
deltarpm=0
sslverify=false
gpgcheck=0
EOF

Replace the USERNAME and PASSWORD with ones received from B2BITS sales.

2. Clear the repository cache

sudo yum clean all

3. Install the package

sudo yum -y install fixedge fixicc-agent

If you need to install the latest version of the package that is in the repository, just specify the package name 'fixedge'. If you need to install an earlier version you must specify the version with the name of the package, e.g. 'fixedge-6.11.0-1664.el7.x86_64'. You can also use the 'yum provides fixedge' command to find out what package versions are in the repository.

$ yum provides fixedge
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirror.datacenter.by
 * extras: mirror.datacenter.by
 * updates: mirror.datacenter.by
fixedge                                                                                                                                                 8/8
fixedge-6.11.0-411.el7.x86_64 : FIXEdge - smart FIX message router
Repo        : fixedge



fixedge-6.11.2-440.el7.x86_64 : FIXEdge - smart FIX message router
Repo        : fixedge



fixedge-6.11.3-441.el7.x86_64 : FIXEdge - smart FIX message router
Repo        : fixedge



fixedge-6.11.4-450.el7.x86_64 : FIXEdge - smart FIX message router
Repo        : fixedge

4. Add a user to the 'fixedge' group

sudo usermod -aG fixedge $(whoami)

5. Copy engine.license to /etc/fixedge

sudo cp engine.license /etc/fixedge/

6. Start the 'fixedge' service

systemctl start fixedge

7. Check the status of the service

$ systemctl status fixedge
● fixedge.service - FIXEdge - smart FIX message router
   Loaded: loaded (/usr/lib/systemd/system/fixedge.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-05-01 01:04:24 UTC; 21min ago
 Main PID: 26149 (FIXEdge)
    Tasks: 13
   Memory: 49.0M
   CGroup: /system.slice/fixedge.service
           └─26149 /usr/lib64/fixedge/6.11.0/FIXEdge /etc/fixedge/FIXEdge.properties

Installation is completed.

Running FIXEdge Service

The package provides the systemd units to control the FIXEdge and FIXICC Agent services.

The services runs as a dedicated fixedge user. The following commands can be used to control the service:

Action

Command

Allowed to
Start FIXEdgesystemctl start fixedgemembers of the fixedge  group
Stop FIXEdgesystemctl stop fixedgemembers of the fixedge  group
Restart FIXEdgesystemctl restart fixedgemembers of the fixedge  group
View status of FIXEdgesystemctl status fixedgemembers of the fixedge  group
Enable FIXEdge start at system bootsystemctl enable fixedgemembers of the fixedge  group
Disable FIXEdge start at system bootsystemctl disable fixedgemembers of the fixedge  group
Start FIXICC-Agentsystemctl start fixicc-agentmembers of the fixedge  group
Stop FIXICC-Agentsystemctl stop fixicc-agentmembers of the fixedge  group
Restart FIXICC-Agentsystemctl restart fixicc-agentmembers of the fixedge  group
View status of FIXICC-Agentsystemctl status fixicc-agentmembers of the fixedge  group
Enable FIXICC-Agent start at system bootsystemctl enable fixicc-agentmembers of the fixedge  group
Disable FIXICC-Agent start at system bootsystemctl disable fixicc-agentmembers of the fixedge  group

On RHEL systems, a member of the fixedge group can control the services, for example:

[max@localhost ~]$ systemctl status fixedge
● fixedge.service - FIXEdge - smart FIX message router
   Loaded: loaded (/usr/lib/systemd/system/fixedge.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/fixedge.service.d
           └─override.conf
   Active: inactive (dead)

Dec 13 07:54:19 localhost.localdomain bash[588972]: SLF4J: Class path contains multiple SLF4J bindings.
Dec 13 07:54:19 localhost.localdomain bash[588972]: SLF4J: Found binding in [jar:file:/usr/lib64/fixedge/6.11.6/jms-ta/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
Dec 13 07:54:19 localhost.localdomain bash[588972]: SLF4J: Found binding in [jar:file:/opt/apache-activemq/activemq-all-5.16.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
Dec 13 07:54:19 localhost.localdomain bash[588972]: SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Dec 13 07:54:19 localhost.localdomain bash[588972]: SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Dec 13 08:43:14 localhost.localdomain systemd[1]: Stopping FIXEdge - smart FIX message router...
Dec 13 08:43:15 localhost.localdomain bash[588972]: The signal waiter has been started.
Dec 13 08:43:15 localhost.localdomain bash[588972]: The signal 15 was detected.
Dec 13 08:43:15 localhost.localdomain systemd[1]: fixedge.service: Succeeded.
Dec 13 08:43:15 localhost.localdomain systemd[1]: Stopped FIXEdge - smart FIX message router.
[max@localhost ~]$ systemctl start fixedge
[max@localhost ~]$ systemctl status fixedge
● fixedge.service - FIXEdge - smart FIX message router
   Loaded: loaded (/usr/lib/systemd/system/fixedge.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/fixedge.service.d
           └─override.conf
   Active: active (running) since Wed 2021-12-15 04:30:02 EST; 1s ago
 Main PID: 916904 (FIXEdge)
    Tasks: 23 (limit: 48835)
   Memory: 62.5M
   CGroup: /system.slice/fixedge.service
           └─916904 /usr/lib64/fixedge/6.11.6/FIXEdge /etc/fixedge/FIXEdge.properties

Dec 15 04:30:02 localhost.localdomain systemd[1]: Started FIXEdge - smart FIX message router.
Dec 15 04:30:02 localhost.localdomain bash[916904]: FIXEdge 6.11.6.r463 (engine 2.28.0.r463)
[max@localhost ~]$ systemctl stop fixedge
[max@localhost ~]$ systemctl status fixedge
● fixedge.service - FIXEdge - smart FIX message router
   Loaded: loaded (/usr/lib/systemd/system/fixedge.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/fixedge.service.d
           └─override.conf
   Active: inactive (dead)

Dec 15 04:30:05 localhost.localdomain bash[916904]: SLF4J: Class path contains multiple SLF4J bindings.
Dec 15 04:30:05 localhost.localdomain bash[916904]: SLF4J: Found binding in [jar:file:/usr/lib64/fixedge/6.11.6/jms-ta/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
Dec 15 04:30:05 localhost.localdomain bash[916904]: SLF4J: Found binding in [jar:file:/opt/apache-activemq/activemq-all-5.16.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
Dec 15 04:30:05 localhost.localdomain bash[916904]: SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Dec 15 04:30:05 localhost.localdomain bash[916904]: SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Dec 15 04:30:14 localhost.localdomain systemd[1]: Stopping FIXEdge - smart FIX message router...
Dec 15 04:30:16 localhost.localdomain bash[916904]: The signal waiter has been started.
Dec 15 04:30:16 localhost.localdomain bash[916904]: The signal 15 was detected.
Dec 15 04:30:16 localhost.localdomain systemd[1]: fixedge.service: Succeeded.
Dec 15 04:30:16 localhost.localdomain systemd[1]: Stopped FIXEdge - smart FIX message router.

Upgrading FIXedge

If there is a newer version of the package in the repository, you can update using the following command:

sudo yum -y update fixedge fixicc-agent

You can update to a specific version if it is higher than the current one, e.g.:

$ rpm -qi fixedge | egrep '(Version|Release)'
Version     : 6.11.3
Release     : 441.el7
$ yum provides fixedge | grep 450
fixedge-6.11.4-450.el7.x86_64 : FIXEdge - smart FIX message router
$ sudo yum update fixedge-6.11.4-450.el7.x86_64

Downgrading FIXedge

You can also downgrade the package as needed by using the following command:

sudo yum -y downgrade fixedge-6.11.3-441.el7.x86_64 

To find out which version you can downgrade a package to, use the yum provides command as described in the "Installing FIXEdge C++ section".

Removing FIXedge

To remove a package, you need the following:

sudo yum -y remove fixedge fixicc-agent

Migration from a tar.gz package to RPM

To migrate an existing installation from a tar.gz package to RPM need to:

  1. Copy FIXEdge configuration to /etc/fixedge
  2. Copy FIXEdge data to /var/lib/fixedge

  3. Change storage directories in engine.properties and FIXEdge.properties to /var/lib/fixedge
  4. Change references to TA shared libraries in FIXEdge.properties

Copy configuration

Assuming that FIXEdge is currently installed in ${CURRENT_FIXEDGE_INSTALL_DIR} and all configuration files are in the ${CURRENT_FIXEDGE_INSTALL_DIR}/FIXEdge1/conf , you can copy the configuration by running:

cp ${CURRENT_FIXEDGE_INSTALL_DIR}/FIXEdge1/conf/*.properties /etc/fixedge
cp ${CURRENT_FIXEDGE_INSTALL_DIR}/FIXEdge1/conf/*.xml /etc/fixedge
cp ${CURRENT_FIXEDGE_INSTALL_DIR}/FIXEdge1/conf/*.js /etc/fixedge
cp ${CURRENT_FIXEDGE_INSTALL_DIR}/FIXEdge1/conf/*.xsl /etc/fixedge

Next, update references to JavaScript and XSLT files in BL_Config.xml , remove the FIXEdge1/conf/ prefix from the filenames, e.g., change

<Script Language="JavaScript" FileName ="FIXEdge1/conf/testScript.js"/>

to

<Script Language="JavaScript" FileName ="testScript.js"/>

Copy data 

Copy FIXEdge data to /var/lib/fixegde :

cp FIXEdge1/log/*.in /var/lib/fixedge
cp FIXEdge1/log/*.out /var/lib/fixedge
cp FIXEdge1/log/*.conf /var/lib/fixedge
cp FIXEdge1/log/*.outq /var/lib/fixedge

Change storage directories

Change storage directories in engine.properties :

LogDirectory = /var/lib/fixedge
BackupDirectory = /var/lib/fixedge/backup

Change storage directories in FIXEdge.properties:

FIXEdge.TasksStorageFile = /var/lib/fixedge/UndeliveredMsgs.log
FixLayer.FixEngine.Sessions.ArchivePath = /var/lib/fixedge/archive

and for TA (example for JMS TA):

TransportLayer.JMSTA.Client.ProducerSession1.StorageDir = /var/lib/fixedge/jms-ta
TransportLayer.JMSTA.Client.ConsumerSession1.StorageDir = /var/lib/fixedge/jms-ta

Change references

Change references to TA shared libraries in FIXEdge.properties, located in /usr/lib64/fixedge/<FIXEDGE-VERSION> , e.g., for JMS TA:

TransportLayer.JMSTA.DllName = /usr/lib64/fixedge/6.11.6/libJMSTA.so