[{B, D, E, F}/master-next 1/2] UBUNTU: [Packaging] dkms -- try launchpad librarian for pool downloads

Andy Whitcroft apw at canonical.com
Fri Nov 1 21:48:21 UTC 2019


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: http://bugs.launchpad.net/bugs/1850958
Signed-off-by: Andy Whitcroft <apw at canonical.com>
---
 debian/scripts/dkms-build | 98 ++++++++++++++++++++++++---------------
 1 file changed, 60 insertions(+), 38 deletions(-)

diff --git a/debian/scripts/dkms-build b/debian/scripts/dkms-build
index 08c1a8fa1bd4..3c3c28f75c43 100755
--- a/debian/scripts/dkms-build
+++ b/debian/scripts/dkms-build
@@ -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 at .*/@@' -e 's at _.*@@' )
 	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 at .*/@@' -e 's at _[^_]*$@@' -e 's at .*_@@')
 	built_using_record "$srcdir/debian/$pkgname.substvars" "$built_using$lpackage (= $lversion)"
 done
-- 
2.20.1




More information about the kernel-team mailing list