Installation

Machine Preparation

Install a real or virtual machine with Fedora, ELT Dev packages and ELT Common Software (ECOS, including CII) according to the Linux Installation Document

Requirements

For this version, the IFW requires a WS with at least 8Gb of RAM memory to compile.

ELT Development Environment (DevEnv)

Before installing the IFW it is needed to setup the environment. A very good starting point is this document

Note

The version 6.1.0 of ELT Development Environment (Fedora 40) shall be used with version 2025 of ICS Framework (IFW).

ELT CII Services

The IFW requires the proper installation and configuration of CII services on the machine where it is intended to be deployed. You can just execute the following script as root (see below) or follow the post installation procedure documented here

The IFW team recommends to use the “ownserver” role for the development machine where the IFW is going to be installed.

$ /elt/ciisrv/postinstall/cii-postinstall  role_ownserver
$ cii-services start all

For more information about CII post installation and other CII related topics, you can visit the ESO knowledge base page

Operational User

It is recommended to install and run the instrument software under the eltdev account to simplify integration with Nomad/Consul that comes configured to run under eltdev in DevEnv version 6.

Note

Since version 5.2.0 of ELT Development Environment (Fedora), nomad runs as root.

It is possible to start/shutdown the software from another user but it requires setting properly the environment variables for the account where you want to run your software.

Environment Variables

IFW is relying on the following environment variables:

  • DATAROOT: Directory on the host machine in which Output Data Products will be generated.

  • CFGPATH: The “CFGPATH” environment variable, is a colon separated list of paths, pointing to possible Resource Directories in which resource data of different kinds are located.

  • INTROOT: In this release, the example configuration, libraries, header files and binaries, are installed into the location pointed by “INTROOT”. It is used as “PREFIX” for waf installation location.

Getting Started

  1. Checking CII services

Check that CII services are properly running:

$ cii-services info

The output of the above command shall be similar to this:

CII Services Tool (20240220)
...
# function ..........
Log      |functional:yes
OLDB DP  |functional:yes
OLDB CE  |functional:yes
IntCfg   |functional:yes

If they are not properly running you can execute (as root):

$ cii-services start all
  1. Install IFW components

Starting from IFW version 4, all IFW components are available as RPMs and can be installed using dnf install as root.

$ dnf -y install elt-ifw

This command will install all ifw RPMs and the components seq, ddt RPMs :

  • elt-ifw-2025.08

  • elt-ifw-ccf-5.0.2

  • elt-ifw-daq-3.2.0

  • elt-ifw-daqif-2.0.0

  • elt-ifw-sup-5.0.0

  • elt-ifw-supif-1.1.1

  • elt-ifw-wdglib-1.1.0

  • elt-ifw-rtmstools-3.0.0

  • elt-ifw-calob-1.0.0

  • elt-ifw-fcf-7.1.4

  • elt-ifw-fcfif-1.1.0

  • elt-ifw-odp-5.0.0

  • elt-ifw-fnd-1.0.0

  • elt-ifw-fgf-1.0.0

  • elt-ifw-core-6.0.1

  • elt-ifw-tpl-1.0.0

  • elt-seq-4.4.0

  • elt-ddt-1.2.1

Note

Since IFW version 4, the elt-etr RPM is installed together with ELT Development Environment.

Note

The RPM elt-ifw-2025 is a meta-package to simplify the installation of all RPMs needed by an Instrument.

  1. Install HLCC Components (optional)

Since IFW version 5, the HLCC components are available as RPMs and can be installed using yum install as root. The HLCC includes a telescope simulator that can be used to validate the non-deterministic interface between the instrument and the ELT CCS. For more information about HLCC refer to the User Manual

Using the HLCC with the template instrument is optional. In case you want to use it, please install it in a separate machine, and follow the installation procedure documented in the HLCC User Manual.

  1. Create the directories for the installation areas:

$ cd <the location for introot>
$ getTemplate -d introot INTROOT
$ cd <the location for dataroot>
$ getTemplate -d dataroot DATAROOT

The environment shall contain the definitions of the relevant environment variables such as INTROOT, DATAROOT, LD_LIBRARY_PATH, PYTHONPATH, etc. These environment variables will be automatically defined by means of the file private.lua, defined here below, which in turn uses the system modulefile definitions in /elt/System/modulefiles/introot.lua. (In the following steps, we assume that INTROOT and DATAROOT directories are created in the home directory of the user.)

  1. Under eltdev home directory:

$ mkdir modulefiles
$ cd modulefiles
  1. Create and edit the file private.lua under modulefiles directory. Use the example file below:

local home = os.getenv("HOME")

local introot = pathJoin(home, "INTROOT")
setenv ("INTROOT", introot)
setenv ("PREFIX", introot)

local dataroot = pathJoin(home, "DATAROOT")
setenv ("DATAROOT", dataroot)

load ("introot")
setenv ("NOMAD_ADDR", "http://<node ip>:4646")
setenv ("CONSUL_HTTP_ADDR", "http://<node ip>:8500")

prepend_path("CFGPATH","<path_to_ins>/<instrument>/resource")

Note

IFW RPMs (elt-ifw, elt-seq, elt-ddt) provide a lua file to define minimum set of default environment variables. The lua files are installed under /elt/common/modulefiles/default and loaded by default.

Warning

Log out and then in again so that modulefiles directory becomes known to the environment and the newly created private.lua is loaded. This is needed only when the directory modulefiles and the private.lua are created for the first time.

File private.lua is loaded by default upon login. In case more .lua files (with different names) will be added to $HOME/modulefiles, they can be made known to the environment just with:

$ module load <lua file>

You can check which LMOD modules are available after login with:

$ module avail

The output should look like as follows: (the available/loaded modules might change with the software versions, but private and introot should be loaded)

------------------------------------------------------------------------------------- /home_local/eltdev/modulefiles        -------------------------------------------------------------------------------------
    private (L)

-------------------------------------------------------------------------------------- /elt/common/modulefiles/core --------------------------------------------------------------------------------------
    eltdev (L)    introot (L)

------------------------------------------------------------------------------------ /elt/common/modulefiles/default        -------------------------------------------------------------------------------------
    ciisrv (L)    cut (L)    dcsif (L)    ddt (L)    elt-trs (L)    ifw (L)    mal (L)    metadaqif (L)    mudpi (L)    ra
d (L)    recif (L)    roadrunner (L)    rtms (L)    seq (L)    stdif (L)

--------------------------------------------------------------------------------- /usr/share/lmod/lmod/modulefiles/Core ----------------------------------------------------------------------------------
    lmod    settarg

Where:
    L:  Module is loaded

Note

For more information, read this document

Start nomad and consul services

Following ELT standards, IFW uses Nomad (see here) to manage the life cycle of the ICS SW components (see next chapter Getting Started ).

Warning

Unlike in the previous releases of the DevEnv, users have to provide a custom configuration for Nomad/Consul services. The default one cannot be used.

The IFW template provides an example configuration for Nomad/Consul that projects could use as starting point. These files are located under:

$ <instrument>/<prefix>-resource/nomad/etc

Replace the <node ip> with the correct IP for your IWS machine and place these files under /etc/nomad.d and /etc/consul.d.

Nomad and Consul services has to be started as the eltdev user with the command systemctl.

  • Start nomad and consul services

$ systemctl start nomad
$ systemctl start consul
  • Check status of nomad and consul services

$ systemctl status nomad
$ systemctl status consul
  • Stop nomad and consul services

$ systemctl stop nomad
$ systemctl stop consul

Manual installation

As in previous versions, the IFW components can also be installed from Gitlab using the release tar file. This step is optional since IFW software is already included in the RPMs mentioned above.

Note

The components to be installed will depend on the usage required by developers. Below are the instructions of the packages to be installed that are needed to follow the examples provided throughout the manual. Other IFW components can be installed following the same procedure.

Warning

Before building IFW components (rtmstools, ccf), the DDT RPM need to be installed using yum install as root.

$ dnf -y install elt-ddt-devel
  • Download, unpack and build IFW components

Go to the ESO Gitlab site and download the release tar file for each component (ifw-core, ifw-daq, ifw-daq-if, ifw-rtmstools, ifw-odp, ifw-wdglib, ifw-fcf, ifw-fcf-if, ifw-ccf, ifw-sup, ifw-sup-if, ifw-calob).

After unpacking the ifw packages downloaded from ESO GitLab, execute the steps below to build and install the software for each component.

$ cd ifw-fnd
$ waf configure
$ waf build install

$ cd ifw-core
$ waf configure
$ waf build install

$ cd ifw-daq-if
$ waf configure
$ waf build install

$ cd ifw-daq
$ waf configure
$ waf build install

$ cd ifw-rtmstools
$ waf configure
$ waf build install

$ cd ifw-wdglib
$ waf configure
$ waf build install

$ cd ifw-sup-if
$ waf configure
$ waf build install

$ cd ifw-sup
$ waf configure
$ waf build install

$ cd ifw-fcf-if
$ waf configure
$ waf build install

$ cd ifw-fcf
$ waf configure
$ waf build install

$ cd ifw-odp
$ waf configure
$ waf build install

$ cd ifw-ccf
$ waf configure
$ waf build install

$ cd ifw-calob
$ waf configure
$ waf build install

$ cd ifw-fgf
$ waf configure
$ waf build install

$ cd ifw-tpl
$ waf configure
$ waf build install

Project Template

This template will provide a sample configuration for an instrument project. Developers can adapt it to their own instruments. Examples in the documentation will refer to this template so it is recommended to download it from GitLab.

Go to the ESO Gitlab site and download the tar file of the template: Template release

After unpacking the template, you should see the following:

$ tree ifw-templates
ifw-templates
└── project
    ├── cookiecutter.json
    ├── {{cookiecutter.project_name}}
    └── hooks

The instructions how to use this template can be found in next chapter ( Getting Started ).