FIXEdge installation on Linux. Step by step instruction


NOTE!

If you are using a web-based FIXICC H2 version please follow FIXEdge C++ with FIXICC H2: Deployment Guide

Prerequisites and System Requirements

  1. Supported operating systems:
    • Linux RHEL/CentOS 7
  2. The list of packages that should be installed before FIXEdge's installation: 
    • unzip
    • libtool-ltdl

       optional since v. 5.11.0

      java-1.7.0-openjdk

      $ sudo yum install java-1.7.0-openjdk

    To install them use the following commands with superuser permissions:

    $ sudo yum install unzip
    $ sudo yum install libtool-ltdl
    
  3. The list of ports that should be opened:

    • TCP: 8005, 8901, 8902, 8905.
    • UDP: 1234

Deployment of FIXEdge

FIXEdge Components

  • FIXEdge-x.x.x.tar.gz - FIXEdge package
  • engine.license - FIXEdge license file

  • fixicc-x.x.x.zip - this package is used for launching FIX Integrated Control Center on Windows PC

  •  Extra components for FIXEdge prior v. 5.11.3

    fixicc-linux-x.x.x.zip - fixicc-agent for linux

    fixaj2-license.bin - fixicc-agent license

Steps to Install

Expected packages are located in /home/user/downloads.

The installation assumes that FIXEdge will be installed in /home/user/B2BITS under user's home directory.

Create B2BITS directory:

$ cd /home/user/
$ mkdir B2BITS
  1. Unpack the FIXEdge-x.x.x.tar.gz archive:

    $ tar xvf downloads/FIXEdge-x.x.x.tar.gz -C /home/user/B2BITS
  2. Put the engine.license file into the FIXEdge's directory:

    $ cp downloads/engine.license /home/user/B2BITS/FIXEdge/
  3. Install FIXICC Agent daemon with sudo user rights:

    $ cd /home/user/B2BITS/FIXEdge/fixicc-agent/bin/
    # ./installDaemon.sh

    Start FIXICC Agent daemon:

    $ ./startDaemonNoPriv.sh

    It can take up to several minutes to start at the first time:

  4. Launch FIXICC on local (Linux) machine or on Windows PC (use the fixicc-x.x.x.zip package):

    Linux
    $ ./B2BITS/FIXEdge/fixicc/bin/fixicc
    Windows
    \fixicc\bin\fixicc.exe
  5. Use option 'Add Server' to add FIXEdge server with the following parameters:

     additional step for FIXEdge with version 5.11.3 or less

    Import the fixaj2-license.bin license in FIXICC GUI:
    Help -> Import license...

    Type: B2BITS FIX Edge
    Host: localhost (or host of the machine with FIXEdge)
    Port: 8005
    Username: admin
    Password: admin
  6. Select the 'Connect' option in the context menu of the created server.

  7. Select the 'Start Server' option in the context menu of the created server. 

Please refer to FIXICC User Guide for detailed instructions.

Installation complete

See also:

How to setup secure SSL/TLS connесtion between FIXEdge, FIXICC-agent and FIXICC

How to change FIXICC Agent password

 Additional Installation steps of FIXEdge (prior v.5.8.0.65487)

Perform these steps instead step #2 of Installation.

  1. Put license file (engine.license) into FIXEdge's root dir:
    $ cp downloads/engine.license /home/user/B2BITS/FixEdge/v.5.8.0.x
  2. Unpack fixicc-agent-2.x.x.zip into FIXEdge's root dir:
    $ unzip downloads/fixicc-agent-2.x.x.zip -d /home/user/B2BITS/FixEdge/v.5.8.0.x
  3. Put license file (fixaj2-license.bin) into FIXICC Agent conf dir (fixicc-agent/conf):
    $ cp downloads/fixaj2-license.bin /home/user/B2BITS/FixEdge/v.5.8.0.x/fixicc-agent/conf
  4. Configure paths to FIXEdge files in B2BITS/FixEdge/v.5.8.0.x/fixicc-agent/conf/agent.properties:
    • ServerHome = ..
    • StartFile = bin/FixEdge1.run.sh
    • StopFile = bin/FixEdge1.stop.sh
    • LogUrl = ../FixEdge1/log

Continue Installation from step #3.

Troubleshooting

FIXICC doesn't connect to FIXICC agent

  1. Go to the /home/user/B2BITS/FIXEdge/fixicc-agent/logs directory and open fixicc-agent.log with any text editor.

    1. Check if the following notes exist in the log:

      INFO|13743/0|Service FIXICC - Agent Server|14-06-19 20:39:15|Agent is started successfully
      INFO|13743/0|Service FIXICC - Agent Server|14-06-19 20:39:15|Agent started on port: 8005
    2. If the notes are absent then go to the 'FIXICC agent doesn't start' section.
  2. Select the 'Edit Server' option in the context menu of the FIXEdge server in FIXICC. 
  3. Make sure that the value of the 'Port' and 'Host' in the 'Basic Settings' corresponds to the FIXICC Agent port and the host of the FIXEdge machine.
  4. Make sure that all ports from the 'Prerequisites and system requirements' section are opened and reachable by telnet from the remote host.

    telnet <remote host> 8005

FIXICC agent doesn't start

  1. Go to the /home/user/B2BITS/FIXEdge/fixicc-agent/logs directory and open fixicc-agent.log with any text editor.

  2. Find the messages with [ERROR] and [FATAL] level. These messages are able to help with the understanding of the possible issues. If there is a requirement for technical assistance then contact the support team SupportFIXProducts@epam.com

FIXEdge doesn't start from FIXICC

  1. Go to the B2BITS/FIXEdge/bin directory and run FIXEdge:

    $ cd /home/user/B2BITS/FIXEdge/bin
    $ ./FixEdge1.run.sh
  2. If the script was executed successfully then go to the /home/user/B2BITS/FIXEdge/fixicc-agent/logs directory and open fixicc-agent.log with any text editor (otherwise go to the 'FIXEdge doesn't start with 'FixEdge1.run.sh' script' section).
  3. Check if the following note exists in the log and make sure that the path presented below lead to the existing engine.properties file:

    [UtilProperties] Properties load successful: /home/user/B2BITS/FIXEdge/fixicc-agent/../FIXEdge1/conf/engine.properties
  4. If the note is absent find the messages with [ERROR] and [FATAL] level. These messages are able to help with understanding of the possible issues. If there is a requirement for technical assistance then contact the support team SupportFIXProducts@epam.com. 

FIXEdge doesn't start with 'FixEdge1.run.sh' script

  1. Go to the B2BITS/FIXEdge/FIXEdge1/log directory and open FixEdge.log with any text editor.
  2. Find the messages with [ERROR] or [FATAL] level. These messages are able to help with understanding of the possible issues. If there is a requirement for technical assistance then contact the support team SupportFIXProducts@epam.com

FIXEdge cannot start with an incorrect or expired license

  1.  Go to the B2BITS/FIXEdge/FIXEdge1/log directory and open FixEdge.log with any text editor.

    1. Request a new license file from the sales team sales@btobits.com if the FixEdge.log file contains the following error:

      ERROR   [Engine]  140410078865152  License is expired - components will be stopped! Please contact us at SupportFIXAntenna@epam.com for further assistance.
    2. Make sure that the license file has a correct 'engine.license' name and placed in the root directory of FIXEdge if the FixEdge.log file contains the following error:

      ERROR   [FL_FixEngine]  140029176809248  Unable to initialize EngineAdaptor. Reason: Please check the FIX Engine's settings: Cannot open the file "/home/user/B2BITS/FIXEdge/bin/../engine.license" (the "LicenseFile" property). No such file or directory. (Error code = 2)
  2. Restart FIXEdge after updating the license to apply the changes.

Binary files and shell scripts have no "executable" permissions

  1.  Set the permissions for the needed files with the following command:

    $ chmod 755 /home/user/B2BITS/FIXEdge/fixicc-agent/bin/*

How to see if a specific port is used

To ensure that port 8005 is not used, using the netstat or the ss command.

netstat -na | grep :8005
ss -na | grep :8005
lsof -i:8005

If the output is blank, then the port is not currently used.

Open FIXEdge ports using firewalld

In RHEL 7 the tool firewall-cmd is used for updating firewall rules. 

  1. The following commands open ports 8005, 8901, 8902, 8905, 1234. The superuser permissions are required in order to change the system settings.

    sudo firewall-cmd --add-port=8005/tcp --permanent
    sudo firewall-cmd --add-port=8901/tcp --permanent
    sudo firewall-cmd --add-port=8902/tcp --permanent
    sudo firewall-cmd --add-port=8905/tcp --permanent
    sudo firewall-cmd --add-port=1234/udp --permanent
    sudo firewall-cmd --reload


    The flag  --permanent is used to keep changes after the host reboot.
  2. To verify the changes run the following command (superuser permissions are required)

    sudo firewall-cmd --list-ports

FIXICC-agent can't start properly with errors "failed to map segment from shared object: Operation not permitted"

FIXICC doesn't show the current FIXEdge server state. After the fixicc-agent start, there is an issue in the fixicc-agent.log:

fixicc-agent.log
failed to map segment from shared object: Operation not permitted 

and a lot of exceptions after this:

fixicc-agent.log
[2021-06-05 21:19:42.620] [ERROR] [pool-3-thread-1] [StatusMonitor] Unexpected error: Could not initialize class com.sun.jna.Memory
java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Memory
	at oshi.software.os.linux.LinuxOperatingSystem.getProcess(LinuxOperatingSystem.java:119)
	at com.epam.fixicc.agent.utils.monitoring.StatusMonitor$MonitorPIDTask.isProcessExistAndRun(StatusMonitor.java:439)
	at com.epam.fixicc.agent.utils.monitoring.StatusMonitor$MonitorPIDTask.run(StatusMonitor.java:406)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

The root cause:

There are restrictions in the system preventing using /tmp directory set as default for saving java application JNA metadata.

This can happen due to security policies implemented in Linux OS by system administrators.

Solution:

Configure a different path for the JNA temp directory in the wrapper.conf.

For example, the configuration below specifies the fixicc-agent installation dir (<FIXEdge installation dir>/fixicc-agent/tmp) as one for saving temp data: 

wrapper.conf
wrapper.java.additional.3 = -Djna.tmpdir=${wrapper_home}/tmp

FIXICC-agent doesn't start after reboot

After hosts reboot, there are no running java processes related to FIXICC-agent so FIXICC can't connect to a remote host with installed FIXEdge.

The root cause:

Adding fixicc-agent to Linux startup scripts is disabled by default.

Solution:

Configure boot properties and re-install fixicc-agent according to the following steps.

  1. Uninstall FIXICC-Agent daemon with superuser permissions:

    cd /home/user/B2BITS/FIXEdge/fixicc-agent/bin/
    ./uninstallDaemon.sh
  2. Uncomment or adjust runlevels init.d directory for RH7 and Ubuntu distros to /etc/rcX.d in FIXEdge/fixicc-agent/conf/wrapper.conf

    wrapper.conf
    wrapper.daemon.run_level_dir=/etc/rcX.d
  3. Uncomment and enable default runlevels for automatic startup and stop of the daemon in FIXEdge/fixicc-agent/conf/wrapper.conf

    wrapper.conf
    wrapper.daemon.update_rc = start 20 2 3 4 . start 30 5 . stop 80 0 1 6

    The syntax is similar to the update-rc.d (for Debian distributions) or chkconfig (for other distributions such as Red Hat).

  4. If it is required to run FIXEdge and fixicc-agent application under a specific user then uncomment and specify properties wrapper.app.account in FIXEdge/fixicc-agent/conf/wrapper.conf

    wrapper.conf
    wrapper.app.account=<user>

    Where <user> is a Linux user for running FIXEdge applications. Sometimes, it is required to set a user's password with the property wrapper.app.password

    If the property is not set FIXICC-agent and FIXEdge will be run under the root user.
  5. install FIXICC-Agent daemon with superuser permissions:

    cd /home/user/B2BITS/FIXEdge/fixicc-agent/bin/
    ./installDaemon.sh

Useful links