From d5cf8851753dde4f45bfd3b48fcdf34247a8752a Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 7 Apr 2015 22:34:34 +0200 Subject: keyids in "apt-key del" should be case-insensitive gnupg is case-insensitive about keyids, so back then apt-key called it directly any keyid was accepted, but now that we work more with the keyid ourself we regressed to require uppercase keyids by accident. This is also inconsistent with other apt-key commands which still use gnupg directly. A single case-insensitive grep and we are fine again. Closes: 781696 --- test/integration/test-apt-key | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'test') diff --git a/test/integration/test-apt-key b/test/integration/test-apt-key index 47230cb55..b4f823ef1 100755 --- a/test/integration/test-apt-key +++ b/test/integration/test-apt-key @@ -111,3 +111,9 @@ cleanplate cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg testsuccess --nomsg aptkey --fakeroot del 5A90D141DBAC8DAE testempty aptkey list + +msgtest 'Test key removal with' 'lowercase key ID' #keylength somewher between 8byte and short +cleanplate +cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg +testsuccess --nomsg aptkey --fakeroot del d141dbac8dae +testempty aptkey list -- cgit v1.2.3 From 596ec43ce34421080a58b28299c1ed9cb0dbaa25 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 12 Apr 2015 19:16:01 +0200 Subject: parse specific-arch dependencies correctly on single-arch systems MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On single-arch the parsing was creating groupnames like 'apt:amd64' even through it should be 'apt' and a package in it belonging to architecture amd64. The result for foreign architectures was as expected: The dependency isn't satisfiable, but for native architecture it means the wrong package (ala apt:amd64:amd64) is linked so this is also not satisfiable, which is very much not expected. No longer excluding single-arch from this codepath allows the generation of the correct links, which still link to non-exisiting packages for foreign dependencies, but natives link to the expected native package just as if no architecture was given. For negative arch-specific dependencies ala Conflicts this matter was worse as apt will believe there isn't a Conflict to resolve, tricking it into calculating a solution dpkg will refuse. Architecture specific positive dependencies are rare in jessie – the only one in amd64 main is foreign –, negative dependencies do not even exist. Neither class has a native specimen, so no package in jessie is effected by this bug, but it might be interesting for stretch upgrades. This also means the regression potential is very low. Closes: 777760 --- test/integration/test-multiarch-foreign | 159 ++++++++++++++------- .../test-specific-architecture-dependencies | 148 ++++++++++++++++++- 2 files changed, 253 insertions(+), 54 deletions(-) (limited to 'test') diff --git a/test/integration/test-multiarch-foreign b/test/integration/test-multiarch-foreign index 332466d96..240f1a4d1 100755 --- a/test/integration/test-multiarch-foreign +++ b/test/integration/test-multiarch-foreign @@ -7,9 +7,13 @@ setupenvironment configarchitecture 'amd64' 'i386' 'armel' insertpackage 'unstable' 'cool-foo' 'amd64,i386' '1.0' 'Depends: foo' +insertpackage 'unstable' 'cool-foo-x64' 'amd64' '1.0' 'Depends: foo:amd64' +insertpackage 'unstable' 'cool-foo-x32' 'amd64' '1.0' 'Depends: foo:i386' insertpackage 'unstable' 'foo' 'amd64,i386,armel' '1.0' 'Multi-Arch: foreign' insertpackage 'unstable' 'cool-bar' 'amd64,i386' '1.0' 'Depends: bar-provider' +insertpackage 'unstable' 'cool-bar-x64' 'amd64' '1.0' 'Depends: bar-provider:amd64' +insertpackage 'unstable' 'cool-bar-x32' 'amd64' '1.0' 'Depends: bar-provider:i386' insertpackage 'unstable' 'bar' 'amd64,i386,armel' '1.0' 'Provides: bar-provider Multi-Arch: foreign' @@ -27,28 +31,6 @@ Inst cool-foo:i386 (1.0 unstable [i386]) Conf foo (1.0 unstable [amd64]) Conf cool-foo:i386 (1.0 unstable [i386])' aptget install cool-foo:i386 -s -testequal 'Reading package lists... -Building dependency tree... -The following extra packages will be installed: - foo -The following NEW packages will be installed: - cool-foo foo -0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst foo (1.0 unstable [amd64]) -Inst cool-foo (1.0 unstable [amd64]) -Conf foo (1.0 unstable [amd64]) -Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 -s - -testequal 'Reading package lists... -Building dependency tree... -The following NEW packages will be installed: - cool-foo foo -0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst foo (1.0 unstable [amd64]) -Inst cool-foo (1.0 unstable [amd64]) -Conf foo (1.0 unstable [amd64]) -Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:amd64 -s - testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: @@ -69,10 +51,6 @@ Inst cool-foo (1.0 unstable [amd64]) Conf foo:armel (1.0 unstable [armel]) Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:armel -s - - - - testequal 'Reading package lists... Building dependency tree... The following extra packages will be installed: @@ -87,6 +65,60 @@ Conf cool-bar:i386 (1.0 unstable [i386])' aptget install cool-bar:i386 -s testequal 'Reading package lists... Building dependency tree... +The following NEW packages will be installed: + bar:i386 cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar:i386 (1.0 unstable [i386]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar:i386 (1.0 unstable [i386]) +Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + bar:armel cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar:armel (1.0 unstable [armel]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar:armel (1.0 unstable [armel]) +Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:armel -s + +testequal "Reading package lists... +Building dependency tree... +Note, selecting 'bar:i386' instead of 'bar-provider:i386' +The following NEW packages will be installed: + bar:i386 cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar:i386 (1.0 unstable [i386]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar:i386 (1.0 unstable [i386]) +Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider:i386 -s -q=0 + +satisfiable_in_singlearch() { + testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following NEW packages will be installed: + cool-foo foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 unstable [amd64]) +Inst cool-foo (1.0 unstable [amd64]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 -s + + testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + cool-foo foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 unstable [amd64]) +Inst cool-foo (1.0 unstable [amd64]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:amd64 -s + + testequal 'Reading package lists... +Building dependency tree... The following extra packages will be installed: bar The following NEW packages will be installed: @@ -97,7 +129,7 @@ Inst cool-bar (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 -s -testequal 'Reading package lists... + testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: bar cool-bar @@ -107,44 +139,71 @@ Inst cool-bar (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:amd64 -s -testequal 'Reading package lists... + testequal "Reading package lists... Building dependency tree... +Note, selecting 'bar' instead of 'bar-provider' The following NEW packages will be installed: - bar:i386 cool-bar + bar cool-bar 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst bar:i386 (1.0 unstable [i386]) +Inst bar (1.0 unstable [amd64]) Inst cool-bar (1.0 unstable [amd64]) -Conf bar:i386 (1.0 unstable [i386]) -Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:i386 -s +Conf bar (1.0 unstable [amd64]) +Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider -s -q=0 -testequal 'Reading package lists... + testequal 'Reading package lists... Building dependency tree... +The following extra packages will be installed: + foo The following NEW packages will be installed: - bar:armel cool-bar + cool-foo-x64 foo 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst bar:armel (1.0 unstable [armel]) -Inst cool-bar (1.0 unstable [amd64]) -Conf bar:armel (1.0 unstable [armel]) -Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:armel -s +Inst foo (1.0 unstable [amd64]) +Inst cool-foo-x64 (1.0 unstable [amd64]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo-x64 (1.0 unstable [amd64])' aptget install cool-foo-x64 -s +} -testequal "Reading package lists... +#FIXME: do not work in single-arch as i386 isn't known at cache generation time + testequal 'Reading package lists... Building dependency tree... -Note, selecting 'bar' instead of 'bar-provider' +The following extra packages will be installed: + foo The following NEW packages will be installed: - bar cool-bar + cool-foo-x32 foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 unstable [amd64]) +Inst cool-foo-x32 (1.0 unstable [amd64]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo-x32 (1.0 unstable [amd64])' aptget install cool-foo-x32 -s + + testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + bar +The following NEW packages will be installed: + bar cool-bar-x32 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar (1.0 unstable [amd64]) -Inst cool-bar (1.0 unstable [amd64]) +Inst cool-bar-x32 (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) -Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider -s -q=0 +Conf cool-bar-x32 (1.0 unstable [amd64])' aptget install cool-bar-x32 -s -q=0 -testequal "Reading package lists... + testequal 'Reading package lists... Building dependency tree... -Note, selecting 'bar:i386' instead of 'bar-provider:i386' +The following extra packages will be installed: + bar The following NEW packages will be installed: - bar:i386 cool-bar + bar cool-bar-x64 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst bar:i386 (1.0 unstable [i386]) -Inst cool-bar (1.0 unstable [amd64]) -Conf bar:i386 (1.0 unstable [i386]) -Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider:i386 -s -q=0 +Inst bar (1.0 unstable [amd64]) +Inst cool-bar-x64 (1.0 unstable [amd64]) +Conf bar (1.0 unstable [amd64]) +Conf cool-bar-x64 (1.0 unstable [amd64])' aptget install cool-bar-x64 -s -q=0 + + +satisfiable_in_singlearch + +msgmsg 'switch to single architecture' +configarchitecture 'amd64' + +satisfiable_in_singlearch diff --git a/test/integration/test-specific-architecture-dependencies b/test/integration/test-specific-architecture-dependencies index 078a84654..ccfced150 100755 --- a/test/integration/test-specific-architecture-dependencies +++ b/test/integration/test-specific-architecture-dependencies @@ -12,16 +12,19 @@ insertinstalledpackage 'provider' 'amd64' '1' 'Provides: foo' insertpackage 'unstable' 'pre-depender' 'all' '1' 'Pre-Depends: libc6:i386' insertpackage 'unstable' 'depender' 'all' '1' 'Depends: libc6:i386' +insertpackage 'unstable' 'depender-x32' 'i386,amd64' '1' 'Depends: libc6:i386' +insertpackage 'unstable' 'depender-x64' 'i386,amd64' '1' 'Depends: libc6:amd64' insertpackage 'unstable' 'breaker' 'all' '1' 'Breaks: libold (<< 2)' -insertpackage 'unstable' 'breaker-x32' 'amd64' '1' 'Breaks: libold:i386 (<< 2)' -insertpackage 'unstable' 'breaker-x64' 'i386' '1' 'Breaks: libold:amd64 (<< 2)' +insertpackage 'unstable' 'breaker-x32' 'i386,amd64' '1' 'Breaks: libold:i386 (<< 2)' +insertpackage 'unstable' 'breaker-x64' 'i386,amd64' '1' 'Breaks: libold:amd64 (<< 2)' # conflicts with no effect insertpackage 'unstable' 'oldconflictor' 'all' '1' 'Conflicts: libold (<< 0)' insertpackage 'unstable' 'oldconflictor-x32' 'amd64' '1' 'Conflicts: libold:i386 (<< 0)' insertpackage 'unstable' 'oldconflictor-x64' 'i386' '1' 'Conflicts: libold:amd64 (<< 0)' insertpackage 'unstable' 'foo-depender' 'i386,amd64' '1' 'Depends: foo' +insertpackage 'unstable' 'foo-native-depender' 'amd64' '1' 'Depends: foo:amd64' insertpackage 'unstable' 'foo-foreign-depender' 'i386' '1' 'Depends: foo:amd64' insertpackage 'unstable' 'foo-conflictor' 'i386,amd64' '1' 'Conflicts: foo' @@ -54,6 +57,54 @@ Inst depender (1 unstable [all]) Conf libc6:i386 (1 unstable [i386]) Conf depender (1 unstable [all])' aptget install depender -s +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libc6:i386 +The following NEW packages will be installed: + depender-x32:i386 libc6:i386 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6:i386 (1 unstable [i386]) +Inst depender-x32:i386 (1 unstable [i386]) +Conf libc6:i386 (1 unstable [i386]) +Conf depender-x32:i386 (1 unstable [i386])' aptget install depender-x32:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libc6:i386 +The following NEW packages will be installed: + depender-x32 libc6:i386 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6:i386 (1 unstable [i386]) +Inst depender-x32 (1 unstable [amd64]) +Conf libc6:i386 (1 unstable [i386]) +Conf depender-x32 (1 unstable [amd64])' aptget install depender-x32:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libc6 +The following NEW packages will be installed: + depender-x64 libc6 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6 (1 unstable [amd64]) +Inst depender-x64 (1 unstable [amd64]) +Conf libc6 (1 unstable [amd64]) +Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libc6 +The following NEW packages will be installed: + depender-x64:i386 libc6 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6 (1 unstable [amd64]) +Inst depender-x64:i386 (1 unstable [i386]) +Conf libc6 (1 unstable [amd64]) +Conf depender-x64:i386 (1 unstable [i386])' aptget install depender-x64:i386 -s + testequal 'Reading package lists... Building dependency tree... The following packages will be REMOVED: @@ -75,7 +126,29 @@ The following NEW packages will be installed: 0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. Remv libold:i386 [1] Inst breaker-x32 (1 unstable [amd64]) -Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32 -s +Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + libold:i386 +The following NEW packages will be installed: + breaker-x32:i386 +0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv libold:i386 [1] +Inst breaker-x32:i386 (1 unstable [i386]) +Conf breaker-x32:i386 (1 unstable [i386])' aptget install breaker-x32:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + libold +The following NEW packages will be installed: + breaker-x64 +0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv libold [1] +Inst breaker-x64 (1 unstable [amd64]) +Conf breaker-x64 (1 unstable [amd64])' aptget install breaker-x64:amd64 -s testequal 'Reading package lists... Building dependency tree... @@ -86,7 +159,7 @@ The following NEW packages will be installed: 0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. Remv libold [1] Inst breaker-x64:i386 (1 unstable [i386]) -Conf breaker-x64:i386 (1 unstable [i386])' aptget install breaker-x64 -s +Conf breaker-x64:i386 (1 unstable [i386])' aptget install breaker-x64:i386 -s testequal 'Reading package lists... Building dependency tree... @@ -132,6 +205,14 @@ The following packages have unmet dependencies: foo-depender:i386 : Depends: foo:i386 but it is not installable E: Unable to correct problems, you have held broken packages.' aptget install foo-depender:i386 -s +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo-native-depender +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst foo-native-depender (1 unstable [amd64]) +Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s + testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: @@ -180,3 +261,62 @@ The following NEW packages will be installed: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Inst foo-no-conflictor:i386 (1 unstable [i386]) Conf foo-no-conflictor:i386 (1 unstable [i386])' aptget install foo-no-conflictor:i386 -s + +msgmsg 'switch to single architecture' +configarchitecture 'amd64' + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libc6 +The following NEW packages will be installed: + depender-x64 libc6 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6 (1 unstable [amd64]) +Inst depender-x64 (1 unstable [amd64]) +Conf libc6 (1 unstable [amd64]) +Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64 -s + +testequal 'Reading package lists... +Building dependency tree... +E: Unable to locate package depender-x64' aptget install depender-x64:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo-native-depender +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst foo-native-depender (1 unstable [amd64]) +Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s + +# libold:i386 is installed, but we don't see it as i386 isn't configured +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + breaker-x32 +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst breaker-x32 (1 unstable [amd64]) +Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + libold +The following NEW packages will be installed: + breaker-x64 +0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv libold [1] +Inst breaker-x64 (1 unstable [amd64]) +Conf breaker-x64 (1 unstable [amd64])' aptget install breaker-x64:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +Some packages could not be installed. This may mean that you have +requested an impossible situation or if you are using the unstable +distribution that some required packages have not yet been created +or been moved out of Incoming. +The following information may help to resolve the situation: + +The following packages have unmet dependencies: + depender-x32 : Depends: libc6:i386 but it is not installable +E: Unable to correct problems, you have held broken packages.' aptget install depender-x32 -s -- cgit v1.2.3 From 6c9937da76b9155d166092b9dda22d06200510c1 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 22 Apr 2015 12:06:40 +0200 Subject: remove "first package seen is native package" assumption The fix for #777760 causes packages of foreign (and the native) architectures, to be created correctly, but invalidates (like the previously existing, but policy-forbidden architecture-less packages we had to support for some upgrade scenarios) the assumption that the first (and only) package in the cache for a single architecture system must be the package for the native architecture (as, where should the other architectures come from, right? Wrong.). Depending on the order of parsing sources more or less packages can be effected by this. The effects are strange (for apt it mostly effects simulation/debug output, but also apt-mark on these specific packages), which complicates debugging, but relatively harmless if understood as most actions do not need direct named access to packages. The problem is fixed by removing the single-arch special casing in the paths who had them (Cache.FindPkg), so they use the same code as multi-arch systems, which use them as a wrapper for Grp.FindPkg. Note that single-arch system code was using Grp.FindPkg before as well if a Grp structure was handily available, so we don't introduce new untested code here: We remove more brittle special cases which are less tested instead (this was planed to be done for Stretch anyhow). Note further that the method with the assumption itself isn't fixed. As it is a private method I opted for declaring it deprecated instead and remove all its call positions. As it is private no-one can call this method legally (thanks to how c++ works by default its still an exported symbol through) and fixing it basically means reimplementing code we already have in Grp.FindPkg. Removing rather than fixing seems hence like a good solution. Closes: 782777 Thanks: Axel Beckert for testing --- .../test-bug-782777-single-arch-weirdness | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 test/integration/test-bug-782777-single-arch-weirdness (limited to 'test') diff --git a/test/integration/test-bug-782777-single-arch-weirdness b/test/integration/test-bug-782777-single-arch-weirdness new file mode 100755 index 000000000..004903385 --- /dev/null +++ b/test/integration/test-bug-782777-single-arch-weirdness @@ -0,0 +1,72 @@ +#!/bin/sh +# Ensure that the order in which packages are in the binary cache +# does not effect if they can be found or not +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' + +insertpackage 'unstable' 'abar' 'i386' '1' +insertpackage 'unstable' 'foobar' 'i386' '1' 'Depends: abar:amd64, zfoo:amd64' +insertpackage 'unstable' 'zfoo' 'i386' '1' + +setupaptarchive + +testrun() { + rm -f rootdir/var/lib/apt/extended_states + + testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + abar zfoo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst abar (1 unstable [i386]) +Inst zfoo (1 unstable [i386]) +Conf abar (1 unstable [i386]) +Conf zfoo (1 unstable [i386])' aptget install abar zfoo -s + + testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + abar zfoo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst abar (1 unstable [i386]) +Inst zfoo (1 unstable [i386]) +Conf abar (1 unstable [i386]) +Conf zfoo (1 unstable [i386])' aptget install abar:i386 zfoo:i386 -s + + testequal "Reading package lists... +Building dependency tree... +Package abar:amd64 is not available, but is referred to by another package. +This may mean that the package is missing, has been obsoleted, or +is only available from another source + +Package zfoo:amd64 is not available, but is referred to by another package. +This may mean that the package is missing, has been obsoleted, or +is only available from another source + +E: Package 'abar:amd64' has no installation candidate +E: Package 'zfoo:amd64' has no installation candidate" aptget install abar:amd64 zfoo:amd64 -s + + cp -f rootdir/var/lib/dpkg/status status.backup + insertinstalledpackage 'abar' 'i386' '1' + insertinstalledpackage 'zfoo' 'i386' '1' + + testequal 'abar +zfoo' aptmark showmanual abar zfoo + testequal 'abar set to automatically installed. +zfoo set to automatically installed.' aptmark auto abar zfoo + testempty aptmark showmanual abar zfoo + testequal 'abar +zfoo' aptmark showauto abar zfoo + + mv -f status.backup rootdir/var/lib/dpkg/status +} + +msgmsg 'Single-Arch testrun' +testrun +msgmsg 'Multi-Arch testrun' +configarchitecture 'i386' 'amd64' +testrun -- cgit v1.2.3