mirror of
https://abf.rosa.ru/djam/auto-krokodil.git
synced 2025-02-23 18:42:58 +00:00
Make different builds of nvidia modules packages not conflict by files
This commit is contained in:
parent
ce61ac233b
commit
34a69ebc4a
3 changed files with 56 additions and 20 deletions
|
@ -70,6 +70,7 @@ Generators of RPM provides for proprietary Nvidia drivers
|
|||
%package rpm-macros
|
||||
Summary: RPM macros for packaging of binary kernel modules for Nvidia drivers
|
||||
Requires: coreutils
|
||||
Requires: gawk
|
||||
|
||||
%description rpm-macros
|
||||
RPM macros for packaging of binary kernel modules for Nvidia drivers
|
||||
|
|
|
@ -5,8 +5,42 @@
|
|||
# Unfortunately, if we generate release inside %%kroko_kmod_pkg, every usage of
|
||||
# a macro with it will cause its regeneration, so it may be incosistent across one package.
|
||||
# Usage example:
|
||||
# %%define kroko_release %%kroko_mk_release -n %%{NAME}
|
||||
# %%kroko_kmod_pkg -r %%kroko_mk_release <...>
|
||||
%kroko_mk_release %(echo $(( $(date +%%s) - $(date -d "Mon Sep 12 00:00:00 MSK 2022" +%%s) ))).%(printf "%%d" "'$(head -c1 /dev/urandom | base64)")
|
||||
%kroko_mk_release(n:) %(echo $(( $(date +%%s) - $(date -d "Sep 12 00:00:00 MSK 2022" +%%s) ))).%(printf "%%d" "'$(head -c1 /dev/urandom | base64)").%(echo %{-n*} | sha1sum | head -c5)
|
||||
|
||||
# Usage:
|
||||
# %%kroko_swap_numbers -n <number>
|
||||
# Example input: 123456789
|
||||
# Example output: 987654321
|
||||
%kroko_swap_numbers(n:) %(set -e; \
|
||||
n=%{-n*} \
|
||||
o="" \
|
||||
for (( i = 0; i < ${#n}; i++ )) \
|
||||
do \
|
||||
a=${n:$i:1} \
|
||||
if [ $a = 1 ]; then b=9; fi \
|
||||
if [ $a = 2 ]; then b=8; fi \
|
||||
if [ $a = 3 ]; then b=7; fi \
|
||||
if [ $a = 4 ]; then b=6; fi \
|
||||
if [ $a = 5 ]; then b=5; fi \
|
||||
if [ $a = 6 ]; then b=4; fi \
|
||||
if [ $a = 7 ]; then b=3; fi \
|
||||
if [ $a = 8 ]; then b=2; fi \
|
||||
if [ $a = 9 ]; then b=1; fi \
|
||||
o=${o}${b} \
|
||||
done \
|
||||
echo $o
|
||||
)
|
||||
|
||||
|
||||
# mdf - module directory suffix
|
||||
# depmod order is non-human:
|
||||
# nvidia510.20 will have more priority than nvidia510.30, but
|
||||
# nvidia510.100 will have more priority than nvidia510.20
|
||||
# We need to give higher priority to a newer build: reverse (swap) numbers to achieve this.
|
||||
# -r is value generated with %%kroko_mk_release
|
||||
%kroko_mk_mdf(r:) %{kroko_swap_numbers -n %(echo %{-r*} | awk -F '.' '{print $1}')}.%(echo %{-r*} | awk -F '.' '{print $2 "." $3}')
|
||||
|
||||
# r - Release, generated using %%kroko_mk_release
|
||||
# j - major Nvidia version (e.g. 390 from full version 390.13)
|
||||
|
@ -17,39 +51,39 @@
|
|||
# p - full kernel version (uname -r), e.g.: 5.10.71-generic-1rosa2021.1-x86_64)
|
||||
# s - source package name (e.g.: nvidia390, kernel-5.10-generic)
|
||||
# c - module compression (.zst, .xz, .gz or "")
|
||||
%kroko_kmod_pkg(r:j:n:f:k:m:p:s:c:) \
|
||||
# d - suffix generated with %%kroko_mk_mdf
|
||||
%kroko_kmod_pkg(r:j:n:f:k:m:p:s:c:d:) \
|
||||
# e.g.: kernel-modules-nvidia390-5.10-generic \
|
||||
%define pkg kernel-modules-nvidia%{-j*}-%{-k*}-%{-f*} \
|
||||
%define rel %{-r*}.%(echo %{-s*} | sha1sum | head -c5) \
|
||||
\
|
||||
%{expand: \
|
||||
%package -n %{pkg} \
|
||||
Summary: Binary modules of Nvidia %{-j*}.%{-n*} for kernel-%{-k*}-%{-f*} \
|
||||
Group: System/Kernel and hardware \
|
||||
Version: %{-j*}.%{-n*} \
|
||||
Release: %{rel} \
|
||||
Release: %{-r*} \
|
||||
Supplements: (kernel-%{-k*}-%{-f*} and nvidia%{-j*}) \
|
||||
Provides: installonlypkg(kernel) = %{-k*}.%{-m*}.module \
|
||||
# e.g.: kmod-nvidia390.13-kabi(5.10.71-generic-1rosa2021.1-x86_64) = 456.2e9d1.15 \
|
||||
Provides: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) = %{rel} \
|
||||
Provides: kmod-nvidia%{-j*}-kabi(%{-p*}) = %{rel} \
|
||||
Provides: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) = %{-r*} \
|
||||
Provides: kmod-nvidia%{-j*}-kabi(%{-p*}) = %{-r*} \
|
||||
# e.g.: kmod-nvidia390-kabi(5.10.71-generic-1rosa2021.1-x86_64) = 456.2e9d1.15 \
|
||||
# Do not keep older builds for the same kernel installed via installonlypkg() \
|
||||
# () and provides are not allowed in Obsoletes, only real package names work as Obsoletes, \
|
||||
# so we can't write: "Obsoletes: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) < %{rel}" \\
|
||||
# so we can't write: "Obsoletes: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) < %{-r*}" \\
|
||||
# XXX Without Obsoletes for now, otherwise modules for e.g. 5.10.71 will be removed when updating to 5.10.72 \
|
||||
#Obsoletes: %{pkg} < %{-j*}.%{-n*}-%{rel} \
|
||||
#Obsoletes: %{pkg} < %{-j*}.%{-n*}-%{-r*} \
|
||||
# the same files conflict \
|
||||
#Conflicts: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) < %{rel} \
|
||||
#Conflicts: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) < %{-r*} \
|
||||
# e.g.: kmod-nvidia-5.10-generic(390.13) = 456.2e9d1.15 \
|
||||
Provides: kmod-nvidia-%{-k*}-%{-f*}(%{-j*}.%{-n*}) = %{rel} \
|
||||
Provides: kmod-nvidia-%{-k*}-%{-f*}(%{-j*}.%{-n*}) = %{-r*}0 \
|
||||
Requires: kernel-abi(%{-p*}) \
|
||||
%description -n %{pkg} \
|
||||
Binary modules of Nvidia %{-j*}.%{-n*} for kernel-%{-k*}-%{-f*} \
|
||||
Built from %{-s*} \
|
||||
%files -n %{pkg} \
|
||||
%dir /lib/modules/%{-p*}/kernel/drivers/video/nvidia%{-j*} \
|
||||
/lib/modules/%{-p*}/kernel/drivers/video/nvidia%{-j*}/*.ko%{-c*} \
|
||||
%dir /lib/modules/%{-p*}/kernel/drivers/video/nvidia%{-j*}.%{-d*} \
|
||||
/lib/modules/%{-p*}/kernel/drivers/video/nvidia%{-j*}.%{-d*}/*.ko%{-c*} \
|
||||
%{nil} \
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# Test macros for creating RPM packages
|
||||
|
||||
%define kroko_release %kroko_mk_release
|
||||
%{load:macros.krokodil}
|
||||
%global kroko_release %kroko_mk_release -n %{NAME}
|
||||
%global kroko_mdf %kroko_mk_mdf -r %{kroko_release}
|
||||
|
||||
Name: kroko-test
|
||||
Summary: Test autokrokodil macros
|
||||
|
@ -9,8 +11,6 @@ Release: 0
|
|||
License: GPLv3
|
||||
Group: System/Kernel and hardware
|
||||
|
||||
%{load:macros.krokodil}
|
||||
|
||||
%description
|
||||
%{summary}
|
||||
|
||||
|
@ -25,13 +25,13 @@ Group: System/Kernel and hardware
|
|||
# p - full kernel version (uname -r), e.g.: 5.10.71-generic-1rosa2021.1-x86_64)
|
||||
# s - source package name (e.g.: nvidia390, kernel-5.10-generic)
|
||||
# c - module compression (.zst, .xz, .gz or "")
|
||||
%kroko_kmod_pkg -r %{kroko_release} -j 100 -n 10 -f test -k 5.0 -m 1 -p 5.0.1-test-1rosa202.1-x86_64 -s kroko-test -c .zst
|
||||
%kroko_kmod_pkg -r %{kroko_release} -j 100 -n 10 -f test -k 5.0 -m 1 -p 5.0.1-test-1rosa2021.1-x86_64 -s kroko-test -c .zst -d %{kroko_mdf}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
%package kabi
|
||||
Summary: Fake provide of kernel abi to satisfy deps
|
||||
Provides: kernel-abi(5.0.1-test-1rosa202.1-x86_64)
|
||||
Provides: kernel-abi(5.0.1-test-1rosa2021.1-x86_64)
|
||||
# in sync with package generated by %%kroko_kmod_pkg
|
||||
Version: 100.10
|
||||
Release: %{kroko_release}
|
||||
|
@ -40,9 +40,10 @@ Release: %{kroko_release}
|
|||
%{summary}
|
||||
|
||||
%files kabi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
%install
|
||||
mkdir -p %{buildroot}/lib/modules/5.0.1-test-1rosa202.1-x86_64/kernel/drivers/video/nvidia100
|
||||
echo test > %{buildroot}/lib/modules/5.0.1-test-1rosa202.1-x86_64/kernel/drivers/video/nvidia100/test.ko
|
||||
zstd --rm %{buildroot}/lib/modules/5.0.1-test-1rosa202.1-x86_64/kernel/drivers/video/nvidia100/test.ko
|
||||
mkdir -p %{buildroot}/lib/modules/5.0.1-test-1rosa2021.1-x86_64/kernel/drivers/video/nvidia100.%{kroko_mdf}
|
||||
echo test > %{buildroot}/lib/modules/5.0.1-test-1rosa2021.1-x86_64/kernel/drivers/video/nvidia100.%{kroko_mdf}/test.ko
|
||||
zstd --rm %{buildroot}/lib/modules/5.0.1-test-1rosa2021.1-x86_64/kernel/drivers/video/nvidia100.%{kroko_mdf}/test.ko
|
||||
|
|
Loading…
Add table
Reference in a new issue