Obtaining the RPM sources from the spec file
In this post, I'll talk about how to programatically obtain the source list from the an RPM specification (spec) file and what's the usecase for it
TL;DR
To obtain the source files from the spec file execute the following:
spectool -l -S <SPEC_FILE_PATH>
The above should print something like
Source0: <FILE_OR_URL_FOR_SOURCE0>
Source1: <FILE_OR_URL_FOR_SOURCE1>
...
SourceN: <FILE_OR_URL_FOR_SOURCEN>
Why?
So if I already have the spec file, and I can read it, Why do I need this? Fair question, but, what would you do if you want to have a dynamic spec or more so, a dynamic build script that reads the sources from the spec and downloads them or even builds them with some scripts you have available. In summary: automation is the why. Of course you could have something like:
grep -iE 'Source[0-9]+:' <SPEC_FILE_PATH>
to do it, but what if your source strings are built within the spec given certain macros?
With the above grep
command you'd get the macros that comprise the sources, and you'd have to parse the file to find the right definition for the source file.
Pre-requisites
In order to do this, you'd need an RPM spec file of course and you'd also need to have the spectool
program, which is shipped within the rpmdevtools
package, you can check if such package is installed by running:
rpm -q rpmdevtools
You can also check if you have spectool
installed by executing either
which spectool
or
command -v spectool
If you don't have the program, nor the package installed , try to install the package by issuing the dollowing command (In a Red Hat based distribution)
sudo yum install rpmdevtools
The solution
The spectool
's purpose is mainly to download the sources needed by a specfile (If they're URLs), but it can also be used to our advantage by providing the flags:
Flag | Purpose |
---|---|
-l | List the sources/patches |
-S | List only the sources |
So our final command will end up looking like:
spectool -l -S <SPEC_FILE_PATH>
Comments