Setting and using environment variables when building RPMs

I'm trying to build an RPM from the GPL'd Emulex driver for the LP9002L HBA. The initial build works fine, but I'm trying to change the SPEC file so that the RPM is built for the currently running kernel. This way we don't have to update the SPEC file every time we want to build for a new kernel, just build on a machine running the new kernel.

I tried using the following lines in my spec file:

%install
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KERNEL_VERSION/kernel/drivers/scsi
install -s -m 755 lpfcdd.o $RPM_BUILD_ROOT/lib/modules/$KERNEL_VERSION/kernel/drivers/scsi/lpfcdd.o

%files
/lib/modules/$KERNEL_VERSION/kernel/drivers/scsi/lpfcdd.o

I'm then doing
KERNEL_VERSION=`uname -r` rpmbuild -bb specfile

Looking at the output, it appears that the variable is being used in the %install section, but not in the %files section. I say this because I get the following output:
.
mkdir -p /var/tmp/lpfcdriver-buildroot/lib/modules/2.4.21-20.ELsmp/kernel/drivers/scsi
.
install -s -m 755 lpfcdd.o /var/tmp/lpfcdriver-buildroot/lib/modules/2.4.21-20.ELsmp/kernel/drivers/scsi/lpfcdd.o
.
error: File not found: /var/tmp/lpfcdriver-buildroot/lib/modules/$KERNEL_VERSION/kernel/drivers/scsi/lpfcdd.o

RPM build errors:
    File not found: /var/tmp/lpfcdriver-buildroot/lib/modules/$KERNEL_VERSION/kernel/drivers/scsi/lpfcdd.o

Can anyone advise how I could go about fixing this ?
LVL 5
AnonymouslemmingAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
GhostModConnect With a Mentor Commented:
PAQd, 445 points refunded.

GhostMod
Community Support Moderator
0
 
wesly_chenCommented:
Hi,

   You probably need to do
export KERNEL_VERSION=`uname -r` ; rpmbuild -bb specfile

   If you don't export the variable, then the value of variable won't pass to the sub-shell.

Wesly
0
 
AnonymouslemmingAuthor Commented:
That doesn't appear to work. It still works in the %install section, but it still does not work in the %files section.
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
pbhjCommented:
I thought maybe to export, is there someway to dynamically export a global setting, a switch on export that passes it to all shells?

I know that you can set the variable in the shells settings file, eg ~/.bashrc, but dynamically? Basically this could do it for you, but really I haven't a clue!!

:0)>
0
 
AnonymouslemmingAuthor Commented:
I have found a solution to this.

Variables in RPMs must be defined by using
%define variablename = %(system command to generate variable)

For example, to define a variable for %kernelver, you would do
%define kernelver = %(uname -r)

Also, when you wish to use variables you must use %variablename. So in my example I need to use
%kernelver

This information was provided by a very helpful person at Red Hat.
0
 
wesly_chenCommented:
Hi,

   Thanks for the information.  It's very useful. ^_^

Wesly
0
 
AnonymouslemmingAuthor Commented:
If this question is PAQ-d, will it become a featured solution ?
0
All Courses

From novice to tech pro — start learning today.