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.
Targeted platforms
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 including Fedora 28)
- SLES/OpenSUSE: currently support SLES 15.0 (2018) and later
- 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)
- 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.1 (2021-03) would let us depend on corosync-devel%{?_isa} instead of just corosync-devel in rpm/pacemaker.spec.in
- 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())
- gettext (currently 0.18): 0.19.6 (2015-09, available in all target OSes, but feature also requires autoconf 2.70 or later) would let us use AM_GNU_GETTEXT_REQUIRE_VERSION (i.e. "or later") instead of AM_GNU_GETTEXT_VERSION in configure.ac
- 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.56.0 has g_datetime_new_from_iso8601() glib 2.68.0 has g_string_replace() (see cmdline.c), glib 2.76.0 has g_string_free_and_steal()
- GnuTLS (currently 3.4.6):
- 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.8.0 (2023-02-10) would let us skip initializing gnutls_session_t variables to NULL. Before 3.8.0, it is unsafe to call gnutls_deinit() unless gnutls_session_t has been set to NULL explicitly. As of 3.8.0, gnutls_init() sets it to NULL at the beginning, so it's always safe to call gnutls_deinit() on failure. However, gnutls_session_t is an opaque type and no safe initial value is publicly documented. In the meantime, if we wanted to be especially correct, we could return an integer code from pcmk__new_tls_session(), store the new session in an output argument on success, avoid initializing session to NULL within pcmk__new_tls_session(), and avoid calling gnutls_deinit() on failure. See the following notes:
- 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.14.0): 4.17.1 (2022-07-01) would allows us to use the more intuitive bcond instead of bcond_with and bcond_without
Additionally, booth and resource-agents are not dependencies, but see T129, T509, T644, T842, T843, and T844 for changes dependent on their supported versions.
Researching distro package versions
- Debian current releases and older releases
- SUSE current releases
- Ubuntu current releases and older releases