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

Marcelo Henrique Cerri marcelo.cerri at canonical.com
Mon Nov 4 16:48:36 UTC 2019


On Fri, Nov 01, 2019 at 09:48:21PM +0000, Andy Whitcroft wrote:
> 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

In general it looks good. I would make this variable local and use the
opportunity to cleanup the shellcheck errors.


> +	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
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team

-- 
Regards,
Marcelo

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20191104/6b9094d2/attachment.sig>


More information about the kernel-team mailing list