1
1
This commit was SVN r9741.
Этот коммит содержится в:
Jeff Squyres 2006-04-27 03:33:08 +00:00
родитель e39a171871
Коммит 494dcb2f96
2 изменённых файлов: 294 добавлений и 0 удалений

229
contrib/dist/linux/openmpi-switcher-modulefile.spec поставляемый Обычный файл
Просмотреть файл

@ -0,0 +1,229 @@
#
# Copyright (c) 2006 The Trustees of Indiana University and Indiana
# University Research and Technology
# Corporation. All rights reserved.
# Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#############################################################################
#
# Helpful defines
#
#############################################################################
# This is an OSCAR-specific RPM specfile. It exists for two reasons:
# 1. Installing an Open MPI-installation-agnostic modulefile that will
# automatically pick which of multiple Open MPI installations to use
# if a specific one is not asked for by the user.
# 2. Make the main Open MPI spec file cleaner (don't need any of this
# switcher gorp).
# Values specified here are what are used if the user does not pass in
# any defaults.
%{!?oscar_prefix: %define oscar_prefix /opt/%{name}}
%define _prefix %{oscar_prefix}-%{version}
%define _pkgdatadir %{oscar_prefix}-%{version}/share/openmpi
# Defining these to nothing overrides the stupid automatic RH9
# functionality of making "debuginfo" RPMs.
%define debug_package %{nil}
%define __check_files %{nil}
#############################################################################
#
# Preamble Section
#
#############################################################################
Summary: OSCAR-specific modulefile for run-time picking of an Open MPI installation to use
Name: openmpi-switcher-modulefile
Version: OPENMPIVERSION
Release: 1
Vendor: Open MPI Team
License: BSD
Group: Development/Libraries
Source: openmpi-switcher-modulefile.tcl
URL: http://www.open-mpi.org/
BuildRoot: %{_tmppath}/%{name}-%{version}-root
Requires: %__rm %__mkdir %__sed %__mv %__chmod %__chown
Requires: modules-oscar
Requires: env-switcher
%description
This RPM is used to install a Open MPI-installation-agnostic
modulefile that is used to automatically select which Open MPI
installation to use on a per-shell basis. That is, if there are
multiple Open MPI installations on a single node (due to limitations
in the OSCAR design, aimed at difficulties in knowing exactly which
version of various support libraries to compile Open MPI against), it
will attempt to pick the "right" one and load the appropriate
modulefile for that installation.
Current possibilities include:
- plain vanilla Open MPI
- Open MPI with gm
- Open MPI with blcr
- Open MPI with blcr and gm
#############################################################################
#
# Prep Section
#
#############################################################################
%prep
# Nothing to do...
#############################################################################
#
# Build Section
#
#############################################################################
%build
cd "$RPM_BUILD_DIR"
%__mkdir -p %{name}-%{version}
%__chmod -R a+rX,g-w,o-w %{name}-%{version}
cd %{name}-%{version}
%__cp "$RPM_SOURCE_DIR/openmpi-switcher-modulefile.tcl" \
"$RPM_BUILD_DIR/%{name}-%{version}/openmpi-%{version}"
%__chmod 644 "$RPM_BUILD_DIR/%{name}-%{version}/openmpi-%{version}"
#############################################################################
#
# Install Section
#
#############################################################################
%install
rm -rf "$RPM_BUILD_ROOT"
# Copy the shell script to pkgdatadir
pkgdatadir="$RPM_BUILD_ROOT/%{_pkgdatadir}"
%__mkdir -p "$pkgdatadir"
%__cp "$RPM_BUILD_DIR/%{name}-%{version}/openmpi-%{version}" \
"$pkgdatadir/openmpi-%{version}"
%__chmod 644 "$pkgdatadir/openmpi-%{version}"
#############################################################################
#
# Clean Section
#
#############################################################################
%clean
%__rm -rf "$RPM_BUILD_ROOT"
#############################################################################
#
# Post (module) section
#
#############################################################################
%post
# Add ourselves into the switcher repository. Run the modules and
# switcher setup scripts because this RPM install may be part of a
# massive "rpm -ivh ..." that includes the modules and switcher RPMs
# themselves -- in which case, the environment for those packages will
# not yet have been setup.
# In an ungrade situation, there will already be a openmpi-%{version}
# modulefile resigtered, so we have to unregister it first, and then
# do the registration.
if test "$1" \> 1; then
switcher mpi --rm-name openmpi-%{version} --force --silent
fi
. /etc/profile.d/00-modules.sh
switcher mpi --add-name openmpi-%{version} %{_pkgdatadir} --force --silent
#############################################################################
#
# Preun (module) Section
#
#############################################################################
%preun
# Remove ourselves from the switcher repository. Run the modules and
# switcher setup scripts because this RPM install may be part of the
# same shell that "rpm -ivh ..." the switcher/modules RPM's, in which
# case, the environment for those packages will not yet have been
# setup. This is important to do *before* we are uninstalled because
# of the case where "rpm -Uvh openmpi-module..." is used; the current
# RPM will be uninstalled and then the new one will be installed. If
# we are %postun here, then the new RPM will be installed, and then
# this will run, which will remove the [new] tag from switcher, which
# is obviously not what we want.
# Grrr... It seems that "rpm -ivh a.rpm b.rpm c.rpm" is smart enough
# to re-order the order of installation to ensure that dependencies
# are met. However, "rpm -e a b c" does *not* order the
# uninstallations to ensure that dependencies are still met. So if
# someone does "rpm -e switcher modules openmpi-module", it is quite
# possible that rpm will uninstall switcher and/or modules *before*
# this RPM is uninstalled. As such, the following lines will fail,
# which will cause all kinds of Badness. Arrggh!! So we have to test
# to ensure that these files are still here before we try to use them.
# If this is an upgrade, then we only want to do this when the last
# RPM is removed (i.e., when this is *not* an upgrade).
if test "$1" == 0; then
a=/etc/profile.d/00-modules.sh
which switcher > /dev/null 2> /dev/null
b=$?
if test -f $a -a "$b" = "0"; then
. $a
default="`switcher mpi --show --system | grep default | cut -d= -f2`"
# If this RPM was the system default switcher module, then
# both print a warning and remove the system default.
if test "$default" = "openmpi-%{version}"; then
echo "WARNING: This RPM was the default MPI implementation!"
echo "WARNING: There is no NO DEFAULT MPI implementation!"
switcher mpi = none --system --force --silent
fi
# Remove this module's name from the switcher repository
switcher mpi --rm-name openmpi-%{version} --force --silent
fi
fi
#############################################################################
#
# Files Section
#
#############################################################################
%files
%defattr(-,root,root)
%{_pkgdatadir}/openmpi-%{version}
#############################################################################
#
# Changelog
#
#############################################################################
%changelog
* Wed Dec 31 2003 Jeff Squyres <jsquyres@lam-mpi.rg>
- First version. Hopefully, this RPM won't need to live very long
because LAM/MPI 7.1 will obviate the need for it.

65
contrib/dist/linux/openmpi-switcher-modulefile.tcl поставляемый Обычный файл
Просмотреть файл

@ -0,0 +1,65 @@
#%Module -*- tcl -*-
#
# Copyright (c) 2006 The Trustees of Indiana University and Indiana
# University Research and Technology
# Corporation. All rights reserved.
# Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
# This modulefile is a dispatcher for other Open MPI modulefiles. It
# looks around the environment of the machine and determines which
# Open MPI modulefile to load (i.e., which Open MPI installation to
# use).
proc ModulesHelp { } {
puts stderr "\tThis module acts as a dispatcher to automatically"
puts stderr "\tload the 'right' Open MPI installation into your"
puts stderr "\tenvironment based on what Open MPI installations are"
puts stderr "\tavailable and the environment available on this machine."
}
module-whatis "Automatically select an appropriate Open MPI modulefile to load."
# Don't let any other MPI module be loaded while this one is loaded
conflict mpi
# Directory where we'll find the Open MPI modulefiles.
set modulefiledir /opt/modules/modulefiles
# See if we have BLCR and/or GM
set have_blcr [file exists /usr/lib/libcr.so]
set have_gm [file exists /usr/lib/libgm.so]
# Get the version number of the Open MPI represented by this modulefile
set version [lindex [split [module-info name] "-"] 1]
# If we find a matching modulefile, [un]load it. Otherwise, fail
# silently because we don't want to interject stuff in stderr for fear
# of breaking system-level scripts (e.g., cexec). The "break"
# statement in the final else clause will ensure that this module is
# actually not loaded. So fail silently, but under protest. ;-)
set dir "$modulefiledir/openmpi"
if { $have_blcr == 1 && $have_gm == 1 &&
[file exists $dir/openmpi-with-blcr-and-gm-$version] } {
module load $dir/openmpi-with-blcr-and-gm-$version
} elseif { $have_blcr == 0 && $have_gm == 1 &&
[file exists $dir/openmpi-with-gm-$version] } {
module load $dir/openmpi-with-gm-$version
} elseif { $have_blcr == 1 && $have_gm == 0 &&
[file exists $dir/openmpi-with-blcr-$version] } {
module load $dir/openmpi-with-blcr-$version
} elseif { [file exists $dir/openmpi-$version] } {
module load $dir/openmpi-$version
} else {
break
}