On Tue, 06 Jan 2009 15:03:17 -0500
Jeremy Katz <katzj(a)redhat.com> wrote:
On Tue, 2009-01-06 at 13:16 -0600, Jason L Tibbitts III wrote:
> * Use of absolute symlinks in packages -
>
http://fedoraproject.org/wiki/PackagingDrafts/Absolute_symlinks_in_fonts_...
> o Turns out that rpm can be made to convert all symlinks to
> relative ones transparently, so that's being experimented with
> first.
So, at least as it stands right now, this can't easily be done with
symlinks(8)
symlinks -c will convert an absolute into a relative link, but the
problem is that the absolute link is something like
/usr/bin/barz -> /usr/bin/foo
Since /usr/bin/foo only exists under $RPM_BUILD_ROOT,
$RPM_BUILD_ROOT/usr/bin/barz looks like a dangling symlink (there is
no real /usr/bin/foo) and thus symlinks won't convert it to a relative
symlink.
The thing that obviously pops to mind then would be to do a chroot
into $RPM_BUILD_ROOT, but that would a) require symlinks under
$RPM_BUILD_ROOT and b) require root to do chroot(2).
So to get this to work will at the very least require a fair bit more
scripting "fun" :/
For symlinks that are created using "ln -s" in the install phase of the
rpm build, this is trivially fixed by making the absolute symlink point
to inside the buildroot, e.g. by changing:
ln -s /path/to/target %{buildroot}/path/to/source
to:
ln -s %{buildroot}/path/to/target %{buildroot}/path/to/source
and then using "symlinks -c" to convert it to a relative link.
Symlinks created using e.g. an upstream Makefile are of course somewhat
harder to fix.
Paul.