Table of Contents |
---|
Components
ssh://git@git.iter.org/imas/uda.git
...
to be installed
Fat- Yes.client setup
If we are using the fat-client set-up then following needs to be installed locally:
* UDA fat-client
* UDA plugins (from https://git.iter.org/projects/IMAS/repos/uda-plugins/browse)plugins
Thin-client setup
If we are using the thin-client set-up then only the UDA client needs to be installed – though a UDA server will need to be running somewhere accessible with the UDA plugins running on that server.
* UDA is IMAS/DD independent
UDA vs UDA -plugins
The same plugins can be used for different UDA installs.
Current UDA does not dynamically search for plugins, i.e. it does not try and load every shared library in a directory. To load a plugin, it reads the plugin library name from a text file. “Registering” a plugin just means adding this plugin to that text file. (I plan to change this to remove the need for the text file at some point).
Only the plugin library name is in the text file though. To be able to load the plugin, the directory needs to be added to the LD_LIBRARY_PATH. Therefore, a module is needed.
UDA
Version 2.7.3
Installation
Prepare environment:
Code Block |
---|
module load IMAS/3.39.0/AL/5.0.0/gcc/7.3.0
module load itm-gcc/7.3.0
module load xmllib/3.3.1/gcc/7.3.0
module load itm-hdf5/1.12.2/gcc/7.3.0
module load cmake/3.5.2
module load capnproto/0.10.4
module load fmt/10.0.0
module load spdlog/1.11.0
module load itm-python/3.10
setenv BOOST_DIR /gw/switm/boost/1.80.0/gcc/7.3.0
setenv UDA_HOME /gw/swimas/extra/uda/2.7.3/gcc/7.3.0 |
Tip | ||
---|---|---|
install latest version of cmake if needed:
|
Get latest version of UDA:
Code Block |
---|
git clone https://github.com/ukaea/UDA
git checkout 2.7.3 |
Then configure and install library:
Code Block |
---|
cmake \
-Bbuild -H. \
-DCMAKE_INSTALL_PREFIX=${UDA_HOME} \
-DMAKE_INSTALL_PREFIX=${UDA_HOME} \
-DBUILD_SHARED_LIBS=ON \
-DENABLE_CAPNP=ON \
-DCMAKE_BUILD_TYPE=Debug \
-DUDA_PORT=56565 \
-DUDA_HOST=localhost \
-DUSER=root \
-DBOOST_ROOT=${BOOST_DIR}
make -C build -j 4
make -C build -j 4 install
cd ${UDA_HOME}/python_installer
python3 setup.py install --prefix=${UDA_HOME}/python |
Tip |
---|
Modulefile is also installed, and is located at $UDA_HOME/modulefiles |
Version 2.5.1
Dependencies
DD & AL dependency- Yes.
UDA is completely DD & AL independent.
A common uda server can be used for all imas IMAS versions to date and the imas IMAS backend calls this in fat mode. I don’t know if this fat-mode configuration is subject to change. There is a dependency of some of the mapping plugins on the imas library (I think both imas_mapping and exp2imas also do depend on it too), but the result is that the uda plugins library needs to be recompiled for every new access layer version deployed. .
Other dependencies:
module load cmake/3.5.2
module load itm-boost/1.78.0/gcc/4.8
Installation
Please check installation IMAS eco-system installation scripts:
https://gforge-next.eufus.eu/#/project/imasscripts/scm/browse/uda
See also Releasing new version of IMAS ecosystem
Tip |
---|
The latest tips on how to install the latest version of the UDA/2.5.1 are below |
Code Block |
---|
module purge
module load cineca
module unload gnu
module load gnu/7.3.0
module load itm-openmpi/4.0.4--gnu--7.3.0
module load imasenv/3.33.0/gcc
module unload uda
module load libssh
module load cmake/3.5.2
module load itm-boost/1.61.0--gnu--7.3.0
cmake -Bbuild -H. \
-DCMAKE_INSTALL_PREFIX=/gw/swimas/extra/uda/2.5.1/gcc/7.3.0 \
-DBUILD_SHARED_LIBS=ON \
-DTARGET_TYPE:STRING=OTHER
make -C build
make -C build install
|
UDA Plugins
Dependencies
DD & AL dependency
* UDA-plugins is IMAS LL dependent- Yes. There is no run-time dependency on the data-dictionary (only access layer), only on mapping files, that should be consistent with DD version. The inconsistency will not cause any runtime errors (crash etc) but the data retrieval will fail as the mappings do not yet comply with the latest DD updates. Procedurally, perhaps there should be a step to confirm DD compliance of the mappings at each release too.
The UDA plugin required for remote IMAS access (IMAS_REMOTE, IMAS_PARTIAL, etc.) is currently compiled against the IMAS lowlevel library and so will need to be recompiled if the library .so version changes. It should be DD independent though. The other plugins (IMAS_MAPPING, EXP2IMAS, etc.) are DD & AL independent.
The plugins do depend on the server they are compiled against but the server is completely independent of IMAS.
* to install I have to use a proper script
- You can install without running the scripts, they are just there to make life easier for commonly installed machines.
The configure script exists for the plugins repo too and can be edited to specify the imasenv module and compilers for each new build. An additional command is required after building and installing the plugins which is to execute the script at build/scripts/activate_plugins.sh which will register the compiled plugins in a configuration file for the uda-server to be aware of
There are scripts in the UDA repository in the ‘scripts’ directory with names such as ‘cmake-freia.sh’. These files give an overview of how to configure the build before running make. It should be a case of running:
./scripts/cmake-itm-marconi-gcc-4.sh
make -C build
make -C build install
* Are UDA-plugins based on specific version of UDA? or any version of UDA can be loaded?
- Plugins should be independent of UDA version. There was a renaming of a variable in the server between 2.4.1 and 2.5.0 which has unfortunately meant plugins need to be tweaked to compile against the new version, but we try to avoid this.* Are UDA-plugins bound to specific version of IMAS? (I see module load IMAS/3.24.0/AL/4.1.5 in 'marconi' script)?
- Most of the plugins are not bound to IMAS but a few of them (IMAS_REMOTE, IMAS_PARTIAL, etc.) compile against the IMAS lowlevel so pick up the “so” version of that library (i.e. libimas.so.3)
* Should module files be created manually?
...
In addition to the basic installation steps I believe a new module-file should be produced for the uda-plugins library produced in this process which should be named with the corresponding access layer version it’s valid for. I think Jonathan set something up to achieve this a couple of years ago but I don’t know if it will be executed in the default build. scripts/cmake-itm-marconi.sh seems to install to /gw/swimas/extra/uda/plugins/1.2.0/AL/$AL_VERSION so maybe this already works out of the box
To reiterate there is no run-time dependency on the data-dictionary (only access layer), but where mapping files exist I don’t think they have been updated since 3.28 or similar. Just to say that I don’t think the plugin version control tracks the DD version they are consistent with in any way. This means that we can compile today against 3.32 or whatever version we are at, (and the code will run without seg faulting or stack smashing or other library-mismatch errors you may see) but the data retrieval will fail as the mappings do not yet comply with the latest DD updates. Procedurally, perhaps there should be a step to confirm DD compliance of the mappings at each release too.
UDA install steps
...
Other dependencies:
libssh/0.9.6/gcc/4.8
module load itm-boost/1.78.0/gcc/4.8
module load uda/2.5.0/gcc/7.3.0
Installation
- Cloning repository
- git clone ssh://git@git.iter.org/imas/uda-plugins.git
- cd uda-plugins
- git checkout tags/<tag _number> numer>
- BuildingBuilding
- env UDA_INSTALL=/gw/swimas/extra/uda/<tag_number>/plugins/1.2.0/AL/4.9.2/gcc/47.83.5 0 ./scripts/cmake-itm-marconi-gcc-4.sh
- make -C build-gcc-4
Installation
make -C build-gcc-4 install
Setting system module (has to be done manually)
- copy existing module (e.g. cp -r /gw/modules/lib/itm-boost/1.78.0 /gw/modules/lib/itm-boost/<installed version>)
- update versions etc
Setting pkg-config (has to be done manually)copy existing files (e.g. cp -r /gw/switm/boost/1.78.0/gcc/4.8/lib/pkgconfig
An additional command is required after building and installing the plugins which is to execute the script at build/scripts/activate_plugins.sh which will register the compiled plugins in a configuration file for the uda-server to be aware of
Tip |
---|
The latest tips on how to install the latest version of the UDA-PLUGINS/1.2.1 are below |
Code Block |
---|
module purge
module load cineca
module unload gnu
module load gnu/7.3.0
module load itm-openmpi/4.0.4--gnu--7.3.0
module load imasenv/3.33.0/gcc
module load libssh
module load cmake/3.5.2
module unload uda
module load uda/2.5.1/gcc/7.3.0
module load itm-boost/1.61.0--gnu--7.3.0
export CC=gcc
export CXX=g++
cmake -Bbuild -H. -DCMAKE_BUILD_TYPE=Debug \
-DLibSSH_ROOT="$LIBSSH_ROOT" \
-DCMAKE_INSTALL_PREFIX=/gw/swimas/extra/uda/plugins/1.2.1/gcc/7.3.0 \
-DBUILD_PLUGINS=exp2imas\;imas_mapping\;imasdd\;imas_uda\;west_tunnel\;imas_partial\;imas_remote
make -C build
make -C build install
cp $UDA_DIR/etc/plugins/udaPlugins.conf /gw/swimas/extra/uda/plugins/1.2.1/gcc/7.3.0/etc/plugins
build/scripts/activate-plugins.sh
cp /gw/swimas/extra/uda/2.5.1/gcc/7.3.0/lib/plugins/* /gw/swimas/extra/uda/plugins/1.2.1/gcc/7.3.0/lib/plugins |
Warning |
---|
You also need to add one line of code to the /afs/gw/swimas/extra/uda |
...
/plugins/1.2.1/gcc/7.3.0/etc/plugins/udaPlugins.conf file if the installer doesn't add it automatically
|
Simple test case
Below is a simple example for testing uda and uda-plugins
Code Block |
---|
module purge
module load cineca
module unload gnu
module load gnu/7.3.0
module load itm-openmpi/4.0.4--gnu--7.3.0
module load imasenv/3.33.0/gcc
module load libssh
module load cmake/3.5.2
module unload uda
module load uda/2.5.1/gcc/7.3.0
module load itm-boost/1.61.0--gnu--7.3.0
module load uda-plugins/1.2.1
setenv JET_MDSPLUS_USERNAME sdixon
python3
import imas
jet = imas.ids(86400,0)
jet.open_public('JET')
jet.magnetics.get()
jet.magnetics.flux_loop[0].flux.data |
...