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)
- [[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.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.68.0 has ##g_string_replace()## (see cmdline.c), glib 2.76.0 has ##g_string_free_and_steal()##
- **GnuTLS (currently 3.1.7):**
- 3.1.9 (2013-02-27) would let us replace `gnutls_transport_get_ptr()` with `gnutls_transport_get_int()` (likewise for `set` functions), avoiding the need for casts. This holds as long as the sockets use TCP (`SOCK_STREAM`); currently they all do.
- 3.4.6 (2015-10-20) would let us remove `verify_peer_cert()` and use `gnutls_session_set_verify_cert()` instead.
- 3.6.0 (2017-08-21) would let us drop `gnutls_global_init()`, `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).
- **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)**
- **python3-dateutil (currently no minimum):** 2.7.0 (2018-03-11) would let us drop the isoparse replacement in `python/pacemaker/_cts/watcher.py`
- **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 [[https://packages.debian.org/index | current releases]] and [[http://archive.debian.org/debian/dists/ | older releases]]
* SUSE [[https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server&version=15 | current releases]]
* Ubuntu [[https://packages.ubuntu.com/ | current releases]] and [[https://old-releases.ubuntu.com/ubuntu/dists/ | older releases]]