Re: env variable is not defined when running rpmbuild --rebuild

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Erez Zilber wrote:
> before running rpmbuild, I run the following commands:
> [erez.zilber@klab002:~/work/]$ sudo bash -c 'export MY_ENV_VAR=some_val'

This has no effect because in Unix and Unix-like systems every process
starts with a copy of the current environment and at the termination
of the program the copied environment for that program is reclaimed by
the system.

In the above you are spawning a new environment for the 'sudo'
command.  That is spawning a new environment for the 'bash' command.
In the bash process the environment variable is being set.  That is
the entirety of the bash script and the bash process terminates at
that point.  The system frees and reclaims all of the process memory
associated with the bash process including all environment memory
space.  The sudo command has been waiting for the bash process to
exit.  It observes the program exit code and then the sudo process
itself exits.  When the sudo process exits the process memory
including all environment memory is freed and reclaimed by the
system.

> [erez.zilber@klab002:~/work/]$ sudo echo $MY_ENV_VAR
> some_val

This is because you have already set MY_ENV_VAR in the parent
environment.  The $MY_ENV_VAR is expanded by the shell before it
invokes the sudo.  The sudo then invokes echo with the some_val
argument.  Try this for comparison:

  $ echo debug: sudo echo $MY_ENV_VAR
  debug: sudo echo some_val

The $MY_ENV_VAR will already have been expanded by the original
invoking command line shell.

> In the spec file, I print this env var:
> 
> %build
> echo "MY_ENV_VAR = $MY_ENV_VAR"
> but when I run rpmbuild --rebuild
> /usr/src/redhat/SRPMS/mypackage-0-0.1.src.rpm, I get:
> 
> + LANG=C
> + export LANG
> + unset DISPLAY
> + echo 'MY_ENV_VAR = '
> MY_ENV_VAR =
> 
> I guess that it opens another shell in which the env var is not
> defined. How can I solve that (without adding the env var to .bashrc
> which is not a possible solution for me).

Export the variable in the parent environment.  It will then be
inhereted by the child environments.

Either for the specific command:

  $ MY_ENV_VAR=some_val rpmbuild --rebuild mypackage-0-0.1.src.rpm

Or:

  $ export MY_ENV_VAR=some_val
  $ rpmbuild --rebuild mypackage-0-0.1.src.rpm

Note that it is dangerous to use sudo to build rpm packages.  This
causes the build to run as root.  You don't want to do that.  The
wisdom of thet 'net is that this should be avoided.  Package building
should be done as a non-privileged user.

Bob

_______________________________________________
Rpm-list mailing list
Rpm-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/rpm-list

[Index of Archives]     [RPM Ecosystem]     [Linux Kernel]     [Red Hat Install]     [PAM]     [Red Hat Watch]     [Red Hat Development]     [Red Hat]     [Gimp]     [Yosemite News]     [IETF Discussion]

  Powered by Linux