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_tem...
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" :/
Jeremy
On Tue, 06 Jan 2009 15:03:17 -0500 Jeremy Katz katzj@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_tem...
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.
On Tue, 2009-01-06 at 20:20 +0000, Paul Howarth wrote:
On Tue, 06 Jan 2009 15:03:17 -0500 Jeremy Katz katzj@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_tem...
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)
[snip]
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:
Sure, but if we're going to dictate changes, let's say they should be changed to what we want :-)
Jeremy
packaging@lists.fedoraproject.org