Package: mmdebstrap
Version: 0.4.1-6
Tags: patch

Hi Josch,

After much use, I finally found a buggy corner case of mmdebstrap!

| $ dpkg --print-architecture
| amd64
| $ mmdebstrap --variant=apt --mode=chrootless --architectures=armhf -v sid 
target http://deb.debian.org/debian
| ...
| I: installing packages...
| Reading package lists...
| Building dependency tree...
| Suggested packages:
|   liblocale-gettext-perl perl apt-doc aptitude | synaptic | wajig dpkg-dev
|   gnupg | gnupg2 | gnupg1 powermgmt-base bash-doc debconf-doc debconf-utils
|   whiptail | dialog libterm-readline-gnu-perl libgtk3-perl libnet-ldap-perl
|   debconf-kde-helper diffutils-doc wdiff debsig-verify mlocate | locate gnupg
|   less glibc-doc libc-l10n locales rng-tools gnutls-bin libpam-doc
|   sensible-utils bzip2 ncompress xz-utils tar-scripts tar-doc dosfstools kbd
|   | console-tools util-linux-locales
| Recommended packages:
|   ca-certificates bash-completion bsdmainutils apt-utils debconf-i18n manpages
|   libgpg-error-l10n libgpm2 uuid-runtime
| The following NEW packages will be installed:
|   adduser apt base-files base-passwd bash bsdutils coreutils dash debconf
|   debian-archive-keyring debianutils diffutils dpkg fdisk findutils gcc-9-base
|   gpgv grep gzip hostname init-system-helpers libacl1 libapt-pkg5.0 libattr1
|   libaudit-common libaudit1 libblkid1 libbz2-1.0 libc-bin libc6 libcap-ng0
|   libdb5.3 libdebconfclient0 libfdisk1 libffi6 libgcc1 libgcrypt20 libgmp10
|   libgnutls30 libgpg-error0 libhogweed4 libidn2-0 liblz4-1 liblzma5 libmount1
|   libncursesw6 libnettle6 libp11-kit0 libpam-modules libpam-modules-bin
|   libpam-runtime libpam0g libpcre2-8-0 libpcre3 libseccomp2 libselinux1
|   libsemanage-common libsemanage1 libsepol1 libsmartcols1 libstdc++6
|   libsystemd0 libtasn1-6 libtinfo6 libudev1 libunistring2 libuuid1 libzstd1
|   login mawk ncurses-base ncurses-bin passwd perl-base sed sysvinit-utils tar
|   util-linux zlib1g
| 0 upgraded, 79 newly installed, 0 to remove and 0 not upgraded.
| Need to get 0 B/28.8 MB of archives.
| After this operation, 92.0 MB of additional disk space will be used.
| dpkg: error processing archive 
/home/test/target/var/cache/apt/archives/gcc-9-base_9.2.1-2_armhf.deb 
(--unpack):
|  package architecture (armhf) does not match system (amd64)
| Errors were encountered while processing:
|  /home/test/target/var/cache/apt/archives/gcc-9-base_9.2.1-2_armhf.deb
| E: Sub-process /usr/bin/dpkg returned an error code (1)
| E: apt-get --yes -oDPkg::Options::=--force-not-root 
-oDPkg::Options::=--force-script-chrootless 
-oDPkg::Options::=--root=/home/test/target 
-oDPkg::Options::=--log=/home/test/target/var/log/dpkg.log install 
-oAPT::Status-Fd=<$fd> -oDpkg::Use-Pty=false 
/home/test/target//var/cache/apt/archives//libpcre3_2%3a8.39-12+b1_armhf.deb 
/home/test/target//var/cache/apt/archives//libpam-runtime_1.3.1-5_all.deb 
/home/test/target//var/cache/apt/archives//base-passwd_3.5.46_armhf.deb 
/home/test/target//var/cache/apt/archives//libc-bin_2.28-10_armhf.deb 
/home/test/target//var/cache/apt/archives//libsemanage-common_2.9-3_all.deb 
/home/test/target//var/cache/apt/archives//libaudit1_1%3a2.8.5-2_armhf.deb 
/home/test/target//var/cache/apt/archives//libpam-modules_1.3.1-5_armhf.deb 
/home/test/target//var/cache/apt/archives//bsdutils_1%3a2.34-0.1_armhf.deb 
/home/test/target//var/cache/apt/archives//libgpg-error0_1.36-7_armhf.deb 
/home/test/target//var/cache/apt/archives//libacl1_2.2.53-4_armhf.deb 
/home/test/target//var/cache/apt/archives//debianutils_4.8.6.3_armhf.deb 
/home/test/target//var/cache/apt/archives//sed_4.7-1_armhf.deb 
/home/test/target//var/cache/apt/archives//ncurses-base_6.1+20190803-1_all.deb 
/home/test/target//var/cache/apt/archives//findutils_4.6.0+git+20190510-2_armhf.deb
 /home/test/target//var/cache/apt/archives//libaudit-common_1%3a2.8.5-2_all.deb 
/home/test/target//var/cache/apt/archives//libsmartcols1_2.34-0.1_armhf.deb 
/home/test/target//var/cache/apt/archives//hostname_3.21_armhf.deb 
/home/test/target//var/cache/apt/archives//fdisk_2.34-0.1_armhf.deb 
/home/test/target//var/cache/apt/archives//libgcc1_1%3a9.2.1-2_armhf.deb 
/home/test/target//var/cache/apt/archives//libzstd1_1.4.3+dfsg-1_armhf.deb 
/home/test/target//var/cache/apt/archives//libdb5.3_5.3.28+dfsg1-0.6_armhf.deb 
/home/test/target//var/cache/apt/archives//libfdisk1_2.34-0.1_armhf.deb 
/home/test/target//var/cache/apt/archives//libattr1_1%3a2.4.48-4_armhf.deb 
/home/test/target//var/cache/apt/archives//apt_1.8.3_armhf.deb 
/home/test/target//var/cache/apt/archives//libpam0g_1.3.1-5_armhf.deb 
/home/test/target//var/cache/apt/archives//login_1%3a4.7-2_armhf.deb 
/home/test/target//var/cache/apt/archives//libgmp10_2%3a6.1.2+dfsg-4_armhf.deb 
/home/test/target//var/cache/apt/archives//libapt-pkg5.0_1.8.3_armhf.deb 
/home/test/target//var/cache/apt/archives//coreutils_8.30-3_armhf.deb 
/home/test/target//var/cache/apt/archives//init-system-helpers_1.57_all.deb 
/home/test/target//var/cache/apt/archives//libsepol1_2.9-2+b2_armhf.deb 
/home/test/target//var/cache/apt/archives//libstdc++6_9.2.1-2_armhf.deb 
/home/test/target//var/cache/apt/archives//libpam-modules-bin_1.3.1-5_armhf.deb 
/home/test/target//var/cache/apt/archives//libtinfo6_6.1+20190803-1_armhf.deb 
/home/test/target//var/cache/apt/archives//libnettle6_3.4.1-1+b1_armhf.deb 
/home/test/target//var/cache/apt/archives//libuuid1_2.34-0.1_armhf.deb 
/home/test/target//var/cache/apt/archives//libgcrypt20_1.8.4-5_armhf.deb 
/home/test/target//var/cache/apt/archives//libdebconfclient0_0.249_armhf.deb 
/home/test/target//var/cache/apt/archives//libffi6_3.2.1-9_armhf.deb 
/home/test/target//var/cache/apt/archives//grep_3.3-1_armhf.deb 
/home/test/target//var/cache/apt/archives//libsemanage1_2.9-3_armhf.deb 
/home/test/target//var/cache/apt/archives//libmount1_2.34-0.1_armhf.deb 
/home/test/target//var/cache/apt/archives//adduser_3.118_all.deb 
/home/test/target//var/cache/apt/archives//debian-archive-keyring_2019.1_all.deb
 /home/test/target//var/cache/apt/archives//libseccomp2_2.4.1-2_armhf.deb 
/home/test/target//var/cache/apt/archives//libhogweed4_3.4.1-1+b1_armhf.deb 
/home/test/target//var/cache/apt/archives//dpkg_1.19.7_armhf.deb 
/home/test/target//var/cache/apt/archives//liblzma5_5.2.4-1_armhf.deb 
/home/test/target//var/cache/apt/archives//gpgv_2.2.17-3_armhf.deb 
/home/test/target//var/cache/apt/archives//mawk_1.3.3-17+b3_armhf.deb 
/home/test/target//var/cache/apt/archives//sysvinit-utils_2.95-5_armhf.deb 
/home/test/target//var/cache/apt/archives//util-linux_2.34-0.1_armhf.deb 
/home/test/target//var/cache/apt/archives//bash_5.0-4_armhf.deb 
/home/test/target//var/cache/apt/archives//libblkid1_2.34-0.1_armhf.deb 
/home/test/target//var/cache/apt/archives//libcap-ng0_0.7.9-2+b1_armhf.deb 
/home/test/target//var/cache/apt/archives//libidn2-0_2.2.0-1_armhf.deb 
/home/test/target//var/cache/apt/archives//libselinux1_2.9-2+b2_armhf.deb 
/home/test/target//var/cache/apt/archives//libbz2-1.0_1.0.6-9.2_armhf.deb 
/home/test/target//var/cache/apt/archives//tar_1.30+dfsg-6_armhf.deb 
/home/test/target//var/cache/apt/archives//diffutils_1%3a3.7-3_armhf.deb 
/home/test/target//var/cache/apt/archives//base-files_11_armhf.deb 
/home/test/target//var/cache/apt/archives//libpcre2-8-0_10.32-5+b1_armhf.deb 
/home/test/target//var/cache/apt/archives//passwd_1%3a4.7-2_armhf.deb 
/home/test/target//var/cache/apt/archives//libtasn1-6_4.14-2_armhf.deb 
/home/test/target//var/cache/apt/archives//zlib1g_1%3a1.2.11.dfsg-1+b1_armhf.deb
 /home/test/target//var/cache/apt/archives//perl-base_5.28.1-6_armhf.deb 
/home/test/target//var/cache/apt/archives//liblz4-1_1.8.3-1_armhf.deb 
/home/test/target//var/cache/apt/archives//libgnutls30_3.6.9-4_armhf.deb 
/home/test/target//var/cache/apt/archives//libsystemd0_241-7_armhf.deb 
/home/test/target//var/cache/apt/archives//ncurses-bin_6.1+20190803-1_armhf.deb 
/home/test/target//var/cache/apt/archives//libudev1_241-7_armhf.deb 
/home/test/target//var/cache/apt/archives//libunistring2_0.9.10-2_armhf.deb 
/home/test/target//var/cache/apt/archives//dash_0.5.10.2-6_armhf.deb 
/home/test/target//var/cache/apt/archives//libncursesw6_6.1+20190803-1_armhf.deb
 /home/test/target//var/cache/apt/archives//gzip_1.9-3_armhf.deb 
/home/test/target//var/cache/apt/archives//libp11-kit0_0.23.16.1-2_armhf.deb 
/home/test/target//var/cache/apt/archives//gcc-9-base_9.2.1-2_armhf.deb 
/home/test/target//var/cache/apt/archives//libc6_2.28-10_armhf.deb 
/home/test/target//var/cache/apt/archives//debconf_1.5.73_all.deb failed
| $

What we see here is that apt fails to install gcc-9-base:armhf, because
armhf is not a known architecture to dpkg. Since we're using the
chrootless mode, we're using the outer system's dpkg directly and that
happens to be an amd64 one. dpkg checks ./target/var/lib/dpkg/arch, but
that is not created due to the condition in mmdebstrap line 1005.
$options->{foreignarchs} turns out to be empty and thus creation is
skipped. This condition is wrong for the case at hand. The outcome
should be positive whenever the mode is chrootless and the native
architecture of the outer system doesn't match the architecture of the
chroot. Unconditionally creating /var/lib/dpkg/arch makes this
particular problem go away. We could craft a complex condition here, but
I think that it would be best to simply remove the condition, because
the presence of the arch file does not hurt. What do you think?

And yes, chrootless still quickly fails. One thing at a time.

Helmut
--- a/mmdebstrap
+++ b/mmdebstrap
@@ -1002,14 +1002,12 @@
 	close $fh;
     }
 
-    if (scalar @{$options->{foreignarchs}} > 0) {
-	open my $fh, '>', "$options->{root}/var/lib/dpkg/arch" or error "cannot open /var/lib/dpkg/arch: $!";
-	print $fh "$options->{nativearch}\n";
-	foreach my $arch (@{$options->{foreignarchs}}) {
-	    print $fh "$arch\n";
-	}
-	close $fh;
+    open my $fh, '>', "$options->{root}/var/lib/dpkg/arch" or error "cannot open /var/lib/dpkg/arch: $!";
+    print $fh "$options->{nativearch}\n";
+    foreach my $arch (@{$options->{foreignarchs}}) {
+        print $fh "$arch\n";
     }
+    close $fh;
 
     if (scalar @{$options->{aptopts}} > 0) {
 	open my $fh, '>', "$options->{root}/etc/apt/apt.conf.d/99mmdebstrap" or error "cannot open /etc/apt/apt.conf.d/99mmdebstrap: $!";

Reply via email to