13

I'm making an RPM. This particular RPM has requirements that can't be expressed as RPM prerequisites, lets call them a particular filesystem/disk configuration. Currently the failure happens after install, at runtime, when the requirements aren't met.

I can check for the required prerequisites in the %install, section of my script. However, I can't figure out how to fail the install if certain criteria are met. Is it possible to fail an rpm install at runtime via some trigger in the %install (or some other) section?

An example would look something like so, in a .spec file:

%install
if [ -f /some/file ]
then
    FAIL_RPM_INSTALL ## What is this command?
fi
jww
  • 97,681
  • 90
  • 411
  • 885
Paul Rubel
  • 26,632
  • 7
  • 60
  • 80

2 Answers2

18

It turns out that if you exit in the %pre stage the rpm install will fail.

%pre
if [ -f /some/file ]
then
    echo "/some/file exists, it shouldn't"
    exit 1
fi

Reference: https://fedoraproject.org/wiki/Packaging:ScriptletSnippets

Thomas Perl
  • 2,178
  • 23
  • 20
Paul Rubel
  • 26,632
  • 7
  • 60
  • 80
3
%pre
df /data|awk 'END{if ($2 < 10000000) exit 1;}'; 
if [ $? == 1 ]; 
    then echo ERROR not enough space;exit 1;
fi
bbaassssiiee
  • 6,013
  • 2
  • 42
  • 55
  • awk will give you wrong value when *file system* name is too long. I belive using `df -P` avoids this issue. – draganHR Aug 17 '15 at 14:53