Markus Kitsinger
Software Developer and Build Engineer
iRODS Consortium

iRODS Build and Packaging:
2024 Update
May 28-31, 2024
iRODS User Group Meeting 2024
Amsterdam, Netherlands
- Versioning changes
- Recap of plans
- Current progress
- Externals
libstdc++- New Features
- Version Freezes
- Other things that happened
- Notable yaks in need of shaving
- Other considerations
Overview

- Following the 4.3.x series, major releases of iRODS will be versioned 5.0, 6.0, 7.0, etc
- Minor releases will be versioned 5.1, 5.2, 5.3, etc
- Gnome-style development versioning - between releases, code in repository will have development version numbers
- x.9# for major releases/main branch (ex: 4.90 is development version of 5.0.0)
- x.y.9# for minor releases/stable branches (ex: 5.1.92 is development version of 5.2.0)
- Custom CMake package version file
- Takes into account development versions
- Takes into account the versioning change for 5.0
- More info in issue #7532
Versioning changes - iRODS 4.4 is now 5.0

Recap of Plans

-
We will shift to using the standard tools (
dpkg-buildpackageandrpmbuild) for packaging-
git-buildpackagewill be used to maintain debian packages, Salsa-style- Possibly rpm packages as well, still investigating
- We will not provide an externals package if the distribution already provides a usable package
- Debian and rpm source packages will be provided in our repositories
- We will follow established patterns for setting up service accounts
- We will install our libraries in the normal locations
- We will provide default systemd unit(s)
-
- We will build against
libstdc++ - We will decouple the iRODS buildsystem from externals packaging implementation details
- We decided to transition to
libstdc++before moving away fromfpm/CPack.- This will allow us to reduce the number of externals packages we provide, which will facilitate the transition to standardized packaging for externals.
- This also meant putting a lot more effort into the current externals system than I really wanted to. More on this in a bit.
- iRODS 5.0 will be built against
libstdc++. - Some externals are now used in CMake via
find_package. -
mungefsbuildsystem completely decoupled from externals.
Current Progress

- In order to build iRODS against
libstdc++, externals needs to build againstlibstdc++as well. - iRODS 4.3.x is still built against
libc++, so we have to support both until 4.3 is EOL. - Some packages now have two variants, one for
libstdc+++and one forlibc++.
Externals - libstdc++

Externals - New and Removed Packages

- New package -
jwt-cpp- Added for HTTP API provider client - Several packages removed
-
cpr- no single version compatible with all versions of curl we must support -
elasticlient- built on top ofcpr -
jansson- replaced by nlohmann-json (json) -
pistache- only used by one project, which has now been sunset -
libs3- all relevant code has been merged into the s3 resource plugin -
aws-sdk-cpp- originally added for s3 resource plugin, but was never used
-
- Exploring removing more
-
libarchive- distro-provided packages should be sufficient once EL7 is dropped (#7286) -
redis- distro-provided packages should be sufficient once EL7 is dropped (#7478) -
zeromq4-1- distro-provided packages should be sufficient once EL7 is dropped (#7479) -
json- distro-provided packages may be sufficient already (#7726)
-
Externals - New Features

- Each package now declares dependencies per-distribution per-version.
- New source patch system
- Initially added for Ubuntu 24.04 support, as
clangrequired changes a little too complex for basic shell scripting to handle. - We now pull in some patches from distribution packages.
- Initially added for Ubuntu 24.04 support, as
- Package revisions are now properly supported, allowing for in-place upgrades.
Externals - Version Freezes

We want to transition to distro-provided packages where possible. In order to facilitate this, we have implemented a soft version freeze on most of our externals.
- Bumping the version of an externals package that has a distro-provided equivalent (or is likely to have one in the future) needs to be sufficiently justified.
- Externals packages unlikely to ever have a distro-provided equivalent (such as
jwt-cpp) are free from this restriction. - This presents its own challenges we have had to overcome:
- Our
clangexternals package supports C++ coroutines, but we cannot use them due to an incompatibility withlibstdc++. - Our
cmakeexternals package does not support the newer versions of Python used on some distributions.
- Our
Other Things That Happened

- s3 resource plugin has absorbed
libs3.- s3 resource plugin has been relicensed to LGPLv3+/GPLv2+.
- Python rule engine plugin build has been properly parallelized.
- Development environment
Dockerfiles use newDockerfilesyntax. - Development environment core builder now uses
ccache. - We now leverage CMake object library targets to improve our buildsystems in a number of ways.
Notable Yaks In Need of Shaving (that we know about)

- Non-package installation -
make installshould be enough - File/directory ownership
- File/directory location
- Default configurations (or something along those lines)
- Unprivileged builds in CI and development environment
- CMake target names
- Removal of externals plumbing in CMake
Other Considerations

- How will this affect development workflows?
- How will we document this?
- How will CI need to change?
- When are cleanroom builds needed and how will we support them?
- How will we verify our dependency minimum versions?
- How often should we do this?
- Presently, a lot of functionality for standing up and cleaning up after iRODS is handled by Python scripts. How much of this should be migrated into iRODS proper, and how?
- How long should we maintain legacy CMake target aliases?
- How will the upgrade process be affected?
Thank you!
Questions?

UGM 2024 - iRODS Build and Packaging: 2024 Update
By iRODS Consortium
UGM 2024 - iRODS Build and Packaging: 2024 Update
- 499