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
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
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.
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.
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.)
Under eltdev home directory:
$ mkdir modulefiles
$ cd modulefiles
Create and edit the file
private.lua
undermodulefiles
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 ).