Control: tags -1 + patch Control: severity -1 normal On Tue, Aug 04, 2015 at 08:44:34PM +0200, Andreas Beckmann wrote: > On 2015-08-04 17:15, Helmut Grohne wrote:> Package: piuparts > > So I tried to test a foreign arch installation of libc6 with piuparts > > and noticed that it succeeds despite failing to install the foreign arch > > libc6. The initial dpkg --unpack fails, because the architecture is not > > added to dpkg, but piuparts swallows that failure. I argue that in this > > situation, piuparts should either actually perform the test or fail. > > It should fail. So what command did you use to test it?
On a amd64 system with an amd64 pbuilder base.tgz, the following command succeeds (as in "PASS: All tests." and exit status 0) despite never unpacking the given package. piuparts -p /var/cache/apt/archives/libc6_2.19-19_i386.deb As you say this behaviour is buggy, I am raising the severity accordingly. > I'd suggest explicit > --foreign-arch <arch> > (which may be given multiple times) Implemented in the attached patch. It actually gets simpler that way. > Guessing from the dependencies won't work if the foreign dependency is > further down the dependency chain. This remark is correct. My previous patch would not handle e.g. crossbuild-essential-ppc64el. It can now be tested, but correctly determines that crossbuild-essential-ppc64el is currently not installable. Helmut
Binary files /tmp/WN39WQRhF9/piuparts-0.64/.piuparts.py.swp and /tmp/7lA5rM_eLG/piuparts-0.64+nmu1/.piuparts.py.swp differ diff -Nru piuparts-0.64/debian/changelog piuparts-0.64+nmu1/debian/changelog --- piuparts-0.64/debian/changelog 2015-06-12 13:44:18.000000000 +0200 +++ piuparts-0.64+nmu1/debian/changelog 2015-08-04 22:21:56.000000000 +0200 @@ -1,3 +1,10 @@ +piuparts (0.64+nmu1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Support testing foreign arch installations. (Closes: #-1) + + -- Helmut Grohne <hel...@subdivi.de> Tue, 04 Aug 2015 16:59:14 +0200 + piuparts (0.64) unstable; urgency=medium [ Holger Levsen ] diff -Nru piuparts-0.64/piuparts.py piuparts-0.64+nmu1/piuparts.py --- piuparts-0.64/piuparts.py 2015-06-12 13:43:13.000000000 +0200 +++ piuparts-0.64+nmu1/piuparts.py 2015-08-04 23:33:47.000000000 +0200 @@ -169,6 +169,7 @@ self.allow_database = False # chroot setup self.arch = None + self.foreignarchs = set() self.basetgz = None self.savetgz = None self.lvm_volume = None @@ -728,6 +729,7 @@ if not settings.schroot: self.mount_proc() self.mount_selinux() + self.add_architectures(settings.foreignarchs) self.configure_chroot() # Copy scripts dirs into the chroot, merging all dirs together, @@ -892,6 +894,17 @@ "\n".join(lines) + "\n") logging.debug("sources.list:\n" + indent_string("\n".join(lines))) + def add_architectures(self, architectures): + """Ensure that dpkg accepts the given architectures.""" + architectures = set(architectures) + if architectures: + _, native_arch = self.run(["dpkg", "--print-architecture"]) + architectures.discard(native_arch.strip()) + _, foreign_arches = self.run(["dpkg", "--print-foreign-architectures"]) + architectures.difference_update(foreign_arches.splitlines()) + for arch in architectures: + self.run(["dpkg", "--add-architecture", arch]) + def enable_testdebs_repo(self, update=True): if settings.testdebs_repo: if settings.testdebs_repo.startswith("deb"): @@ -2644,6 +2657,9 @@ parser.add_option("--arch", metavar="ARCH", action="store", help="Create chroot and run tests for (non-default) architecture ARCH.") + parser.add_option("--foreign-arch", metavar="ARCH", action="append", default=[], + help="Enable ARCH architecture in the chroot prior to installation.") + parser.add_option("--adt-virt", metavar='CMDLINE', default=None, help="Use CMDLINE via autopkgtest (adt-virt-*)" @@ -2934,6 +2950,7 @@ settings.allow_database = opts.allow_database # chroot setup settings.arch = opts.arch + settings.foreignarchs = set(opts.foreign_arch) settings.basetgz = opts.basetgz settings.savetgz = opts.save settings.lvm_volume = opts.lvm_volume