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