On 2012-09-29 12:47, Vincent Bernat wrote: > ❦ 29 septembre 2012 12:35 CEST, Salvatore Bonaccorso <car...@debian.org> : > >>> In roundcube package, I am turning existing directories to symlinks and >>> symlinks into directories. It seems that dpkg does not like that: >>> symlinks are not replaced with the appropriate directories. I didn't >>> find anything about this in the documentation. How should I handle such >>> cases? >> >> This is indeed intentional, that dpkg never replaces directories with >> symlinks if directory is present, see [1] and [2] (under 4.). >> >> [1]: http://bugs.debian.org/404850 >> [2]: >> http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html#s-unpackphase >> >> Andreas Beckmann recently is filling many of these bugs discovered by >> piuparts runs (updating Squeeze -> Wheezy). Most common approach there >> is to do the substitution in postinst, in case the directory is there. >> See for example [3]. >> >> [3]: http://bugs.debian.org/687859 >> >> Does this helps? > > Thanks for the pointers! I now understand why this does not > work. Fixing in postinst is quite difficult since I have swapped > symlinks and, from the bug reports, successive installs make the > situation worst (things got installed in the wrong place). > > Well, I need to work a bit on this.
I think a working approach is: * directory to symlink fix it up in the postinst (at postinst, the directory should have become "empty"): if [ -d $X ] && [ ! -L $X ]; then rmdir $X # bombs if not empty ln -s $target $X fi * symlink to directory remove symlinks in the preinst to avoid installing stuff at the wrong place test ! -L $X || rm $X The whole process may not work properly on aborted upgrades (or even downgrades, but these are not really supported anyway). Andreas -- To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/5066d4fd.8000...@abeckmann.de