File slurm.spec of Package slurm.13628

#
# spec file for package slurm
#
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


# Check file META in sources: update so_version to (API_CURRENT - API_AGE)
%define so_version 32
%define ver 17.11.13
# so-version is 0 and seems to be stable
%define pmi_so 0

# For anything newer than Leap 42.1 and SLE-12-SP1 build compatible to OpenHPC.
%if 0%{suse_version} > 1320 || 0%{?sle_version} >= 120200
%define OHPC_BUILD 1
%endif

%if 0%{?suse_version} >= 1220 || 0%{?sle_version} >= 120000
 %define with_systemd 1
%endif

%if 0
 %define have_netloc 1
%endif

%ifarch x86_64
 %define have_libnuma 1
%else
 %ifarch %{ix86} 
  %if 0%{?sle_version} >= 120200
   %define have_libnuma 1
  %endif
 %endif
%endif

%if 0%{?with_systemd}
 %define slurm_u %name
 %define slurm_g %name
%else
 %define slurm_u daemon
 %define slurm_g root
%endif

%define libslurm libslurm%{so_version}

Name:           slurm
Version:        %{ver}
Release:        0
Summary:        Simple Linux Utility for Resource Management
License:        SUSE-GPL-2.0-with-openssl-exception
Group:          Productivity/Clustering/Computing 
Url:            https://www.schedmd.com
Source:         https://download.schedmd.com/slurm/%{name}-%{ver}.tar.bz2
Source1:        slurm-rpmlintrc
Patch0:         slurm-2.4.4-rpath.patch
Patch1:         slurm-2.4.4-init.patch
Patch2:         pam_slurm-Initialize-arrays-and-pass-sizes.patch
Patch3:         split-xdaemon-in-xdaemon_init-and-xdaemon_finish-for.patch
Patch4:         slurmctld-uses-xdaemon_-for-systemd.patch
Patch5:         slurmd-uses-xdaemon_-for-systemd.patch
Patch6:         slurmdbd-uses-xdaemon_-for-systemd.patch
Patch7:         slurmsmwd-uses-xdaemon_-for-systemd.patch
Patch8:         removed-deprecated-xdaemon.patch
Patch9:         slurmctld-rerun-agent_init-when-backup-controller-takes-over.patch
Patch130:       Fix-contrib-perlapi-to-build-with-the-fix-for-CVE-2019-6438-750cc23ed.patch
Patch131:       Fix-CVE-2019-12838.patch
Patch132:       Do-not-ignore-errors-from-initgroups.patch
Patch133:       Do-not-continue-with-launch-if-_become_user-fails.patch
Patch134:       Simplify-logic-in-_become_user.patch

Requires:       slurm-config = %{version}
Requires:       slurm-node = %{version}
BuildRequires:  fdupes
BuildRequires:  gcc-c++
BuildRequires:  gtk2-devel
BuildRequires:  libbitmask-devel
BuildRequires:  libcpuset-devel
BuildRequires:  python
%if 0%{?have_libnuma}
BuildRequires:  libnuma-devel
%endif
BuildRequires:  mysql-devel >= 5.0.0
BuildRequires:  ncurses-devel
BuildRequires:  openssl-devel >= 0.9.6
BuildRequires:  pkgconfig
BuildRequires:  postgresql-devel >= 8.0.0
BuildRequires:  readline-devel
%if 0%{?suse_version} > 1310 || 0%{?sle_version}
BuildRequires:  libibmad-devel
BuildRequires:  libibumad-devel
%endif
%if 0%{?suse_version} > 1140
BuildRequires:  libhwloc-devel
%ifarch %{ix86} x86_64
BuildRequires:  freeipmi-devel
%endif
%endif
BuildRequires:  libssh2-devel
BuildRequires:  libjson-c-devel
%if 0%{?with_systemd}
%{?systemd_requires}
BuildRequires:  systemd
%else
Requires(post):         %insserv_prereq %fillup_prereq
%endif
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
Obsoletes:      slurm-sched-wiki < %{version}
Obsoletes:      slurmdb-direct < %{version} 

%description
SLURM is a fault-tolerant scalable cluster management and job
scheduling system for Linux clusters containing up to 65,536 nodes.
Components include machine status, partition management, job
management, scheduling and accounting modules.

%package doc
Summary:        Documentation for SLURM
Group:          Documentation/HTML

%description doc
Documentation (HTML) for the SLURM cluster managment software.

%package -n perl-slurm
Summary:        Perl API to SLURM
Group:          Development/Languages/Perl
Requires:       slurm = %{version}
%if 0%{?suse_version} < 1140
Requires:       perl = %{perl_version}
%else
%{perl_requires}
%endif

%description -n perl-slurm
This package includes the Perl API to provide an interface to SLURM
through Perl.

%package -n %{libslurm}
Summary:        Libraries for SLURM
Group:          System/Libraries
Requires:       %{name}-config = %{version}

%description -n %{libslurm}
This package contains the library needed to run programs dynamically linked
with SLURM.


%package -n libpmi%{pmi_so}
Summary:        Libraries for SLURM
Group:          System/Libraries

%description -n libpmi%{pmi_so}
This package contains the library needed to run programs dynamically linked
with SLURM.


%package devel
Summary:        Development package for SLURM
Group:          Development/Libraries/C and C++ 
Requires:       %{libslurm} = %{version}
Requires:       libpmi%{pmi_so} = %{version}
Requires:       slurm = %{version}

%description devel
This package includes the header files for the SLURM API.


%package auth-none
Summary:        SLURM auth NULL implementation (no authentication)
Group:          Productivity/Clustering/Computing
Requires:       slurm = %{version}

%description auth-none
This package cobtains the SLURM NULL authentication module.


%package munge
Summary:        SLURM authentication and crypto implementation using Munge
Group:          Productivity/Clustering/Computing
Requires:       munge
Requires:       slurm-plugins = %{version}
BuildRequires:  munge-devel
Obsoletes:      slurm-auth-munge < %{version}
Provides:       slurm-auth-munge = %{version}

%description munge
This package contains the SLURM authentication module for Chris Dunlap's Munge.

%package sview
Summary:        SLURM graphical interface
Group:          Productivity/Clustering/Computing

%description sview
sview is a graphical user interface to get and update state information for
jobs, partitions, and nodes managed by SLURM.


%package slurmdbd
Summary:        SLURM database daemon
Group:          Productivity/Clustering/Computing
Requires:       slurm-config = %{version}
Requires:       slurm-plugins = %{version}
Requires:       slurm-sql = %{version}
Recommends:     slurm-munge = %{version}
%if 0%{?with_systemd}
%{?systemd_requires}
%else
Requires(post):         %insserv_prereq %fillup_prereq
%endif
Obsoletes:      slurm-sched-wiki < %{version}
Obsoletes:      slurmdb-direct < %{version} 

%description slurmdbd
The SLURM database daemon provides accounting of jobs in a database.


%package sql
Summary:        Slurm SQL support
Group:          Productivity/Clustering/Computing

%description sql
Contains interfaces to MySQL for use by SLURM.


%package plugins
Summary:        SLURM plugins (loadable shared objects)
Group:          Productivity/Clustering/Computing

%description plugins
This package contains the SLURM plugins (loadable shared objects)

%package torque
Summary:        Wrappers for transitition from Torque/PBS to SLURM
Group:          Productivity/Clustering/Computing
Requires:       perl-Switch
Requires:       perl-slurm = %{version}
Provides:       torque-client

%description torque
Wrapper scripts for aiding migration from Torque/PBS to SLURM.

%package openlava
Summary:        Wrappers for transitition from OpenLava/LSF to Slurm
Group:          Productivity/Clustering/Computing
Requires:       perl-slurm = %{version}

%description openlava
Wrapper scripts for aiding migration from OpenLava/LSF to Slurm

%package seff
Summary:        Mail tool that includes job statistics in user notification email
Group:          Productivity/Clustering/Computing
Requires:       perl-slurm = %{version}

%description seff
Mail program used directly by the SLURM daemons. On completion of a job,
it waits for accounting information to be available and includes that
information in the email body.


%package sjstat
Summary:        Perl tool to print SLURM job state information
Group:          Productivity/Clustering/Computing
Requires:       slurm = %{version}
%if 0%{?suse_version} < 1140
Requires:       perl = %{perl_version}
%else
%{perl_requires}
%endif

%description sjstat
This package contains a Perl tool to print SLURM job state information.

%package pam_slurm
Summary:        PAM module for restricting access to compute nodes via SLURM
Group:          Productivity/Clustering/Computing
Requires:       slurm = %{version}
BuildRequires:  pam-devel

%description pam_slurm
This module restricts access to compute nodes in a cluster where the Simple
Linux Utility for Resource Managment (SLURM) is in use. Access is granted
to root, any user with an SLURM-launched job currently running on the node,
or any user who has allocated resources on the node according to the SLURM.

%package lua
Summary:        Lua API for SLURM
Group:          Development/Languages/Other
Requires:       slurm = %{version}
BuildRequires:  lua-devel

%description lua
This package includes the Lua API to provide an interface to SLURM
through Lua.

%package node
Summary:        Minimal slurm node 
Group:          Productivity/Clustering/Computing
Requires:       slurm-config = %{version}
Requires:       slurm-plugins = %{version}
Recommends:     %{name}-munge
%if 0%{?with_systemd}
%{?systemd_requires}
%else
Requires(post):         %insserv_prereq %fillup_prereq
%endif

%description node
This package contains just the minmal code to run a compute node.

%package config
Summary:        Config files and directories for slurm services
Group:          Productivity/Clustering/Computing
%if 0%{?suse_version} <= 1140
Requires(pre):  pwdutils
%else
Requires(pre):  shadow
%endif
%if 0%{?with_systemd}
%{?systemd_requires}
%endif

%description config
This package contains the slurm config files necessary direcories
for the slurm daemons.


%prep
%setup -q -n %{name}-%{ver}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
# Drop this fix as it is considered to be resolved by c1a537dbbe6
##%patch9 -p1
%patch130 -p1
%patch131 -p1
%patch132 -p1
%patch133 -p1
%patch134 -p1

%build
%configure --enable-shared \
           --disable-static \
           --without-rpath \
           --with-shared-libslurm \
%{!?have_netloc:--without-netloc} \
           --sysconfdir=%{_sysconfdir}/%{name}
make %{?_smp_mflags}

%install
%make_install
make install-contrib DESTDIR=%{buildroot} PERL_MM_PARAMS="INSTALLDIRS=vendor"

%if 0%{?with_systemd}
mkdir -p %{buildroot}%{_unitdir}
install -p -m644 etc/slurmd.service etc/slurmdbd.service etc/slurmctld.service %{buildroot}%{_unitdir}
ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcslurmd
ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcslurmdbd
ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcslurmctld
install -d -m 0755 %{buildroot}/%{_tmpfilesdir}/
cat <<-EOF > %{buildroot}/%{_tmpfilesdir}/%{name}.conf
	# Create a directory with permissions 0700 owned by user slurm, group slurm
	d /var/run/slurm 0700 slurm slurm
EOF
chmod 0644 %{buildroot}/%{_tmpfilesdir}/%{name}.conf
%else
install -D -m755 etc/init.d.slurm    %{buildroot}%{_initrddir}/slurm
install -D -m755 etc/init.d.slurmdbd %{buildroot}%{_initrddir}/slurmdbd
ln -sf %{_initrddir}/slurm %{buildroot}%{_sbindir}/rcslurm
ln -sf %{_initrddir}/slurmdbd %{buildroot}%{_sbindir}/rcslurmdbd
%endif
mkdir -p %{buildroot}%{_var}/spool/slurm

rm -f contribs/cray/opt_modulefiles_slurm
rm -f %{buildroot}%{_sysconfdir}/plugstack.conf.template
rm -f %{buildroot}%{_sysconfdir}/slurm.conf.template
rm -f %{buildroot}%{_sbindir}/capmc_suspend
rm -f %{buildroot}%{_sbindir}/capmc_resume
rm -f %{buildroot}%{_sbindir}/slurmconfgen.py

install -D -m644 etc/cgroup.conf.example %{buildroot}/%{_sysconfdir}/%{name}/cgroup.conf
install -D -m644 etc/cgroup_allowed_devices_file.conf.example %{buildroot}/%{_sysconfdir}/%{name}/cgroup_allowed_devices_file.conf
install -D -m644 etc/layouts.d.power.conf.example %{buildroot}/%{_sysconfdir}/%{name}/layouts.d/power.conf.example
install -D -m644 etc/layouts.d.power_cpufreq.conf.example %{buildroot}/%{_sysconfdir}/%{name}/layouts.d/power_cpufreq.conf.example
install -D -m644 etc/layouts.d.unit.conf.example %{buildroot}/%{_sysconfdir}/%{name}/layouts.d/unit.conf.example
install -D -m644 etc/slurm.conf.example %{buildroot}/%{_sysconfdir}/%{name}/slurm.conf%{?OHPC_BUILD:.example}
install -D -m755 etc/slurm.epilog.clean %{buildroot}%{_sysconfdir}/%{name}/slurm.epilog.clean
install -D -m600 etc/slurmdbd.conf.example %{buildroot}/%{_sysconfdir}/%{name}/slurmdbd.conf
install -D -m600 etc/slurmdbd.conf.example %{buildroot}%{_sysconfdir}/%{name}/slurmdbd.conf.example
install -D -m755 contribs/sjstat %{buildroot}%{_bindir}/sjstat
install -D -m755 contribs/sgather/sgather %{buildroot}%{_bindir}/sgather

cp contribs/pam_slurm_adopt/README ../README.pam_slurm_adopt
cp  contribs/pam/README ../README.pam_slurm
%if 0%{?OHPC_BUILD}
# change slurm.conf for our needs
head -n -2 %{buildroot}/%{_sysconfdir}/%{name}/slurm.conf.example | grep -v ReturnToService > %{buildroot}/%{_sysconfdir}/%{name}/slurm.conf
sed -i 's#\(StateSaveLocation=\).*#\1%_localstatedir/lib/slurm#'  %{buildroot}/%{_sysconfdir}/%{name}/slurm.conf
sed -i 's#^\(SlurmdPidFile=\).*$#\1%{_localstatedir}/run/slurm/slurmd.pid#' %{buildroot}/%{_sysconfdir}/%{name}/slurm.conf
sed -i 's#^\(SlurmctldPidFile=\).*$#\1%{_localstatedir}/run/slurm/slurmctld.pid#' %{buildroot}/%{_sysconfdir}/%{name}/slurm.conf
sed -i 's#^\(SlurmdSpoolDir=\)/.*#\1%{_localstatedir}/spool/slurm#' %{buildroot}/%{_sysconfdir}/%{name}/slurm.conf
cat >>%{buildroot}/%{_sysconfdir}/%{name}/slurm.conf <<EOF 
# SUSE default configuration
PropagateResourceLimitsExcept=MEMLOCK
# Epilog will clean node, which means it will kill all remaining processes of the user
Epilog=/etc/slurm/slurm.epilog.clean
NodeName=linux State=UNKNOWN
PartitionName=normal Nodes=linux Default=YES MaxTime=24:00:00 State=UP
EOF
# 9/17/14 karl.w.schulz@intel.com - Add option to drop VM cache during epilog
sed -i '/^# No other SLURM jobs,/i \\n# Drop clean caches (OpenHPC)\necho 3 > /proc/sys/vm/drop_caches\n\n#' %{buildroot}/%{_sysconfdir}/%{name}/slurm.epilog.clean
# change slurmdbd.conf for our needs
sed -i 's@LogFile=/var/log/slurm/slurmdbd.log@LogFile=/var/log/slurmdbd.log@'\
 %{buildroot}/%{_sysconfdir}/%{name}/slurmdbd.conf
sed -i -e "s@PidFile=.*@PidFile=%{_localstatedir}/run/slurm/slurmdbd.pid@" \
 %{buildroot}/%{_sysconfdir}/%{name}/slurmdbd.conf
# manage local state dir and a remote states save location
mkdir -p %{buildroot}/%_localstatedir/lib/slurm
sed -i -e "s@PIDFile=.*@PIDFile=%{_localstatedir}/run/slurm/slurmctld.pid@" \
 -e "s@After=.*@After=network.target munge.service remote-fs.target@" \
 %{buildroot}/%{_unitdir}/slurmctld.service
sed -i -e "s@PIDFile=.*@PIDFile=%{_localstatedir}/run/slurm/slurmd.pid@" \
 %{buildroot}/%{_unitdir}/slurmd.service
sed -i -e "s@PIDFile=.*@PIDFile=%{_localstatedir}/run/slurm/slurmdbd.pid@" \
 %{buildroot}/%{_unitdir}/slurmdbd.service
%endif

# Delete unpackaged files:
rm   -f %{buildroot}/%{_libdir}/%{name}/burst_buffer_cray.so
rm   -f %{buildroot}/%{_libdir}/%{name}/node_features_knl_cray.so
rm   -f %{buildroot}/%{_libdir}/%{name}/power_cray.so

test -s %{buildroot}/%{_perldir}/auto/Slurm/Slurm.bs         ||
rm   -f %{buildroot}/%{_perldir}/auto/Slurm/Slurm.bs

test -s %{buildroot}/%{_perldir}/auto/Slurmdb/Slurmdb.bs     ||
rm   -f %{buildroot}/%{_perldir}/auto/Slurmdb/Slurmdb.bs

rm -rf %{buildroot}/%{_libdir}/slurm/*.{a,la} \
       %{buildroot}/%{_libdir}/*.la \
       %{buildroot}/%_lib/security/*.la \
       %{buildroot}/%{_mandir}/man5/bluegene*

rm -f %{buildroot}/%{_mandir}/man1/srun_cr* \
      %{buildroot}/%{_bindir}/srun_cr \
      %{buildroot}/%{_libexecdir}/slurm/cr_*

rm doc/html/shtml2html.py doc/html/Makefile*

rm -f %{buildroot}/%{perl_archlib}/perllocal.pod
rm -f %{buildroot}/%{perl_vendorarch}/auto/Slurm/.packlist
rm -f %{buildroot}/%{perl_vendorarch}/auto/Slurmdb/.packlist

# Build man pages that are generated directly by the tools
rm -f %{buildroot}/%{_mandir}/man1/sjobexitmod.1
%{buildroot}%{_bindir}/sjobexitmod --roff > %{buildroot}/%{_mandir}/man1/sjobexitmod.1
rm -f %{buildroot}/%{_mandir}/man1/sjstat.1
%{buildroot}%{_bindir}/sjstat --roff > %{buildroot}/%{_mandir}/man1/sjstat.1

# rpmlint reports wrong end of line for those files
sed -i 's/\r$//' %{buildroot}/%{_bindir}/qrerun
sed -i 's/\r$//' %{buildroot}/%{_bindir}/qalter

# avoid conflicts with other packages, make wrapper unique
mv %{buildroot}/%{_bindir}/mpiexec %{buildroot}/%{_bindir}/mpiexec.slurm

mkdir -p %{buildroot}/etc/ld.so.conf.d
echo '%{_libdir}                                                                                            
%{_libdir}/slurm' > %{buildroot}/etc/ld.so.conf.d/slurm.conf
chmod 644 %{buildroot}/etc/ld.so.conf.d/slurm.conf

# Make pkg-config file                                                                                      
mkdir -p %{buildroot}/%{_libdir}/pkgconfig
cat > %{buildroot}/%{_libdir}/pkgconfig/slurm.pc <<EOF
includedir=%{_prefix}/include
libdir=%{_libdir}

Cflags: -I\${includedir}
Libs: -L\${libdir} -lslurm
Description: Slurm API
Name: %{name}
Version: %{version}
EOF

%fdupes -s %{buildroot}

%define fixperm() [ $1 -eq 1 -a -e %2 ] && /bin/chmod %1 %2

%pre
%if 0%{?with_systemd}
%service_add_pre slurmctld.service
%endif

%post
%if 0%{?with_systemd}
%service_add_post slurmctld.service
%else
%fillup_and_insserv slurm
%endif

%preun
%if 0%{?with_systemd}
%service_del_preun slurmctld.service
%endif

%postun
%if 0%{?with_systemd}
%service_del_postun -n slurmctld.service
%else
%insserv_cleanup
%endif

%if 0%{?with_systemd}
%pre slurmdbd
%service_add_pre slurmdbd.service
%endif

%post slurmdbd
%{fixperm 0600 %{_sysconfdir}/%{pname}/slurmdbd.conf}
%{fixperm 0600 %{_sysconfdir}/%{pname}/slurmdbd.conf.examle}
%if 0%{?with_systemd}
%service_add_post slurmdbd.service
%else
%fillup_and_insserv slurmdbd
%endif

%preun slurmdbd
%if 0%{?with_systemd}
%service_del_preun slurmdbd.service
%else
%stop_on_removal slurmdbd
%endif

%postun slurmdbd
%{fixperm 0600 %{_sysconfdir}/%{pname}/slurmdbd.conf}
%{fixperm 0600 %{_sysconfdir}/%{pname}/slurmdbd.conf.example}
%if 0%{?with_systemd}
%service_del_postun -n slurmdbd.service
%else
%restart_on_update slurmdbd
%insserv_cleanup
%endif

%pre node
%if 0%{?with_systemd}
%service_add_pre slurmd.service
%endif

%post node
%if 0%{?with_systemd}
%service_add_post slurmd.service
%endif

%preun node
%if 0%{?with_systemd}
%service_del_preun slurmd.service
%else
%stop_on_removal slurmd
%endif

%postun node
%if 0%{?with_systemd}
%service_del_postun -n slurmd.service
%else
%restart_on_update slurmd
%insserv_cleanup
%endif 

%pre config
%define slurmdir %{_sysconfdir}/slurm
%define slurmdescr "SLURM workload manager"
getent group %slurm_g >/dev/null || groupadd -r %slurm_g
getent passwd %slurm_u >/dev/null || useradd -r -g %slurm_g -d %slurmdir -s /bin/false -c %{slurmdescr} %slurm_u
[ -d %{_localstatedir}/spool/slurm ] && /bin/chown -h %slurm_u:%slurm_g %{_localstatedir}/spool/slurm
exit 0

%post config
%if 0%{?with_systemd}
%if 0%{?tmpfiles_create:1}
  %tmpfiles_create slurm.conf
%else
  systemd-tmpfiles --create slurm.conf
%endif
%endif

%post -n %{libslurm} -p /sbin/ldconfig
%postun -n %{libslurm} -p /sbin/ldconfig

%post -n  libpmi%{pmi_so} -p /sbin/ldconfig
%postun -n  libpmi%{pmi_so} -p /sbin/ldconfig

%{!?nil:
# On update the %%postun code of the old package restarts the
# service. This breaks in case the ABI between slurm and its
# plugins has changed as updates are not atomic. Since we cannot
# fix the old scripts we need these macros as a workaround.
# They should be removed at some point.
# Do pretrans in lua: https://fedoraproject.org/wiki/Packaging:Scriptlets
}
%define _test_rest() %{?with_systemd: os.remove("/run/%{1}.rst")
 if os.execute() and os.getenv("YAST_IS_RUNNING") ~= "instsys" then
  if os.execute("systemctl status %{1} &>/dev/null") then 
    f=io.open("/run/%{1}.rst","w"); f:close() 
  end
 end
}
%define _rest() %{?with_systemd:[ -e /run/%{1}.rst ] && { systemctl status %{1} &>/dev/null || systemctl restart %{1}; }; rm -f /run/%{1}.rst;}
%{!?nil:
# Until a posttrans macro has been added to macros.systemd, we need this
# Do NOT delete the line breaks in the macro definition: they help
# to cope with different versions of the %_restart_on_update.
}
%define _res_update() %{?with_systemd: 
 %{expand:%%_restart_on_update %{?*}}
}

%pretrans -p <lua>
%_test_rest slurmctld

%pretrans node -p <lua>
%_test_rest slurmd

%pretrans slurmdbd -p <lua>
%_test_rest slurmdbd

%posttrans
%_res_update slurmctld
%_rest slurmctld

%posttrans node
%_res_update slurmd
%_rest slurmd

%posttrans slurmdbd
%_res_update slurmdbd.service
%_rest slurmdbd

%if 0%{?sle_version} > 120200 || 0%{?suse_version} > 1320
%define my_license %license 
%else 
%define my_license %doc 
%endif

%files
%defattr(-,root,root)
%doc AUTHORS NEWS RELEASE_NOTES DISCLAIMER
%my_license COPYING
%doc doc/html
%{_bindir}/sacct
%{_bindir}/sacctmgr
%{_bindir}/salloc
%{_bindir}/sattach
%{_bindir}/sbatch
%{_bindir}/sbcast
%{_bindir}/scancel
%{_bindir}/scontrol
%{_bindir}/sdiag
%{_bindir}/sgather
%{_bindir}/sinfo
%{_bindir}/sjobexitmod
%{_bindir}/sprio
%{_bindir}/squeue
%{_bindir}/sreport
%{_bindir}/smap
%{_bindir}/sshare
%{_bindir}/sstat
%{_bindir}/strigger
%{?have_netloc:%{_bindir}/netloc_to_topology}
%{_sbindir}/slurmctld
%{_sbindir}/slurmsmwd
%{_mandir}/man1/sacct.1*
%{_mandir}/man1/sacctmgr.1*
%{_mandir}/man1/salloc.1*
%{_mandir}/man1/sattach.1*
%{_mandir}/man1/sbatch.1*
%{_mandir}/man1/sbcast.1*
%{_mandir}/man1/scancel.1*
%{_mandir}/man1/scontrol.1*
%{_mandir}/man1/sdiag.1.*
%{_mandir}/man1/sgather.1.*
%{_mandir}/man1/sinfo.1*
%{_mandir}/man1/slurm.1*
%{_mandir}/man1/smap.1*
%{_mandir}/man1/sprio.1*
%{_mandir}/man1/squeue.1*
%{_mandir}/man1/sreport.1*
%{_mandir}/man1/sshare.1*
%{_mandir}/man1/sstat.1*
%{_mandir}/man1/strigger.1*
%{_mandir}/man1/sjobexitmod.1.*
%{_mandir}/man1/sjstat.1.*
%{_mandir}/man5/acct_gather.conf.*
%{_mandir}/man5/burst_buffer.conf.*
%{_mandir}/man5/ext_sensors.conf.*
%{_mandir}/man5/slurm.*
%{_mandir}/man5/cgroup.*
%{_mandir}/man5/cray.*
%{_mandir}/man5/gres.*
%{_mandir}/man5/nonstop.conf.5.*
%{_mandir}/man5/topology.*
%{_mandir}/man5/knl.conf.5.*
%{_mandir}/man8/slurmctld.*
%{_mandir}/man8/spank*
%dir %{_libdir}/slurm/src
%if 0%{?with_systemd}
%{_unitdir}/slurmctld.service
%{_sbindir}/rcslurmctld
%endif

%files openlava
%defattr(-,root,root)
%{_bindir}/bjobs
%{_bindir}/bkill
%{_bindir}/bsub
%{_bindir}/lsid

%files seff
%defattr(-,root,root)
%{_bindir}/seff
%{_bindir}/smail

%files doc
%defattr(-,root,root)
%dir %{_datadir}/doc/%{name}-%{version}
%{_datadir}/doc/%{name}-%{version}/*

%files -n %{libslurm}
%defattr(-,root,root)
%{_libdir}/libslurm*.so.%{so_version}*

%files -n libpmi%{pmi_so}
%defattr(-,root,root)
%{_libdir}/libpmi*.so.%{pmi_so}*

%files devel
%defattr(-,root,root)
%{_prefix}/include/slurm
%{_libdir}/libpmi.so
%{_libdir}/libpmi2.so
%{_libdir}/libslurm.so
%{_libdir}/libslurmdb.so
%{_libdir}/slurm/src/*
%{_mandir}/man3/slurm_*
%{_libdir}/pkgconfig/slurm.pc

%files sview
%defattr(-,root,root)
%{_bindir}/sview
%{_mandir}/man1/sview.1*

%files auth-none
%defattr(-,root,root)
%{_libdir}/slurm/auth_none.so

%files munge
%defattr(-,root,root)
%{_libdir}/slurm/auth_munge.so
%{_libdir}/slurm/crypto_munge.so

%files -n perl-slurm
%defattr(-,root,root)
%{perl_vendorarch}/Slurm.pm
%{perl_vendorarch}/Slurm
%{perl_vendorarch}/auto/Slurm
%{perl_vendorarch}/Slurmdb.pm
%{perl_vendorarch}/auto/Slurmdb
%{_mandir}/man3/Slurm*.3pm.*

%files slurmdbd
%defattr(-,root,root)
%{_sbindir}/slurmdbd
%{_mandir}/man5/slurmdbd.*
%{_mandir}/man8/slurmdbd.*
%config(noreplace) %attr(0600,%slurm_u,%slurm_g) %{_sysconfdir}/%{name}/slurmdbd.conf
%attr(0600,%slurm_u,%slurm_g) %{_sysconfdir}/%{name}/slurmdbd.conf.example
%if 0%{?with_systemd}
%{_unitdir}/slurmdbd.service
%else
%{_initrddir}/slurmdbd
%endif
%{_sbindir}/rcslurmdbd

%files sql
%defattr(-,root,root)
%dir %{_libdir}/slurm
%{_libdir}/slurm/accounting_storage_mysql.so
%{_libdir}/slurm/jobcomp_mysql.so

%files plugins
%defattr(-,root,root)
%config %{_sysconfdir}/ld.so.conf.d/slurm.conf
%dir %{_libdir}/slurm
%{_libdir}/slurm/libslurmfull.so
%{_libdir}/slurm/accounting_storage_filetxt.so
%{_libdir}/slurm/accounting_storage_none.so
%{_libdir}/slurm/accounting_storage_slurmdbd.so
%{_libdir}/slurm/acct_gather_energy_cray.so
%{_libdir}/slurm/acct_gather_energy_ibmaem.so
%{_libdir}/slurm/acct_gather_energy_none.so
%{_libdir}/slurm/acct_gather_energy_rapl.so
%{_libdir}/slurm/acct_gather_filesystem_lustre.so
%{_libdir}/slurm/acct_gather_filesystem_none.so
%{_libdir}/slurm/acct_gather_interconnect_none.so
%{_libdir}/slurm/acct_gather_profile_none.so
%{_libdir}/slurm/burst_buffer_generic.so
%{_libdir}/slurm/checkpoint_none.so
%{_libdir}/slurm/checkpoint_ompi.so
%{_libdir}/slurm/core_spec_cray.so
%{_libdir}/slurm/core_spec_none.so
%{_libdir}/slurm/crypto_openssl.so
%{_libdir}/slurm/ext_sensors_none.so
%{_libdir}/slurm/gres_gpu.so
%{_libdir}/slurm/gres_mic.so
%{_libdir}/slurm/gres_nic.so
%{_libdir}/slurm/jobacct_gather_cgroup.so
%{_libdir}/slurm/jobacct_gather_linux.so
%{_libdir}/slurm/jobacct_gather_none.so
%{_libdir}/slurm/jobcomp_filetxt.so
%{_libdir}/slurm/jobcomp_none.so
%{_libdir}/slurm/jobcomp_script.so
%{_libdir}/slurm/job_container_cncu.so
%{_libdir}/slurm/job_container_none.so
%{_libdir}/slurm/job_submit_all_partitions.so
%{_libdir}/slurm/job_submit_cray.so
%{_libdir}/slurm/job_submit_defaults.so
%{_libdir}/slurm/job_submit_logging.so
%{_libdir}/slurm/job_submit_partition.so
%{_libdir}/slurm/job_submit_require_timelimit.so
%{_libdir}/slurm/job_submit_throttle.so
%{_libdir}/slurm/launch_slurm.so
%{_libdir}/slurm/layouts_power_cpufreq.so
%{_libdir}/slurm/layouts_power_default.so
%{_libdir}/slurm/layouts_unit_default.so
%{_libdir}/slurm/mcs_account.so
%{_libdir}/slurm/mcs_group.so
%{_libdir}/slurm/mcs_none.so
%{_libdir}/slurm/mcs_user.so
%{_libdir}/slurm/mpi_none.so
%{_libdir}/slurm/mpi_openmpi.so
%{_libdir}/slurm/mpi_pmi2.so
%{_libdir}/slurm/power_none.so
%{_libdir}/slurm/preempt_job_prio.so
%{_libdir}/slurm/preempt_none.so
%{_libdir}/slurm/preempt_partition_prio.so
%{_libdir}/slurm/preempt_qos.so
%{_libdir}/slurm/priority_basic.so
%{_libdir}/slurm/priority_multifactor.so
%{_libdir}/slurm/proctrack_cgroup.so
%{_libdir}/slurm/proctrack_linuxproc.so
%{_libdir}/slurm/proctrack_pgid.so
%{_libdir}/slurm/route_default.so
%{_libdir}/slurm/route_topology.so
%{_libdir}/slurm/sched_backfill.so
%{_libdir}/slurm/sched_builtin.so
%{_libdir}/slurm/sched_hold.so
%{_libdir}/slurm/select_alps.so
%{_libdir}/slurm/select_bluegene.so
%{_libdir}/slurm/select_cons_res.so
%{_libdir}/slurm/select_cray.so
%{_libdir}/slurm/select_linear.so
%{_libdir}/slurm/select_serial.so
%{_libdir}/slurm/slurmctld_nonstop.so
%{_libdir}/slurm/switch_cray.so
%{_libdir}/slurm/switch_generic.so
%{_libdir}/slurm/switch_none.so
%{_libdir}/slurm/task_affinity.so
%{_libdir}/slurm/task_cgroup.so
%{_libdir}/slurm/task_cray.so
%{_libdir}/slurm/task_none.so
%{_libdir}/slurm/topology_3d_torus.so
%{_libdir}/slurm/topology_hypercube.so
%{_libdir}/slurm/topology_node_rank.so
%{_libdir}/slurm/topology_none.so
%{_libdir}/slurm/topology_tree.so
%if 0%{?suse_version} > 1310
%{_libdir}/slurm/acct_gather_interconnect_ofed.so
%endif
%if 0%{?suse_version} > 1140
%ifarch %{ix86} x86_64
%{_libdir}/slurm/acct_gather_energy_ipmi.so
%endif
%endif
%{_libdir}/slurm/node_features_knl_generic.so

%files lua
%defattr(-,root,root)
%{_libdir}/slurm/job_submit_lua.so
%{_libdir}/slurm/proctrack_lua.so

%files torque
%defattr(-,root,root)
%{_bindir}/pbsnodes
%{_bindir}/qalter
%{_bindir}/qdel
%{_bindir}/qhold
%{_bindir}/qrls
%{_bindir}/qrerun
%{_bindir}/qstat
%{_bindir}/qsub
%{_bindir}/mpiexec.slurm
%{_bindir}/generate_pbs_nodefile
%{_libdir}/slurm/job_submit_pbs.so
%{_libdir}/slurm/spank_pbs.so

%files sjstat
%defattr(-,root,root)
%{_bindir}/sjstat

%files pam_slurm
%defattr(-,root,root)
%doc ../README.pam_slurm ../README.pam_slurm_adopt
/%_lib/security/pam_slurm.so
/%_lib/security/pam_slurm_adopt.so

%files node
%{_sbindir}/slurmd
%{_sbindir}/slurmstepd
%{_mandir}/man8/slurmd.*
%{_mandir}/man8/slurmstepd*
# bsc#1153095
%{_bindir}/srun
%{_mandir}/man1/srun.1*
%if 0%{?with_systemd}
%{_sbindir}/rcslurmd
%{_unitdir}/slurmd.service
%else
%{_initrddir}/slurm
%{_sbindir}/rcslurm
%endif

%files config
%dir %{_sysconfdir}/%{name}
%dir %{_sysconfdir}/%{name}/layouts.d
%config(noreplace) %{_sysconfdir}/%{name}/slurm.conf
%{?OHPC_BUILD:%config %{_sysconfdir}/%{name}/slurm.conf.example}
%config(noreplace) %{_sysconfdir}/%{name}/cgroup.conf
%config(noreplace) %{_sysconfdir}/%{name}/cgroup_allowed_devices_file.conf
%config(noreplace) %{_sysconfdir}/%{name}/slurm.epilog.clean
%config(noreplace) %{_sysconfdir}/%{name}/layouts.d/power.conf.example
%config(noreplace) %{_sysconfdir}/%{name}/layouts.d/power_cpufreq.conf.example
%config(noreplace) %{_sysconfdir}/%{name}/layouts.d/unit.conf.example
%{?OHPC_BUILD:%attr(0755, %slurm_u, %slurm_g) %_localstatedir/lib/slurm}
%{?with_systemd:%{_tmpfilesdir}/%{name}.conf}
%dir %attr(0755, %slurm_u, %slurm_g)%{_localstatedir}/spool/slurm

%changelog