Showing posts with label rpmbuild. Show all posts
Showing posts with label rpmbuild. Show all posts

Friday, April 26, 2019

How to create RPM based package that checks system's RHEL version prior to installation

I was creating a RPM based package for doing installation of the application that we are developing.  While I was writing a .spec file, a requirement came my way.  Check the RHEL version, and install the package only if RHEL version is 7.5 or greater.

You may be wondering, "What's a .spec file?"  A .spec file is the "recipe" that is used by rpmbuild command for creating packages.  It is a text file, written in a specific syntax.  The .spec file tells the rpmbuild command what to do.  How to build our application, actions to be performed at the time of installation and un-installation.  To know about .spec files and RPM packaging, this article was suggested by one of my colleagues.

After studying .spec files for some time, I figured out that the %pre scriptlet is what I needed.  Scriptlet is a section in a .spec file, for a specific purpose.  The %pre scriptlet is executed just before the package is installed on the target system.

Here is the %pre scriptlet I wrote, that did the required job.

%pre
# Before copying files, check that system is running RHEL, and version of RHEL is greater than 7.5
rhel_version=`cat /etc/redhat-release | cut -d ' ' -f 7`
echo "RHEL version is $rhel_version"
rhel_min_required="7.5"
echo "Minumum required RHEL version is $rhel_min_required"
check=`echo "$rhel_version>=$rhel_min_required" | bc -l`
if [ $check -ne 1 ]
then
    echo "RHEL version $rhel_version is not supported for this application"
    exit 1
else
    echo "RHEL version $rhel_version is OK for this application"
fi



To know more about the rpmbuild command, referring to its manual page is a good start.