]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
UBUNTU: [Packaging] dkms -- try launchpad librarian for pool downloads
authorAndy Whitcroft <apw@canonical.com>
Fri, 1 Nov 2019 21:48:00 +0000 (22:48 +0100)
committerStefan Bader <stefan.bader@canonical.com>
Wed, 13 Nov 2019 17:36:58 +0000 (18:36 +0100)
When we build a kernel we capture the current dkms package versions.
This allows us to keep the versions syncronised in an entire SRU cycle
between the master and derivative kernels.  It also allows us to maintain
the same versions on respin.  This suffers from the issue that they may
expire from the archive pool if the dkms packages are revved.

The same packages are available in the launchpad librarian and indeed
(now) via well known names.  So when are attempting to download from the
archive pool first attempt to get the package from the primary archive
librarian first.  If this fails continue to do the pool scan as normal.
This increases the chance we will find an appropriate package regardless
of the currently published packages, whilst retaining the ability to build
in a more restricted environment (such as when we have no internet access).

BugLink: https://bugs.launchpad.net/bugs/1850958
Signed-off-by: Andy Whitcroft <apw@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
debian/scripts/dkms-build

index 08c1a8fa1bd453f3ce6c0febced5e374ebe6f3e4..3c3c28f75c43506b2d512e797fb35fceff9cdaf7 100755 (executable)
@@ -26,56 +26,78 @@ built_using_record()
        sed -i -e "s/^\(linux:BuiltUsing=.*\)/\1$built_using, /" "$subst"
 }
 
+# ABI: returns present in $? and located path in lpackage_path when found.
+package_present()
+{
+       for lpackage_path in "$1"_*.deb
+       do
+               break
+       done
+       [ -f "$lpackage_path" ]
+}
+
 # Download and extract the DKMS package -- note there may be more
 # than one package to install.
 for package_path in "$@"
 do
-       echo "II: dkms-build downloading $package ($(basename $package_path))"
+       package_file=$(basename "$package_path")
+       echo "II: dkms-build downloading $package ($package_file)"
        rpackage=$( echo "$package_path" | sed -e 's@.*/@@' -e 's@_.*@@' )
        lpackage=$( echo "$rpackage" | sed -e 's@=.*@@' )
 
-       case "$package_path" in
-       pool/*)
-               for pool in $( apt-cache policy | grep '^ [^ ]' | sort -r -n -k 1,1 -s | \
-                   awk '
-                       ($2 ~ /^http/) {
-                           if (!($2 in E)) {
-                               E[$2]=1;
-                               print $2;
-                           }
-                       }
-                   ')
-               do
-                       for lpackage_path in "$lpackage"_*.deb
-                       do
-                               break
-                       done
-                       if [ -f "$lpackage_path" ]; then
+       while true
+       do
+               if package_present "$lpackage"; then
+                       break
+               fi
+               case "$package_path" in
+               pool/*)
+                       # Attempt download from the launchpad librarian first.
+                       wget "https://launchpad.net/ubuntu/+archive/primary/+files/$package_file" || true
+                       if package_present "$lpackage"; then
                                break
                        fi
-                       url="$pool/$package_path"
-                       wget "$url" && break || true
-                       # No components in PPAs.
-                       url=$(echo "$url" | sed -e 's@/pool/[^/]*/@/pool/main/@')
-                       wget "$url" && break || true
-               done
-               ;;
-       http*:*)
-               wget "$package_path"
-               ;;
-       */*)
-               cp -p "$package_path" .
-               ;;
-       *)
-               apt-get download "$rpackage"
-               ;;
-       esac
-       dpkg -x "$lpackage"_*.deb "$package"
 
-       for lpackage_path in "$lpackage"_*.deb
-       do
+                       # Download from the available pools.
+                       for pool in $( apt-cache policy | grep '^ [^ ]' | sort -r -n -k 1,1 -s | \
+                           awk '
+                               ($2 ~ /^http/) {
+                                   if (!($2 in E)) {
+                                       E[$2]=1;
+                                       print $2;
+                                   }
+                               }
+                           ')
+                       do
+                               if package_present "$lpackage"; then
+                                       break
+                               fi
+                               url="$pool/$package_path"
+                               wget "$url" && break || true
+                               # No components in PPAs.
+                               url=$(echo "$url" | sed -e 's@/pool/[^/]*/@/pool/main/@')
+                               wget "$url" && break || true
+                       done
+                       ;;
+               http*:*)
+                       wget "$package_path"
+                       ;;
+               */*)
+                       cp -p "$package_path" .
+                       ;;
+               *)
+                       apt-get download "$rpackage"
+                       ;;
+               esac
                break
        done
+       if ! package_present "$lpackage"; then
+               echo "EE: $lpackage not found"
+               exit 1
+       fi
+
+       dpkg -x "$lpackage"_*.deb "$package"
+
        lversion=$( echo "$lpackage_path" | sed -e 's@.*/@@' -e 's@_[^_]*$@@' -e 's@.*_@@')
        built_using_record "$srcdir/debian/$pkgname.substvars" "$built_using$lpackage (= $lversion)"
 done