Applying slightly modified patch from Raphaƫl Hertzog <hertzog@debian.org> to fix...
authorDaniel Baumann <daniel@debian.org>
Sun, 20 Jan 2013 07:53:43 +0000 (08:53 +0100)
committerDaniel Baumann <daniel@debian.org>
Sun, 20 Jan 2013 07:55:05 +0000 (08:55 +0100)
scripts/build/binary_debian-installer

index 78e7f5a..624b42e 100755 (executable)
@@ -523,34 +523,25 @@ then
                # d-i does not support (for example) re-installing grub from target/ - the grub
                # .debs must actually exist.
 
-               # Modify dpkg status to show the required packages are not installed.
-               cp chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
-               for PACKAGE in ${DI_REQ_PACKAGES}
-               do
-                       awk -v f=0 '
-                               f == 1 { print "Status: purge ok not-installed"; f=0; next }
-                               /Package: '"${PACKAGE}"'/ { f=1; }
-                               { print }
-                               ' chroot/var/lib/dpkg/status > chroot/var/lib/dpkg/status.awk
-                       mv chroot/var/lib/dpkg/status.awk chroot/var/lib/dpkg/status
-               done
-
-               # Download .deb's that we just marked as "purged" which caused broken dependencies
-               Chroot chroot ${_LB_APT_COMMAND} -f dist-upgrade
-
-               # Revert dpkg status file
-               mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
-
                # Download .debs of the required packages
                Chroot chroot ${_LB_APT_COMMAND} install ${DI_PACKAGES} ${DI_FIRMWARE_PACKAGES} ${DI_REQ_PACKAGES}
+
+               # Drop the packages already installed that d-i doesn't explicitely need
+               _REMAINING_PACKAGES="$(echo ${DI_FIRMWARE_PACKAGES} ${DI_REQ_PACKAGES} | sed -e 's# #|#g')"
+               _REMAINING_PACKAGES="$(sed -n -e 's|Package: ||p' chroot/var/lib/dpkg/status.tmp | grep -E -v "^${_REMAINING_PACKAGES}$")"
+
+               for _PACKAGE in ${_REMAINING_PACKAGES}
+               do
+                       rm -f "chroot/binary.deb/archives/${_PACKAGE}_*.deb"
+               done
        else
                # Download .debs of the required packages
                Chroot chroot ${_LB_APT_COMMAND} install ${DI_PACKAGES} ${DI_FIRMWARE_PACKAGES}
-
-               # Revert dpkg status file
-               mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
        fi
 
+       # Revert dpkg status file
+       mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
+
        mv chroot/binary.deb ./
 
        for _ARCHIVE_AREA in $(echo ${LB_PARENT_ARCHIVE_AREAS} ${LB_ARCHIVE_AREAS})