Christian Goll
0ecd3ddaef
move from staging to devel repo OBS-URL: https://build.opensuse.org/request/show/849456 OBS-URL: https://build.opensuse.org/package/show/network:cluster/spack?expand=0&rev=1
283 lines
9.9 KiB
RPMSpec
283 lines
9.9 KiB
RPMSpec
#
|
|
# spec file for package spack
|
|
#
|
|
# Copyright (c) 2020 SUSE LLC
|
|
#
|
|
# 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 https://bugs.opensuse.org/
|
|
#
|
|
|
|
%define spack_dir %_prefix/lib/spack/
|
|
%define spack_group spack
|
|
|
|
Name: spack
|
|
Version: 0.15.4
|
|
Release: 0
|
|
Summary: Package manager for HPC systems
|
|
License: Apache-2.0 AND MIT AND Python-2.0 AND BSD-3-Clause
|
|
URL: https://spack.io
|
|
Source0: https://github.com/spack/spack/archive/v%{version}.tar.gz#/spack-%{version}.tar.gz
|
|
Patch0: Make-spack-paths-compliant-to-distro-installation.patch
|
|
Patch1: fix-tumbleweed-naming.patch
|
|
BuildRequires: polkit
|
|
BuildRequires: fdupes
|
|
BuildRequires: python-base
|
|
BuildRequires: lua-lmod
|
|
Requires: %{name}-recipes = %{version}
|
|
Requires: curl
|
|
Requires: lua-lmod
|
|
Requires: pattern() = devel_basis
|
|
Requires: polkit
|
|
Requires: gcc-fortran
|
|
Requires: gpg2
|
|
Requires: xz
|
|
Requires: bzip2
|
|
Requires: spack-recipes
|
|
Recommends: spack-recipes = %version
|
|
BuildArch: noarch
|
|
%if 0%{?sle_version} <= 120500 && !0%{?is_opensuse}
|
|
%define __python3 python3
|
|
%endif
|
|
|
|
|
|
%description
|
|
Spack is a configurable Python-based HPC package manager, automating
|
|
the installation and fine-tuning of simulations and libraries.
|
|
It operates on a wide variety of HPC platforms and enables users
|
|
to build many code configurations. Software installed by Spack
|
|
runs correctly regardless of environment, and file management
|
|
is streamlined. Spack can install many variants of the same build
|
|
using different compilers, options, and MPI implementations.
|
|
|
|
This package provides a module file that must be loaded to use spack.
|
|
|
|
|
|
%package recipes
|
|
Summary: Spack built-in package recipes
|
|
Requires: %{name} >= %version
|
|
|
|
%description recipes
|
|
Spack is a configurable Python-based HPC package manager, automating
|
|
the installation and fine-tuning of simulations and libraries.
|
|
It operates on a wide variety of HPC platforms and enables users
|
|
to build many code configurations. Software installed by Spack
|
|
runs correctly regardless of environment, and file management
|
|
is streamlined. Spack can install many variants of the same build
|
|
using different compilers, options, and MPI implementations.
|
|
|
|
This package contains the built-in package recipes.
|
|
|
|
|
|
%prep
|
|
%setup -q
|
|
%autopatch -p1
|
|
|
|
%build
|
|
# Nothing to build
|
|
|
|
|
|
%install
|
|
|
|
# Fix some rpmlint warnings
|
|
## Remove files not required to run spack
|
|
rm -rf lib/spack/spack/test
|
|
rm -rf share/spack/qa
|
|
rm -rf var/spack/repos/builtin.mock var/spack/gpg.mock var/spack/mock_configs
|
|
rm -rf lib/spack/external/ruamel/yaml/.ruamel
|
|
find . -type f -name .gitignore -delete
|
|
find . -type f -name .nojekyll -delete
|
|
rm -f lib/spack/docs/_spack_root
|
|
ln -sf ../.. lib/spack/docs/_spack_root
|
|
## No need for the standalone scripts
|
|
rm -f lib/spack/external/macholib/macho_*.py
|
|
## Fix shebangs
|
|
sed -i 's@#!/bin/env sh@#!/bin/bash@' var/spack/repos/builtin/packages/beast-tracer/tracer
|
|
sed -i 's@#!/usr/bin/env bash@#!/bin/bash@' share/spack/docker/package-index/split.sh
|
|
sed -i 's@#! /usr/bin/env bash@ #!/bin/bash@' share/spack/docker/entrypoint.bash
|
|
|
|
mkdir -p %{buildroot}%{spack_dir}
|
|
mkdir -p %{buildroot}%{spack_dir}/opt
|
|
mkdir -p %{buildroot}%{spack_dir}/bin
|
|
mkdir -p %{buildroot}%{_datarootdir}/spack
|
|
mkdir -p %{buildroot}%{_datarootdir}/spack/modules
|
|
mkdir -p %{buildroot}%{_localstatedir}/lib/spack
|
|
mkdir -p %{buildroot}%{_localstatedir}/lib/spack/junit-report
|
|
mkdir -p %{buildroot}%{_localstatedir}/cache/spack
|
|
mkdir -p %{buildroot}%{_sysconfdir}/skel/.spack/
|
|
mkdir -p %{buildroot}/%{_bindir}
|
|
ln -sf %{buildroot}/%{_localstatedir}/cache/spack %{buildroot}%{_localstatedir}/lib/spack/cache
|
|
|
|
# Copy files to corresponding paths
|
|
cp -r etc lib %{buildroot}%{spack_dir}
|
|
cp -r share/spack/* %{buildroot}%{_datarootdir}/spack
|
|
cp -r var/spack/* %{buildroot}%{_localstatedir}/lib/spack
|
|
cp -r bin/sbang %{buildroot}/%{_bindir}
|
|
cp -r bin/spack* %{buildroot}%{spack_dir}/bin
|
|
cp etc/spack/defaults/config.yaml %{buildroot}%{_sysconfdir}/skel/.spack/
|
|
|
|
sed -i 's@\(\sinstall_tree:\).*@\1 ~/spack/packages@' %{buildroot}%{_sysconfdir}/skel/.spack/config.yaml
|
|
sed -i 's@\(\ssource_cache:\).*@\1 /var/tmp/$user/spack-cache@' %{buildroot}%{_sysconfdir}/skel/.spack/config.yaml
|
|
sed -i 's@\(\stcl:\).*@\1 ~/spack/modules@' %{buildroot}%{_sysconfdir}/skel/.spack/config.yaml
|
|
sed -i 's@\(\slmod:\).*@\1 ~/spack/lmod@' %{buildroot}%{_sysconfdir}/skel/.spack/config.yaml
|
|
|
|
|
|
# create spack scripts
|
|
echo -e '#!/bin/bash\n\nexec %{spack_dir}bin/$(basename $0) "${1+$@}"' > \
|
|
%{buildroot}%{_bindir}/spack
|
|
chmod 0755 %{buildroot}%{_bindir}/spack
|
|
ln -s spack %{buildroot}%{_bindir}/spack-python
|
|
ln -s %{_bindir}/sbang %{buildroot}%{spack_dir}/bin/sbang
|
|
|
|
# compile python files for python3
|
|
%py_compile .
|
|
|
|
# make shell scripts executeable
|
|
find %{buildroot}%{_localstatedir}/lib/spack/ -type f -name \*.sh -exec chmod 755 {} \;
|
|
|
|
# Create /etc/spack/compilers.yaml
|
|
mkdir -p %{buildroot}%{spack_dir}/etc/spack/
|
|
cat > %{buildroot}%{spack_dir}/etc/spack/compilers.yaml <<EOF
|
|
compilers:
|
|
- compiler:
|
|
spec: gcc@GCC_FULL_VERSION
|
|
paths:
|
|
cc: /usr/bin/gcc-GCC_VERSION
|
|
cxx: /usr/bin/g++-GCC_VERSION
|
|
f77: /usr/bin/gfortran-GCC_VERSION
|
|
fc: /usr/bin/gfortran-GCC_VERSION
|
|
flags: {}
|
|
operating_system: SUSE_VERSION
|
|
target: HOSTTYPE
|
|
modules: []
|
|
environment:
|
|
unset: []
|
|
extra_rpaths: []
|
|
EOF
|
|
|
|
# Create /etc/profile.d/spack.sh
|
|
# This file properly sets MODULEPATH so lua-lmod can find the modules created by spack
|
|
mkdir -p %{buildroot}/%{_sysconfdir}/profile.d
|
|
cat > %{buildroot}/%{_sysconfdir}/profile.d/spack.sh <<EOF
|
|
source /etc/os-release
|
|
if [ "\${ID}" == "opensuse-tumbleweed" ] ; then
|
|
SPACK_NAME="\${ID/-/}"
|
|
else
|
|
SPACK_NAME="\${ID/-/_}\${VERSION_ID/.*/}"
|
|
fi
|
|
export SPACK_ROOT=%{spack_dir}
|
|
export MODULEPATH=~/spack/lmod/linux-\${SPACK_NAME}-\${CPU}:%{_prefix}/share/spack/lmod/linux-\${SPACK_NAME}-\${CPU}:\${MODULEPATH}
|
|
# copy local configuration, if its not there
|
|
if [ ! -e ~/.spack/config.yaml ] ; then
|
|
# test if user is in spack group by touching database
|
|
if ! touch %{spack_dir}/.spack-db &> /dev/null ; then
|
|
test -e ~/.spack || mkdir -p ~/.spack
|
|
[ -e ~/.spack/config.yaml ] || \
|
|
cp -r %{_sysconfdir}/skel/.spack/config.yaml ~/.spack/
|
|
fi
|
|
fi
|
|
EOF
|
|
# Same for csh
|
|
cat > %{buildroot}/%{_sysconfdir}/profile.d/spack.csh <<EOF
|
|
# get ID
|
|
eval \`awk '/^ID=/ {sub("-","_"); printf("set %%s",\$0);}' /etc/os-release\`
|
|
# get VERSION_ID
|
|
eval \`awk '/^VERSION_ID=/ {sub("\\\\.[0-9]",""); printf("set %%s",\$0);}' /etc/os-release\`
|
|
if ( \$ID == "opensuse_tumbleweed" ) then
|
|
eval \`awk '/^ID=/ {sub("-",""); printf("set %%s",\$0);}' /etc/os-release\`
|
|
set SPACK_NAME=\$ID
|
|
else
|
|
set SPACK_NAME="\${ID}\${VERSION_ID}"
|
|
endif
|
|
set SPACK_ROOT="%{spack_dir}"
|
|
set MODULEPATH="~/spack/lmod/linux-\${SPACK_NAME}-\${CPU}:%{_prefix}/share/spack/lmod/linux-\${SPACK_NAME}-\${CPU}:\${MODULEPATH}"
|
|
if ( ! -e ~/.spack/config.yaml ) then
|
|
# test if user is in spack group by touching database
|
|
touch %{spack_dir}/.spack-db >& /dev/null
|
|
if ( \$? == 1 ) then
|
|
test -e ~/.spack || mkdir -p ~/.spack
|
|
test -e ~/.spack/config.yaml || \
|
|
cp -r %{_sysconfdir}/skel/.spack/config.yaml ~/.spack/
|
|
endif
|
|
endif
|
|
|
|
EOF
|
|
# Create modules.yaml file, so that hierarchy module files are created
|
|
cat > %{buildroot}%{spack_dir}/etc/spack/modules.yaml <<EOF
|
|
modules:
|
|
enable:
|
|
- lmod
|
|
lmod:
|
|
core_compilers:
|
|
- 'gcc@GCC_FULL_VERSION'
|
|
projections:
|
|
all: '{compiler.name}-{compiler.version}/{name}/{version}'
|
|
^mpi: '{compiler.name}-{compiler.version}/{^mpi.name}-{^mpi.version}/{name}/{version}'
|
|
EOF
|
|
|
|
# Fix link to not point into buildroot
|
|
rm -f %{buildroot}%{_localstatedir}/lib/spack/cache
|
|
ln -sf %{_localstatedir}/cache/spack %{buildroot}%{_localstatedir}/lib/spack/cache
|
|
%fdupes %{buildroot}%{spack_dir}
|
|
%fdupes %{buildroot}%{_datarootdir}/spack
|
|
%fdupes %{buildroot}%{_localstatedir}/lib/spack
|
|
|
|
%pre
|
|
getent group %spack_group >/dev/null || groupadd -r %spack_group
|
|
|
|
|
|
%post
|
|
# Replace /etc/spack/compilers.yaml
|
|
export GCC_VERSION=`gcc -dumpversion`
|
|
export GCC_FULL_VERSION=`gcc -dumpfullversion`
|
|
|
|
sed -i "s@GCC_FULL_VERSION@$GCC_FULL_VERSION@" %{spack_dir}/etc/spack/compilers.yaml
|
|
sed -i "s@GCC_FULL_VERSION@$GCC_FULL_VERSION@" %{spack_dir}/etc/spack/modules.yaml
|
|
sed -i "s@GCC_VERSION@$GCC_VERSION@" %{spack_dir}/etc/spack/compilers.yaml
|
|
if [ -e /etc/os-release ] ; then
|
|
source /etc/os-release
|
|
if [ "${ID}" == "opensuse-tumbleweed" ] ; then
|
|
export SPACK_NAME="${ID/-/}"
|
|
else
|
|
export SPACK_NAME="${ID/-/_}${VERSION_ID/.*/}"
|
|
fi
|
|
sed -i "s@SUSE_VERSION@$SPACK_NAME@" %{spack_dir}/etc/spack/compilers.yaml
|
|
sed -i "s@SUSE_VERSION@$SPACK_NAME@g" /etc/profile.d/spack.sh
|
|
fi
|
|
sed -i "s@HOSTTYPE@$HOSTTYPE@" %{spack_dir}/etc/spack/compilers.yaml
|
|
|
|
%files
|
|
%license COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
|
%doc CHANGELOG.md NOTICE README.md
|
|
%{_bindir}/*
|
|
%attr(0775, root, spack) %{_localstatedir}/lib/spack/junit-report
|
|
%attr(0775, root, spack) %{spack_dir}/opt
|
|
%attr(0775, root, spack) %{_localstatedir}/cache/spack
|
|
%attr(0775, root, spack) %{_datarootdir}/spack/modules
|
|
%{_prefix}/lib/spack
|
|
%{_localstatedir}/cache/spack
|
|
%{_localstatedir}/lib/spack
|
|
%{_datarootdir}/spack
|
|
%config %{_sysconfdir}/profile.d/spack.sh
|
|
%config %{_sysconfdir}/profile.d/spack.csh
|
|
%dir %{_sysconfdir}/skel/.spack
|
|
%config %{_sysconfdir}/skel/.spack/config.yaml
|
|
# repos directory is installed in -recipes
|
|
%exclude %{_localstatedir}/lib/spack/repos
|
|
|
|
|
|
%files recipes
|
|
%license COPYRIGHT LICENSE-APACHE LICENSE-MIT
|
|
%doc CHANGELOG.md NOTICE README.md
|
|
%{_localstatedir}/lib/spack/repos
|
|
|
|
|
|
%changelog
|