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