Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Setting and using environment variables when building RPMs

Posted on 2004-10-28
9
Medium Priority
?
263 Views
Last Modified: 2013-12-06
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 ?
0
Comment
Question by:Anonymouslemming
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
9 Comments
 
LVL 38

Expert Comment

by:wesly_chen
ID: 12434064
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
 
LVL 5

Author Comment

by:Anonymouslemming
ID: 12470799
That doesn't appear to work. It still works in the %install section, but it still does not work in the %files section.
0
 
LVL 5

Expert Comment

by:pbhj
ID: 12477978
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
Veeam Disaster Recovery in Microsoft Azure

Veeam PN for Microsoft Azure is a FREE solution designed to simplify and automate the setup of a DR site in Microsoft Azure using lightweight software-defined networking. It reduces the complexity of VPN deployments and is designed for businesses of ALL sizes.

 
LVL 5

Author Comment

by:Anonymouslemming
ID: 12481861
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
 
LVL 38

Expert Comment

by:wesly_chen
ID: 12483167
Hi,

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

Wesly
0
 
LVL 5

Author Comment

by:Anonymouslemming
ID: 12487774
If this question is PAQ-d, will it become a featured solution ?
0
 
LVL 1

Accepted Solution

by:
GhostMod earned 0 total points
ID: 12519864
PAQd, 445 points refunded.

GhostMod
Community Support Moderator
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Fine Tune your automatic Updates for Ubuntu / Debian
Create a Windows 10 custom Image with custom task bar and custom start menu using XML for deployment.
Connecting to an Amazon Linux EC2 Instance from Windows Using PuTTY.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
Suggested Courses

610 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question