Minimum supported versions of Pacemaker's dependencies can be raised at a minor or major series bump, if we can remove workarounds/conditionals for older versions or take advantage of newer features. Edit configure.ac, INSTALL.md, and rpm/pacemaker.spec.in (if appropriate) when bumping a dependency.
Leave this task open-ended, and create a new subtask to bump dependencies to specific versions for a particular Pacemaker release.
Aim for versions that are available as stock packages in supported distributions' long-term support releases (typically 5 to 7 years old). Important distributions:
- RHEL: currently support 8 (2019) and later (and comparable Fedora, CentOS Stream, and clone releases)
- [[https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server | SLES/OpenSUSE]]: currently support SLES 15.0 (2018) and later
- [[ http://archive.debian.org/debian/dists/ | Debian ]]: currently support 10 "buster" (2019) and later (Debian itself does not offer LTS, but affiliated groups do offer 5-year LTS and 10-year Extended LTS)
- [[ https://packages.ubuntu.com/ | Ubuntu ]]: currently support 18 "bionic" (2018) and later
- FreeBSD (only supported as far as passing CI testing)
Key dependencies:
- **autoconf (currently 2.64): ** 2.70 (2020-12-08) supports --runstatedir and C_CONFIG_MACRO_DIRS(), would let us deprecate/drop --with-runstatedir and drop AC_PROG_CC_STDC, and (in combination with gettext 0.19.6 or later) would let us use AM_GNU_GETTEXT_REQUIRE_VERSION (i.e. "or later") instead of AM_GNU_GETTEXT_VERSION
- **corosync (currently 2.0.0):**
- 3.0.0 (2018-12): see `cmap_initialize_map()` in internal.h and `quorum_model_initialize()` in cluster.c
- 3.1.3 (2021-05) would let us drop HAVE_COROSYNC_CFG_TRACKSTART and add a call to corosync_cfg_trackstop() (see comment in close_cfg())
- In the spec file, we should depend on corosync-devel%{?_isa} instead of just corosync-devel, but we need to research which corosync version introduced that name
- **gettext (currently 0.18):** RHEL 7.2 has 0.18.2.1, RHEL 8.0 has 0.19.8.1, jessie has 0.19.3, vivid has 0.19.2; 0.19.6 (2015-09, not available until SLES 15) would let us use AM_GNU_GETTEXT_REQUIRE_VERSION (i.e. "or later") instead of AM_GNU_GETTEXT_VERSION in configure.ac (also requires autoconf 2.70 or later)
- **glib (currently 2.42.0):** check https://github.com/GNOME/glib/blob/master/NEWS and https://en.wikipedia.org/wiki/GLib#Releases for useful changes; glib 2.68.0 has ##g_string_replace()## (see cmdline.c), glib 2.76.0 has ##g_string_free_and_steal()##
- **GnuTLS (currently 2.12.0):** 3.1.7 (2013-02-04) would let us drop `gnutls_dh_set_prime_bits()` call, but beware that this affects accessibility from remote CIB admin hosts and Pacemaker Remote nodes, and so should only be done at a major series bump; 3.6.0 (2017-08-21) would let us drop `gnutls_anon_set_server_dh_params()`, `gnutls_psk_set_server_dh_params()`, and `gnutls_dh_params_generate2()` calls (but investigate whether would affect remote CIB admin hosts and Pacemaker Remote nodes); 3.6.2 (2018-02-16) would allow us to assume `gnutls_fips140_set_mode()` exists (see `configure.ac`); 3.6.12 (2020-02-01) would allow us to assume `GNUTLS_FIPS140_SET_LAX_MODE()` and `GNUTLS_FIPS140_SET_STRICT_MODE()` exist (see `portability.h`).
- **libdbus (currently 1.5.12)**
- **libqb (currently 1.0.1):** 2.0.0 (2020-05), 2.0.2 (2020-10), or 2.0.5 (2022-03) would allow us to drop workarounds (see configure.ac) as well as deprecate CRM_TRACE_INIT_DATA() and drop calls of it
- **libxml2 (2.9.2)**
- **pkg-config (currently 0.28):** note that Fedora >=26 and RHEL >=8 use pkgconf instead, which has different versioning
- **Python (currently 3.6)**
- **rpm (currently 4.11.0):** 4.17.1 (2022-07-01) would allows us to use the more intuitive `bcond` instead of `bcond_with` and `bcond_without`