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

Bug#1055507: marked as done (apt: needs a way to specify 'use this suite only for versioned dependencies')



Your message dated Tue, 7 Nov 2023 20:00:18 +0200
with message-id <20231107195524.GA327926@debian.org>
and subject line Re: Bug#1055507: apt: needs a say to specify 'use this suite only for versioned dependencies'
has caused the Debian Bug report #1055507,
regarding apt: needs a way to specify 'use this suite only for versioned dependencies'
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
1055507: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1055507
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: apt
Version: 2.6.1
Severity: important

Hi,

When installing the dependencies of a package, it should be possible
to have apt use an otherwise lower-priority suite only if necessary to
satisfy a versioned dependency.

In the abstract: consider two suites A and B, where every package in
suite A is version x and every package in suite B is version y
(y>x). If a package p Depends: foo(>x), bar then there should be a way
for apt to be told to install p such that it will install foo from
suite B (because of the versioned dependency) but bar from suite A.

To use a more concrete example (which serves as a reproducer), I
generate a stub package with mk-build-deps:

matthew@aragorn:~/junk/aptbug$ cat debian/control
Source: mcv21-demo
Build-Depends: acr (>2), ckermit
matthew@aragorn:~/junk/aptbug$ mk-build-deps debian/control
...
dpkg-deb: building package 'mcv21-demo-build-deps' in '../mcv21-demo-build-deps_1.0_all.deb'.
...
matthew@aragorn:~/junk/aptbug$ dpkg --info mcv21-demo-build-deps_1.0_all.deb | grep Depends
 Depends: build-essential:amd64, acr (>= 2), ckermit

acr in bookworm is version 1.9.4.

If I set the priority of bookworm-backports to any value less than
500, then try and install mcv21-demo-build-deps it fails:

matthew@aragorn:~/junk/aptbug$ apt --dry-run install ./mcv21-demo-build-deps_1.0_all.deb
...
The following packages have unmet dependencies:
 mcv21-demo-build-deps : Depends: acr (>= 2) but 1.9.4-1 is to be installed
E: Unable to correct problems, you have held broken packages.

If I set the priority of bookworm-backports to >=500 (either by
adjusting the Pin-Priority or using -t) then apt instead tries to
install both acr and ckermit from bookworm-backports:

matthew@aragorn:~/junk/aptbug$ apt --dry-run install ./mcv21-demo-build-deps_1.0_all.deb
...
The following additional packages will be installed:
  acr ckermit
The following NEW packages will be installed:
  acr ckermit mcv21-demo-build-deps
0 upgraded, 3 newly installed, 0 to remove and 143 not upgraded.
Inst acr (2.1.2-1~bpo12+1 Debian Backports:stable-backports [all])
Inst ckermit (405~beta10-2~bpo12+1 Debian Backports:stable-backports [amd64])
Inst mcv21-demo-build-deps (1.0 local-deb [all])
Conf acr (2.1.2-1~bpo12+1 Debian Backports:stable-backports [all])
Conf ckermit (405~beta10-2~bpo12+1 Debian Backports:stable-backports [amd64])
Conf mcv21-demo-build-deps (1.0 local-deb [all])

WLOG, what I want is a way to arrange that apt when installing
mcv21-demo-build-deps will pick acr from stable-backports (because it
is necessary to satisfy the versioned dependency) but ckermit from
stable.

This is important because when e.g. building packages for deployment
from CI or similar, sometimes one needs some packages from the
relevant -backports suite, but you only want to use those backports
that are necessary to satisfy versioned constraints i.e. use the
minimal necessary set of backported packages. AFAICT there is no
priority mechanism and/or CLI switch that gets this behaviour - you
either get no backports at all (if backports priority < 500) or all
your dependencies are pulled from backports (because at equal priority
they have higher versions).

Thanks,

Matthew

-- Package-specific info:

-- apt-config dump --

APT "";
APT::Architecture "amd64";
APT::Build-Essential "";
APT::Build-Essential:: "build-essential";
APT::Install-Recommends "1";
APT::Install-Suggests "0";
APT::Sandbox "";
APT::Sandbox::User "_apt";
APT::Authentication "";
APT::Authentication::TrustCDROM "true";
APT::NeverAutoRemove "";
APT::NeverAutoRemove:: "^firmware-linux.*";
APT::NeverAutoRemove:: "^linux-firmware$";
APT::NeverAutoRemove:: "^linux-image-[a-z0-9]*$";
APT::NeverAutoRemove:: "^linux-image-[a-z0-9]*-[a-z0-9]*$";
APT::VersionedKernelPackages "";
APT::VersionedKernelPackages:: "linux-.*";
APT::VersionedKernelPackages:: "kfreebsd-.*";
APT::VersionedKernelPackages:: "gnumach-.*";
APT::VersionedKernelPackages:: ".*-modules";
APT::VersionedKernelPackages:: ".*-kernel";
APT::Never-MarkAuto-Sections "";
APT::Never-MarkAuto-Sections:: "metapackages";
APT::Never-MarkAuto-Sections:: "tasks";
APT::Move-Autobit-Sections "";
APT::Move-Autobit-Sections:: "oldlibs";
APT::Periodic "";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Update "";
APT::Update::Post-Invoke "";
APT::Update::Post-Invoke:: "touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";
APT::Update::Post-Invoke-Success "";
APT::Update::Post-Invoke-Success:: "[ ! -f /var/run/dbus/system_bus_socket ] || /usr/bin/dbus-send --system --dest=org.debian.apt --type=signal /org/debian/apt org.debian.apt.CacheChanged || true"; APT::Update::Post-Invoke-Success:: "/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S /var/run/dbus/system_bus_socket && /usr/bin/gdbus call --system --dest org.freedesktop.PackageKit --object-path /org/freedesktop/PackageKit --timeout 4 --method org.freedesktop.PackageKit.StateHasChanged cache-update > /dev/null; /bin/echo > /dev/null"; APT::Update::Post-Invoke-Success:: "if /usr/bin/test -w /var/cache/swcatalog -a -e /usr/bin/appstreamcli; then appstreamcli refresh --source=os > /dev/null || true; fi";
APT::Archives "";
APT::Archives::MaxAge "30";
APT::Archives::MinAge "2";
APT::Archives::MaxSize "500";
APT::Architectures "";
APT::Architectures:: "amd64";
APT::Compressor "";
APT::Compressor::. "";
APT::Compressor::.::Name ".";
APT::Compressor::.::Extension "";
APT::Compressor::.::Binary "";
APT::Compressor::.::Cost "0";
APT::Compressor::zstd "";
APT::Compressor::zstd::Name "zstd";
APT::Compressor::zstd::Extension ".zst";
APT::Compressor::zstd::Binary "zstd";
APT::Compressor::zstd::Cost "60";
APT::Compressor::zstd::CompressArg "";
APT::Compressor::zstd::CompressArg:: "-19";
APT::Compressor::zstd::UncompressArg "";
APT::Compressor::zstd::UncompressArg:: "-d";
APT::Compressor::lz4 "";
APT::Compressor::lz4::Name "lz4";
APT::Compressor::lz4::Extension ".lz4";
APT::Compressor::lz4::Binary "false";
APT::Compressor::lz4::Cost "50";
APT::Compressor::gzip "";
APT::Compressor::gzip::Name "gzip";
APT::Compressor::gzip::Extension ".gz";
APT::Compressor::gzip::Binary "gzip";
APT::Compressor::gzip::Cost "100";
APT::Compressor::gzip::CompressArg "";
APT::Compressor::gzip::CompressArg:: "-6n";
APT::Compressor::gzip::UncompressArg "";
APT::Compressor::gzip::UncompressArg:: "-d";
APT::Compressor::xz "";
APT::Compressor::xz::Name "xz";
APT::Compressor::xz::Extension ".xz";
APT::Compressor::xz::Binary "xz";
APT::Compressor::xz::Cost "200";
APT::Compressor::xz::CompressArg "";
APT::Compressor::xz::CompressArg:: "-6";
APT::Compressor::xz::UncompressArg "";
APT::Compressor::xz::UncompressArg:: "-d";
APT::Compressor::bzip2 "";
APT::Compressor::bzip2::Name "bzip2";
APT::Compressor::bzip2::Extension ".bz2";
APT::Compressor::bzip2::Binary "bzip2";
APT::Compressor::bzip2::Cost "300";
APT::Compressor::bzip2::CompressArg "";
APT::Compressor::bzip2::CompressArg:: "-6";
APT::Compressor::bzip2::UncompressArg "";
APT::Compressor::bzip2::UncompressArg:: "-d";
APT::Compressor::lzma "";
APT::Compressor::lzma::Name "lzma";
APT::Compressor::lzma::Extension ".lzma";
APT::Compressor::lzma::Binary "xz";
APT::Compressor::lzma::Cost "400";
APT::Compressor::lzma::CompressArg "";
APT::Compressor::lzma::CompressArg:: "--format=lzma";
APT::Compressor::lzma::CompressArg:: "-6";
APT::Compressor::lzma::UncompressArg "";
APT::Compressor::lzma::UncompressArg:: "--format=lzma";
APT::Compressor::lzma::UncompressArg:: "-d";
Dir "/";
Dir::State "var/lib/apt";
Dir::State::lists "lists/";
Dir::State::cdroms "cdroms.list";
Dir::State::extended_states "extended_states";
Dir::State::status "/var/lib/dpkg/status";
Dir::Cache "var/cache/apt";
Dir::Cache::archives "archives/";
Dir::Cache::srcpkgcache "srcpkgcache.bin";
Dir::Cache::pkgcache "pkgcache.bin";
Dir::Etc "etc/apt";
Dir::Etc::sourcelist "sources.list";
Dir::Etc::sourceparts "sources.list.d";
Dir::Etc::main "apt.conf";
Dir::Etc::netrc "auth.conf";
Dir::Etc::netrcparts "auth.conf.d";
Dir::Etc::parts "apt.conf.d";
Dir::Etc::preferences "preferences";
Dir::Etc::preferencesparts "preferences.d";
Dir::Etc::trusted "trusted.gpg";
Dir::Etc::trustedparts "trusted.gpg.d";
Dir::Bin "";
Dir::Bin::methods "/usr/lib/apt/methods";
Dir::Bin::solvers "";
Dir::Bin::solvers:: "/usr/lib/apt/solvers";
Dir::Bin::planners "";
Dir::Bin::planners:: "/usr/lib/apt/planners";
Dir::Bin::dpkg "/usr/bin/dpkg";
Dir::Bin::gzip "/bin/gzip";
Dir::Bin::bzip2 "/bin/bzip2";
Dir::Bin::xz "/usr/bin/xz";
Dir::Bin::lz4 "/usr/bin/lz4";
Dir::Bin::zstd "/usr/bin/zstd";
Dir::Bin::lzma "/usr/bin/xz";
Dir::Media "";
Dir::Media::MountPath "/media/cdrom";
Dir::Log "var/log/apt";
Dir::Log::Terminal "term.log";
Dir::Log::History "history.log";
Dir::Log::Planner "eipp.log.xz";
Dir::Ignore-Files-Silently "";
Dir::Ignore-Files-Silently:: "~$";
Dir::Ignore-Files-Silently:: "\.disabled$";
Dir::Ignore-Files-Silently:: "\.bak$";
Dir::Ignore-Files-Silently:: "\.dpkg-[a-z]+$";
Dir::Ignore-Files-Silently:: "\.ucf-[a-z]+$";
Dir::Ignore-Files-Silently:: "\.save$";
Dir::Ignore-Files-Silently:: "\.orig$";
Dir::Ignore-Files-Silently:: "\.distUpgrade$";
Acquire "";
Acquire::AllowInsecureRepositories "0";
Acquire::AllowWeakRepositories "0";
Acquire::AllowDowngradeToInsecureRepositories "0";
Acquire::cdrom "";
Acquire::cdrom::mount "/media/cdrom";
Acquire::IndexTargets "";
Acquire::IndexTargets::deb "";
Acquire::IndexTargets::deb::Packages "";
Acquire::IndexTargets::deb::Packages::MetaKey "$(COMPONENT)/binary-$(ARCHITECTURE)/Packages";
Acquire::IndexTargets::deb::Packages::flatMetaKey "Packages";
Acquire::IndexTargets::deb::Packages::ShortDescription "Packages";
Acquire::IndexTargets::deb::Packages::Description "$(RELEASE)/$(COMPONENT) $(ARCHITECTURE) Packages";
Acquire::IndexTargets::deb::Packages::flatDescription "$(RELEASE) Packages";
Acquire::IndexTargets::deb::Packages::Optional "0";
Acquire::IndexTargets::deb::Translations "";
Acquire::IndexTargets::deb::Translations::MetaKey "$(COMPONENT)/i18n/Translation-$(LANGUAGE)";
Acquire::IndexTargets::deb::Translations::flatMetaKey "$(LANGUAGE)";
Acquire::IndexTargets::deb::Translations::ShortDescription "Translation-$(LANGUAGE)"; Acquire::IndexTargets::deb::Translations::Description "$(RELEASE)/$(COMPONENT) Translation-$(LANGUAGE)"; Acquire::IndexTargets::deb::Translations::flatDescription "$(RELEASE) Translation-$(LANGUAGE)";
Acquire::IndexTargets::deb::DEP-11 "";
Acquire::IndexTargets::deb::DEP-11::MetaKey "$(COMPONENT)/dep11/Components-$(NATIVE_ARCHITECTURE).yml"; Acquire::IndexTargets::deb::DEP-11::ShortDescription "Components-$(NATIVE_ARCHITECTURE)"; Acquire::IndexTargets::deb::DEP-11::Description "$(RELEASE)/$(COMPONENT) $(NATIVE_ARCHITECTURE) DEP-11 Metadata";
Acquire::IndexTargets::deb::DEP-11::KeepCompressed "true";
Acquire::IndexTargets::deb::DEP-11::KeepCompressedAs "gz";
Acquire::IndexTargets::deb::DEP-11-icons-small "";
Acquire::IndexTargets::deb::DEP-11-icons-small::MetaKey "$(COMPONENT)/dep11/icons-48x48.tar"; Acquire::IndexTargets::deb::DEP-11-icons-small::ShortDescription "icons-48x48"; Acquire::IndexTargets::deb::DEP-11-icons-small::Description "$(RELEASE)/$(COMPONENT) DEP-11 48x48 Icons";
Acquire::IndexTargets::deb::DEP-11-icons-small::KeepCompressed "true";
Acquire::IndexTargets::deb::DEP-11-icons-small::KeepCompressedAs "gz";
Acquire::IndexTargets::deb::DEP-11-icons-small::DefaultEnabled "false";
Acquire::IndexTargets::deb::DEP-11-icons "";
Acquire::IndexTargets::deb::DEP-11-icons::MetaKey "$(COMPONENT)/dep11/icons-64x64.tar";
Acquire::IndexTargets::deb::DEP-11-icons::ShortDescription "icons-64x64";
Acquire::IndexTargets::deb::DEP-11-icons::Description "$(RELEASE)/$(COMPONENT) DEP-11 64x64 Icons";
Acquire::IndexTargets::deb::DEP-11-icons::KeepCompressed "true";
Acquire::IndexTargets::deb::DEP-11-icons::KeepCompressedAs "gz";
Acquire::IndexTargets::deb::DEP-11-icons::DefaultEnabled "false";
Acquire::IndexTargets::deb::DEP-11-icons-hidpi "";
Acquire::IndexTargets::deb::DEP-11-icons-hidpi::MetaKey "$(COMPONENT)/dep11/icons-64x64@2.tar"; Acquire::IndexTargets::deb::DEP-11-icons-hidpi::ShortDescription "icons-64x64@2"; Acquire::IndexTargets::deb::DEP-11-icons-hidpi::Description "$(RELEASE)/$(COMPONENT) DEP-11 64x64@2 Icons";
Acquire::IndexTargets::deb::DEP-11-icons-hidpi::KeepCompressed "true";
Acquire::IndexTargets::deb::DEP-11-icons-hidpi::KeepCompressedAs "gz";
Acquire::IndexTargets::deb::DEP-11-icons-hidpi::DefaultEnabled "false";
Acquire::IndexTargets::deb::DEP-11-icons-large "";
Acquire::IndexTargets::deb::DEP-11-icons-large::MetaKey "$(COMPONENT)/dep11/icons-128x128.tar"; Acquire::IndexTargets::deb::DEP-11-icons-large::ShortDescription "icons-128x128"; Acquire::IndexTargets::deb::DEP-11-icons-large::Description "$(RELEASE)/$(COMPONENT) DEP-11 128x128 Icons";
Acquire::IndexTargets::deb::DEP-11-icons-large::KeepCompressed "true";
Acquire::IndexTargets::deb::DEP-11-icons-large::KeepCompressedAs "gz";
Acquire::IndexTargets::deb::DEP-11-icons-large::DefaultEnabled "false";
Acquire::IndexTargets::deb::DEP-11-icons-large-hidpi "";
Acquire::IndexTargets::deb::DEP-11-icons-large-hidpi::MetaKey "$(COMPONENT)/dep11/icons-128x128@2.tar"; Acquire::IndexTargets::deb::DEP-11-icons-large-hidpi::ShortDescription "icons-128x128@2"; Acquire::IndexTargets::deb::DEP-11-icons-large-hidpi::Description "$(RELEASE)/$(COMPONENT) DEP-11 128x128@2 Icons";
Acquire::IndexTargets::deb::DEP-11-icons-large-hidpi::KeepCompressed "true";
Acquire::IndexTargets::deb::DEP-11-icons-large-hidpi::KeepCompressedAs "gz";
Acquire::IndexTargets::deb::DEP-11-icons-large-hidpi::DefaultEnabled "false";
Acquire::IndexTargets::deb-src "";
Acquire::IndexTargets::deb-src::Sources "";
Acquire::IndexTargets::deb-src::Sources::MetaKey "$(COMPONENT)/source/Sources";
Acquire::IndexTargets::deb-src::Sources::flatMetaKey "Sources";
Acquire::IndexTargets::deb-src::Sources::ShortDescription "Sources";
Acquire::IndexTargets::deb-src::Sources::Description "$(RELEASE)/$(COMPONENT) Sources"; Acquire::IndexTargets::deb-src::Sources::flatDescription "$(RELEASE) Sources";
Acquire::IndexTargets::deb-src::Sources::Optional "0";
Acquire::Changelogs "";
Acquire::Changelogs::URI "";
Acquire::Changelogs::URI::Origin "";
Acquire::Changelogs::URI::Origin::Debian "https://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog";; Acquire::Changelogs::URI::Origin::Ubuntu "https://changelogs.ubuntu.com/changelogs/pool/@CHANGEPATH@/changelog";;
Acquire::Changelogs::AlwaysOnline "";
Acquire::Changelogs::AlwaysOnline::Origin "";
Acquire::Changelogs::AlwaysOnline::Origin::Ubuntu "1";
Acquire::Languages "";
Acquire::Languages:: "en";
Acquire::Languages:: "none";
Acquire::CompressionTypes "";
Acquire::CompressionTypes::xz "xz";
Acquire::CompressionTypes::bz2 "bzip2";
Acquire::CompressionTypes::lzma "lzma";
Acquire::CompressionTypes::gz "gzip";
Acquire::CompressionTypes::lz4 "lz4";
Acquire::CompressionTypes::zst "zstd";
DPkg "";
DPkg::Path "/usr/sbin:/usr/bin:/sbin:/bin";
DPkg::Post-Invoke "";
DPkg::Post-Invoke:: "/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S /var/run/dbus/system_bus_socket && /usr/bin/gdbus call --system --dest org.freedesktop.PackageKit --object-path /org/freedesktop/PackageKit --timeout 4 --method org.freedesktop.PackageKit.StateHasChanged cache-update > /dev/null; /bin/echo > /dev/null"; DPkg::Post-Invoke:: "[ -x /usr/lib/libdvd-pkg/b-i_libdvdcss.sh ] && /usr/lib/libdvd-pkg/b-i_libdvdcss.sh || true"; DPkg::Post-Invoke:: "if [ -d /var/lib/update-notifier ]; then touch /var/lib/update-notifier/dpkg-run-stamp; fi; if [ -e /var/lib/update-notifier/updates-available ]; then echo > /var/lib/update-notifier/updates-available; fi ";
DPkg::Pre-Install-Pkgs "";
DPkg::Pre-Install-Pkgs:: "/usr/sbin/dpkg-preconfigure --apt || true";
Unattended-Upgrade "";
Unattended-Upgrade::Origins-Pattern "";
Unattended-Upgrade::Origins-Pattern:: "origin=Debian,archive=stable,label=Debian-Security";
Binary "apt-config";
Binary::apt "";
Binary::apt::APT "";
Binary::apt::APT::Color "1";
Binary::apt::APT::Cache "";
Binary::apt::APT::Cache::Show "";
Binary::apt::APT::Cache::Show::Version "2";
Binary::apt::APT::Cache::AllVersions "0";
Binary::apt::APT::Cache::ShowVirtuals "1";
Binary::apt::APT::Cache::Search "";
Binary::apt::APT::Cache::Search::Version "2";
Binary::apt::APT::Cache::ShowDependencyType "1";
Binary::apt::APT::Cache::ShowVersion "1";
Binary::apt::APT::Get "";
Binary::apt::APT::Get::Upgrade-Allow-New "1";
Binary::apt::APT::Get::Update "";
Binary::apt::APT::Get::Update::InteractiveReleaseInfoChanges "1";
Binary::apt::APT::Cmd "";
Binary::apt::APT::Cmd::Show-Update-Stats "1";
Binary::apt::APT::Cmd::Pattern-Only "1";
Binary::apt::APT::Keep-Downloaded-Packages "0";
Binary::apt::DPkg "";
Binary::apt::DPkg::Progress-Fancy "1";
Binary::apt::DPkg::Lock "";
Binary::apt::DPkg::Lock::Timeout "-1";
CommandLine "";
CommandLine::AsString "apt-config dump";

-- (no /etc/apt/preferences present) --


-- /etc/apt/preferences.d/bookworm-backports.pref --

Package: *
Pin: release n=bookworm-backports
Pin-Priority: 499

-- (/etc/apt/preferences.d/bookworm-backports.pref~ present, but not submitted) --


-- (/etc/apt/preferences.d/local-pin-init present, but not submitted) --


-- /etc/apt/sources.list --

#

# deb cdrom:[Debian GNU/Linux 6.0.0 _Squeeze_ - Official i386 NETINST Binary-1 20110205-14:34]/ squeeze main

#deb cdrom:[Debian GNU/Linux 6.0.0 _Squeeze_ - Official i386 NETINST Binary-1 20110205-14:34]/ squeeze main

deb http://ftp.uk.debian.org/debian/ bookworm main non-free non-free-firmware contrib deb-src http://ftp.uk.debian.org/debian/ bookworm main non-free non-free-firmware contrib

deb http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware non-free deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware non-free

deb http://ftp.uk.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware deb-src http://ftp.uk.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware

deb http://deb.debian.org/debian/ bookworm-backports main contrib non-free non-free-firmware

#Backports
#deb http://ftp.uk.debian.org/debian/ stretch-backports main
#deb-src http://ftp.uk.debian.org/debian/ stretch-backports main

-- (no /etc/apt/sources.list.d/* present) --


-- System Information:
Debian Release: 12.2
  APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable-security'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.1.0-13-amd64 (SMP w/8 CPU threads; PREEMPT)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8), LANGUAGE=en_GB:en
Shell: /bin/sh linked to /usr/bin/dash
Init: sysvinit (via /sbin/init)
LSM: AppArmor: enabled

Versions of packages apt depends on:
ii  adduser                    3.134
ii  debian-archive-keyring     2023.3+deb12u1
ii  gpgv                       2.2.40-1.1
ii  libapt-pkg6.0              2.6.1
ii  libc6                      2.36-9+deb12u3
ii  libelogind0 [libsystemd0]  246.10-1debian1
ii  libgcc-s1                  12.2.0-14
ii  libgnutls30                3.7.9-2
ii  libseccomp2                2.5.4-1+b3
ii  libstdc++6                 12.2.0-14

Versions of packages apt recommends:
ii  ca-certificates  20230311

Versions of packages apt suggests:
pn  apt-doc         <none>
ii  aptitude        0.8.13-5
ii  dpkg-dev        1.21.22
ii  gnupg           2.2.40-1.1
ii  gnupg1          1.4.23-1.1+b1
ii  gnupg2          2.2.40-1.1
ii  powermgmt-base  1.37

-- no debconf information

--- End Message ---
--- Begin Message ---
On Tue, Nov 07, 2023 at 03:09:52PM +0000, Matthew Vernon wrote:
> Package: apt
> Version: 2.6.1
> Severity: important
> 
> Hi,
> 
> When installing the dependencies of a package, it should be possible
> to have apt use an otherwise lower-priority suite only if necessary to
> satisfy a versioned dependency.
> 
> In the abstract: consider two suites A and B, where every package in
> suite A is version x and every package in suite B is version y
> (y>x). If a package p Depends: foo(>x), bar then there should be a way
> for apt to be told to install p such that it will install foo from
> suite B (because of the versioned dependency) but bar from suite A.
> 
> To use a more concrete example (which serves as a reproducer), I
> generate a stub package with mk-build-deps:
> 
> matthew@aragorn:~/junk/aptbug$ cat debian/control
> Source: mcv21-demo
> Build-Depends: acr (>2), ckermit
> matthew@aragorn:~/junk/aptbug$ mk-build-deps debian/control
> ...
> dpkg-deb: building package 'mcv21-demo-build-deps' in
> '../mcv21-demo-build-deps_1.0_all.deb'.
> ...
> matthew@aragorn:~/junk/aptbug$ dpkg --info mcv21-demo-build-deps_1.0_all.deb
> | grep Depends
>  Depends: build-essential:amd64, acr (>= 2), ckermit
> 
> acr in bookworm is version 1.9.4.
> 
> If I set the priority of bookworm-backports to any value less than
> 500, then try and install mcv21-demo-build-deps it fails:
> 
> matthew@aragorn:~/junk/aptbug$ apt --dry-run install
> ./mcv21-demo-build-deps_1.0_all.deb
> ...
> The following packages have unmet dependencies:
>  mcv21-demo-build-deps : Depends: acr (>= 2) but 1.9.4-1 is to be installed
> E: Unable to correct problems, you have held broken packages.
> 
> If I set the priority of bookworm-backports to >=500 (either by
> adjusting the Pin-Priority or using -t) then apt instead tries to
> install both acr and ckermit from bookworm-backports:
> 
> matthew@aragorn:~/junk/aptbug$ apt --dry-run install
> ./mcv21-demo-build-deps_1.0_all.deb
> ...
> The following additional packages will be installed:
>   acr ckermit
> The following NEW packages will be installed:
>   acr ckermit mcv21-demo-build-deps
> 0 upgraded, 3 newly installed, 0 to remove and 143 not upgraded.
> Inst acr (2.1.2-1~bpo12+1 Debian Backports:stable-backports [all])
> Inst ckermit (405~beta10-2~bpo12+1 Debian Backports:stable-backports
> [amd64])
> Inst mcv21-demo-build-deps (1.0 local-deb [all])
> Conf acr (2.1.2-1~bpo12+1 Debian Backports:stable-backports [all])
> Conf ckermit (405~beta10-2~bpo12+1 Debian Backports:stable-backports
> [amd64])
> Conf mcv21-demo-build-deps (1.0 local-deb [all])
> 
> WLOG, what I want is a way to arrange that apt when installing
> mcv21-demo-build-deps will pick acr from stable-backports (because it
> is necessary to satisfy the versioned dependency) but ckermit from
> stable.

What you are looking for is the package/release modifier, this
implements the feature to the maximum extent currently possible.
i
This also works with debs I think you can specify apt install
./foo.deb/meow-backports.

> 
> This is important because when e.g. building packages for deployment
> from CI or similar, sometimes one needs some packages from the
> relevant -backports suite, but you only want to use those backports
> that are necessary to satisfy versioned constraints i.e. use the
> minimal necessary set of backported packages. AFAICT there is no
> priority mechanism and/or CLI switch that gets this behaviour - you
> either get no backports at all (if backports priority < 500) or all
> your dependencies are pulled from backports (because at equal priority
> they have higher versions).

We are unable to accomodate further requests at this time.

More improvements will be possible with a new solver design like
https://salsa.debian.org/apt-team/solver3.

However, even solver3 won't be able to find the optimal solution,
but it's hard to describe what an optimal solution even would look
like. It would likely produce what I call a reasonable result.

I don't think there is much value in keeping this bug open because
we will just forget to close it when we get a new solver, and we have
implemented the feature as far as possible in the current setup,
so I'll go ahead and close this.

-- 
debian developer - deb.li/jak | jak-linux.org - free software dev
ubuntu core developer                              i speak de, en

--- End Message ---

Reply to: