[PATCH 7/7][RFC][LRM][Unstable] debian: build backport-iwlwifi-dkms
You-Sheng Yang
vicamo.yang at canonical.com
Thu Apr 14 21:21:23 UTC 2022
From: "You-Sheng Yang (vicamo)" <vicamo.yang at canonical.com>
BugLink: https://bugs.launchpad.net/bugs/1962515
backport-iwlwifi-dkms builds follows almost exactly the same process
with nvidia graphic drivers, except that it carries unsigned kernel
module binaries directly in linux-objects-iwlwifi package. The carried
modules are renamed to have a ".unsigned" suffix, so that they will be
ineffective ubiquity live sessions. There is no latelink either.
Signed-off-by: You-Sheng Yang (vicamo) <vicamo.yang at canonical.com>
---
debian/dkms-versions | 1 +
debian/package.config | 1 +
debian/rules.in.iwlwifi | 15 +++++
debian/scripts/dkms-build--iwlwifi-N | 83 ++++++++++++++++++++++++++++
debian/scripts/gen-rules.lrg | 12 ++++
debian/scripts/gen-rules.lrm | 14 ++++-
debian/templates/iwlwifi.postinst.in | 44 +++++++++++++++
debian/templates/iwlwifi.postrm.in | 12 ++++
debian/templates/iwlwifi.prerm.in | 19 +++++++
update-version | 1 +
10 files changed, 201 insertions(+), 1 deletion(-)
create mode 100644 debian/rules.in.iwlwifi
create mode 100755 debian/scripts/dkms-build--iwlwifi-N
create mode 100755 debian/templates/iwlwifi.postinst.in
create mode 100755 debian/templates/iwlwifi.postrm.in
create mode 100755 debian/templates/iwlwifi.prerm.in
diff --git a/debian/dkms-versions b/debian/dkms-versions
index f2fef23..d02c56a 100644
--- a/debian/dkms-versions
+++ b/debian/dkms-versions
@@ -5,3 +5,4 @@ nvidia-graphics-drivers-418-server 418.226.00-0ubuntu4 arch=amd64
nvidia-graphics-drivers-450-server 450.172.01-0ubuntu3 arch=amd64 transition=nvidia-graphics-drivers-440-server
nvidia-graphics-drivers-470-server 470.103.01-0ubuntu2 arch=amd64 transition=nvidia-graphics-drivers-460-server
nvidia-graphics-drivers-510-server 510.47.03-0ubuntu1 arch=amd64
+backport-iwlwifi-dkms 9858-0ubuntu2 arch=amd64
diff --git a/debian/package.config b/debian/package.config
index d2b2dd0..a7c4624 100644
--- a/debian/package.config
+++ b/debian/package.config
@@ -2,6 +2,7 @@ build generic amd64 arm64
build generic-64k arm64
option desktop
option server
+option iwlwifi
transitional nvidia 440-oem-20.04 450-generic amd64
transitional nvidia 450-oem-20.04 450-generic amd64
suppress nvidia-graphics-drivers-390
diff --git a/debian/rules.in.iwlwifi b/debian/rules.in.iwlwifi
new file mode 100644
index 0000000..c93619c
--- /dev/null
+++ b/debian/rules.in.iwlwifi
@@ -0,0 +1,15 @@
+
+# @package@ @version@ @suffix_minus@ @suffix_under@
+dkms_ at module@_ at suffix_under@_version=$(shell gawk '/^@package@ / { print $$2; }' debian/dkms-versions)
+ at module@_ at suffix_under@_upstream_version=$(shell echo "$(dkms_ at module@_ at suffix_under@_version)" | cut -d '-' -f 1)
+gencontrol_flags += -Vdkms:@module at -@suffix_minus at -modules="@module at -dkms-@suffix_minus@ (= $(dkms_ at module@_ at suffix_under@_version))"
+test::
+ @echo @package@ @version@ @suffix_minus@ @suffix_under@ @suffix_short@ @targets@
+ at targets@::
+ rm -rf $(dkms_dir)/build $(dkms_dir)/source
+ mkdir -p $(dkms_dir)/build $(dkms_dir)/source
+ install -d debian/linux-modules- at module@- at suffix_minus@-$(src_abi)- at flavour@
+ install -d debian/linux-modules- at module@- at suffix_minus@-$(src_abi)- at flavour@/usr/lib/linux/triggers
+ $(call install_control,linux-modules- at module@- at suffix_minus@-$(src_abi)- at flavour@, at flavour@, at module@, at suffix_short@,postinst postrm prerm)
+ install -d debian/linux-objects- at module@- at suffix_minus@-$(src_abi)- at flavour@
+ $(call build_dkms, $(src_abi)- at flavour@, linux-objects- at module@- at suffix_minus@-$(src_abi)- at flavour@, $(CURDIR)/debian/linux-objects- at module@- at suffix_minus@-$(src_abi)- at flavour@/lib/modules/$(src_abi)- at flavour@/kernel, "", @module at -@suffix_short@, pool/restricted/b/backport-iwlwifi-dkms/backport-iwlwifi-dkms_$(dkms_ at module@_ at suffix_under@_version)_all.deb)
diff --git a/debian/scripts/dkms-build--iwlwifi-N b/debian/scripts/dkms-build--iwlwifi-N
new file mode 100755
index 0000000..caa1ba3
--- /dev/null
+++ b/debian/scripts/dkms-build--iwlwifi-N
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+srcdir="$1"
+objects="$2"
+log="$3"
+shift 3
+
+dkms_dir="$1"
+abi_flavour="$2"
+sign="$3"
+pkgname="$4"
+pkgdir="$5"
+dbgpkgdir="$6"
+package="$7"
+shift 7
+
+unsigned_ko_suffix=.unsigned
+
+mkdir -p "$pkgdir/bits"
+(
+ gcc_variant1=$(gcc --version | head -1 | sed -e 's/^gcc/GCC:/')
+ gcc_variant2=$(gcc --version | head -1 | sed -e 's/^\(gcc\) \((.*)\) \(.*\)$/\1 version \3 \2/')
+ for ko in "$pkgdir"/*.ko
+ do
+ ko=$(basename "$ko")
+ mv "$pkgdir/$ko" "$pkgdir/bits/$ko$unsigned_ko_suffix"
+ "$srcdir/debian/scripts/fix-filenames" "$pkgdir/bits/$ko$unsigned_ko_suffix" "$gcc_variant1"
+ "$srcdir/debian/scripts/fix-filenames" "$pkgdir/bits/$ko$unsigned_ko_suffix" "$gcc_variant2"
+ done
+)
+
+# Build helper scripts.
+cat - <<'EOL' >"$pkgdir/bits/BUILD"
+[ "$1" = "unsigned" ] && { signed_only=:; shift; }
+[ "$1" = "nocheck" ] && { check_only=:; shift; }
+EOL
+
+(
+ cd "$pkgdir/bits" || exit 1
+
+ # Add checksum check.
+ echo "\$check_only sha256sum -c SHA256SUMS || exit 1" >>"$pkgdir/bits/BUILD"
+
+ # Add .ko handling to the CLEAN/BUILD dance.
+ for unsigned_ko in "$pkgdir"/bits/*.ko$unsigned_ko_suffix
+ do
+ unsigned_ko=$(basename "$unsigned_ko")
+ ko=${unsigned_ko%$unsigned_ko_suffix}
+ echo "\$signed_only cat '$unsigned_ko' '$ko.sig' >'../$ko'" >>"$pkgdir/bits/BUILD"
+ echo "rm -f '../$ko'" >>"$pkgdir/bits/CLEAN"
+ done
+
+ if [ "$sign" = "--custom" ]; then
+ # We are building for and archive custom signing upload. Keep everything.
+ :
+ elif [ "$sign" = "--lrm" ]; then
+ # We are in the LRM build; grab sha256 checksums and clean up.
+ sha256sum -b *.ko$unsigned_ko_suffix >"SHA256SUMS"
+ else
+ # We are in the main kernel, put the .kos together as we will
+ # on the users machine, sign them, and keep just the signature.
+ : >"SHA256SUMS"
+ for unsigned_ko in *.ko$unsigned_ko_suffix
+ do
+ ko=${unsigned_ko%$unsigned_ko_suffix}
+ echo "detached-signature $ko"
+ $sign "$unsigned_ko" "$ko"
+ length=$( stat --format %s "$unsigned_ko" )
+ dd if="$ko" of="$ko.sig" bs=1 skip="$length" 2>/dev/null
+
+ rm -f "$ko"
+ # Keep a checksum of the pre-signed object so we can check it is
+ # built correctly in LRM.
+ sha256sum -b "$unsigned_ko" >>"SHA256SUMS"
+ done
+
+ # Clean out anything which not a signature.
+ mv "$pkgdir/bits/"*.sig "$pkgdir"
+ mv "$pkgdir/bits/SHA256SUMS" "$pkgdir"
+ find "$pkgdir" -name \*.sig -prune -o -name SHA256SUMS -prune -o -type f -print | xargs rm -f
+ find "$pkgdir" -depth -type d -print | xargs rmdir --ignore-fail-on-non-empty
+ fi
+) || exit "$?"
diff --git a/debian/scripts/gen-rules.lrg b/debian/scripts/gen-rules.lrg
index fd16fa5..ef25d1e 100755
--- a/debian/scripts/gen-rules.lrg
+++ b/debian/scripts/gen-rules.lrg
@@ -46,6 +46,7 @@ EOL
nvidia_desktop=
nvidia_server=
+build_iwlwifi=
suppress=
while read command arg
do
@@ -58,6 +59,7 @@ do
case "$arg" in
desktop) nvidia_desktop=y ;;
server) nvidia_server=y ;;
+ iwlwifi) build_iwlwifi=y ;;
esac
done <"debian/package.config"
@@ -87,6 +89,9 @@ do
nvidia-graphics-drivers-*)
[ -z "$nvidia_desktop" ] && continue
;;
+ backport-iwlwifi-dkms)
+ [ -z "$build_iwlwifi" ] && continue
+ ;;
*) continue ;;
esac
case " $suppress " in
@@ -129,6 +134,13 @@ do
suffix_under=$(echo "$suffix_minus" | sed -e 's/-/_/g')
suffix_short=$(echo "$suffix_minus" | sed -e 's/-server/srv/g')
;;
+ backport-iwlwifi-dkms)
+ module=iwlwifi
+ suffix_minus=${version%%-*}
+ suffix_minus=${suffix_minus#*:}
+ suffix_under=${suffix_minus}
+ suffix_short=${suffix_minus}
+ ;;
*) continue ;;
esac
diff --git a/debian/scripts/gen-rules.lrm b/debian/scripts/gen-rules.lrm
index 165dfbe..4b64336 100755
--- a/debian/scripts/gen-rules.lrm
+++ b/debian/scripts/gen-rules.lrm
@@ -32,7 +32,7 @@ src_sigs_version=${src_version}
mkdir -p "debian/control.d"
: >"debian/control.interlock-up"
-for module in nvidia; do
+for module in iwlwifi nvidia; do
: >"debian/control.d/meta-${module}"
: >"debian/control.d/${module}"
: >"debian/control.d/migrate-${module}"
@@ -61,6 +61,7 @@ fi
nvidia_desktop=
nvidia_server=
+build_iwlwifi=
suppress=
while read command arg
do
@@ -73,6 +74,7 @@ do
case "$arg" in
desktop) nvidia_desktop=y ;;
server) nvidia_server=y ;;
+ iwlwifi) build_iwlwifi=y ;;
esac
done <"debian/package.config"
@@ -97,6 +99,9 @@ EOL
nvidia-graphics-drivers-*)
[ -z "$nvidia_desktop" ] && continue
;;
+ backport-iwlwifi-dkms)
+ [ -z "$build_iwlwifi" ] && continue
+ ;;
*) continue ;;
esac
case " $suppress " in
@@ -139,6 +144,13 @@ EOL
suffix_under=$(echo "$suffix_minus" | sed -e 's/-/_/g')
suffix_short=$(echo "$suffix_minus" | sed -e 's/-server/srv/g')
;;
+ backport-iwlwifi-dkms)
+ module=iwlwifi
+ suffix_minus=${version%%-*}
+ suffix_minus=${suffix_minus#*:}
+ suffix_under=${suffix_minus}
+ suffix_short=${suffix_minus}
+ ;;
*) continue ;;
esac
diff --git a/debian/templates/iwlwifi.postinst.in b/debian/templates/iwlwifi.postinst.in
new file mode 100755
index 0000000..ad5abec
--- /dev/null
+++ b/debian/templates/iwlwifi.postinst.in
@@ -0,0 +1,44 @@
+#!/bin/sh
+set -e
+
+version=@abiname@@localversion@
+image_path=/boot/@image-stem at -$version
+
+bits=/lib/modules/$version/kernel/@module at -@suffix-short@/bits
+
+if [ "$1" != configure ]; then
+ exit 0
+fi
+
+ubiquity_live() {
+ if [ -n "${UBIQUITY_FRONTEND}" ] && ! systemd-detect-virt --chroot; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+if ! ubiquity_live; then
+ (
+ cd "$bits" || exit 1
+ echo "linux-image- at module@-$version: constructing .ko files"
+ /bin/sh ./BUILD
+ )
+else
+ (
+ cd "$bits" || exit 1
+ echo "linux-image- at module@-$version: removing .ko files"
+ /bin/sh ./CLEAN
+ )
+fi
+
+depmod -a -F /boot/System.map-$version $version || true
+if [ -d /etc/kernel/postinst.d ]; then
+ cat - >/usr/lib/linux/triggers/$version <<EOF
+DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
+ --arg="$image_path" /etc/kernel/postinst.d
+EOF
+ dpkg-trigger --no-await linux-update-$version
+fi
+
+exit 0
diff --git a/debian/templates/iwlwifi.postrm.in b/debian/templates/iwlwifi.postrm.in
new file mode 100755
index 0000000..8622e26
--- /dev/null
+++ b/debian/templates/iwlwifi.postrm.in
@@ -0,0 +1,12 @@
+#!/bin/sh
+set -e
+
+version=@abiname@@localversion@
+
+if [ "$1" != remove ]; then
+ exit 0
+fi
+
+depmod -a -F /boot/System.map-$version $version 2>/dev/null || true
+
+exit 0
diff --git a/debian/templates/iwlwifi.prerm.in b/debian/templates/iwlwifi.prerm.in
new file mode 100755
index 0000000..38cafaa
--- /dev/null
+++ b/debian/templates/iwlwifi.prerm.in
@@ -0,0 +1,19 @@
+#! /bin/sh
+set -e
+
+version=@abiname@@localversion@
+
+bits=/lib/modules/$version/kernel/@module at -@suffix-short@/bits
+
+if [ "$1" != remove ]; then
+ exit 0
+fi
+
+# Clear out the build image before we lose the ability to do so.
+(
+ cd "$bits" || exit 1
+ echo "linux-image- at module@-$version: removing .ko files"
+ /bin/sh ./CLEAN
+)
+
+exit 0
diff --git a/update-version b/update-version
index d945eb3..8ed1bd8 100755
--- a/update-version
+++ b/update-version
@@ -82,6 +82,7 @@ if [ "$no_update" = 'false' ]; then
for master_file in \
debian/scripts/misc/git-ubuntu-log \
debian/scripts/dkms-build \
+ debian/scripts/dkms-build--iwlwifi-N \
debian/scripts/dkms-build--nvidia-N \
debian/scripts/fix-filenames.c
do
--
2.34.1
More information about the kernel-team
mailing list