mirror of
https://github.com/nwchemgit/nwchem.git
synced 2026-07-29 06:35:39 -04:00
HvD: Adding the spec file I used to generate the RPM for Imperial College
London. I have included some notes on what I learned about how this RPM stuff works. Hopefully that will save us some hours work if need to generate one of these things again some time in the future.
This commit is contained in:
parent
57c0608bbf
commit
099ea93b26
1 changed files with 200 additions and 0 deletions
200
contrib/rpm_spec_file/nwchem-6-5.spec
Normal file
200
contrib/rpm_spec_file/nwchem-6-5.spec
Normal file
|
|
@ -0,0 +1,200 @@
|
|||
# NWChem SPEC file
|
||||
# ================
|
||||
#
|
||||
# This spec file was created for a tutorial at Imperial College London. On
|
||||
# the training machines at the site no compilers nor MPI commands were available
|
||||
# requiring the generation of an RPM that installs mpirun (from OpenMPI) and
|
||||
# nwchem (the patches NWChem 6.5 release). Advice was obtained from David Brown
|
||||
# of EMSL operations team, in addition information was found online at:
|
||||
#
|
||||
# http://www.rpm.org/max-rpm/ch-rpm-build.html
|
||||
# http://www.ibm.com/developerworks/library/l-rpm1/
|
||||
#
|
||||
# The process starts by creating the following directory structure:
|
||||
#
|
||||
# ~/rpmbuild -- the top-level directory for the rpmbuild tool
|
||||
# ~/rpmbuild/BUILD -- the directory where stuff is compiled
|
||||
# ~/rpmbuild/BUILDROOT -- the RPM contents stage area
|
||||
# ~/rpmbuild/RPMS -- the directory for the binary .rpm files
|
||||
# ~/rpmbuild/SOURCES -- the directory for source code .tar.gz files
|
||||
# ~/rpmbuild/SPECS -- the RPM specifications directory
|
||||
# ~/rpmbuild/SRPMS -- the directory for the sources .rpm files
|
||||
#
|
||||
# The SPECS directory is where this file and other files like it live.
|
||||
# A .spec file contains a number of sections most of which are labeled
|
||||
# %<name> where <name> indicates a particular function/purpose. The first
|
||||
# section is the preamble which does not have a particular name. The preamble
|
||||
# sets a number of variables that say something about the RPM, things like
|
||||
# the name of the code, the version number, the names of the source code tar
|
||||
# files, etc.
|
||||
#
|
||||
# The labeled sections start of with %description which provides a few lines
|
||||
# of information about the code.
|
||||
#
|
||||
# %prep lists the commands that are needed to put the source code in the right
|
||||
# place. The %setup macro can automate most of this. The first %setup is applied
|
||||
# to Source0 from the preamble, the next %setup to Source1, etc.
|
||||
#
|
||||
# %build contains a shell script (using Bash) that compiles the code. The
|
||||
# script launches in the directory containing the source code from Source0. In
|
||||
# this particular case we needed to compile OpenMPI (with a specific --prefix)
|
||||
#first so we could build NWChem with MPI, then we build NWChem, and then we
|
||||
# build OpenMPI again but this time to generate an mpirun executable that will
|
||||
# be installed on the target machine (i.e. with the default --prefix).
|
||||
#
|
||||
# %install is the tricky part as this script installs the RPM on the target
|
||||
# machine, but is also used to collect all the files that will be rolled up
|
||||
# into the RPM. When the RPM is generated this script is launched in the
|
||||
# directory containing Source0, on the target machine it is launched in the
|
||||
# unpacked RPM directory. The way I got this to work was to have the %build
|
||||
# script create a structure of files within the nwchem-6.5 build directory
|
||||
# that matches the installation directory structure on the target machine.
|
||||
# Note that $RPM_BUILD_ROOT/usr/local are replaced by the rpmbuild and rpm
|
||||
# commands with locations that are particular to the RPM generation and RPM
|
||||
# installation process. Potentially these replacements are different at the
|
||||
# installation time depending on user specified flags on the rpm command line.
|
||||
# Unfortunately the publically available documentation is extremely sketchy
|
||||
# on what the expectations for file names are during RPM generation and RPM
|
||||
# installation (most documentation simply states "make install" as the
|
||||
# install script which is as good as useless). Hence most of what I did here is
|
||||
# based on guess work.
|
||||
#
|
||||
# %files must contain a list of all files (or directories) that will be included
|
||||
# in the RPM. If a file is not listed it will not be included.
|
||||
#
|
||||
# To generate the RPM run:
|
||||
#
|
||||
# cd ~/rpmbuild
|
||||
# rpmbuild -ba SPECS/nwchem-6-5.spec
|
||||
#
|
||||
# If something did not work then running this command again will start over
|
||||
# from scratch. Using the --short-circuit flag allows you to skip prior steps
|
||||
# and skip directly to the -b<step> build step. E.g. rpmbuild --short-circuit
|
||||
# -bi skips directly to the %install step. The rpmbuild command creates the
|
||||
# .rpm file in the RPMS directory.
|
||||
#
|
||||
# On the target machine use:
|
||||
#
|
||||
# rpm -i nwchem-6.5-1.el6.x86_64.rpm
|
||||
#
|
||||
# to install the code.
|
||||
#
|
||||
# Hopefully these brief notes provide a leg up the next time we need to roll
|
||||
# an RPM.
|
||||
#
|
||||
# Huub van Dam, April 01, 2015
|
||||
#
|
||||
#
|
||||
# === Start ===
|
||||
#
|
||||
# This is a spec file for compiling an RPM for NWChem-6.5 including dependencies
|
||||
# like OpenMPI and Global Arrays. Of course the various components have their
|
||||
# own legacy build systems. So we just want to run a bunch of commands and
|
||||
# tar-up some resulting executables. The fewer assumptions are made what is
|
||||
# where the better.
|
||||
#
|
||||
Name: nwchem
|
||||
Version: 6.5
|
||||
Release: 1%{?dist}
|
||||
Summary: Parallel Ab-Initio Quantum Chemistry Code
|
||||
|
||||
Group: Applications/Scientific
|
||||
License: Various: NWChem: ECL2.0; Global Arrays: OpenSource; OpenMPI: New BSD
|
||||
URL: http://www.nwchem-sw.org
|
||||
Source0: nwchem-6.5.tar.gz
|
||||
Source1: openmpi-1.8.4.tar.gz
|
||||
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
||||
|
||||
BuildRequires: gcc == 4.4.7
|
||||
|
||||
%description
|
||||
NWChem parallel ab-initio quantum chemistry code targetting computer systems. \
|
||||
For more details see: http://www.nwchem-sw.org
|
||||
|
||||
|
||||
%prep
|
||||
%setup
|
||||
%setup -T -D -b 1
|
||||
|
||||
|
||||
%build
|
||||
cd ..
|
||||
export BUILD_DIR=`pwd`
|
||||
export MRCC_METHODS=y
|
||||
export EACCSD=y
|
||||
export IPCCSD=y
|
||||
export BLASOPT=" "
|
||||
export NWCHEM_MODULES="all python"
|
||||
export ARMCI_NETWORK=MPI-TS
|
||||
# Someone added a -pthread flag to gcc in mpicc which loads libpthread through
|
||||
# a non-standard back door. So we now need to explicitly say what we need
|
||||
# including libpthread as we cannot infer the right information from
|
||||
# "mpicc -show" as we cannot know about these non-standard compiler flags.
|
||||
export LIBMPI="-L/people/d3y133/rpmbuild/BUILD/lib -lmpi_usempi -lmpi_mpifh -lmpi -lopen-rte -lopen-pal -lm -lnuma -ldl -lrt -lutil -lpthread"
|
||||
export SLURMOPT=" "
|
||||
env | sort
|
||||
echo "Building in " `pwd`
|
||||
echo "Directory structure"
|
||||
ls -l
|
||||
# Build OpenMPI so we can use it to compile NWChem
|
||||
cd openmpi-1.8.4
|
||||
./configure --without-verbs --disable-mpi-profile --disable-shared --enable-static --disable-java --disable-mca-dso --disable-vt --disable-libompitrace --without-slurm --without-loadleveler --prefix=$BUILD_DIR
|
||||
make all
|
||||
make install
|
||||
cd ..
|
||||
export PATH=$BUILD_DIR/bin:$PATH
|
||||
# Build NWChem using OpenMPI mpif90, mpicc, etc.
|
||||
cd nwchem-6.5
|
||||
./contrib/distro-tools/build_nwchem
|
||||
echo "=== done building nwchem ==="
|
||||
cp -a bin/LINUX64/nwchem bin
|
||||
mkdir -p lib/basis
|
||||
cp -a src/basis/libraries lib/basis
|
||||
cp -a src/nwpw/libraryps lib/basis
|
||||
cp -a src/data lib/ff
|
||||
cd ..
|
||||
# Rebuild OpenMPI for the target machine as we need mpirun to run NWChem
|
||||
echo "current directory" `pwd`
|
||||
ls -l
|
||||
cd openmpi-1.8.4
|
||||
make clean
|
||||
./configure --disable-mpi-profile --disable-shared --enable-static --disable-java --disable-mca-dso --disable-vt --disable-libompitrace --without-slurm --without-loadleveler --without-verbs
|
||||
make all
|
||||
cd ..
|
||||
cp -a openmpi-1.8.4/orte/tools/orterun/orterun nwchem-6.5/bin/mpirun
|
||||
mkdir -p nwchem-6.5/share/openmpi
|
||||
cp -a openmpi-1.8.4/orte/tools/orterun/help-orterun.txt nwchem-6.5/share/openmpi
|
||||
cp -a openmpi-1.8.4/opal/runtime/help-opal-runtime.txt nwchem-6.5/share/openmpi
|
||||
|
||||
%install
|
||||
|
||||
echo "Build root = " %{buildroot}
|
||||
echo "RPM_BUILD_ROOT = " $RPM_BUILD_ROOT
|
||||
pwd; env
|
||||
mkdir -p $RPM_BUILD_ROOT/usr/local/bin
|
||||
cp bin/nwchem $RPM_BUILD_ROOT/usr/local/bin
|
||||
cp bin/mpirun $RPM_BUILD_ROOT/usr/local/bin
|
||||
mkdir -p $RPM_BUILD_ROOT/usr/local/lib
|
||||
cp -a lib/basis $RPM_BUILD_ROOT/usr/local/lib
|
||||
cp -a lib/ff $RPM_BUILD_ROOT/usr/local/lib
|
||||
mkdir -p $RPM_BUILD_ROOT/usr/local/share/openmpi
|
||||
cp -a share/openmpi/help-orterun.txt $RPM_BUILD_ROOT/usr/local/share/openmpi
|
||||
cp -a share/openmpi/help-opal-runtime.txt $RPM_BUILD_ROOT/usr/local/share/openmpi
|
||||
mkdir -p $RPM_BUILD_ROOT/etc
|
||||
cp -a etc/nwchemrc $RPM_BUILD_ROOT/etc/nwchemrc
|
||||
|
||||
%clean
|
||||
rm -rf %{buildroot}
|
||||
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
/usr/local/bin/mpirun
|
||||
/usr/local/bin/nwchem
|
||||
/usr/local/lib/basis
|
||||
/usr/local/lib/ff
|
||||
/usr/local/share/openmpi
|
||||
%config /etc/nwchemrc
|
||||
|
||||
%changelog
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue