[R-pkg-team] Bug#950108: r-cran-dt: unhandled symlink to directory conversion: /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables{, -extensions}

Andreas Beckmann anbe at debian.org
Tue Jan 28 22:32:27 GMT 2020


Package: r-cran-dt
Version: 0.11+dfsg-1
Severity: serious
User: debian-qa at lists.debian.org
Usertags: piuparts

Hi,

an upgrade test with piuparts revealed that your package installs files
over existing symlinks and possibly overwrites files owned by other
packages. This usually means an old version of the package shipped a
symlink but that was later replaced by a real (and non-empty)
directory. This kind of overwriting another package's files cannot be
detected by dpkg.

This was observed on the following upgrade paths:

  buster -> bullseye

For /usr/share/doc/PACKAGE this may not be problematic as long as both
packages are installed, ship byte-for-byte identical files and are
upgraded in lockstep. But once one of the involved packages gets
removed, the other one will lose its documentation files, too,
including the copyright file, which is a violation of Policy 12.5:
https://www.debian.org/doc/debian-policy/ch-docs.html#copyright-information

For other overwritten locations anything interesting may happen.

Note that dpkg intentionally does not replace directories with symlinks
and vice versa, you need the maintainer scripts to do this.
See in particular the end of point 4 in
https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html#details-of-unpack-phase-of-installation-or-upgrade

It is recommended to use the dpkg-maintscript-helper commands
'dir_to_symlink' and 'symlink_to_dir' (available since dpkg 1.17.14)
to perform the conversion, ideally using d/$PACKAGE.maintscript.
See dpkg-maintscript-helper(1) and dh_installdeb(1) for details.


>From the attached log (scroll to the bottom...):

2m27.3s ERROR: FAIL: silently overwrites files via directory symlinks:
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/AutoFill (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/AutoFill (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/css (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/css (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.bootstrap.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.bootstrap.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.bootstrap.min.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.bootstrap.min.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.colVis.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.colVis.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.colVis.min.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.colVis.min.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.foundation.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.foundation.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.foundation.min.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.foundation.min.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.html5.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.html5.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.html5.min.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.html5.min.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.jqueryui.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.jqueryui.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.jqueryui.min.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.jqueryui.min.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.print.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.print.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/buttons.print.min.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/buttons.print.min.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/dataTables.buttons.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/dataTables.buttons.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/dataTables.buttons.min.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/dataTables.buttons.min.js (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/jszip.min.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/jszip.min.js (?)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Buttons/js/pdfmake.min.js (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Buttons/js/pdfmake.min.js (?)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/ColReorder (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/ColReorder (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/FixedColumns (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/FixedColumns (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/FixedHeader (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/FixedHeader (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/JSZip (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/JSZip (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/KeyTable (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/KeyTable (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Responsive (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Responsive (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/RowReorder (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/RowReorder (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Scroller (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Scroller (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/Select (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/Select (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions/pdfmake (r-cran-dt) != /usr/share/javascript/jquery-datatables-extensions/pdfmake (libjs-jquery-datatables-extensions)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables-extensions -> ../../../../../../share/javascript/jquery-datatables-extensions
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.bootstrap.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.bootstrap.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.bootstrap.min.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.bootstrap.min.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.bootstrap4.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.bootstrap4.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.bootstrap4.min.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.bootstrap4.min.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.foundation.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.foundation.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.foundation.min.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.foundation.min.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.jqueryui.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.jqueryui.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.jqueryui.min.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.jqueryui.min.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.material.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.material.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.material.min.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.material.min.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.semanticui.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.semanticui.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.semanticui.min.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.semanticui.min.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.uikit.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.uikit.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/dataTables.uikit.min.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/dataTables.uikit.min.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/jquery.dataTables.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/jquery.dataTables.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/jquery.dataTables.extra.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/jquery.dataTables.extra.css (?)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/css/jquery.dataTables.min.css (r-cran-dt) != /usr/share/javascript/jquery-datatables/css/jquery.dataTables.min.css (libjs-jquery-datatables)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables
  /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables/js (r-cran-dt) != /usr/share/javascript/jquery-datatables/js (?)
    /usr/lib/R/site-library/DT/htmlwidgets/lib/datatables -> ../../../../../../share/javascript/jquery-datatables


cheers,

Andreas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: r-cran-dt_0.11+dfsg-1.log.gz
Type: application/gzip
Size: 47323 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/r-pkg-team/attachments/20200128/d974afec/attachment-0001.gz>


More information about the R-pkg-team mailing list