Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
software:start [2019/02/25 21:46] frey [Organizing software] |
software:start [2019/02/25 22:07] (current) frey [Putting it all together] |
||
---|---|---|---|
Line 80: | Line 80: | ||
* For a software directory containing components from multiple source packages (like ''/usr/local'') unpack each constituent source package as a directory under the ''<prefix>/src'' directory | * For a software directory containing components from multiple source packages (like ''/usr/local'') unpack each constituent source package as a directory under the ''<prefix>/src'' directory | ||
+ | ==== Versioning ==== | ||
+ | It is often the case when maintaining software that more than one //version// of the software must be present. Each distinct //version// implies a different rendition of the software source code. //Variants// of a version of the software may be present when, for example, different compilers are used to build the same version of the software. | ||
+ | |||
+ | In these cases, installation into a common software directory like ''/usr/local'' is inadvisable, since a single version or variant of the software is present and will likely change as time goes by. Using a unique software directory for each version or variant — and adopting the Unix/Linux filesystem layout therein — keeps each distinct copy of the software isolated from the others, and is easily added to the shell by altering the ''PATH'' and ''LD_LIBRARY_PATH'' variables, for example. | ||
+ | |||
+ | ==== Putting it all together ==== | ||
+ | |||
+ | I need to manage multiple versions and variants of the Open MPI tools. To start, I create a directory that will hold all of the versions and variants I build: | ||
+ | |||
+ | <code bash> | ||
+ | $ mkdir -p ~/programs/open-mpi | ||
+ | $ cd ~/programs/open-mpi | ||
+ | </code> | ||
+ | |||
+ | I will download the official source code and store each version I download in a directory — if at any time I need to build another variant of that version, I will have that version's source code available: | ||
+ | |||
+ | <code bash> | ||
+ | $ mkdir attic | ||
+ | $ cd attic | ||
+ | $ wget 'https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.3.tar.bz2' | ||
+ | $ ls -l | ||
+ | total 1 | ||
+ | -rw-r--r-- 1 frey everyone 9442937 Oct 29 17:51 openmpi-3.1.3.tar.bz2 | ||
+ | </code> | ||
+ | |||
+ | To build a variant of the 3.1.3 version with standard system compilers, I'll create a directory and unpack the source code inside it: | ||
+ | |||
+ | <code bash> | ||
+ | $ cd .. | ||
+ | $ mkdir 3.1.3 | ||
+ | $ cd 3.1.3 | ||
+ | $ tar -xf ../attic/openmpi-3.1.3.tar.bz2 | ||
+ | $ mv openmpi-3.1.3 src | ||
+ | $ cd src | ||
+ | </code> | ||
+ | |||
+ | Open MPI uses the GNU Autoconf tools, so configuring the build to install the software into this variant's software directory is very straightforward: | ||
+ | |||
+ | <code bash> | ||
+ | $ ./configure --prefix="$(realpath ~/programs/open-mpi/3.1.3)" | ||
+ | : | ||
+ | $ make | ||
+ | $ make install | ||
+ | $ cd .. | ||
+ | $ pwd | ||
+ | /home/1001/programs/open-mpi/3.1.3 | ||
+ | $ ls -l bin | ||
+ | total 474 | ||
+ | -rwxr-xr-x 1 frey sysadmin 1740 Oct 8 11:04 aggregate_profile.pl | ||
+ | lrwxrwxrwx 1 frey sysadmin 12 Oct 8 11:05 mpic++ -> opal_wrapper | ||
+ | lrwxrwxrwx 1 frey sysadmin 12 Oct 8 11:05 mpicc -> opal_wrapper | ||
+ | lrwxrwxrwx 1 frey sysadmin 12 Oct 8 11:05 mpiCC -> opal_wrapper | ||
+ | : | ||
+ | lrwxrwxrwx 1 frey sysadmin 12 Oct 8 11:05 shmemcxx -> opal_wrapper | ||
+ | lrwxrwxrwx 1 frey sysadmin 12 Oct 8 11:05 shmemfort -> opal_wrapper | ||
+ | lrwxrwxrwx 1 frey sysadmin 6 Oct 8 11:05 shmemrun -> mpirun | ||
+ | </code> |