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

Re: How to properly move a file from a .deb to another one ?



Xavier Roche wrote:
> swin von Brederlow a écrit :
>> If /usr/share/doc/httrack/html is a symlink then you should not have
>> any files in it in the deb.
> 
> Correct - and there are definitely files in this directory.
> 
>> You did something seriously wrong there to
>> make this happen, like create the link in preinst but also have the
>> dir in the package or something.
> 
> I think the problem is that the webhttrack.files contained a "usr/share/doc/httrack/html/server" line (instead of "usr/httrack/html/server"), and the dh_* scripts saw it as a "true" directory.
> 
> Darn, this is a vicious packaging bug.. playing with the <new-preinst upgrade old-version> might be the solution to kick the simlink ?

Then your problem may be unrelated to the move of one file from a
package to another, but instead related to dpkg being unable to
replace a directory by a symlink. In a 'standard' such upgrade (with
only one package), the new symlink is ignored (not installed). With
your conflict/replace, it seems it leads to a dpkg error.
  I hit this problem with one of my package (#362487).
Here is the hack I used to get arround this bug in the postinst of my
package :
case "$1" in
    configure)
       # Workaround a dpkg bug (transition directory->symlink does not work)
        DESTDIR=/usr/lib/python2.3/site-packages/mercurial/templates
       if [ -d /usr/lib/python2.3/site-packages/mercurial \
            -a ! -L $DESTDIR ] ; then
               # DESTDIR is not a symlink as it should be
               if rmdir $DESTDIR ; then :
               else
                       # DESTDIR is not an empty directory !
                       # We try to move files
                       mv -v $DESTDIR/* /usr/share/mercurial/templates/
                       # and we fail is that still does not work
                       rmdir $DESTDIR
               fi
               ln -s ../../../../share/mercurial/templates $DESTDIR
       fi
    ;;
esac

Perhaps you will need something similar (and perhaps in the preinst for
you)

  Best regards,
    Vincent



Reply to: