Re: [rpm] Correct way of writing spec file when packaging symlinks

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

 



On 10/19/2014 01:16 AM, Domen Vrankar wrote:
I also have one further question.

I was reading this stack overflow thread
(http://stackoverflow.com/questions/7521980/packaging-symlinks-via-rpmbuild)
and began to wonder if it is better to write spec file this way:

|%install
rm -rf %{buildroot}
mkdir %{buildroot}
ln -sf /foo/bin %{buildroot}/bar/newbin

%files
/newbin
|

Or is it better to put symlink creation in %post section:

%post|
ln -sf /foo/bin /bar/newbin|

As a rule of thumb, when possible its always better to package than do things in install scriptlets.


The problem that I'm having is that I can not create a relocatable rpm
with either of the above options. If I use --prefix= during installation
then the first option points to an invalid location and the second
option fails with an error during installation but the rpm still gets
installed so both cases fail but make some changes to file system.

...but relocation eliminates the "when possible" out of the picture.

Can either of these options be made relocatable?
For e.g. is there a variable that can be used in second case (something
like |ln -sf %{foo_prefix}||/bin |||%{bar_prefix}|/newbin so
%{foo_prefix} and %{bar_prefix} get changed during rpm installation
depending on specified prefixes?

Those macros are expanded at the time of package build, whereas relocation is done at install-time. Relocations are passed to scriplets via RPM_INSTALL_PREFIX[n] environment variables (where n >= 0).

	- Panu -

2014-10-18 23:34 GMT+02:00 Domen Vrankar <domen.vrankar@xxxxxxxxx
<mailto:domen.vrankar@xxxxxxxxx>>:

    Hi,

    I was searching the web and couldn't find an answer on how to
    correctly write a spec file when packaging symlinks.

    One option that I found was

    %config /path/symlink

    and the other was simply

    /path/symlink

    Based on Documentation
    http://www.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html
    am I correct in assuming that the second version (without any %
    prefix) is the correct format?

Well that depends on what you want. Symlinks can be marked %config, but %config files have different semantics. If you have a symlink that is created or altered in install-time scriptlets, its probably best to package it as a %ghost (so it doesn't actually get packaged at all, but is considered owned and will be removed with the package):

%ghost /path/symlink

or at least tell rpm not to verify the link target, eg

%verify(not link) /path/symlink

    Is there any difference in prefix if symlink points to directory or
    file?

Yes there is, because those target are entirely different beasts. Symlinks to directories are generally considered equal to the target directory by rpm, rather than the symlink (known as "fingerprinting" in rpm jargon). These constructs are not problematic in itself, but they are hard to change on package upgrades and because of that, often best avoided. Symlinks to files are not special in rpm though.

	- Panu -
_______________________________________________
Rpm-list mailing list
Rpm-list@xxxxxxxxxxxxx
http://lists.rpm.org/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