I'm kinda a new to writing spec files and building RPM's. Currently I have one RPM that is supposed to deploy some files in 1 of 2 possible directories that will vary with the OS.
How can I, within the %files section, verify them? I can't use variable...I can't verify both paths because one will for sure fail...I tried to define a macro earlier in the %install section but it will be defined just once and won't be redefined on every RPM installation...
what can I do here?
Thanks
Forrest suggests the best solution, but if that is not possible practical you can detect the OS version at runtime in the post-install section, move the script to the appropriate location, and then delete it post-uninstall, eg:
Much more error prone than building different RPMs on different OSes, but will scale a little better if you need to support many different OSes.
The
%files
section can have variables in it, but usually this would be something like your path that is defined so you don't have to repeat it a bunch. so%{long_path}/file_name
, where long_path was defined earlier in the spec file. the%files
section is all the information that goes into the RPM database, and is created when you build the RPM so you won't be able to change those values based on machine information when installed.If you really want to do this, you could include a tar file inside of the main tarball that gets extracted depending on certain conditions (since the spec file is just bash). Now keep in mind this is an awful idea. The files won't be tracked by the RPM database, so when you remove the RPM these files will still exist.
In reality you should build two RPMs, this will allow for better support going forward into the future in the event you have to hand this off to someone, as well as preserving your own sanity a year from now when you need to update the RPM.
This is how I solved my problem
step 1 :
Step 2: in install section
Step 3:in files section
That's it
It works.
PS : I cannot give you full code hence giving all useful snippet
I had a similar situation where additional files were included in the RPM in case of a DEBUG build over and above all files in the RELEASE build.
The trick is to pass a list of files to %files alongwith a regular list of files below it:
In your case, you can leverage the %if conditional in the %install section, use the OS as a spec variable passed to
rpmbuild
(or detect it in the RPM spec itself) and then pass the file containing the list to%files