Software in CentOS 7
There are generally three types of software:
1. software provided as pre-built packages (RPMs) from CentOS
2. software that we at CIMS have built from source
3. software that users can build themselves
Pre-Packaged Software (RPMs)
The vast majority of software that we offer has been provided to us by external resources. Our job in installing and maintaining this software is easy. For the most part, if a piece of software is available from one of these external repositories, our job is as simple as running "yum install package_name," and occasionally running "yum update package_name" to keep that package up to date.
As a user, you can get a complete list of software installed in this manner:
user123@box999[~]$ rpm -qa | sort
At the time of this writing, a newly installed CentOS 7 machine contains approximately 4200 such packages.
Once you have a package name, you can get more information about that package (including a description of it's purpose):
user123@box999[~]$ rpm -qi bison-2.7-4.el7.x86_64
To get a complete list of all files installed from a particular package:
user123@box999[~]$ rpm -ql bison-2.7-4.el7.x86_64
Conversely if you've found a file on the system and you want to know what package it came from:
user123@box999[~]$ rpm -qf /usr/bin/abiword
To get a complete manual for the usage of the rpm command:
user123@box999[~]$ man rpm
The general rule of thumb is that stuff found under any subdirectory of /usr (minus /usr/local) is something that was installed via an RPM.
Software Built From Source
Sometimes users request software which is not readily available from external repositories as pre-built packages. The reasons for this can range from technical ("our software requires numerous unsupported dependencies") to cultural ("we don't package our software").
And sometimes, software provided by pre-existing RPMs detailed above can be old (sometimes *very* old), and users want the latest and greatest. A concrete example of this: Python 2.7 is the only RPM-provided version of Python available from the official repositories. You can see the only version of Python installed as an RPM:
user123@box999[~]$ rpm -qa | grep -i ^python-[0-9]
But many users want Python 3. This is where "software built from source" comes in. With software we build ourselves, we have the freedom to install multiple versions of the same software.
Installing software from source involves downloading it's raw source code, configuring compilers to use the correct resources and dependencies, and actually compiling that source code into working binaries or libraries.
We install all of our software built from source in CentOS 7 to /usr/local/stow. In some cases, it is necessary to load a corresponding module (see Module System). In some cases, executing the related binary in /usr/local/bin is sufficient to run a piece of software built from source.
In most cases, software that is released in it's raw tarball form can be downloaded and installed by users to a location which does not require special privileges to write to, i.e. your own home directory, or the local /scratch partition.
Typically when running the "configure" step of such an installation, one would append "--prefix=/home/abc123" where abc123 is your username. Alternatively "--prefix=/scratch" will install to the host's local scratch directory.
The advantage to installing to your own home directory is that whatever you install will travel with you to other hosts. The disadvantage is that it uses some of your home directory quota. Conversely, installing to /scratch will not use your quota, but will be restricted to usage on a single host.
As an example, here is a complete example of how you could install your own version of Python without root privileges. You shouldn't need to do this, as we provide by Python 2 and 3, but this is just an example:
tar -xvf Python-3.4.3.tgz
./configure --prefix=/scratch/python/3.4.3 --enable-shared
That's it! At this point, you should now have a working Python 3.4.3 binary located at /scratch/python/3.4.3/bin.
Send software requests to email@example.com. We do our best to accommodate all requests. In some cases, requested software is readily available as an RPM and can be installed relatively quick. In other cases, we may need to explore the software request, install required dependencies, and build the software from source. In the simplest cases, this can take 30 minutes or so. In other more complex cases, it can take a couple of days. And in some cases, the requested software may just not work in our environment (but we always try our best before making this call).