Installing e3

Building an e3 installation using standard tools is relatively straightforward. To see which modules are included in such an installation, see the contents of 2022q1; more information will be provided below.

Prerequisites

You should start with a mostly blank CentOS 7 machine, and then install all the necessary packages via the following command.1

[iocuser@host:~]$ sudo yum install -y \
patch m4 gcc-c++ tclx python3-devel libtirpc-devel re2c patchelf \
libusb-devel libusbx-devel net-snmp-devel libxml2-devel \
readline-devel opencv-devel libudev-devel boost-devel python36-PyYAML \
libcurl-devel gsl-devel git glib2-devel xorg-x11-proto-devel \
libX11-devel libXext-devel bzip2-devel freetype-devel lcms2-devel \
ethercat-generic-dkms-1.5.2.ESS1-1

Note

Note that this package list is more than is strictly needed to install e3, but also contains the necessary packages for many of the e3 modules that are supported.

Building a local e3 environment

It is possible to build an e3 environment by hand by cloning and building the necessary repositories (e3-base, e3-require, followed by all of the appropriate modules). This will require some custom configuration to ensure that all of the versions and dependencies match up.

The prefered way of building an e3 environment is to use the specification handler, which allows you to build a predefined environment by using a specification.

Installing the specification handler

The specification handler is distributed on artifactory at ESS, and can be installed via

[iocuser@host:~]$ pip3 install --user e3 -i https://artifactory.esss.lu.se/artifactory/api/pypi/pypi-virtual/simple

One can also clone and install the specification handler directly:

[iocuser@host:~]$ git clone https://gitlab.esss.lu.se/e3/e3.git
[iocuser@host:~]$ cd e3
[iocuser@host:e3]$ pip3 install --user .

Selecting a specification

The specifications are stored in the repository specifications. The latest environment built at ESS is 2023q1. For a local installation, you will likely want to trim down this list manually, to reduce the size of the installation.

These files will look something like the following.

config:
  base: 7.0.7-NA/7.0.7-37d472c-20221216T170326
  require: 7.0.7-5.0.0/5.0.0-6a40805-20230130T100914
metadata:
  type: specification
  version: 1
modules:
  adandor:
    versions:
    - 7.0.7-5.0.0/2.8.0-6f3a1f4+1-319be25-20230130T150218
    - 7.0.7-5.0.0/2.8.0-6f3a1f4+2-9ef4e0d-20230810T151940
  adandor3:
    versions:
    - 7.0.7-5.0.0/2.2.0-6030b0b+1-67d79f9-20230130T150255
  adcore:
    versions:
    - 7.0.7-5.0.0/3.12.1+2-50b90f0-20230130T131903
  ...

They contain information including which version of EPICS base to install (7.0.7), which version of require to install (5.0.0), as well as a list of modules to install into that environment.

These can be built (assuming you have installed the specification handler as above)

[iocuser@host:specifications]$ e3-build -t /opt/epics specifications/2023q1.yml

assuming that you would like to build your local environment at /opt/epics. Note that you will need to have permission to write to this location, which may necessitate the use of sudo.

Sourcing a specific e3 environment

It is possible to have several e3 installations available (either at different root locations, or with different versions of EPICS base or require). You need to explicitly activate the e3 environment you intend to use:

[iocuser@host:~]$ source /path/to/epics/${EPICS_BASE_VERSION}/require/${REQUIRE_VERSION}/bin/activate

Note

The script activate was called setE3Env.bash up until require 4.0.0.

If you installed the above specification at /opt/epics, then this would be

[iocuser@host:~]$ source /opt/epics/7.0.7/require/5.0.0/bin/activate

Installing an e3 module

To install an existing e3 module, only a few steps are required. First clone the repository (we will use use the caenelfastps module for this example):

[iocuser@host:e3]$ git clone https://gitlab.esss.lu.se/e3/ps/e3-caenelfastps.git

Next, modify configure/RELEASE to point towards the correct installation path. If you followed the above steps to install, it should look like the following:

EPICS_BASE:=/opt/epics/base-7.0.7

E3_REQUIRE_NAME:=require
E3_REQUIRE_VERSION:=5.0.0

# The definitions shown below can also be placed in an untracked RELEASE.local
-include $(TOP)/../../RELEASE.local
-include $(TOP)/../RELEASE.local
-include $(TOP)/configure/RELEASE.local

Note

Notice the change to ${EPICS_BASE} from the default /epics/base-7.0.7 to /opt/epics/base-7.0.7.

Finally, we would run each of the make rules that clone the submodule, apply patches (if there are any valid ones for this version), build the module, and finally install it:

[iocuser@host:e3]$ cd e3-caenelfastps
[iocuser@host:e3-caenelfastps]$ make init patch build
[iocuser@host:e3-caenelfastps]$ sudo make install

We should finally validate that everything is working as expected:

# this assumes you have sourced the environment
[iocuser@host:e3-caenelfastps]$ iocsh -r caenelfastps

Done!

Tip

If you here wanted to use a different version of the module than the most recent one, you could simply check out a specific commit or tag of the wrapper, prior to running make init.


1

ethercat-generic-dkms-1.5.2.ESS1-1 is an ESS internal package. It can be found at: https://artifactory.esss.lu.se/artifactory/rpm-ics/centos/7/x86_64/. For ESS internal users, this package can be installed the same way as installing standard CentOS packages. For external users, one will need to add this repository to package manager’s repository-search-list to install this package.