[PATCH 6/9] UBUNTU: [Packaging] linux-restricted-generate -- generate unsigned modules for signing
Stefan Bader
stefan.bader at canonical.com
Tue Mar 9 09:29:22 UTC 2021
On 08.03.21 16:00, Andy Whitcroft wrote:
> Consume the pre-built .o's as generated in linux-restricted-modules via
> the linux-objects-nvidia-* packages; assembling them as per the end-user
> system. Form a signing custom binary upload from these and submit for
> signing. Note that this must be embargoed as it represents fully formed
> module.
>
> BugLink: https://bugs.launchpad.net/bugs/1918134
> Signed-off-by: Andy Whitcroft <apw at canonical.com>
> ---
> debian/rules.lrg | 31 +++++++
> debian/scripts/dkms-build--nvidia-N | 1 +
> debian/scripts/gen-rules | 1 +
> debian/scripts/gen-rules.lrg | 138 ++++++++++++++++++++++++++++
> 4 files changed, 171 insertions(+)
> create mode 100755 debian/rules.lrg
> create mode 100755 debian/scripts/gen-rules.lrg
>
> diff --git a/debian/rules.lrg b/debian/rules.lrg
> new file mode 100755
> index 0000000..e431275
> --- /dev/null
> +++ b/debian/rules.lrg
> @@ -0,0 +1,31 @@
> +##export DH_VERBOSE := 1
> +
> +arch = $(shell dpkg-architecture -qDEB_HOST_ARCH)
> +
> +test::
> + echo "$(src_version) $(src_main_version)"
> +
> +debian/scripts/fix-filenames: debian/scripts/fix-filenames.c
> + $(CC) -o $@ $^
> +
> +clean::
> + rm -rf rm -rf $(dkms_dir)
> + rm -f debian/scripts/fix-filenames
> +
> +%:
> + dh $@
> +
> +custom_top=debian/custom
> +custom_dir=$(custom_top)/$(src_version)
> +custom_tar=$(src_package)_$(src_version)_$(arch).tar.gz
> +custom-upload:
> + install -d $(custom_dir)/control
> + { echo "tarball"; echo "signed-only"; } >$(custom_dir)/control/options
> + cd $(custom_top) && tar czvf ../../../$(custom_tar) .
> + dpkg-distaddfile $(custom_tar) raw-signing -
> +
> +override_dh_prep: debian/scripts/fix-filenames
> + dh_prep
> +
> +override_dh_auto_install: nvidia-$(arch) custom-upload
> + dh_install
> diff --git a/debian/scripts/dkms-build--nvidia-N b/debian/scripts/dkms-build--nvidia-N
> index b79404b..d37082c 100755
> --- a/debian/scripts/dkms-build--nvidia-N
> +++ b/debian/scripts/dkms-build--nvidia-N
> @@ -77,6 +77,7 @@ sed -e 's/.*-o *\([^ ]*\) .*/rm -f \1/g' <"$pkgdir/bits/BUILD" >"$pkgdir/bits/C
> if [ "$sign" = "--custom" ]; then
> # We are building for and archive custom signing upload. Keep everything.
> :
> +
Does this serve any purpose?
> elif [ "$sign" = "--lrm" ]; then
> # We are in LRM build the package a copy in any signatures we can
> # find for them. These will be added after linking.
> diff --git a/debian/scripts/gen-rules b/debian/scripts/gen-rules
> index ff91f48..8952f4b 100755
> --- a/debian/scripts/gen-rules
> +++ b/debian/scripts/gen-rules
> @@ -2,6 +2,7 @@
>
> src_package=$(LC_ALL=C dpkg-parsechangelog -SSource)
> case "$src_package" in
> +linux-restricted-generate*) pkg='lrg' ;;
> linux-restricted-modules*) pkg='lrm' ;;
> esac
>
> diff --git a/debian/scripts/gen-rules.lrg b/debian/scripts/gen-rules.lrg
> new file mode 100755
> index 0000000..1c13885
> --- /dev/null
> +++ b/debian/scripts/gen-rules.lrg
> @@ -0,0 +1,138 @@
> +#!/bin/bash
> +
> +# Pick out relevant version and package information including our predecessor
> +# packages: linux -> linux-restricted-modules-signatures -> linux-restricted-modules
> +src_package=$(LC_ALL=C dpkg-parsechangelog -SSource)
> +src_version=$(LC_ALL=C dpkg-parsechangelog -SVersion)
> +src_abi=$(echo "${src_version}" | sed -ne 's/\([0-9]*\.[0-9]*\.[0-9]*\-[0-9]*\)\..*/\1/p')
> +src_series=$(LC_ALL=C dpkg-parsechangelog -SDistribution | sed -e 's/-\(security\|updates\|proposed\)$//')
> +
> +# linux/5.8.0-41.46
> +src_main_package=$(echo "${src_package}" | sed -e 's/-restricted-generate//')
> +src_main_version=$(echo ${src_version} | sed -e 's/+[0-9][0-9\.]*$//')
> +
> +# linux-restricted-generate/5.8.0-41.46[+1]
> +
> +# linux-restricted-signatures/5.8.0-41.46[+1]
> +
> +# linux-restricted-modules/5.8.0-41.46[+1]
> +src_lrm_package=$(echo "${src_package}" | sed -e 's/-restricted-generate/-restricted-modules/')
> +src_lrm_version=${src_version}
> +
> +cat - "debian/rules.lrg" >"debian/rules.gen" <<EOL
> +#! /usr/bin/make -f
> +
> +src_package := ${src_package}
> +src_version = ${src_version}
> +src_abi = ${src_abi}
> +src_series = ${src_series}
> +src_lrm_package = ${src_lrm_package}
> +src_lrm_version = ${src_lrm_version}
> +
> +EOL
> +
> +: >"debian/control.interlock-up"
> +
> +nvidia_desktop=
> +nvidia_server=
> +nvidia_ignore=
> +while read command arg
> +do
> + case "$command" in
> + option) ;;
> + suppress) nvidia_ignore="$nvidia_ignore $arg"; continue ;;
> + *) continue ;;
> + esac
> +
> + case "$arg" in
> + desktop) nvidia_desktop=y ;;
> + server) nvidia_server=y ;;
> + esac
> +done <"debian/package.config"
> +
> +build_archs=
> +while read command flavour archs
> +do
> + case "$command" in
> + build) ;;
> + *) continue ;;
> + esac
> +
> + for arch in $archs
> + do
> + case " $build_archs " in
> + *\ $arch\ *) ;;
> + *) build_archs="$build_archs $arch" ;;
> + esac
> + done
> +
> + targets=$(echo "$archs" | sed -e 's/\</nvidia-/g')
> +
> + while read package version extra
> + do
> + case "$package" in
> + nvidia-graphics-drivers-*-server)
> + [ -z "$nvidia_server" ] && continue
> + ;;
> + nvidia-graphics-drivers-*)
> + [ -z "$nvidia_desktop" ] && continue
> + ;;
> + *) continue ;;
> + esac
> + case " $nvidia_ignore " in
> + *\ $package\ *) continue ;;
> + esac
> +
> + case " $extra " in
> + *\ signonly\ *) continue ;;
> + esac
> +
> + suffix_minus=$(echo "$package" | sed -e 's/nvidia-graphics-drivers-//')
> + suffix_under=$(echo "$suffix_minus" | sed -e 's/-/_/g')
> + suffix_short=$(echo "$suffix_minus" | sed -e 's/-server/srv/g')
> +
> + echo "II: build $package for $flavour $archs"
> +
> + cat - >>"debian/control.interlock-up" <<EOL
> + linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} (>= ${src_lrm_version}) [${archs}],
> +EOL
> +
> + # debian/rules.gen
> + # XXX: BUILD should help us here.
> + cat - >>"debian/rules.gen" <<EOL
> +
> +# $package $version $suffix_minus $suffix_under $suffix_short
> +$targets::
> + install -d \$(custom_dir)/${src_abi}-${flavour}/signatures/nvidia-${suffix_short}
> + cp -rp /lib/modules/${src_abi}-${flavour}/kernel/nvidia-${suffix_short}/bits \$(custom_dir)/${src_abi}-${flavour}/signatures/nvidia-${suffix_short}
> + ( \
> + cd \$(custom_dir)/${src_abi}-${flavour}/signatures/nvidia-${suffix_short}/bits || exit 1; \
> + sh BUILD unsigned; \
> + sha256sum -c SHA256SUMS || exit 1; \
> + mv *.ko ..; \
> + )
> + rm -rf \$(custom_dir)/${src_abi}-${flavour}/signatures/nvidia-${suffix_short}/bits
> +EOL
> +
> + done <"debian/dkms-versions"
> +done <"debian/package.config"
> +
> +{
> + cat "debian/control.common" "-" <<EOL
> +
> +Package: ${src_package}
> +Architecture:${build_archs}
> +Section: kernel
> +Description: Build interlock package
> + Build interlock package. You do not want to install this package.
> +EOL
> +} | sed \
> + -e "/@BUILD-INTERLOCK@/{" \
> + -e " r debian/control.interlock-up" \
> + -e " d" \
> + -e " }" \
> + -e "s/@SRCPKGNAME@/${src_package}/g" \
> + -e "s/@ABI@/${src_abi}/g" \
> + >"debian/control"
> +
> +rm -f "debian/control.interlock-up"
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20210309/4416c08a/attachment.sig>
More information about the kernel-team
mailing list