irods_easybuild provides instructions and a collection of EasyBuild config files to build iRODS using EasyBuild.
EasyBuild is a software build and installation framework that allows you to manage (scientific) software on High Performance Computing (HPC) systems in an efficient way.
The Integrated Rule-Oriented Data System (iRODS) is open source data management software used by research, commercial, and governmental organizations worldwide.
Automated and reproducible way to install iRODS (or any of its components) and its external dependencies on any GNU/Linux system.
For instance, think of the deployment of iRODS-icommands
on any GNU/Linux distribution.
If you are truly interested in bit-to-bit reproducibility, please take a look at the GNU Guix project and install iRODS
via
guix package -i irods-client-icommands
At the time of writing, only iRODS v4.2.8
is available as an official GNU Guix package. However, a guix recipe to build the latest irods
and icommands
packages can be found here.
- Install and setup EasyBuild as described here
- Clone this repository
git clone git@github.com:ll4strw/irods_easybuild.git
- Install iRODS or only iRODS client libraries
ml load EasyBuild
cd irods_easybuild
eb --robot-paths=":./easyconfigs" ./easyconfigs/i/irods/irods-4.3.0-GCC-11.2.0.eb [--dry-run] [--try-amend=build_cmd='make irods_client '] -r
- Install iRODS-icommands
eb --robot-paths=":./easyconfigs" ./easyconfigs/i/irods-icommands/irods-icommands-4.3.0-GCC-11.2.0.eb [--dry-run] -r
The current setup builds iRODS successfully using Clang
and libstdc++
# cat irods-4.3.0-GCC-11.2.0.eb
configopts = " -DIRODS_BUILD_WITH_CLANG=ON "
configopts += " -DIRODS_BUILD_AGAINST_LIBCXX=FALSE "
configopts += " -DCMAKE_SHARED_LINKER_FLAGS='-fuse-ld=lld' "
configopts += " -DCMAKE_EXE_LINKER_FLAGS='-fuse-ld=lld' "
configopts += " -DCMAKE_MODULE_LINKER_FLAGS='-fuse-ld=lld' "
Is it nonetheless possible to build iRODS and icommands using GCC
instead of Clang
by using
# cat irods-4.3.0-GCC-11.2.0.eb
configopts = " -DIRODS_BUILD_WITH_CLANG=OFF "
configopts += " -DIRODS_BUILD_AGAINST_LIBCXX=FALSE "
#configopts += " -DCMAKE_SHARED_LINKER_FLAGS='-fuse-ld=lld' "
#configopts += " -DCMAKE_EXE_LINKER_FLAGS='-fuse-ld=lld' "
#configopts += " -DCMAKE_MODULE_LINKER_FLAGS='-fuse-ld=lld' "
However this approach leads to the following error when invoking the icommands
ils
JSON error occurred while authenticating user [****] [[json.exception.type_error.305] cannot use operator[] with a string argument with array] failed with error -167000 SYS_LIBRARY_ERROR
Similarly, you can also try building using libc++
instead of libstdc++
# cat irods-4.3.0-GCC-11.2.0.eb
configopts += " -DIRODS_BUILD_AGAINST_LIBCXX=TRUE "
but this approach could lead to similar linking error
ld.lld: error: undefined symbol: fmt::v8::vformat(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)
unless you compile all dependencies with libc++
.
ml purge
ml load irods-icommands/4.3.0-GCC-11.2.0
iinit
At the time of writing, the softwares listed in the easyconfigs
directory were unknown to the EasyBuild system,
hence their presence here. Because I am gradually submitting them to the official EasyBuild repo, it will soon be
possible to install iRODS
without specifying extra robot paths (path to easyconfigs), that is
eb ./easyconfigs/i/irods/irods-4.3.0-GCC-11.2.0.eb [--dry-run] [--try-amend=build_cmd='make irods_client '] -r