Bug#1035886: libopencv-core406: please add Breaks: libopencv-core4.5 (<< 4.6)

Andreas Beckmann anbe at debian.org
Wed May 10 18:06:43 BST 2023


Package: libopencv-core406
Version: 4.6.0+dfsg-11
Severity: serious
Tags: patch
User: debian-qa at lists.debian.org
Usertags: piuparts

Hi,

while analyzing piuparts bullseye -> bookworm upgrade logs I found
several cases where apt chose a suboptimal solution that involved
keeping some upgradable package at the bullseye version in order to keep
some obsolete library from bullseye installed.
Many of these problematic upgrade paths involve packages from src:opencv
and src:onetbb where the library stacks from bullseye and bookworm are
not co-installable due to long transitive dependency chains.
We can easily hint apt into doing the right thing by adding Breaks
against the highest scoring package from the old library stack to the
highest scoring library from the new library stack, in this case
these are libopencv-core406 in bookworm and libopencv-core4.5 in
bullseye.
Please consider applying the attached patch.


Andreas

PS: a similar change is needed for src:onetbb

PPS: for the curious: apt problemresolver debug output from a randomly
selected opencv binary package (may not be the best example)

...
  Starting 2 pkgProblemResolver with broken count: 2
  Investigating (0) libtbbmalloc2:amd64 < none -> 2021.8.0-1 @un uN Ib >
  Broken libtbbmalloc2:amd64 Breaks on libtbb2:amd64 < 2020.3-1 @ii mK > (< 2020.3-1ubuntu2)
    Considering libtbb2:amd64 2 as a solution to libtbbmalloc2:amd64 1
    Holding Back libtbbmalloc2:amd64 rather than change libtbb2:amd64
  Investigating (0) libsemanage1:amd64 < 3.1-1+b2 @ii mK Ib >
  Broken libsemanage1:amd64 Depends on libsemanage-common:amd64 < 3.1-1 -> 3.4-1 @ii umU > (= 3.1-1)
    Considering libsemanage-common:amd64 1 as a solution to libsemanage1:amd64 -2
    Removing libsemanage1:amd64 rather than change libsemanage-common:amd64
  Investigating (1) libtbb12:amd64 < none -> 2021.8.0-1 @un uN Ib >
  Broken libtbb12:amd64 Depends on libtbbmalloc2:amd64 < none | 2021.8.0-1 @un uH > (= 2021.8.0-1)
    Considering libtbbmalloc2:amd64 1 as a solution to libtbb12:amd64 8
    Holding Back libtbb12:amd64 rather than change libtbbmalloc2:amd64
  Investigating (1) libtbb-dev:amd64 < 2020.3-1 -> 2021.8.0-1 @ii umU Ib >
  Broken libtbb-dev:amd64 Depends on libtbb12:amd64 < none | 2021.8.0-1 @un uH > (= 2021.8.0-1)
    Considering libtbb12:amd64 8 as a solution to libtbb-dev:amd64 2
    Holding Back libtbb-dev:amd64 rather than change libtbb12:amd64
  Investigating (2) libopencv-core406:amd64 < none -> 4.6.0+dfsg-11 @un uN Ib >
  Broken libopencv-core406:amd64 Depends on libtbb12:amd64 < none | 2021.8.0-1 @un uH > (>= 2021.4.0)
    Considering libtbb12:amd64 8 as a solution to libopencv-core406:amd64 12
    Holding Back libopencv-core406:amd64 rather than change libtbb12:amd64
  Investigating (2) libopencv-imgproc406:amd64 < none -> 4.6.0+dfsg-11 @un uN Ib >
  Broken libopencv-imgproc406:amd64 Depends on libopencv-core406:amd64 < none | 4.6.0+dfsg-11 @un uH > (>= 4.6.0+dfsg)
    Considering libopencv-core406:amd64 12 as a solution to libopencv-imgproc406:amd64 5
    Holding Back libopencv-imgproc406:amd64 rather than change libopencv-core406:amd64
  Investigating (2) libopencv-core-dev:amd64 < 4.5.1+dfsg-5 -> 4.6.0+dfsg-11 @ii umU Ib >
  Broken libopencv-core-dev:amd64 Depends on libopencv-core406:amd64 < none | 4.6.0+dfsg-11 @un uH > (= 4.6.0+dfsg-11)
    Considering libopencv-core406:amd64 12 as a solution to libopencv-core-dev:amd64 2
    Holding Back libopencv-core-dev:amd64 rather than change libopencv-core406:amd64
   Try to Re-Instate (2) libtbb-dev:amd64
  Investigating (2) libopencv-imgproc-dev:amd64 < 4.5.1+dfsg-5 -> 4.6.0+dfsg-11 @ii umU Ib >
  Broken libopencv-imgproc-dev:amd64 Depends on libopencv-core-dev:amd64 < 4.5.1+dfsg-5 | 4.6.0+dfsg-11 @ii umH > (= 4.6.0+dfsg-11)
    Considering libopencv-core-dev:amd64 2 as a solution to libopencv-imgproc-dev:amd64 1
    Holding Back libopencv-imgproc-dev:amd64 rather than change libopencv-core-dev:amd64
  Investigating (2) libopencv-flann406:amd64 < none -> 4.6.0+dfsg-11 @un uN Ib >
  Broken libopencv-flann406:amd64 Depends on libopencv-core406:amd64 < none | 4.6.0+dfsg-11 @un uH > (>= 4.6.0+dfsg)
    Considering libopencv-core406:amd64 12 as a solution to libopencv-flann406:amd64 1
    Holding Back libopencv-flann406:amd64 rather than change libopencv-core406:amd64
  Investigating (2) libopencv-video406:amd64 < none -> 4.6.0+dfsg-11 @un uN Ib >
  Broken libopencv-video406:amd64 Depends on libopencv-core406:amd64 < none | 4.6.0+dfsg-11 @un uH > (>= 4.6.0+dfsg)
    Considering libopencv-core406:amd64 12 as a solution to libopencv-video406:amd64 0
    Holding Back libopencv-video406:amd64 rather than change libopencv-core406:amd64
  Investigating (2) libopencv-calib3d406:amd64 < none -> 4.6.0+dfsg-11 @un uN Ib >
  Broken libopencv-calib3d406:amd64 Depends on libopencv-core406:amd64 < none | 4.6.0+dfsg-11 @un uH > (>= 4.6.0+dfsg)
    Considering libopencv-core406:amd64 12 as a solution to libopencv-calib3d406:amd64 0
    Holding Back libopencv-calib3d406:amd64 rather than change libopencv-core406:amd64
  Investigating (2) libopencv-features2d406:amd64 < none -> 4.6.0+dfsg-11 @un uN Ib >
  Broken libopencv-features2d406:amd64 Depends on libopencv-core406:amd64 < none | 4.6.0+dfsg-11 @un uH > (>= 4.6.0+dfsg)
    Considering libopencv-core406:amd64 12 as a solution to libopencv-features2d406:amd64 0
    Holding Back libopencv-features2d406:amd64 rather than change libopencv-core406:amd64
  Investigating (2) libopencv-dnn406:amd64 < none -> 4.6.0+dfsg-11 @un uN Ib >
  Broken libopencv-dnn406:amd64 Depends on libopencv-core406:amd64 < none | 4.6.0+dfsg-11 @un uH > (>= 4.6.0+dfsg)
    Considering libopencv-core406:amd64 12 as a solution to libopencv-dnn406:amd64 0
    Holding Back libopencv-dnn406:amd64 rather than change libopencv-core406:amd64
  Investigating (2) libopencv-video-dev:amd64 < 4.5.1+dfsg-5 -> 4.6.0+dfsg-11 @ii umU Ib >
  Broken libopencv-video-dev:amd64 Depends on libopencv-imgproc-dev:amd64 < 4.5.1+dfsg-5 | 4.6.0+dfsg-11 @ii umH > (= 4.6.0+dfsg-11)
    Considering libopencv-imgproc-dev:amd64 1 as a solution to libopencv-video-dev:amd64 0
    Holding Back libopencv-video-dev:amd64 rather than change libopencv-imgproc-dev:amd64
   Try to Re-Instate (3) libopencv-core-dev:amd64
   Try to Re-Instate (3) libopencv-imgproc-dev:amd64
   Try to Re-Instate (3) libopencv-video-dev:amd64
  Done

  The following packages will be REMOVED:
    libsemanage1
  The following NEW packages will be installed:
    gcc-12-base libcap2 libffi8 libfile-find-rule-perl libgdbm-compat4 libgdbm6
    libmd0 libnumber-compare-perl libperl5.36 libsemanage2 libsepol2 libssl3
    libtext-glob-perl perl perl-modules-5.36 rpcsvc-proto usrmerge
    util-linux-extra
  The following packages have been kept back:
    libopencv-core-dev libopencv-imgproc-dev libopencv-video-dev libtbb-dev
  The following packages will be upgraded:
...

and now with packages that have the Breaks added:

...
  Starting 2 pkgProblemResolver with broken count: 4
  Investigating (0) libopencv-core406:amd64 < none -> 4.6.0+dfsg-11.1~deb12anbe1 @un uN Ib >
  Broken libopencv-core406:amd64 Breaks on libopencv-core4.5:amd64 < 4.5.1+dfsg-5 @ii mK > (< 4.6)
    Considering libopencv-core4.5:amd64 5 as a solution to libopencv-core406:amd64 12
    Added libopencv-core4.5:amd64 to the remove list
    Fixing libopencv-core406:amd64 via remove of libopencv-core4.5:amd64
  Investigating (0) libtbb12:amd64 < none -> 2021.8.0-1.1~deb12anbe1 @un uN Ib >
  Broken libtbb12:amd64 Breaks on libtbb2:amd64 < 2020.3-1 @ii mK > (< 2021)
    Considering libtbb2:amd64 0 as a solution to libtbb12:amd64 8
    Added libtbb2:amd64 to the remove list
    Fixing libtbb12:amd64 via remove of libtbb2:amd64
  Investigating (0) libopencv-imgproc4.5:amd64 < 4.5.1+dfsg-5 @ii mK Ib >
  Broken libopencv-imgproc4.5:amd64 Depends on libopencv-core4.5:amd64 < 4.5.1+dfsg-5 @ii mR > (>= 4.5.1+dfsg)
    Considering libopencv-core4.5:amd64 5 as a solution to libopencv-imgproc4.5:amd64 2
    Removing libopencv-imgproc4.5:amd64 rather than change libopencv-core4.5:amd64
  Investigating (0) libopencv-flann4.5:amd64 < 4.5.1+dfsg-5 @ii mK Ib >
  Broken libopencv-flann4.5:amd64 Depends on libopencv-core4.5:amd64 < 4.5.1+dfsg-5 @ii mR > (>= 4.5.1+dfsg)
    Considering libopencv-core4.5:amd64 5 as a solution to libopencv-flann4.5:amd64 0
    Removing libopencv-flann4.5:amd64 rather than change libopencv-core4.5:amd64
  Investigating (0) libopencv-dnn4.5:amd64 < 4.5.1+dfsg-5 @ii mK Ib >
  Broken libopencv-dnn4.5:amd64 Depends on libopencv-core4.5:amd64 < 4.5.1+dfsg-5 @ii mR > (>= 4.5.1+dfsg)
    Considering libopencv-core4.5:amd64 5 as a solution to libopencv-dnn4.5:amd64 -1
    Removing libopencv-dnn4.5:amd64 rather than change libopencv-core4.5:amd64
  Investigating (0) libopencv-features2d4.5:amd64 < 4.5.1+dfsg-5 @ii mK Ib >
  Broken libopencv-features2d4.5:amd64 Depends on libopencv-core4.5:amd64 < 4.5.1+dfsg-5 @ii mR > (>= 4.5.1+dfsg)
    Considering libopencv-core4.5:amd64 5 as a solution to libopencv-features2d4.5:amd64 -1
    Removing libopencv-features2d4.5:amd64 rather than change libopencv-core4.5:amd64
  Investigating (0) libopencv-calib3d4.5:amd64 < 4.5.1+dfsg-5 @ii mK Ib >
  Broken libopencv-calib3d4.5:amd64 Depends on libopencv-core4.5:amd64 < 4.5.1+dfsg-5 @ii mR > (>= 4.5.1+dfsg)
    Considering libopencv-core4.5:amd64 5 as a solution to libopencv-calib3d4.5:amd64 -1
    Removing libopencv-calib3d4.5:amd64 rather than change libopencv-core4.5:amd64
  Investigating (0) libopencv-video4.5:amd64 < 4.5.1+dfsg-5 @ii mK Ib >
  Broken libopencv-video4.5:amd64 Depends on libopencv-calib3d4.5:amd64 < 4.5.1+dfsg-5 @ii mR > (>= 4.5.1+dfsg)
    Considering libopencv-calib3d4.5:amd64 -1 as a solution to libopencv-video4.5:amd64 -2
    Removing libopencv-video4.5:amd64 rather than change libopencv-calib3d4.5:amd64
  Investigating (0) libsemanage1:amd64 < 3.1-1+b2 @ii mK Ib >
  Broken libsemanage1:amd64 Depends on libsemanage-common:amd64 < 3.1-1 -> 3.4-1 @ii umU > (= 3.1-1)
    Considering libsemanage-common:amd64 1 as a solution to libsemanage1:amd64 -2
    Removing libsemanage1:amd64 rather than change libsemanage-common:amd64
  Done

  The following package was automatically installed and is no longer required:
    libprotobuf23
  Use 'sudo apt autoremove' to remove it.
  The following packages will be REMOVED:
    libopencv-calib3d4.5 libopencv-core4.5 libopencv-dnn4.5
    libopencv-features2d4.5 libopencv-flann4.5 libopencv-imgproc4.5
    libopencv-video4.5 libsemanage1 libtbb2
  The following NEW packages will be installed:
    gcc-12-base libblas3 libbsd0 libcap2 libdrm-amdgpu1 libdrm-common
    libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libedit2 libelf1
    libexpat1 libffi8 libfile-find-rule-perl libgdbm-compat4 libgdbm6
    libgfortran5 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0
    libhwloc15 libicu72 liblapack3 libllvm15 libmd0 libnumber-compare-perl
    libopencv-calib3d406 libopencv-core406 libopencv-dnn406
    libopencv-features2d406 libopencv-flann406 libopencv-imgproc406
    libopencv-video406 libpciaccess0 libperl5.36 libprotobuf32 libquadmath0
    libsemanage2 libsensors-config libsensors5 libsepol2 libssl3 libtbb12
    libtbbbind-2-5 libtbbmalloc2 libtext-glob-perl libx11-6 libx11-data
    libx11-xcb1 libxau6 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0
    libxcb-randr0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcb1 libxdmcp6
    libxext6 libxfixes3 libxml2 libxshmfence1 libxxf86vm1 libz3-4 perl
    perl-modules-5.36 rpcsvc-proto usrmerge util-linux-extra
  The following packages will be upgraded:
...
-------------- next part --------------
>From d8438234aa51cb0ab79e073793cd4c01e5115ec4 Mon Sep 17 00:00:00 2001
From: Andreas Beckmann <anbe at debian.org>
Date: Tue, 9 May 2023 23:26:58 +0200
Subject: [PATCH 1/2] libopencv-core406: Add Breaks: libopencv-core4.5 for
 smoother upgrades from bullseye

The two opencv versions are not co-installable due to some not
co-installable dependencies (at least libtbb2/libtbb12, maybe more).
Adding Breaks against the highest scoring obsolete package should hint
apt to favor removing the whole obsolete stack instead of trying to keep
(some of) the obsolete packages installed by not upgrading some other
packages to the new version.

Closes: #
---
 debian/control | 1 +
 1 file changed, 1 insertion(+)

diff --git a/debian/control b/debian/control
index 4b6a4c095..421f0eb14 100644
--- a/debian/control
+++ b/debian/control
@@ -168,6 +168,7 @@ Section: libs
 Depends: ${misc:Depends},
          ${shlibs:Depends}
 Pre-Depends: ${misc:Pre-Depends}
+Breaks: libopencv-core4.5 (<< 4.6),
 Description: computer vision core library
  This package contains the OpenCV (Open Computer Vision) core runtime libraries.
  .
-- 
2.20.1

-------------- next part --------------
>From af66a19f73c3d2b0eefd1a51604c405dd0bc64db Mon Sep 17 00:00:00 2001
From: Andreas Beckmann <anbe at debian.org>
Date: Tue, 9 May 2023 23:39:59 +0200
Subject: [PATCH 2/2] gbp.conf: move the component setting to the DEFAULT
 section

Gbp-Dch: ignore
---
 debian/gbp.conf | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/debian/gbp.conf b/debian/gbp.conf
index b5d1dad92..f2905a065 100644
--- a/debian/gbp.conf
+++ b/debian/gbp.conf
@@ -1,3 +1,5 @@
+[DEFAULT]
+component = contrib
+
 [import-orig]
 pristine-tar = True
-component = contrib
-- 
2.20.1



More information about the debian-science-maintainers mailing list