diff --git a/.rpmlint b/.rpmlint new file mode 100644 index 0000000..5aca11b --- /dev/null +++ b/.rpmlint @@ -0,0 +1,9 @@ +from Config import * +addFilter("E: shared-lib-without-dependency-information") +addFilter("E: missing-dependency-to-logrotate") +addFilter("W: manual-page-warning") +addFilter("W: no-documentation") +addFilter("W: no-manual-page-for-binary") +addFilter("W: non-conffile-in-etc") +addFilter("W: shared-lib-calls-exit") +addFilter("W: spelling-error") diff --git a/slurm.spec b/slurm.spec index 52d6717..9247cef 100644 --- a/slurm.spec +++ b/slurm.spec @@ -7,12 +7,19 @@ %global name_version %{name}-%{version}-%{ups_rel} %endif +# follow arch-inclusions for ucx +%ifarch aarch64 ppc64le x86_64 +%bcond_without ucx +%else +%bcond_with ucx +%endif + # Allow linkage with undefined symbols (disable -z,defs) %undefine _strict_symbol_defs_build Name: slurm -Version: 18.08.7 -Release: 3%{?dist} +Version: 18.08.8 +Release: 2%{?dist} Summary: Simple Linux Utility for Resource Management License: GPLv2 and BSD URL: https://slurm.schedmd.com/ @@ -30,7 +37,7 @@ Patch0: slurm_libslurmfull_version.patch Patch10: slurm_perlapi_rpaths.patch Patch11: slurm_html_doc_path.patch Patch12: slurm_doc_fix.patch -Patch13: slurm_do_not_build_cray.patch +Patch13: slurm_without_cray.patch # Fedora-related patches Patch20: slurm_pmix_soname.patch @@ -44,38 +51,45 @@ BuildRequires: gcc BuildRequires: perl-devel BuildRequires: perl-ExtUtils-MakeMaker BuildRequires: perl-interpreter +BuildRequires: perl-macros BuildRequires: perl-podlators BuildRequires: pkgconf BuildRequires: pkgconfig(check) +BuildRequires: pkgconfig(lua) BuildRequires: python3 BuildRequires: systemd +BuildRequires: freeipmi-devel +BuildRequires: gtk2-devel BuildRequires: hdf5-devel +BuildRequires: hwloc-devel +BuildRequires: libcurl-devel +BuildRequires: libssh2-devel +BuildRequires: lz4-devel +BuildRequires: mariadb-devel +BuildRequires: munge-devel +BuildRequires: ncurses-devel BuildRequires: pam-devel -BuildRequires: pkgconfig(gtk+-2.0) -BuildRequires: pkgconfig(hwloc) -BuildRequires: pkgconfig(libcurl) -BuildRequires: pkgconfig(libfreeipmi) -BuildRequires: pkgconfig(liblz4) -BuildRequires: pkgconfig(librrd) -BuildRequires: pkgconfig(libssh2) -BuildRequires: pkgconfig(lua) -BuildRequires: pkgconfig(mariadb) -BuildRequires: pkgconfig(munge) -BuildRequires: pkgconfig(ncurses) -BuildRequires: pkgconfig(openssl) -BuildRequires: pkgconfig(pmix) >= 2.0.0 -BuildRequires: pkgconfig(zlib) -BuildRequires: readline-devel - -# follow arch exclusions for these devel packages -%ifnarch s390 s390x %{arm} +BuildRequires: pmix-devel BuildRequires: rdma-core-devel +BuildRequires: readline-devel +BuildRequires: rrdtool-devel +BuildRequires: zlib-devel + +%if %{with ucx} +BuildRequires: ucx-devel +%endif + +# follow arch exclusions for numa +%ifnarch %{arm} BuildRequires: numactl-devel %endif Requires: munge -Requires: pmix >= 2.0.0 +Requires: pmix +%if %{with ucx} +Requires: ucx +%endif %{?systemd_requires} %description @@ -113,6 +127,22 @@ Summary: Slurm shared libraries %description libs Slurm shared libraries. +%package pmi +Summary: The %{name} implementation of libpmi and libpmi2 +Requires: %{name}%{?_isa} = %{version}-%{release} +Conflicts: pmix-pmi +%description pmi +The %{name}-pmi package contains the %{name} implementation of +the libpmi and libpmi2 libraries. + +%package pmi-devel +Summary: Development files for %{name}-pmi +Requires: %{name}-pmi%{?_isa} = %{version}-%{release} +Conflicts: pmix-pmi-devel +%description pmi-devel +The %{name}-pmi-devel package contains the development files for +the libpmi and libpmi2 libraries. + %package rrdtool Summary: Slurm rrdtool external sensor plugin Requires: %{name}%{?_isa} = %{version}-%{release} @@ -160,14 +190,6 @@ Requires: %{name}-perlapi%{?_isa} = %{version}-%{release} %description openlava OpenLava wrapper scripts used for helping migrate from OpenLava/LSF to Slurm. -%package perlapi -Summary: Perl API to Slurm -Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version)) -Requires: %{name}-libs%{?_isa} = %{version}-%{release} -%description perlapi -Perl API package for Slurm. This package includes the perl API to provide a -helpful interface to Slurm through Perl. - %package pam_slurm Summary: PAM module for restricting access to compute nodes via Slurm Requires: %{name}-libs%{?_isa} = %{version}-%{release} @@ -177,6 +199,14 @@ is in use. Access is granted to root, any user with a Slurm-launched job currently running on the node, or any user who has allocated resources on the node according to Slurm. +%package perlapi +Summary: Perl API to Slurm +Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version)) +Requires: %{name}-libs%{?_isa} = %{version}-%{release} +%description perlapi +Perl API package for Slurm. This package includes the perl API to provide a +helpful interface to Slurm through Perl. + %package torque Summary: Torque/PBS wrappers for transition from Torque/PBS to Slurm Requires: %{name}%{?_isa} = %{version}-%{release} @@ -215,6 +245,9 @@ automake --no-force --prefix=%{_prefix} \ --sysconfdir=%{_sysconfdir}/%{name} \ --with-pam_dir=%{_libdir}/security \ +%if %{with ucx} + --with-ucx=%{_prefix} \ +%endif --enable-shared \ --enable-x11 \ --disable-static \ @@ -302,19 +335,6 @@ touch %{buildroot}%{_rundir}/%{name}/slurmctld.pid touch %{buildroot}%{_rundir}/%{name}/slurmd.pid touch %{buildroot}%{_rundir}/%{name}/slurmdbd.pid -# install pkgconfig file slurm.pc -install -d -m 0755 %{buildroot}%{_libdir}/pkgconfig -cat >%{buildroot}%{_libdir}/pkgconfig/%{name}.pc < - 18.08.8-2 +- Create slurm-pmi and slurm-pmi-devel subpackages for pmi/pmi2 libs +- Remove rpm-generated pkgconfig files until upstream provides them +- Do not pull dependencies with pkgconfig unless package uses it + +* Mon Jul 15 2019 Philip Kovacs - 18.08.8-1 +- Release of 18.08.8 +- Closes security issue (CVE-2019-12838) +- Configure for UCX support on supported arches + * Tue Jul 2 2019 Philip Kovacs - 18.08.7-3 - Do not install slurm implementation of libpmi/pmi2 libraries - in favor of the faster implementation provided by pmix diff --git a/slurm_pmix_soname.patch b/slurm_pmix_soname.patch index 7557569..cb5f88e 100644 --- a/slurm_pmix_soname.patch +++ b/slurm_pmix_soname.patch @@ -1,23 +1,89 @@ diff --git a/src/plugins/mpi/pmix/mpi_pmix.c b/src/plugins/mpi/pmix/mpi_pmix.c -index bbb947616c..65ec00ad73 100644 +index bbb947616c..b284af63f2 100644 --- a/src/plugins/mpi/pmix/mpi_pmix.c +++ b/src/plugins/mpi/pmix/mpi_pmix.c -@@ -105,10 +105,17 @@ static void *_libpmix_open(void) +@@ -89,6 +89,8 @@ const uint32_t plugin_version = SLURM_VERSION_NUMBER; + + void *libpmix_plug = NULL; + ++static const char *pmix_libraries[] = { "libpmix.so", "libpmix.so.2", "libpmix.so.1" }; ++ + static void _libpmix_close(void *lib_plug) + { + xassert(lib_plug); +@@ -99,15 +101,20 @@ static void *_libpmix_open(void) + { + void *lib_plug = NULL; + char *full_path = NULL; ++ size_t sz = 0; + + #ifdef PMIXP_V1_LIBPATH + xstrfmtcat(full_path, "%s/", PMIXP_V1_LIBPATH); #elif defined PMIXP_V2_LIBPATH xstrfmtcat(full_path, "%s/", PMIXP_V2_LIBPATH); #endif - xstrfmtcat(full_path, "libpmix.so"); -+ xstrfmtcat(full_path, "libpmix.so.2"); - lib_plug = dlopen(full_path, RTLD_LAZY | RTLD_GLOBAL); - xfree(full_path); - -+ if (!lib_plug) { -+ dlerror(); -+ xstrfmtcat(full_path, "libpmix.so.1"); +- lib_plug = dlopen(full_path, RTLD_LAZY | RTLD_GLOBAL); +- xfree(full_path); ++ ++ while (!lib_plug && (sz < sizeof(pmix_libraries)/sizeof(pmix_libraries[0]))) { ++ xstrfmtcat(full_path, "%s", pmix_libraries[sz]); + lib_plug = dlopen(full_path, RTLD_LAZY | RTLD_GLOBAL); + xfree(full_path); ++ ++sz; + } -+ + if (lib_plug && (HAVE_PMIX_VER != pmixp_lib_get_version())) { PMIXP_ERROR("pmi/pmix: incorrect PMIx library version loaded %d was loaded, required %d version", - pmixp_lib_get_version(), (int)HAVE_PMIX_VER); +diff --git a/src/plugins/mpi/pmix/pmixp_dconn_ucx.c b/src/plugins/mpi/pmix/pmixp_dconn_ucx.c +index f6c91adc93..650fb7d5ff 100644 +--- a/src/plugins/mpi/pmix/pmixp_dconn_ucx.c ++++ b/src/plugins/mpi/pmix/pmixp_dconn_ucx.c +@@ -140,6 +140,8 @@ static struct io_operations _progress_ops = { + .handle_read = _progress_read + }; + ++static const char *ucx_libraries[] = { "libucp.so", "libucp.so.0" }; ++ + static void *_ucx_init(int nodeid, pmixp_p2p_data_t direct_hdr); + static void _ucx_fini(void *_priv); + static int _ucx_connect(void *_priv, void *ep_data, size_t ep_len, +@@ -161,15 +163,20 @@ static int _load_ucx_lib() + setenv("UCX_MEM_MALLOC_RELOC", "no", 1); + setenv("UCX_MEM_EVENTS", "no", 1); + ++ size_t sz = 0; ++ + #ifdef PMIXP_UCX_LIBPATH + /* If this Slurm build doesn't allow RPATH's + * try to open library by it's full path that + * we have from autoconf + */ + char *full_path = NULL; +- xstrfmtcat(full_path, "%s/libucp.so", PMIXP_UCX_LIBPATH); +- _ucx_lib_handler = dlopen(full_path, RTLD_LAZY | RTLD_GLOBAL); +- xfree(full_path); ++ while (!_ucx_lib_handler && (sz < sizeof(ucx_libraries)/sizeof(ucx_libraries[0]))) { ++ xstrfmtcat(full_path, "%s/%s", PMIXP_UCX_LIBPATH, ucx_libraries[sz]); ++ _ucx_lib_handler = dlopen(full_path, RTLD_LAZY | RTLD_GLOBAL); ++ xfree(full_path); ++ ++sz; ++ } + if (_ucx_lib_handler) { + /* successful, exit now */ + return SLURM_SUCCESS; +@@ -178,7 +185,13 @@ static int _load_ucx_lib() + * known by dynamic linker. + */ + #endif +- _ucx_lib_handler = dlopen("libucp.so", RTLD_LAZY | RTLD_GLOBAL); ++ sz = 0; ++ while (!_ucx_lib_handler && (sz < sizeof(ucx_libraries)/sizeof(ucx_libraries[0]))) { ++ xstrfmtcat(full_path, "%s", ucx_libraries[sz]); ++ _ucx_lib_handler = dlopen(full_path, RTLD_LAZY | RTLD_GLOBAL); ++ xfree(full_path); ++ ++sz; ++ } + if (!_ucx_lib_handler) { + char *err = dlerror(); + PMIXP_ERROR("Cannot open UCX lib: %s", (err) ? err : "unknown"); diff --git a/slurm_do_not_build_cray.patch b/slurm_without_cray.patch similarity index 100% rename from slurm_do_not_build_cray.patch rename to slurm_without_cray.patch diff --git a/sources b/sources index dff51b9..873076a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (slurm-18.08.7.tar.bz2) = d0047086f1b716877cc5bb39539bf96a8fd08b1851c85fd85112c6432c1ce2a0f29fc9dd8803094c8fa44d063cec5f417e6bed231b6d338934ff4b48424a5a93 +SHA512 (slurm-18.08.8.tar.bz2) = a5557cd043c2a48e652cbbca993420a756ecda80e40ed4ca2f55733050cf4b04477cfb5c8059db67168f5fa6d3fb93ac2c92f8b52b079971f634bd1956173ea0