Message ID | 20220617124606.44174-1-dimitri.ledkov@canonical.com |
---|---|
State | New |
Headers | show |
Series | [linux-restricted-modules-$clouds,Jammy] UBUNTU: [Packaging] LRMv6: add multi-architecture support | expand |
On 6/17/22 06:46, Dimitri John Ledkov wrote: > BugLink: https://bugs.launchpad.net/bugs/1968774 > > Signed-off-by: Dimitri John Ledkov <dimitri.ledkov@canonical.com> > --- > > Upgrade from ~LRMv5 to LRMv6 in Jammy for: > > - linux-restricted-modules-aws > - linux-restricted-modules-azure > - linux-restricted-modules-gcp > - linux-restricted-modules-oracle > > This patch applies to all of the above repositories unmodified. > > Test build performed with aws flavour, in a private PPA for > lrm/lrg/lrs, builds correctly. > > This brings these LRMs to feature parity with generic LRM. > > debian/lrm-version | 1 + > debian/scripts/gen-rules | 1 + > debian/scripts/gen-rules.lrg | 43 ++++++++++++++++++++++++++--- > debian/scripts/gen-rules.lrm | 53 ++++++++++++++++++++++++++++++------ > debian/scripts/gen-rules.lrs | 12 ++++++++ > update-version | 2 +- > 6 files changed, 98 insertions(+), 14 deletions(-) > create mode 100644 debian/lrm-version > > diff --git a/debian/lrm-version b/debian/lrm-version > new file mode 100644 > index 0000000000..e0ea36feef > --- /dev/null > +++ b/debian/lrm-version > @@ -0,0 +1 @@ > +6.0 > diff --git a/debian/scripts/gen-rules b/debian/scripts/gen-rules > index 48944818a8..c5c36a60e8 100755 > --- a/debian/scripts/gen-rules > +++ b/debian/scripts/gen-rules > @@ -1,4 +1,5 @@ > #!/bin/bash > +set -e > > src_package=$(LC_ALL=C dpkg-parsechangelog -SSource) > case "$src_package" in > diff --git a/debian/scripts/gen-rules.lrg b/debian/scripts/gen-rules.lrg > index 61ad057804..db613272ae 100755 > --- a/debian/scripts/gen-rules.lrg > +++ b/debian/scripts/gen-rules.lrg > @@ -1,4 +1,15 @@ > #!/bin/bash > +set -e > + > +validate_unique() > +{ > + [ "$#" = "2" ] > + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) > + if [ "$duplicates" ]; then > + echo "EE: duplicate values in $1" 1>&2 > + exit 1 > + fi > +} > > # Pick out relevant version and package information including our predecessor > # packages: linux -> linux-restricted-modules-signatures -> linux-restricted-modules > @@ -58,6 +69,7 @@ do > *) continue ;; > esac > > + validate_unique "archs" "$archs" > for arch in $archs > do > case " $build_archs " in > @@ -66,8 +78,6 @@ do > esac > done > > - targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') > - > while read package version extra > do > case "$package" in > @@ -87,14 +97,39 @@ do > *\ signonly\ *) continue ;; > esac > > + # If package specifies arch= keys, only build it on > + # the intersection of kernel flavour arches & the > + # package arches, otherwise build for all kernel > + # flavour arches. > + pkg_archs= > + for cmd in $extra > + do > + case "$cmd" in > + arch=*) pkg_archs="$pkg_archs ${cmd#arch=}" ;; > + esac > + done > + # No package arches set, build for everything > + if [ -z "$pkg_archs" ]; then > + pkg_archs=$archs > + else > + # Package arches set, build for intersection > + validate_unique "pkg_archs" "$pkg_archs" > + pkg_archs=$(sort <(echo $archs | tr " " "\n") <(echo $pkg_archs | tr " " "\n") | uniq -d | tr "\n" " ") > + # No intersection, skip > + if [ -z "$pkg_archs" ]; then > + continue > + fi > + fi > + > + targets=$(echo "$pkg_archs" | sed -e 's/\</nvidia-/g') > 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" > + echo "II: build $package for $flavour $pkg_archs" > > cat - >>"debian/control.interlock-up" <<EOL > - linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} (>= ${src_lrm_version}) [${archs}], > + linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} (>= ${src_lrm_version}) [${pkg_archs}], > EOL > > # debian/rules.gen > diff --git a/debian/scripts/gen-rules.lrm b/debian/scripts/gen-rules.lrm > index 574a00ec3a..223918f50a 100755 > --- a/debian/scripts/gen-rules.lrm > +++ b/debian/scripts/gen-rules.lrm > @@ -1,4 +1,15 @@ > #!/bin/bash > +set -e > + > +validate_unique() > +{ > + [ "$#" = "2" ] > + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) > + if [ "$duplicates" ]; then > + echo "EE: duplicate values in $1" 1>&2 > + exit 1 > + fi > +} > > # Pick out relevant version and package information including our predecessor > # packages: linux -> linux-restricted-modules-signatures -> linux-restricted-modules > @@ -70,8 +81,7 @@ do > *) continue ;; > esac > > - targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') > - > + validate_unique "archs" "$archs" > cat - >>"debian/control.interlock-up" <<EOL > linux-headers-${src_abi}-${flavour} (>= @VERSION@) [${archs}], > EOL > @@ -95,11 +105,36 @@ EOL > *\ signonly\ *) continue ;; > esac > > + # If package specifies arch= keys, only build it on > + # the intersection of kernel flavour arches & the > + # package arches, otherwise build for all kernel > + # flavour arches. > + pkg_archs= > + for cmd in $extra > + do > + case "$cmd" in > + arch=*) pkg_archs="$pkg_archs ${cmd#arch=}" ;; > + esac > + done > + # No package arches set, build for everything > + if [ -z "$pkg_archs" ]; then > + pkg_archs=$archs > + else > + # Package arches set, build for intersection > + validate_unique "pkg_archs" "$pkg_archs" > + pkg_archs=$(sort <(echo $archs | tr " " "\n") <(echo $pkg_archs | tr " " "\n") | uniq -d | tr "\n" " ") > + # No intersection, skip > + if [ -z "$pkg_archs" ]; then > + continue > + fi > + fi > + > + targets=$(echo "$pkg_archs" | sed -e 's/\</nvidia-/g') > 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" > + echo "II: build $package for $flavour $pkg_archs" > > # debian/rules.gen > cat - >>"debian/rules.gen" <<EOL > @@ -126,7 +161,7 @@ EOL > > Package: linux-modules-nvidia-${suffix_minus}-${flavour}\${variant:suffix} > Build-Profiles: <!stage1> > -Architecture: ${archs} > +Architecture: ${pkg_archs} > Section: kernel > Provides: \${dkms:nvidia-${suffix_minus}-modules}, nvidia-prebuilt-kernel > Depends: > @@ -142,7 +177,7 @@ EOL > > Package: linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} > Build-Profiles: <!stage1> > -Architecture: ${archs} > +Architecture: ${pkg_archs} > Section: kernel > Priority: optional > Built-Using: \${linux:BuiltUsing} > @@ -160,7 +195,7 @@ Description: Linux kernel nvidia modules for version ${src_abi} (objects) > > Package: linux-modules-nvidia-${suffix_minus}-${src_abi}-${flavour} > Build-Profiles: <!stage1> > -Architecture: ${archs} > +Architecture: ${pkg_archs} > Section: kernel > Priority: optional > Built-Using: \${linux:BuiltUsing} > @@ -187,11 +222,11 @@ EOL > transition=*) > from="${cmd#transition=}" > from_minus=$(echo "$from" | sed -e 's/nvidia-graphics-drivers-//') > - echo "II: general transition $from -> $package ($from_minus -> $suffix_minus)" > + echo "II: general transition $from -> $package ($from_minus -> $suffix_minus) $pkg_archs" > cat - >>"debian/control.d/migrate-nvidia" <<EOL > > Package: linux-modules-nvidia-${from_minus}-${flavour}\${variant:suffix} > -Architecture: ${archs} > +Architecture: ${pkg_archs} > Section: oldlibs > Depends: linux-modules-nvidia-${suffix_minus}-${flavour}\${variant:suffix} > Description: Extra drivers for nvidia-${from_minus} for the ${flavour} flavour (dummy transitional package) > @@ -214,7 +249,7 @@ do > esac > > # debian/control.d/transitionals-local > - echo "II: manual transition linux-modules-nvidia-$from -> linux-modules-nvidia-$to" > + echo "II: manual transition linux-modules-nvidia-$from -> linux-modules-nvidia-$to $archs" > cat - >>"debian/control.d/transitionals-local" <<EOL > > Package: linux-modules-nvidia-${from} > diff --git a/debian/scripts/gen-rules.lrs b/debian/scripts/gen-rules.lrs > index c28fc2f66b..e2ab3a1493 100755 > --- a/debian/scripts/gen-rules.lrs > +++ b/debian/scripts/gen-rules.lrs > @@ -1,4 +1,15 @@ > #!/bin/bash > +set -e > + > +validate_unique() > +{ > + [ "$#" = "2" ] > + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) > + if [ "$duplicates" ]; then > + echo "EE: duplicate values in $1" 1>&2 > + exit 1 > + fi > +} > > # Pick out relevant version and package information including our predecessor > # packages: linux-restricted-generate -> linux-restricted-signatures -> linux-restricted-modules > @@ -57,6 +68,7 @@ do > *) continue ;; > esac > > + validate_unique "archs" "$archs" > targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') > > echo "II: build linux-signatures-nvidia-${src_abi}-${flavour} for ${archs}" > diff --git a/update-version b/update-version > index fd7a29aeaa..d945eb348d 100755 > --- a/update-version > +++ b/update-version > @@ -78,7 +78,7 @@ update_file() > # Update things from the primary package. > if [ "$no_update" = 'false' ]; then > update_file "$master_dir/$branch/tracking-bug" "debian/tracking-bug" > - "$here/update-dkms-versions" > + "$here/update-dkms-versions" || exit 1 > for master_file in \ > debian/scripts/misc/git-ubuntu-log \ > debian/scripts/dkms-build \ Acked-by: Tim Gardner <tim.gardner@canonical.com> Does this mean I should also enable arm64 for aws/azure linux-lrm packages ? rtg
On Fri, 17 Jun 2022 at 16:22, Tim Gardner <tim.gardner@canonical.com> wrote: > > On 6/17/22 06:46, Dimitri John Ledkov wrote: > > BugLink: https://bugs.launchpad.net/bugs/1968774 > > > > Signed-off-by: Dimitri John Ledkov <dimitri.ledkov@canonical.com> > > --- > > > > Upgrade from ~LRMv5 to LRMv6 in Jammy for: > > > > - linux-restricted-modules-aws > > - linux-restricted-modules-azure > > - linux-restricted-modules-gcp > > - linux-restricted-modules-oracle > > > > This patch applies to all of the above repositories unmodified. > > > > Test build performed with aws flavour, in a private PPA for > > lrm/lrg/lrs, builds correctly. > > > > This brings these LRMs to feature parity with generic LRM. > > > > debian/lrm-version | 1 + > > debian/scripts/gen-rules | 1 + > > debian/scripts/gen-rules.lrg | 43 ++++++++++++++++++++++++++--- > > debian/scripts/gen-rules.lrm | 53 ++++++++++++++++++++++++++++++------ > > debian/scripts/gen-rules.lrs | 12 ++++++++ > > update-version | 2 +- > > 6 files changed, 98 insertions(+), 14 deletions(-) > > create mode 100644 debian/lrm-version > > > > diff --git a/debian/lrm-version b/debian/lrm-version > > new file mode 100644 > > index 0000000000..e0ea36feef > > --- /dev/null > > +++ b/debian/lrm-version > > @@ -0,0 +1 @@ > > +6.0 > > diff --git a/debian/scripts/gen-rules b/debian/scripts/gen-rules > > index 48944818a8..c5c36a60e8 100755 > > --- a/debian/scripts/gen-rules > > +++ b/debian/scripts/gen-rules > > @@ -1,4 +1,5 @@ > > #!/bin/bash > > +set -e > > > > src_package=$(LC_ALL=C dpkg-parsechangelog -SSource) > > case "$src_package" in > > diff --git a/debian/scripts/gen-rules.lrg b/debian/scripts/gen-rules.lrg > > index 61ad057804..db613272ae 100755 > > --- a/debian/scripts/gen-rules.lrg > > +++ b/debian/scripts/gen-rules.lrg > > @@ -1,4 +1,15 @@ > > #!/bin/bash > > +set -e > > + > > +validate_unique() > > +{ > > + [ "$#" = "2" ] > > + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) > > + if [ "$duplicates" ]; then > > + echo "EE: duplicate values in $1" 1>&2 > > + exit 1 > > + fi > > +} > > > > # Pick out relevant version and package information including our predecessor > > # packages: linux -> linux-restricted-modules-signatures -> linux-restricted-modules > > @@ -58,6 +69,7 @@ do > > *) continue ;; > > esac > > > > + validate_unique "archs" "$archs" > > for arch in $archs > > do > > case " $build_archs " in > > @@ -66,8 +78,6 @@ do > > esac > > done > > > > - targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') > > - > > while read package version extra > > do > > case "$package" in > > @@ -87,14 +97,39 @@ do > > *\ signonly\ *) continue ;; > > esac > > > > + # If package specifies arch= keys, only build it on > > + # the intersection of kernel flavour arches & the > > + # package arches, otherwise build for all kernel > > + # flavour arches. > > + pkg_archs= > > + for cmd in $extra > > + do > > + case "$cmd" in > > + arch=*) pkg_archs="$pkg_archs ${cmd#arch=}" ;; > > + esac > > + done > > + # No package arches set, build for everything > > + if [ -z "$pkg_archs" ]; then > > + pkg_archs=$archs > > + else > > + # Package arches set, build for intersection > > + validate_unique "pkg_archs" "$pkg_archs" > > + pkg_archs=$(sort <(echo $archs | tr " " "\n") <(echo $pkg_archs | tr " " "\n") | uniq -d | tr "\n" " ") > > + # No intersection, skip > > + if [ -z "$pkg_archs" ]; then > > + continue > > + fi > > + fi > > + > > + targets=$(echo "$pkg_archs" | sed -e 's/\</nvidia-/g') > > 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" > > + echo "II: build $package for $flavour $pkg_archs" > > > > cat - >>"debian/control.interlock-up" <<EOL > > - linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} (>= ${src_lrm_version}) [${archs}], > > + linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} (>= ${src_lrm_version}) [${pkg_archs}], > > EOL > > > > # debian/rules.gen > > diff --git a/debian/scripts/gen-rules.lrm b/debian/scripts/gen-rules.lrm > > index 574a00ec3a..223918f50a 100755 > > --- a/debian/scripts/gen-rules.lrm > > +++ b/debian/scripts/gen-rules.lrm > > @@ -1,4 +1,15 @@ > > #!/bin/bash > > +set -e > > + > > +validate_unique() > > +{ > > + [ "$#" = "2" ] > > + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) > > + if [ "$duplicates" ]; then > > + echo "EE: duplicate values in $1" 1>&2 > > + exit 1 > > + fi > > +} > > > > # Pick out relevant version and package information including our predecessor > > # packages: linux -> linux-restricted-modules-signatures -> linux-restricted-modules > > @@ -70,8 +81,7 @@ do > > *) continue ;; > > esac > > > > - targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') > > - > > + validate_unique "archs" "$archs" > > cat - >>"debian/control.interlock-up" <<EOL > > linux-headers-${src_abi}-${flavour} (>= @VERSION@) [${archs}], > > EOL > > @@ -95,11 +105,36 @@ EOL > > *\ signonly\ *) continue ;; > > esac > > > > + # If package specifies arch= keys, only build it on > > + # the intersection of kernel flavour arches & the > > + # package arches, otherwise build for all kernel > > + # flavour arches. > > + pkg_archs= > > + for cmd in $extra > > + do > > + case "$cmd" in > > + arch=*) pkg_archs="$pkg_archs ${cmd#arch=}" ;; > > + esac > > + done > > + # No package arches set, build for everything > > + if [ -z "$pkg_archs" ]; then > > + pkg_archs=$archs > > + else > > + # Package arches set, build for intersection > > + validate_unique "pkg_archs" "$pkg_archs" > > + pkg_archs=$(sort <(echo $archs | tr " " "\n") <(echo $pkg_archs | tr " " "\n") | uniq -d | tr "\n" " ") > > + # No intersection, skip > > + if [ -z "$pkg_archs" ]; then > > + continue > > + fi > > + fi > > + > > + targets=$(echo "$pkg_archs" | sed -e 's/\</nvidia-/g') > > 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" > > + echo "II: build $package for $flavour $pkg_archs" > > > > # debian/rules.gen > > cat - >>"debian/rules.gen" <<EOL > > @@ -126,7 +161,7 @@ EOL > > > > Package: linux-modules-nvidia-${suffix_minus}-${flavour}\${variant:suffix} > > Build-Profiles: <!stage1> > > -Architecture: ${archs} > > +Architecture: ${pkg_archs} > > Section: kernel > > Provides: \${dkms:nvidia-${suffix_minus}-modules}, nvidia-prebuilt-kernel > > Depends: > > @@ -142,7 +177,7 @@ EOL > > > > Package: linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} > > Build-Profiles: <!stage1> > > -Architecture: ${archs} > > +Architecture: ${pkg_archs} > > Section: kernel > > Priority: optional > > Built-Using: \${linux:BuiltUsing} > > @@ -160,7 +195,7 @@ Description: Linux kernel nvidia modules for version ${src_abi} (objects) > > > > Package: linux-modules-nvidia-${suffix_minus}-${src_abi}-${flavour} > > Build-Profiles: <!stage1> > > -Architecture: ${archs} > > +Architecture: ${pkg_archs} > > Section: kernel > > Priority: optional > > Built-Using: \${linux:BuiltUsing} > > @@ -187,11 +222,11 @@ EOL > > transition=*) > > from="${cmd#transition=}" > > from_minus=$(echo "$from" | sed -e 's/nvidia-graphics-drivers-//') > > - echo "II: general transition $from -> $package ($from_minus -> $suffix_minus)" > > + echo "II: general transition $from -> $package ($from_minus -> $suffix_minus) $pkg_archs" > > cat - >>"debian/control.d/migrate-nvidia" <<EOL > > > > Package: linux-modules-nvidia-${from_minus}-${flavour}\${variant:suffix} > > -Architecture: ${archs} > > +Architecture: ${pkg_archs} > > Section: oldlibs > > Depends: linux-modules-nvidia-${suffix_minus}-${flavour}\${variant:suffix} > > Description: Extra drivers for nvidia-${from_minus} for the ${flavour} flavour (dummy transitional package) > > @@ -214,7 +249,7 @@ do > > esac > > > > # debian/control.d/transitionals-local > > - echo "II: manual transition linux-modules-nvidia-$from -> linux-modules-nvidia-$to" > > + echo "II: manual transition linux-modules-nvidia-$from -> linux-modules-nvidia-$to $archs" > > cat - >>"debian/control.d/transitionals-local" <<EOL > > > > Package: linux-modules-nvidia-${from} > > diff --git a/debian/scripts/gen-rules.lrs b/debian/scripts/gen-rules.lrs > > index c28fc2f66b..e2ab3a1493 100755 > > --- a/debian/scripts/gen-rules.lrs > > +++ b/debian/scripts/gen-rules.lrs > > @@ -1,4 +1,15 @@ > > #!/bin/bash > > +set -e > > + > > +validate_unique() > > +{ > > + [ "$#" = "2" ] > > + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) > > + if [ "$duplicates" ]; then > > + echo "EE: duplicate values in $1" 1>&2 > > + exit 1 > > + fi > > +} > > > > # Pick out relevant version and package information including our predecessor > > # packages: linux-restricted-generate -> linux-restricted-signatures -> linux-restricted-modules > > @@ -57,6 +68,7 @@ do > > *) continue ;; > > esac > > > > + validate_unique "archs" "$archs" > > targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') > > > > echo "II: build linux-signatures-nvidia-${src_abi}-${flavour} for ${archs}" > > diff --git a/update-version b/update-version > > index fd7a29aeaa..d945eb348d 100755 > > --- a/update-version > > +++ b/update-version > > @@ -78,7 +78,7 @@ update_file() > > # Update things from the primary package. > > if [ "$no_update" = 'false' ]; then > > update_file "$master_dir/$branch/tracking-bug" "debian/tracking-bug" > > - "$here/update-dkms-versions" > > + "$here/update-dkms-versions" || exit 1 > > for master_file in \ > > debian/scripts/misc/git-ubuntu-log \ > > debian/scripts/dkms-build \ > Acked-by: Tim Gardner <tim.gardner@canonical.com> > > Does this mean I should also enable arm64 for aws/azure linux-lrm packages ? > I was going to send patches to do that for all the missing kernels en-mass, to ensure that we don't have half and half again. As it's not just those that are missing this. Also, care needs to be taken with focal backports, as v5.15 lrm backports from jammy to focal will need to turn off package.config arm64 option. Unless we sru nvidia-510 with arm64 support to focal.
Applied to Jammy & Kinetic of linux-restricted-modules-aws linux-restricted-modules-azure linux-restricted-modules-gcp linux-restricted-modules-oracle On Fri, 17 Jun 2022 at 13:46, Dimitri John Ledkov <dimitri.ledkov@canonical.com> wrote: > > BugLink: https://bugs.launchpad.net/bugs/1968774 > > Signed-off-by: Dimitri John Ledkov <dimitri.ledkov@canonical.com> > --- > > Upgrade from ~LRMv5 to LRMv6 in Jammy for: > > - linux-restricted-modules-aws > - linux-restricted-modules-azure > - linux-restricted-modules-gcp > - linux-restricted-modules-oracle > > This patch applies to all of the above repositories unmodified. > > Test build performed with aws flavour, in a private PPA for > lrm/lrg/lrs, builds correctly. > > This brings these LRMs to feature parity with generic LRM. > > debian/lrm-version | 1 + > debian/scripts/gen-rules | 1 + > debian/scripts/gen-rules.lrg | 43 ++++++++++++++++++++++++++--- > debian/scripts/gen-rules.lrm | 53 ++++++++++++++++++++++++++++++------ > debian/scripts/gen-rules.lrs | 12 ++++++++ > update-version | 2 +- > 6 files changed, 98 insertions(+), 14 deletions(-) > create mode 100644 debian/lrm-version > > diff --git a/debian/lrm-version b/debian/lrm-version > new file mode 100644 > index 0000000000..e0ea36feef > --- /dev/null > +++ b/debian/lrm-version > @@ -0,0 +1 @@ > +6.0 > diff --git a/debian/scripts/gen-rules b/debian/scripts/gen-rules > index 48944818a8..c5c36a60e8 100755 > --- a/debian/scripts/gen-rules > +++ b/debian/scripts/gen-rules > @@ -1,4 +1,5 @@ > #!/bin/bash > +set -e > > src_package=$(LC_ALL=C dpkg-parsechangelog -SSource) > case "$src_package" in > diff --git a/debian/scripts/gen-rules.lrg b/debian/scripts/gen-rules.lrg > index 61ad057804..db613272ae 100755 > --- a/debian/scripts/gen-rules.lrg > +++ b/debian/scripts/gen-rules.lrg > @@ -1,4 +1,15 @@ > #!/bin/bash > +set -e > + > +validate_unique() > +{ > + [ "$#" = "2" ] > + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) > + if [ "$duplicates" ]; then > + echo "EE: duplicate values in $1" 1>&2 > + exit 1 > + fi > +} > > # Pick out relevant version and package information including our predecessor > # packages: linux -> linux-restricted-modules-signatures -> linux-restricted-modules > @@ -58,6 +69,7 @@ do > *) continue ;; > esac > > + validate_unique "archs" "$archs" > for arch in $archs > do > case " $build_archs " in > @@ -66,8 +78,6 @@ do > esac > done > > - targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') > - > while read package version extra > do > case "$package" in > @@ -87,14 +97,39 @@ do > *\ signonly\ *) continue ;; > esac > > + # If package specifies arch= keys, only build it on > + # the intersection of kernel flavour arches & the > + # package arches, otherwise build for all kernel > + # flavour arches. > + pkg_archs= > + for cmd in $extra > + do > + case "$cmd" in > + arch=*) pkg_archs="$pkg_archs ${cmd#arch=}" ;; > + esac > + done > + # No package arches set, build for everything > + if [ -z "$pkg_archs" ]; then > + pkg_archs=$archs > + else > + # Package arches set, build for intersection > + validate_unique "pkg_archs" "$pkg_archs" > + pkg_archs=$(sort <(echo $archs | tr " " "\n") <(echo $pkg_archs | tr " " "\n") | uniq -d | tr "\n" " ") > + # No intersection, skip > + if [ -z "$pkg_archs" ]; then > + continue > + fi > + fi > + > + targets=$(echo "$pkg_archs" | sed -e 's/\</nvidia-/g') > 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" > + echo "II: build $package for $flavour $pkg_archs" > > cat - >>"debian/control.interlock-up" <<EOL > - linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} (>= ${src_lrm_version}) [${archs}], > + linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} (>= ${src_lrm_version}) [${pkg_archs}], > EOL > > # debian/rules.gen > diff --git a/debian/scripts/gen-rules.lrm b/debian/scripts/gen-rules.lrm > index 574a00ec3a..223918f50a 100755 > --- a/debian/scripts/gen-rules.lrm > +++ b/debian/scripts/gen-rules.lrm > @@ -1,4 +1,15 @@ > #!/bin/bash > +set -e > + > +validate_unique() > +{ > + [ "$#" = "2" ] > + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) > + if [ "$duplicates" ]; then > + echo "EE: duplicate values in $1" 1>&2 > + exit 1 > + fi > +} > > # Pick out relevant version and package information including our predecessor > # packages: linux -> linux-restricted-modules-signatures -> linux-restricted-modules > @@ -70,8 +81,7 @@ do > *) continue ;; > esac > > - targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') > - > + validate_unique "archs" "$archs" > cat - >>"debian/control.interlock-up" <<EOL > linux-headers-${src_abi}-${flavour} (>= @VERSION@) [${archs}], > EOL > @@ -95,11 +105,36 @@ EOL > *\ signonly\ *) continue ;; > esac > > + # If package specifies arch= keys, only build it on > + # the intersection of kernel flavour arches & the > + # package arches, otherwise build for all kernel > + # flavour arches. > + pkg_archs= > + for cmd in $extra > + do > + case "$cmd" in > + arch=*) pkg_archs="$pkg_archs ${cmd#arch=}" ;; > + esac > + done > + # No package arches set, build for everything > + if [ -z "$pkg_archs" ]; then > + pkg_archs=$archs > + else > + # Package arches set, build for intersection > + validate_unique "pkg_archs" "$pkg_archs" > + pkg_archs=$(sort <(echo $archs | tr " " "\n") <(echo $pkg_archs | tr " " "\n") | uniq -d | tr "\n" " ") > + # No intersection, skip > + if [ -z "$pkg_archs" ]; then > + continue > + fi > + fi > + > + targets=$(echo "$pkg_archs" | sed -e 's/\</nvidia-/g') > 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" > + echo "II: build $package for $flavour $pkg_archs" > > # debian/rules.gen > cat - >>"debian/rules.gen" <<EOL > @@ -126,7 +161,7 @@ EOL > > Package: linux-modules-nvidia-${suffix_minus}-${flavour}\${variant:suffix} > Build-Profiles: <!stage1> > -Architecture: ${archs} > +Architecture: ${pkg_archs} > Section: kernel > Provides: \${dkms:nvidia-${suffix_minus}-modules}, nvidia-prebuilt-kernel > Depends: > @@ -142,7 +177,7 @@ EOL > > Package: linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} > Build-Profiles: <!stage1> > -Architecture: ${archs} > +Architecture: ${pkg_archs} > Section: kernel > Priority: optional > Built-Using: \${linux:BuiltUsing} > @@ -160,7 +195,7 @@ Description: Linux kernel nvidia modules for version ${src_abi} (objects) > > Package: linux-modules-nvidia-${suffix_minus}-${src_abi}-${flavour} > Build-Profiles: <!stage1> > -Architecture: ${archs} > +Architecture: ${pkg_archs} > Section: kernel > Priority: optional > Built-Using: \${linux:BuiltUsing} > @@ -187,11 +222,11 @@ EOL > transition=*) > from="${cmd#transition=}" > from_minus=$(echo "$from" | sed -e 's/nvidia-graphics-drivers-//') > - echo "II: general transition $from -> $package ($from_minus -> $suffix_minus)" > + echo "II: general transition $from -> $package ($from_minus -> $suffix_minus) $pkg_archs" > cat - >>"debian/control.d/migrate-nvidia" <<EOL > > Package: linux-modules-nvidia-${from_minus}-${flavour}\${variant:suffix} > -Architecture: ${archs} > +Architecture: ${pkg_archs} > Section: oldlibs > Depends: linux-modules-nvidia-${suffix_minus}-${flavour}\${variant:suffix} > Description: Extra drivers for nvidia-${from_minus} for the ${flavour} flavour (dummy transitional package) > @@ -214,7 +249,7 @@ do > esac > > # debian/control.d/transitionals-local > - echo "II: manual transition linux-modules-nvidia-$from -> linux-modules-nvidia-$to" > + echo "II: manual transition linux-modules-nvidia-$from -> linux-modules-nvidia-$to $archs" > cat - >>"debian/control.d/transitionals-local" <<EOL > > Package: linux-modules-nvidia-${from} > diff --git a/debian/scripts/gen-rules.lrs b/debian/scripts/gen-rules.lrs > index c28fc2f66b..e2ab3a1493 100755 > --- a/debian/scripts/gen-rules.lrs > +++ b/debian/scripts/gen-rules.lrs > @@ -1,4 +1,15 @@ > #!/bin/bash > +set -e > + > +validate_unique() > +{ > + [ "$#" = "2" ] > + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) > + if [ "$duplicates" ]; then > + echo "EE: duplicate values in $1" 1>&2 > + exit 1 > + fi > +} > > # Pick out relevant version and package information including our predecessor > # packages: linux-restricted-generate -> linux-restricted-signatures -> linux-restricted-modules > @@ -57,6 +68,7 @@ do > *) continue ;; > esac > > + validate_unique "archs" "$archs" > targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') > > echo "II: build linux-signatures-nvidia-${src_abi}-${flavour} for ${archs}" > diff --git a/update-version b/update-version > index fd7a29aeaa..d945eb348d 100755 > --- a/update-version > +++ b/update-version > @@ -78,7 +78,7 @@ update_file() > # Update things from the primary package. > if [ "$no_update" = 'false' ]; then > update_file "$master_dir/$branch/tracking-bug" "debian/tracking-bug" > - "$here/update-dkms-versions" > + "$here/update-dkms-versions" || exit 1 > for master_file in \ > debian/scripts/misc/git-ubuntu-log \ > debian/scripts/dkms-build \ > -- > 2.32.0 >
diff --git a/debian/lrm-version b/debian/lrm-version new file mode 100644 index 0000000000..e0ea36feef --- /dev/null +++ b/debian/lrm-version @@ -0,0 +1 @@ +6.0 diff --git a/debian/scripts/gen-rules b/debian/scripts/gen-rules index 48944818a8..c5c36a60e8 100755 --- a/debian/scripts/gen-rules +++ b/debian/scripts/gen-rules @@ -1,4 +1,5 @@ #!/bin/bash +set -e src_package=$(LC_ALL=C dpkg-parsechangelog -SSource) case "$src_package" in diff --git a/debian/scripts/gen-rules.lrg b/debian/scripts/gen-rules.lrg index 61ad057804..db613272ae 100755 --- a/debian/scripts/gen-rules.lrg +++ b/debian/scripts/gen-rules.lrg @@ -1,4 +1,15 @@ #!/bin/bash +set -e + +validate_unique() +{ + [ "$#" = "2" ] + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) + if [ "$duplicates" ]; then + echo "EE: duplicate values in $1" 1>&2 + exit 1 + fi +} # Pick out relevant version and package information including our predecessor # packages: linux -> linux-restricted-modules-signatures -> linux-restricted-modules @@ -58,6 +69,7 @@ do *) continue ;; esac + validate_unique "archs" "$archs" for arch in $archs do case " $build_archs " in @@ -66,8 +78,6 @@ do esac done - targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') - while read package version extra do case "$package" in @@ -87,14 +97,39 @@ do *\ signonly\ *) continue ;; esac + # If package specifies arch= keys, only build it on + # the intersection of kernel flavour arches & the + # package arches, otherwise build for all kernel + # flavour arches. + pkg_archs= + for cmd in $extra + do + case "$cmd" in + arch=*) pkg_archs="$pkg_archs ${cmd#arch=}" ;; + esac + done + # No package arches set, build for everything + if [ -z "$pkg_archs" ]; then + pkg_archs=$archs + else + # Package arches set, build for intersection + validate_unique "pkg_archs" "$pkg_archs" + pkg_archs=$(sort <(echo $archs | tr " " "\n") <(echo $pkg_archs | tr " " "\n") | uniq -d | tr "\n" " ") + # No intersection, skip + if [ -z "$pkg_archs" ]; then + continue + fi + fi + + targets=$(echo "$pkg_archs" | sed -e 's/\</nvidia-/g') 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" + echo "II: build $package for $flavour $pkg_archs" cat - >>"debian/control.interlock-up" <<EOL - linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} (>= ${src_lrm_version}) [${archs}], + linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} (>= ${src_lrm_version}) [${pkg_archs}], EOL # debian/rules.gen diff --git a/debian/scripts/gen-rules.lrm b/debian/scripts/gen-rules.lrm index 574a00ec3a..223918f50a 100755 --- a/debian/scripts/gen-rules.lrm +++ b/debian/scripts/gen-rules.lrm @@ -1,4 +1,15 @@ #!/bin/bash +set -e + +validate_unique() +{ + [ "$#" = "2" ] + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) + if [ "$duplicates" ]; then + echo "EE: duplicate values in $1" 1>&2 + exit 1 + fi +} # Pick out relevant version and package information including our predecessor # packages: linux -> linux-restricted-modules-signatures -> linux-restricted-modules @@ -70,8 +81,7 @@ do *) continue ;; esac - targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') - + validate_unique "archs" "$archs" cat - >>"debian/control.interlock-up" <<EOL linux-headers-${src_abi}-${flavour} (>= @VERSION@) [${archs}], EOL @@ -95,11 +105,36 @@ EOL *\ signonly\ *) continue ;; esac + # If package specifies arch= keys, only build it on + # the intersection of kernel flavour arches & the + # package arches, otherwise build for all kernel + # flavour arches. + pkg_archs= + for cmd in $extra + do + case "$cmd" in + arch=*) pkg_archs="$pkg_archs ${cmd#arch=}" ;; + esac + done + # No package arches set, build for everything + if [ -z "$pkg_archs" ]; then + pkg_archs=$archs + else + # Package arches set, build for intersection + validate_unique "pkg_archs" "$pkg_archs" + pkg_archs=$(sort <(echo $archs | tr " " "\n") <(echo $pkg_archs | tr " " "\n") | uniq -d | tr "\n" " ") + # No intersection, skip + if [ -z "$pkg_archs" ]; then + continue + fi + fi + + targets=$(echo "$pkg_archs" | sed -e 's/\</nvidia-/g') 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" + echo "II: build $package for $flavour $pkg_archs" # debian/rules.gen cat - >>"debian/rules.gen" <<EOL @@ -126,7 +161,7 @@ EOL Package: linux-modules-nvidia-${suffix_minus}-${flavour}\${variant:suffix} Build-Profiles: <!stage1> -Architecture: ${archs} +Architecture: ${pkg_archs} Section: kernel Provides: \${dkms:nvidia-${suffix_minus}-modules}, nvidia-prebuilt-kernel Depends: @@ -142,7 +177,7 @@ EOL Package: linux-objects-nvidia-${suffix_minus}-${src_abi}-${flavour} Build-Profiles: <!stage1> -Architecture: ${archs} +Architecture: ${pkg_archs} Section: kernel Priority: optional Built-Using: \${linux:BuiltUsing} @@ -160,7 +195,7 @@ Description: Linux kernel nvidia modules for version ${src_abi} (objects) Package: linux-modules-nvidia-${suffix_minus}-${src_abi}-${flavour} Build-Profiles: <!stage1> -Architecture: ${archs} +Architecture: ${pkg_archs} Section: kernel Priority: optional Built-Using: \${linux:BuiltUsing} @@ -187,11 +222,11 @@ EOL transition=*) from="${cmd#transition=}" from_minus=$(echo "$from" | sed -e 's/nvidia-graphics-drivers-//') - echo "II: general transition $from -> $package ($from_minus -> $suffix_minus)" + echo "II: general transition $from -> $package ($from_minus -> $suffix_minus) $pkg_archs" cat - >>"debian/control.d/migrate-nvidia" <<EOL Package: linux-modules-nvidia-${from_minus}-${flavour}\${variant:suffix} -Architecture: ${archs} +Architecture: ${pkg_archs} Section: oldlibs Depends: linux-modules-nvidia-${suffix_minus}-${flavour}\${variant:suffix} Description: Extra drivers for nvidia-${from_minus} for the ${flavour} flavour (dummy transitional package) @@ -214,7 +249,7 @@ do esac # debian/control.d/transitionals-local - echo "II: manual transition linux-modules-nvidia-$from -> linux-modules-nvidia-$to" + echo "II: manual transition linux-modules-nvidia-$from -> linux-modules-nvidia-$to $archs" cat - >>"debian/control.d/transitionals-local" <<EOL Package: linux-modules-nvidia-${from} diff --git a/debian/scripts/gen-rules.lrs b/debian/scripts/gen-rules.lrs index c28fc2f66b..e2ab3a1493 100755 --- a/debian/scripts/gen-rules.lrs +++ b/debian/scripts/gen-rules.lrs @@ -1,4 +1,15 @@ #!/bin/bash +set -e + +validate_unique() +{ + [ "$#" = "2" ] + local duplicates=$(echo $2 | tr " " "\n" | sort | uniq -d) + if [ "$duplicates" ]; then + echo "EE: duplicate values in $1" 1>&2 + exit 1 + fi +} # Pick out relevant version and package information including our predecessor # packages: linux-restricted-generate -> linux-restricted-signatures -> linux-restricted-modules @@ -57,6 +68,7 @@ do *) continue ;; esac + validate_unique "archs" "$archs" targets=$(echo "$archs" | sed -e 's/\</nvidia-/g') echo "II: build linux-signatures-nvidia-${src_abi}-${flavour} for ${archs}" diff --git a/update-version b/update-version index fd7a29aeaa..d945eb348d 100755 --- a/update-version +++ b/update-version @@ -78,7 +78,7 @@ update_file() # Update things from the primary package. if [ "$no_update" = 'false' ]; then update_file "$master_dir/$branch/tracking-bug" "debian/tracking-bug" - "$here/update-dkms-versions" + "$here/update-dkms-versions" || exit 1 for master_file in \ debian/scripts/misc/git-ubuntu-log \ debian/scripts/dkms-build \
BugLink: https://bugs.launchpad.net/bugs/1968774 Signed-off-by: Dimitri John Ledkov <dimitri.ledkov@canonical.com> --- Upgrade from ~LRMv5 to LRMv6 in Jammy for: - linux-restricted-modules-aws - linux-restricted-modules-azure - linux-restricted-modules-gcp - linux-restricted-modules-oracle This patch applies to all of the above repositories unmodified. Test build performed with aws flavour, in a private PPA for lrm/lrg/lrs, builds correctly. This brings these LRMs to feature parity with generic LRM. debian/lrm-version | 1 + debian/scripts/gen-rules | 1 + debian/scripts/gen-rules.lrg | 43 ++++++++++++++++++++++++++--- debian/scripts/gen-rules.lrm | 53 ++++++++++++++++++++++++++++++------ debian/scripts/gen-rules.lrs | 12 ++++++++ update-version | 2 +- 6 files changed, 98 insertions(+), 14 deletions(-) create mode 100644 debian/lrm-version