Install Xray Single Node with Linux Archive

JFrog Installation & Setup Documentation

Content Type
Installation & Setup
ft:sourceType
Paligo

Install the following prerequisites independently of the Xray archive installation. Make sure to install them before starting your Xray service.

  • PostgreSQL

  • db-util

  • Erlang

For more information, see Third Party Applications for Xray.

Before you proceed with the installation, review the system requirements.

Xray Node Recommendations

Use a dedicated node for Xray with no other software running to alleviate performance bottlenecks, avoid port conflicts, and avoid setting uncommon configurations.

Xray Storage Recommendations

In most cases, our recommendation is to use an SSD drive for Xray to have better performance and it is not recommended to use an NFS drive, as it is a disk I/O-intensive service, a slow NFS server can suffer from I/O bottlenecks and NFS is mostly used for storage replication.

Xray stores node specific files, such as configuration and temporary files, to the disk. These files are exclusively used by Xray and not shared with other services. Since the local storage used for Xray services are temporary, it does not require replication between the different nodes in a multi-node/HA deployment.

Xray File Handle Allocation Limit

Use the following command to determine the current file handle allocation limit.

cat /proc/sys/fs/file-max

Then, set the following parameters in your /etc/security/limits .conf file to the lower of 100,000 or the file handle allocation limit determined above.

The example shows how the relevant parameters in the /etc/security/limits .conf file are set to 100000. The actual setting for your installation may be different depending file handle allocation limit in your system.

root hard nofile 100000
root soft nofile 100000
xray hard nofile 100000
xray soft nofile 100000
postgres hard nofile 100000
postgres soft nofile 100000
Operating Systems and Platform Support

The following table lists the supported operating systems and the versions.

Product

Debian

RHEL

Ubuntu

Windows Server

Amazon Linux

Xray

10.x, 11.x

8.x, 9.x

20.04, 22.04

Operating Systems - End of Support

As part of JFrog commitment to maintain the security and reliability of the JFrog Platform, Artifactory will officially run with Node.js 20.x on all installation types from Artifactory 7.77.3.

Node.js 20.x provided with Linux Archive/Debian/RPM installations (non-containerized distributions) is not supported on the following operating systems.

Hence, these operating systems will no longer supported from Artifactory version 7.77.3.

Supported Platforms

The following table lists the supported platforms.

Product

x86-64

ARM64

Kubernetes

OpenShift

Xray

1.19+

4.13+

Installation on Kubernetes environments is through Helm Charts. Supported Helm version is Helm 3+.

Kubernetes Sizing Requirements

We have included YAML files with the different sizing configuration for Xray in our GitHub page. You can use these YAML when you set up your cluster.

ARM64 Support

From version 7.41.4, Artifactory supports installation on ARM64 architecture through Helm and Docker installations. You must set up an external database as the Artifactory database since Artifactory does not support the bundled database with the ARM64 installation. Artifactory installation pulls the ARM64 image automatically when you run the Helm or Docker installation on the ARM64 platform.

ARM64 support is also available for Xray, Pipelines (in Helm installation), and Insight. ARM64 support is not available for Distribution.

Database and Third-Party Applications in Xray

Every artifact and build indexed by Xray is broken down into multiple components. These components and the relationships between each other are represented in a checksum based components graph. Xray uses PostgreSQL to store and query this components graph.

Xray supports the following versions of PostgreSQL.

  • 15.x (from version 3.78.9)

  • 14.x

  • 13.x (from version 3.18)

  • 12.x

  • 11.x

  • 10.x

Xray supports PostgreSQL 14.x and 15.x, but currently the Xray installer only bundles the binaries for PostgreSQL 13.x.

RabbitMQ is installed as part of the Xray installation for every node. In case of HA architecture, Xray uses queue mirroring between the different RabbitMQ nodes. External RabbitMQ instances are not officially supported; the recommended method of installation is to use the bundled RabbitMQ.

Xray has multiple flows, such as scanning, impact analysis, and database sync. These flows require processing completed by the different Xray microservices. Flows contain multiple steps that are completed by the Xray services. Xray uses RabbitMQ to manage these different flows and track synchronous and asynchronous communication between the microservices.

Xray also uses Erlang and DB-Util third-party applications. These packages are bundled with all Xray installers except Linux Archive.

Xray Network Ports

Xray uses the 8082 port by default for external communication.

Xray uses the following internal ports by default for communication with JFrog Platform microservices.

Microservice

Port

Xray Server

8000

Analysis

7000

Indexer

7002

Persist

7003

Router

8082, 8046, 8047, and 8049

RabbitMQ

4369, 5671, 5672, 15672, and 25672

PostgreSQL (if you use the bundled PostgreSQL database)

5432

Observability

8036

8037

gRPC

Complete the following steps to install the product.

  1. Extract the contents of the compressed archive and move it into xray directory.

    PostgreSQL is required and must be installed before continuing with the next installation steps.

  2. Set your PostgreSQL connection details in the Shared Configurations section of the $JFROG_HOME/xray/var/etc/system.yaml file.

  3. Start PostgreSQL.

  4. Customize the product configuration.

    1. Set the Artifactory connection details.

    2. Customize the PostgreSQL Database connection details. (optional)

    3. Set any additional configurations (for example: ports, node id) using the Xray System YAML Configuration File.

      Warning

      Verify that a large file handle limitis specified before you start Xray.

  5. Start and manage the Xray service as the user who extracted the tar.

    As a daemon process

    To start the process:
    
    xray/app/bin/xray.sh start
    
    To manage the process:
    
    xray/app/bin/xray.sh start|stop|status|restart

    As a service

    Xray is packaged as an archive file and you can use the install script to install it as a service running under a custom user. Currently supported on Linux systems.

    OS User Permissions

    When running Xray as a service, the installation script creates a user called xray (by default)which must have run and execute permissions on the installation directory.

    It is recommended to extract the Xray download file into a directory that gives run and execute permissions to all users such as /opt.

    To install Xray as a service, execute the following command as root.

    xray/app/bin/installService.sh --user <enter user, default value is xray> --group <enter group, default value is xray>
     
    -u | --user                                       : [optional] (default: xray) user which will be used to run the product, it will be created if its unavailable
    -g | --group                                      : [optional] (default: xray) group which will be used to run the product, it will be created if its unavailable

    Note

    User and group can be passed through xray/var/etc/system.yaml as shared.user and shared.group. This takes precedence over values passed through command line on install.

    The user and group is stored in xray/var/etc/system.yaml at the end of installation.

    To manage the service, use systemd or init.d commands depending on your system.

    Using systemd

     systemctl <start|stop|status> xray.service

    Using init.d

    service xray <start|stop|status>
  6. Access Xray from your browser at: http://<jfrogUrl>/ui/:port.

    Go to the Xray Security & Compliance tab in the Administration module in the UI.

  7. Check Xray Log.

    tail -f xray/var/log/console.log

    Configure log rotation of the console log

    The console.log file can grow quickly since all services write to it. For more information, see configure the log rotation.Configuring Log Rotation for Tomcat

After installing and before running Xray, you may set the following configurations.

You can configure all your system settings using the system.yaml file located in the $JFROG_HOME/xray /var/etc folder. For more information, see Xray System YAML.

If you don't have a System YAML file in your folder, copy the template available in the folder and name it system.yaml.

For the Helm charts, the system.yaml file is managed in the chart’s values.yaml.

Artifactory Connection Details for Xray

Xray requires a working Artifactory server and a suitable license. The Xray connection to Artifactory requires the following parameters.

  • jfrogUrl

    URL to the machine where JFrog Artifactory is deployed, or the load balancer pointing to it. It is recommended to use DNS names rather than direct IPs. For example: http://jfrog.acme.com or http://10.20.30.40:8082. Note that /artifactory context is not longer required.

    Set it in the Shared Configurations section of the $JFROG_HOME/xray/var/etc/system.yamlfile.

  • join.key

    This is the "secret" key required by Artifactory for registering and authenticating the Xray server.

    You can fetch the Artifactory joinKey (join Key) from the JPD UI in the User Management | Settings | Join Key.

    Set the join.key used by your Artifactory server in the Shared Configurations section of the $JFROG_HOME/xray/var/etc/system.yaml file.

Change RabbitMQ database credentials

Xray comes pre-installed with RabbitMQ, by setting the Erlang cookie value as the RabbitMQ password for guest users.

Linux Archive
  1. Set the new password in the$JFROG_HOME/app/bin/rabbitmq/rabbitmq.conf file.

    default_pass = <new password>
  2. Set your RabbitMQ password in the Shared Configurations section of the $JFROG_HOME/xray/var/etc/system.yaml file.

  3. Restart all services.

    xray/app/bin/xray.sh restart
Configure RabbitMQ to use FQDN for clustering

By default, RabbitMQ uses the short hostnames of other nodes in the cluster for communication. However, it be can be configured to use a fully qualified domain name (FQND) host name (a long hostname).

To configure RabbitMQ to use FQDN, follow these steps.

  1. Install Xray , but do not start the services.

  2. Modify the following files according to the installer type.

    • Linux and Native Installers

      In JFROG_HOME/app/bin/xray.default:
       
         export RABBITMQ_USE_LONGNAME=true
    • Common Change in All Installers

      In system.yaml:
       
      shared:
        node:
          id: <long hostname>
          name: <long hostname>
      ## For secondary nodes only
      #  shared:
      #    rabbitMq:
      #      active:
      #        node:
      #          name: <long hostname of active node>
  3. Start RabbitMQ and the Xray services.

Third Party Log Collector

Xray enables using an external log collector such as Sumologic or Splunk.

To adjust the permissions to allow the log collection service perform read operations on the generated log files.

  1. Add the log collection service user to the relevant group if needed (the user and group that installed and started Xray).

  2. Apply the user and group permissions as needed on the $JFROG_HOME/xray/var/log directory using:

    $ chmod -R 640 $JFROG_HOME/xray/var/log
  3. Adjust the group read inheritance permissions setgid bit using:

    $ chmod -R 2755 $JFROG_HOME/xray/var/log

    This command enables the generated log files to inherit the folder's group permissions.

Third Party Applications for Xray

Ensure that you install the third party application for Xray before run the Xray service.

PostgreSQL for Xray

Using Microsoft Azure PostgreSQL

Some managed databases, such as Azure, have a different username for accessing the database than the actual one inside the database. For Azure-managed PostgreSQL, the username will be, for example xray@mycompany and the actualUsername will be xray. For more information, see Xray System YAML.

Prior to Xray version 3.30

If you install an Xray version prior to 3.30, do not use a password for PostgreSQL that has special characters.Xray may not work if you configure a password that has special characters, such as~ = # @ $ /.

PostgreSQL Linux Archive Installation

PostgreSQL binaries are no longer bundled with Linux archive installer. You need to install PostgreSQL manually.

Create the PostgreSQL database.

<pgsql bin path>/psql template1
<postgres prompt>: CREATE DATABASE <user_name>;
<postgres prompt>: \q

Run the script, xray/app/third-party/postgresql/createPostgresUsers.sh, to seed the PostgreSQL database.

POSTGRES_PATH=<pgsql bin path> xray/app/third-party/postgresql/createPostgresUsers.sh
Xray PostgreSQL Upgrade

Xray 3.x supports PostgreSQL versions 10, 11, 12, 13, 14, and 15.

To learn about the process and requirements for upgrading PostgreSQL 9.x, see JFrog Xray PostgreSQL Upgrade - PostgreSQL 9.x EoS.

PostgreSQL Performance Improvements

We recommend that you increase the maximum connections setting in the PostgreSQL configuration file.

Open the $JFROG_HOME/xray/var/lib/pgsql/data/postgresql.conf configuration file, and add or edit the max_connections property.

Restart the database to enable this change.

Erlang for Xray
Erlang Linux Archive Installation

Erlang binaries are no longer bundled with Linux archive installer for Xray. Remember to install Erlang manually.

db-util for Xray

db-util allows Xray to interact with the Berkley DB that contains information about RPM-based Docker images. This way, JFrog Xray can index OS packages for these images.

db-util Linux Archive installation

db-util binaries are no longer bundled with Linux archive installer for Xray. Remember to install db-util manually.