On Thursday 18 November 2010, Kevin Kofler wrote:
> Does this even need %pretrans at all? Rex Dieter used this in kde-settings-
> kdm:
> %pre kdm
> ## KDM fixup(s)
> # [snip similar hack for a moved/symlinked %config file]
> # handle %%_datadir/config/kdm -> /etc/kde/kdm
> [ -d %{_datadir}/config/kdm -a ! -L %{_datadir}/config/kdm ] && \
> %{__mv} -v %{_datadir}/config/kdm %{_datadir}/config/kdm.rpmorig ||:
>
> AFAIK, this worked while it was relevant.
It probably did, and because the above is related to config files, leaving
behind *.rpmorig is quite appropriate IMO. But leaving such cruft behind is
not that fine for non-config files.
This may be old news to some, but before running some tests (and posting my
previous mail in this thread), I thought/remembered that it would be possible
to solve this problem with a %pre script like:
%pre javadoc
[ $1 -gt 1 ] && [ -L %{_javadocdir}/%{name} ] && \
rm -f %{_javadocdir}/%{name} || :
However, while this does work in the sense that it will allow the upgrade to
happen and the %{_javadocdir}/%{name} symlink turns to a dir and has the
correct contents, for some reason rpm leaves the
%{_javadocdir}/%{name}-%{version} dir and its contents which were there in the
previous version of the package but are no longer in the new one behind,
unowned. This happens no matter whether the %{_javadocdir}/%{name} symlink
was owned by the previous package (a couple of specfiles that demonstrate this
are attached), created by it in %post without owning it, or even manually
created completely outside of rpm. This is with rpm-4.8.1-2.fc13.x86_64 on
F-13.
In my opinion this sounds like a bug in rpm, and somewhat a different one
compared to the usual problem of trying to overwrite a dir with a symlink
(which fails with a cpio error message) or install a dir with some contents in
place of a symlink to a dir (which ends up installing the contents into the
old symlink's target dir and doesn't turn the original symlink into a dir).
Not sure if I should file a bug about this or if it's already covered by the
existing dir<->symlink related open issues. Panu?
The %pretrans approach I posted does not have this problem. Even given the
inherent problems mentioned with %pretrans, I don't know of a better way to
solve this, and I personally find it quite acceptable. Getting rid of the
unversioned symlinks gradually during a few releases (e.g. drop it in F-N,
reintroduce as dir in F-N+X) would work as well, but that would leave releases
F-N..F-N+X-1 without anything unversioned in place which is bad, in my opinion
clearly worse than the %pretrans approach.
Name: foo
Version: 2
Release: 1%{?dist}
Summary: Dummy test package
Group: Development/Debug
License: Public Domain
URL: http://fedoraproject.org/
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
%prep
%build
%install
rm -rf $RPM_BUILD_ROOT
install -dm 755 $RPM_BUILD_ROOT%{_javadocdir}/%{name}
echo "Hello from %{name}-%{version}" > \
$RPM_BUILD_ROOT%{_javadocdir}/%{name}/bar
%clean
rm -rf $RPM_BUILD_ROOT
%pre
[ $1 -gt 1 ] && [ -L %{_javadocdir}/%{name} ] && \
rm -f %{_javadocdir}/%{name} || :
%files
%defattr(-,root,root,-)
%{_javadocdir}/*
Name: foo
Version: 1
Release: 1%{?dist}
Summary: Dummy test package
Group: Development/Debug
License: Public Domain
URL: http://fedoraproject.org/
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
%prep
%build
%install
rm -rf $RPM_BUILD_ROOT
install -dm 755 $RPM_BUILD_ROOT%{_javadocdir}/%{name}-%{version}
echo "Hello from %{name}-%{version}" > \
$RPM_BUILD_ROOT%{_javadocdir}/%{name}-%{version}/bar
ln -s %{name}-%{version} $RPM_BUILD_ROOT%{_javadocdir}/%{name}
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%{_javadocdir}/*
--
devel mailing list
[email protected]
https://admin.fedoraproject.org/mailman/listinfo/devel