• VMware

    Learn about VMware virtualization for its products like vsphere ESX and ESXi, vCenter Server, VMware View, VMware P2V and many more

  • Linux

    Step by step configuration tutorials for many of the Linux services like DNS, DHCP, FTP, Samba4 etc including many tips and tricks in Red Hat Linux.

  • Database

    Learn installation and configuration of databases like Oracle, My SQL, Postgresql, etc including many other related tutorials in Linux.

  • How to execute a script at %pre, %post, %preun or %postun stage (spec file) while installing/upgrading an rpm

    RPM spec files have several sections which allow packages to run code on installation and removal. These bits of code are called scriptlets and are mostly used to update the running system with information from the package.

    When scriptlets are called, they will be supplied with an argument. This argument, accessed via $1 (for shell scripts) is the number of packages of this name which will be left on the system when the action completes

    All scriptlets MUST exit with the zero exit status.


    Ordering

    The scriptlets in %pre and %post are respectively run before and after a package is installed. The scriptlets %preun and %postun are run before and after a package is uninstalled. The scriptlets %pretrans and %posttrans are run at start and end of a transaction. On upgrade, the scripts are run in the following order:

    • %pre of new package
      (package install)
    • %post of new package
    • %preun of old package
      (removal of old package)
    • %postun of old package

    I have created two rpms with two different version having the below content in the spec file
    %pre
    echo "-------------"
    echo "This is pre"
    echo "Install Value: $1"
    echo "Upgrade Value: $1"
    echo "Uninstall Value: $1"
    echo "-------------"

    %post
    echo "-------------"
    echo "This is post"
    echo "Install Value: $1"
    echo "Upgrade Value: $1"
    echo "Uninstall Value: $1"
    echo "-------------"

    %preun
    echo "-------------"
    echo "This is preun"
    echo "Install Value: $1"
    echo "Upgrade Value: $1"
    echo "Uninstall Value: $1"
    echo "-------------"

    %postun
    echo "-------------"
    echo "This is postun"
    echo "Install Value: $1"
    echo "Upgrade Value: $1"
    echo "Uninstall Value: $1"
    echo "-------------"


    Installing the rpm

    Below are the scriplets values when an rpm is installed

    # rpm -ivh /tmp/rpmbuild/RPMS/x86_64/deepak-1.0.0-1.x86_64.rpm
    Preparing...                          ################################# [100%]
    -------------
    This is pre
    Install Value: 1
    Upgrade Value: 1
    Uninstall Value: 1
    -------------
    Updating / installing...
       1:deepak-1.0.0-1                   ################################# [100%]
    -------------
    This is post
    Install Value: 1
    Upgrade Value: 1
    Uninstall Value: 1
    -------------


    Updating the rpm

    # rpm -Uvh /tmp/rpmbuild/RPMS/x86_64/deepak-2.0.0-1.x86_64.rpm
    Preparing...                          ################################# [100%]
    -------------
    This is pre
    Install Value: 2
    Upgrade Value: 2
    Uninstall Value: 2
    -------------
    Updating / installing...
       1:deepak-2.0.0-1                   ################################# [ 50%]
    -------------
    This is post
    Install Value: 2
    Upgrade Value: 2
    Uninstall Value: 2
    -------------
    -------------
    This is preun
    Install Value: 1
    Upgrade Value: 1
    Uninstall Value: 1
    -------------
    Cleaning up / removing...
       2:deepak-1.0.0-1                   ################################# [100%]
    -------------
    This is postun
    Install Value: 1
    Upgrade Value: 1
    Uninstall Value: 1
    -------------


    Removing an rpm

    # rpm -e deepak
    -------------
    This is preun
    Install Value: 0
    Upgrade Value: 0
    Uninstall Value: 0
    -------------
    -------------
    This is postun
    Install Value: 0
    Upgrade Value: 0
    Uninstall Value: 0
    -------------





    As as you see now we have the scriplets values which we must use. Below is the consolidated output


    So lets use them to put in some scripting


    Final Spec File

    Time for the final spec file. here replace the respective space with the script content which you want to get executed

    I have highlighted the print statements based on the action which will be performed. You can replace those print statements and place your scripts accordingly.
    %pre
    if [ $1 == 1 ];then
       echo "-----------------------"
       echo "RPM is getting installed"
       echo "Put your script here"
       echo "-----------------------"
    elif [ $1 == 2 ];then
       echo "-----------------------"
       echo "RPM is getting upgraded"
       echo "Put your script here"
       echo "-----------------------"
    fi

    %post
    if [ $1 == 1 ];then
       echo "-----------------------"
       echo "RPM is getting installed"
       echo "Put your script here"
       echo "-----------------------"
    elif [ $1 == 2 ];then
       echo "-----------------------"
       echo "RPM is getting upgraded"
       echo "Put your script here"
       echo "-----------------------"
    fi

    %preun
    if [ $1 == 1 ];then
       echo "-----------------------"
       echo "RPM is getting upgraded"
       echo "Put your script here which will be called when this rpm is removed"
       echo "-----------------------"
    elif [ $1 == 0 ];then
       echo "--------------------"
       echo "RPM is getting removed/uninstalled"
       echo "Put your script here which will be called before uninstallation of this rpm"
       echo "--------------------"
    fi

    %postun
    if [ $1 == 1 ];then
       echo "-----------------------"
       echo "RPM is getting upgraded"
       echo "Put your script here which will be called when this rpm is removed"
       echo "-----------------------"
    elif [ $1 == 0 ];then
       echo "--------------------"
       echo "RPM is getting removed/uninstalled"
       echo "Put your script here which will be called after uninstallation of this rpm"
       echo "--------------------"
    fi


    Installing an rpm

    # rpm -ivh ../RPMS/x86_64/deepak-1.0.0-1.x86_64.rpm
    Preparing...                          ################################# [100%]
    -----------------------
    RPM is getting installed
    Put your script here
    -----------------------
    Updating / installing...
       1:deepak-1.0.0-1                   ################################# [100%]
    -----------------------
    RPM is getting installed
    Put your script here
    -----------------------


    Upgrading an rpm

    # rpm -Uvh ../RPMS/x86_64/deepak-2.0.0-1.x86_64.rpm
    Preparing...                          ################################# [100%]
    -----------------------
    RPM is getting upgraded
    Put your script here
    -----------------------
    Updating / installing...
       1:deepak-2.0.0-1                   ################################# [ 50%]
    -----------------------
    RPM is getting upgraded
    Put your script here
    -----------------------
    -----------------------
    RPM is getting upgraded
    Put your script here which will be called when this rpm is removed
    -----------------------
    Cleaning up / removing...
       2:deepak-1.0.0-1                   ################################# [100%]
    -----------------------
    RPM is getting upgraded
    Put your script here which will be called when this rpm is removed
    -----------------------


    Removing an rpm

    # rpm -e deepak
    --------------------
    RPM is getting removed/uninstalled
    Put your script here which will be called before uninstallation of this rpm
    --------------------
    --------------------
    RPM is getting removed/uninstalled
    Put your script here which will be called after uninstallation of this rpm
    --------------------

    I hope the article was useful.

    Deepak Prasad

    is a techie and an author who is still trying to survive in this IT generation with very little knowledge he has on Linux/Unix, VMware, SAN Storage, Automation, networking etc

    You can follow him on Facebook or Google+


    Do you also have something to share here?
    Join GoLinuxHub Team as an Author, Click here for more information
    How to execute a script at %pre, %post, %preun or %postun stage (spec file) while installing/upgrading an rpm How to execute a script at %pre, %post, %preun or %postun stage (spec file) while installing/upgrading an rpm Reviewed by Deepak Prasad on Sunday, May 13, 2018 Rating: 5

    No comments:

    Powered by Blogger.