Compare commits
	
		
			No commits in common. "c10s" and "c9-beta" have entirely different histories.
		
	
	
		
	
		
							
								
								
									
										79
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										79
									
								
								README.md
									
									
									
									
									
								
							| @ -1,79 +0,0 @@ | |||||||
| # kernel-srpm-macros |  | ||||||
| 
 |  | ||||||
| The kernel-srpm-macros package |  | ||||||
| 
 |  | ||||||
| This source package results in two "binary" packages, kernel-rpm-macros |  | ||||||
| and kernel-srpm-macros. The role and locations of files is as follows: |  | ||||||
| 
 |  | ||||||
| kernel-srpm-macros: |  | ||||||
| 
 |  | ||||||
| /usr/lib/rpm/fileattrs/kmod.attr |  | ||||||
| 	For /lib/modules/XYZ/modules.builtin and .../MODULE.ko.XYZ |  | ||||||
| 	specifies a Lua script to generate kmod(MODULE.ko) |  | ||||||
| 	"Provides:" deps |  | ||||||
| /usr/lib/rpm/macros.d/macros.kernel-srpm |  | ||||||
| 	Automatically included by all rpm invocations. |  | ||||||
| 	Defines %kernel_arches (try rpm --eval '%kernel_arches') |  | ||||||
| 		Question: what uses this macro? I didn't find any users. |  | ||||||
| 
 |  | ||||||
| kernel-rpm-macros: |  | ||||||
| 
 |  | ||||||
| /usr/lib/rpm/redhat/find-provides.ksyms |  | ||||||
| 	Runs from rpmbuild at the end of kernel builds and 3rd party module |  | ||||||
| 	builds, to extract |  | ||||||
| 	kernel(SYMBOL)=0xHASH "Provides:" deps from modules in kernel packages, |  | ||||||
| 	and ksym(SYMBOL)=0xHASH for 3rd party modules. |  | ||||||
| 	Takes input list of files on stdin. |  | ||||||
| /usr/lib/rpm/fileattrs/provided_ksyms.attr |  | ||||||
| 	For newer rpmbuild with "internal dependency generators", |  | ||||||
| 	this file specifies that find-provides.ksyms should be run |  | ||||||
| 	only on .ko.XYZ files |  | ||||||
| 	(with "external dependency generators", the script needs to |  | ||||||
| 	filter out the files by itself). |  | ||||||
| 
 |  | ||||||
| /usr/lib/rpm/redhat/find-requires.ksyms |  | ||||||
| 	? |  | ||||||
| /usr/lib/rpm/fileattrs/required_ksyms.attr |  | ||||||
| 	For newer rpmbuild with "internal dependency generators", |  | ||||||
| 	this file specifies that find-requires.ksyms should be run |  | ||||||
| 	only on .ko.XYZ files, and not for /lib/modules/XYZ/kernel/* |  | ||||||
| 	(IOW: only for building 3rd-party modules) |  | ||||||
| 
 |  | ||||||
| /usr/lib/rpm/redhat/find-provides.d/modalias.prov |  | ||||||
| 	Runs from rpmbuild at the end of kernel builds and 3rd party module |  | ||||||
| 	builds, to extract |  | ||||||
| 	modalias(pci:SOMETHING)=OPTIONALLY_VERSION "Provides:" deps from modules |  | ||||||
| 	in kernel and 3rd party modules packages. |  | ||||||
| 	Takes input list of files on stdin. |  | ||||||
| 		Question: what uses these deps? |  | ||||||
| /usr/lib/rpm/fileattrs/modalias.attr |  | ||||||
| 	For newer rpmbuild with "internal dependency generators", |  | ||||||
| 	this file specifies that modalias.prov should be run |  | ||||||
| 	only on .ko.XYZ files |  | ||||||
| 
 |  | ||||||
| /usr/lib/rpm/redhat/find-provides.d/firmware.prov |  | ||||||
| 	? |  | ||||||
| 
 |  | ||||||
| /usr/lib/rpm/kabi.sh |  | ||||||
| 	Runs from rpmbuild at the end of kernel build to extract |  | ||||||
| 	kernel(SYMBOL)=0xHASH "Provides:" deps. |  | ||||||
| /usr/lib/rpm/fileattrs/kabi.attr |  | ||||||
| 	For newer rpmbuild with "internal dependency generators", |  | ||||||
| 	this file specifies that kabi.sh should be run on |  | ||||||
| 	/boot/symvers-* and /lib/modules/XYZ/symvers.gz |  | ||||||
| 
 |  | ||||||
| /usr/lib/rpm/macros.d/macros.kmp |  | ||||||
| 	Automatically included by all rpm invocations. |  | ||||||
| 	Defines a number of macros. |  | ||||||
| 
 |  | ||||||
| /usr/lib/rpm/redhat/brp-kmod-restore-perms |  | ||||||
| 	? |  | ||||||
| /usr/lib/rpm/redhat/brp-kmod-set-exec-bit |  | ||||||
| 	? |  | ||||||
| 
 |  | ||||||
| /usr/lib/rpm/redhat/kmodtool |  | ||||||
| 	? |  | ||||||
| /usr/lib/rpm/redhat/rpmsort |  | ||||||
| 	? |  | ||||||
| /usr/lib/rpm/redhat/symset-table |  | ||||||
| 	? |  | ||||||
							
								
								
									
										91
									
								
								SOURCES/find-provides.ksyms
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										91
									
								
								SOURCES/find-provides.ksyms
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,91 @@ | |||||||
|  | #! /bin/bash | ||||||
|  | 
 | ||||||
|  | IFS=$'\n' | ||||||
|  | export LC_ALL=C | ||||||
|  | 
 | ||||||
|  | # Prevent elfutils from trying to download debuginfos | ||||||
|  | unset DEBUGINFOD_URLS | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | for module in $(grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz|\.zst)?$') "$@"; do | ||||||
|  |     dep_pfx="ksym" | ||||||
|  |     # For built-in kmods, "kernel()" syntax is used instead of "ksym()" | ||||||
|  |     printf "%s" "$module" | grep -v "^${RPM_BUILD_ROOT}/\?lib/modules/[1-9][^/]*/kernel" > /dev/null \ | ||||||
|  |         || dep_pfx="kernel" | ||||||
|  | 
 | ||||||
|  |     tmpfile="" | ||||||
|  |     if [ "x${module%.ko}" = "x${module}" ]; then | ||||||
|  |         tmpfile=$(mktemp -t ${0##*/}.XXXXXX.ko) | ||||||
|  |         proc_bin= | ||||||
|  |         case "${module##*.}" in | ||||||
|  |         zst) | ||||||
|  |                 proc_bin=zstd | ||||||
|  |                 ;; | ||||||
|  |         xz) | ||||||
|  |                 proc_bin=xz | ||||||
|  |                 ;; | ||||||
|  |         bz2) | ||||||
|  |                 proc_bin=bzip2 | ||||||
|  |                 ;; | ||||||
|  |         gz) | ||||||
|  |                 proc_bin=gzip | ||||||
|  |                 ;; | ||||||
|  |         esac | ||||||
|  | 
 | ||||||
|  |         [ -n "$proc_bin" ] || continue | ||||||
|  | 
 | ||||||
|  |         "$proc_bin" -d -c - < "$module" > "$tmpfile" || continue | ||||||
|  |         module="$tmpfile" | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     # awk script return code: | ||||||
|  |     #   0 - absolute __crc_* symbols have been found, output has been | ||||||
|  |     #       generated; | ||||||
|  |     #   23 - a non-absolute __crc_* symbold has been found; | ||||||
|  |     #   42 - no __crc_* symbols have been found. | ||||||
|  |     nm "$module" \ | ||||||
|  |     | awk \ | ||||||
|  |        -v 'dep_pfx='"$dep_pfx" \ | ||||||
|  |        --non-decimal-data \ | ||||||
|  |        'BEGIN { exit_code = 42 } | ||||||
|  |        match($0, /^([0-9a-f]+) (.) __crc_(.+)/, a) { | ||||||
|  |            if (a[2] == "A") { | ||||||
|  |                printf("%s(%s) = 0x%08x\n", dep_pfx, a[3], strtonum("0x" a[1])); | ||||||
|  |                exit_code = 0; | ||||||
|  |            } else { | ||||||
|  |                exit_code = 23; | ||||||
|  |                exit; | ||||||
|  |            } | ||||||
|  |        } | ||||||
|  |        END { exit exit_code }' | ||||||
|  | 
 | ||||||
|  |     [ 23 = "$?" ] && { | ||||||
|  |         kmod_elf_hdr="$(readelf -h "$module")" | ||||||
|  |         [ "x$kmod_elf_hdr" = "x${kmod_elf_hdr%Data:*little endian*}" ] | ||||||
|  |         revbytes="$?" | ||||||
|  | 
 | ||||||
|  |         objdump -t "$module" \ | ||||||
|  |         | awk \ | ||||||
|  |           -v 'dep_pfx='"$dep_pfx" \ | ||||||
|  |           -v 'module='"$module" \ | ||||||
|  |           -v 'revbytes='"$revbytes" \ | ||||||
|  |           --non-decimal-data \ | ||||||
|  |           'function readsect(name,   a, t) { | ||||||
|  |               a = ""; | ||||||
|  |               while (("readelf -R \"" name "\" \"" module "\"" | getline t) > 0) { | ||||||
|  |                   if (match(t, /^  0x[0-9a-f]{8}/)) | ||||||
|  |                       a = a substr(t, 14, 8) substr(t, 23, 8) substr(t, 32, 8) substr(t, 41, 8); | ||||||
|  |               } | ||||||
|  |               if (revbytes) { a = gensub(/(..)(..)(..)(..)/, "\\4\\3\\2\\1", "g", a); } | ||||||
|  |               sectdata[name] = a; | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|  |           match($0, /^([0-9a-f]+) [gl]...... (.*)	[0-9a-f]+ __crc_(.*)$/, a) { | ||||||
|  |               if (!(a[2] in sectdata)) { readsect(a[2]) } | ||||||
|  |               printf("%s(%s) = 0x%08s\n", dep_pfx, a[3], substr(sectdata[a[2]], (strtonum("0x" a[1]) * 2) + 1, 8)) | ||||||
|  |           }' | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     [ -z "$tmpfile" ] || rm -f -- "$tmpfile" | ||||||
|  | done \ | ||||||
|  | | sort -k1,1 -u | ||||||
							
								
								
									
										84
									
								
								find-requires.ksyms → SOURCES/find-requires.ksyms
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										84
									
								
								find-requires.ksyms → SOURCES/find-requires.ksyms
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @ -11,6 +11,7 @@ export LC_ALL=C | |||||||
| # Prevent elfutils from trying to download debuginfos | # Prevent elfutils from trying to download debuginfos | ||||||
| unset DEBUGINFOD_URLS | unset DEBUGINFOD_URLS | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| # Extract all of the symbols provided by this module. | # Extract all of the symbols provided by this module. | ||||||
| all_provides() { | all_provides() { | ||||||
|     for module in "$@"; do |     for module in "$@"; do | ||||||
| @ -39,45 +40,53 @@ all_provides() { | |||||||
|             module="$tmpfile" |             module="$tmpfile" | ||||||
|         fi |         fi | ||||||
| 
 | 
 | ||||||
|         objdump -t "$module" \ |         # awk script return code: | ||||||
|  |         #   0 - absolute __crc_* symbols have been found, output has been | ||||||
|  |         #       generated; | ||||||
|  |         #   23 - a non-absolute __crc_* symbold has been found; | ||||||
|  |         #   42 - no __crc_* symbols have been found. | ||||||
|  |         nm "$module" \ | ||||||
|         | awk \ |         | awk \ | ||||||
|           -v 'dep_pfx='"$dep_pfx" \ |            -v 'dep_pfx='"$dep_pfx" \ | ||||||
|           -v 'module='"$module" \ |            --non-decimal-data \ | ||||||
|           --non-decimal-data \ |            'BEGIN { exit_code = 42 } | ||||||
|           'BEGIN { revbytes = 0 } |            match($0, /^([0-9a-f]+) (.) __crc_(.+)/, a) { | ||||||
|  |                if (a[2] == "A") { | ||||||
|  |                    printf("%s(%s) = 0x%08x\n", dep_pfx, a[3], strtonum("0x" a[1])); | ||||||
|  |                    exit_code = 0; | ||||||
|  |                } else { | ||||||
|  |                    exit_code = 23; | ||||||
|  |                    exit; | ||||||
|  |                } | ||||||
|  |            } | ||||||
|  |            END { exit exit_code }' | ||||||
| 
 | 
 | ||||||
|           function check_endianness(   t) { |         [ 23 = "$?" ] && { | ||||||
|               if (revbytes) return revbytes; |             kmod_elf_hdr="$(readelf -h "$module")" | ||||||
|  |             [ "x$kmod_elf_hdr" = "x${kmod_elf_hdr%Data:*little endian*}" ] | ||||||
|  |             revbytes="$?" | ||||||
| 
 | 
 | ||||||
|               revbytes = -1; |             objdump -t "$module" \ | ||||||
|               while (("readelf -h \"" module "\"" | getline t) > 0) { |             | awk \ | ||||||
|                   if (match(t, /^  Data: *2\047s complement, little endian$/)) { |               -v 'dep_pfx='"$dep_pfx" \ | ||||||
|                       revbytes = 1; |               -v 'module='"$module" \ | ||||||
|                       break; |               -v 'revbytes='"$revbytes" \ | ||||||
|  |               --non-decimal-data \ | ||||||
|  |               'function readsect(name,   a, t) { | ||||||
|  |                   a = ""; | ||||||
|  |                   while (("readelf -R \"" name "\" \"" module "\"" | getline t) > 0) { | ||||||
|  |                       if (match(t, /^  0x[0-9a-f]{8}/)) | ||||||
|  |                           a = a substr(t, 14, 8) substr(t, 23, 8) substr(t, 32, 8) substr(t, 41, 8); | ||||||
|                   } |                   } | ||||||
|  |                   if (revbytes) { a = gensub(/(..)(..)(..)(..)/, "\\4\\3\\2\\1", "g", a); } | ||||||
|  |                   sectdata[name] = a; | ||||||
|               } |               } | ||||||
| 
 | 
 | ||||||
|               return revbytes; |               match($0, /^([0-9a-f]+) [gl]...... (.*)	[0-9a-f]+ __crc_(.*)$/, a) { | ||||||
|           } |  | ||||||
| 
 |  | ||||||
|           function readsect(name,   a, t) { |  | ||||||
|               a = ""; |  | ||||||
|               while (("readelf -R \"" name "\" \"" module "\"" | getline t) > 0) { |  | ||||||
|                   if (match(t, /^  0x[0-9a-f]{8}/)) |  | ||||||
|                       a = a substr(t, 14, 8) substr(t, 23, 8) substr(t, 32, 8) substr(t, 41, 8); |  | ||||||
|               } |  | ||||||
|               if (revbytes) { a = gensub(/(..)(..)(..)(..)/, "\\4\\3\\2\\1", "g", a); } |  | ||||||
|               sectdata[name] = a; |  | ||||||
|           } |  | ||||||
| 
 |  | ||||||
|           match($0, /^([0-9a-f]+) [gl]...... (.*)	[0-9a-f]+ __crc_(.*)$/, a) { |  | ||||||
|               if (a[2] == "*ABS*") { |  | ||||||
|                   printf("%s(%s) = 0x%08x\n", dep_pfx, a[3], strtonum("0x" a[1])); |  | ||||||
|               } else { |  | ||||||
|                   if (!(a[2] in sectdata)) { readsect(a[2]) } |                   if (!(a[2] in sectdata)) { readsect(a[2]) } | ||||||
|                   printf("%s(%s) = 0x%08s\n", dep_pfx, a[3], substr(sectdata[a[2]], (strtonum("0x" a[1]) * 2) + 1, 8)) |                   printf("%s(%s) = 0x%08s\n", dep_pfx, a[3], substr(sectdata[a[2]], (strtonum("0x" a[1]) * 2) + 1, 8)) | ||||||
|               } |               }' | ||||||
|           }' |         } | ||||||
| 
 | 
 | ||||||
|         [ -z "$tmpfile" ] || rm -f -- "$tmpfile" |         [ -z "$tmpfile" ] || rm -f -- "$tmpfile" | ||||||
|     done \ |     done \ | ||||||
| @ -177,12 +186,9 @@ if [ ${#modules[@]} -gt 0 ]; then | |||||||
|     join -t $'\t' -j 1 -v 2 $symvers "$mod_req" | sort -u \ |     join -t $'\t' -j 1 -v 2 $symvers "$mod_req" | sort -u \ | ||||||
|     | awk 'BEGIN { FS = "[\t:]" ; OFS = "\t" } { print "ksym(" $1 ") = " $2 }' |     | awk 'BEGIN { FS = "[\t:]" ; OFS = "\t" } { print "ksym(" $1 ") = " $2 }' | ||||||
| 
 | 
 | ||||||
|     os_id=$(sed -nr '/^ID[[:space:]]*=/{ s/ID[[:space:]]*=[[:space:]]*//; s/^"(.*)"$/\1/; p }' /etc/os-release) |     # Check kABI if the kabi-stablelists package is installed | ||||||
|     if [ "rhel" = "$os_id" ]; then |     # Do this last so we can try to output this error at the end | ||||||
|         # Check kABI if the kabi-stablelists package is installed |     kabi_check_symbols=($(join -t $'\t' -j 1 $symvers "$mod_req" | sort -u \ | ||||||
|         # Do this last so we can try to output this error at the end |     | awk 'BEGIN { FS = "[\t:]" ; OFS = "\t" } { print $1 }')) | ||||||
|         kabi_check_symbols=($(join -t $'\t' -j 1 $symvers "$mod_req" | sort -u \ |     check_kabi "${kabi_check_symbols[@]}" | ||||||
|         | awk 'BEGIN { FS = "[\t:]" ; OFS = "\t" } { print $1 }')) |  | ||||||
|         check_kabi "${kabi_check_symbols[@]}" |  | ||||||
|     fi |  | ||||||
| fi | fi | ||||||
							
								
								
									
										31
									
								
								SOURCES/kmod.attr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								SOURCES/kmod.attr
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | |||||||
|  | %__kmod_path           ^/lib/modules/.*/(modules.builtin|.*\.ko|.*\.ko\.gz|.*\.ko\.bz2|.*\.ko\.xz|.*\.ko\.zst)$ | ||||||
|  | %__kmod_provides() %{lua: | ||||||
|  |   function basename(fn) | ||||||
|  |       return string.gsub(fn, "(.*/)(.*)", "%2") | ||||||
|  |   end | ||||||
|  |   function strip_compress_sfx(fn) | ||||||
|  |       return string.gsub(fn, "(.*)(\.gz|\.bz2|\.xz|\.zst)?$", "%1") | ||||||
|  |   end | ||||||
|  |   function printdep(mod) | ||||||
|  |       print("kmod("..mod..") ") | ||||||
|  |   end | ||||||
|  |   local fn = rpm.expand("%{1}") | ||||||
|  |   local bn = basename(fn) | ||||||
|  |   if bn == "modules.builtin" then | ||||||
|  |       for l in io.lines(fn) do | ||||||
|  |           local builtin_mod = basename(l) | ||||||
|  |           printdep(builtin_mod) | ||||||
|  |           if strip_compress_sfx(builtin_mod) ~= builtin_mod then | ||||||
|  |               printdep(strip_compress_sfx(builtin_mod)) | ||||||
|  |           end | ||||||
|  |       end | ||||||
|  |   else | ||||||
|  |       local mod = string.match(bn, "%g+.ko") | ||||||
|  |       if mod then | ||||||
|  |          printdep(mod) | ||||||
|  |          if strip_compress_sfx(mod) ~= mod then | ||||||
|  |              printdep(strip_compress_sfx(mod)) | ||||||
|  |          end | ||||||
|  |       end | ||||||
|  |   end | ||||||
|  | } | ||||||
| @ -1,3 +1,3 @@ | |||||||
| # kernel_arches lists what arches the full kernel is built for. | # kernel_arches lists what arches the full kernel is built for. | ||||||
| 
 | 
 | ||||||
| %kernel_arches x86_64 s390x ppc64le aarch64 %{arm} riscv64 | %kernel_arches x86_64 s390x ppc64le aarch64 %{arm} | ||||||
| @ -13,7 +13,7 @@ redhat_kmp_has_post_hooks	1 | |||||||
| #                      [ -f filelist] [ -x ] [ -p preamble ] flavor flavor ... | #                      [ -f filelist] [ -x ] [ -p preamble ] flavor flavor ... | ||||||
| 
 | 
 | ||||||
| %kernel_module_package_buildreqs	%global kmodtool_generate_buildreqs 1 \ | %kernel_module_package_buildreqs	%global kmodtool_generate_buildreqs 1 \ | ||||||
| 					kernel-devel redhat-rpm-config kernel-rpm-macros elfutils-libelf-devel kmod | 					kernel-devel kernel-abi-stablelists redhat-rpm-config kernel-rpm-macros elfutils-libelf-devel kmod | ||||||
| 
 | 
 | ||||||
| %kernel_module_package(n:v:r:s:f:xp:) %{expand:%( \ | %kernel_module_package(n:v:r:s:f:xp:) %{expand:%( \ | ||||||
| 	## An ugly hack: we want kmods to be processed by find-debuginfo, | 	## An ugly hack: we want kmods to be processed by find-debuginfo, | ||||||
| @ -59,7 +59,7 @@ redhat_kmp_has_post_hooks	1 | |||||||
| 	%global kmodtool %{-s*}%{!-s:/usr/lib/rpm/redhat/kmodtool} \ | 	%global kmodtool %{-s*}%{!-s:/usr/lib/rpm/redhat/kmodtool} \ | ||||||
| 	%global kmod_version %{-v*}%{!-v:%{version}} \ | 	%global kmod_version %{-v*}%{!-v:%{version}} \ | ||||||
| 	%global kmod_release %{-r*}%{!-r:%{release}} \ | 	%global kmod_release %{-r*}%{!-r:%{release}} \ | ||||||
| 	%global latest_kernel %({ rpm -q --qf '%%{VERSION}-%%{RELEASE}.%%{ARCH}\\\\n' `rpm -qa | egrep "^kernel(-rt|-aarch64)?-devel" | /usr/lib/rpm/redhat/rpmsort -r | head -n 1`; echo '%%%%{nil}'; } | head -n 1) \ | 	%global latest_kernel %({ rpm -q --qf '%%{VERSION}-%%{RELEASE}.%%{ARCH}\\\\n' kernel-rt-devel kernel-aarch64-devel kernel-devel | grep -v 'is not installed' | /usr/lib/rpm/redhat/rpmsort -r | head -n 1; echo '%%%%{nil}'; } | head -n 1) \ | ||||||
| 	%{!?kernel_version:%{expand:%%global kernel_version %{latest_kernel}}} \ | 	%{!?kernel_version:%{expand:%%global kernel_version %{latest_kernel}}} \ | ||||||
| 	%global kverrel %(%{kmodtool} verrel %{?kernel_version} 2>/dev/null) \ | 	%global kverrel %(%{kmodtool} verrel %{?kernel_version} 2>/dev/null) \ | ||||||
| 	flavors="default" \ | 	flavors="default" \ | ||||||
							
								
								
									
										78
									
								
								SOURCES/modalias.prov
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								SOURCES/modalias.prov
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,78 @@ | |||||||
|  | #! /bin/bash -efu | ||||||
|  | 
 | ||||||
|  | # heavily based upon find-suggests.ksyms by Andreas Gruenbacher <agruen@suse.de>. | ||||||
|  | # with modifications by Michael Brown <Michael_E_Brown@dell.com> | ||||||
|  | # | ||||||
|  | # -- added module versioning info to modalias() symbols | ||||||
|  | # -- removed code which inspects spec files. | ||||||
|  | 
 | ||||||
|  | IFS=$'\n' | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # Initially, dont generate modalias() lines for kernel package. This needs | ||||||
|  | # additional discussion. Would like to eventually add them for | ||||||
|  | # completeness, so that we can determine when drivers are folded into | ||||||
|  | # mainline kernel. | ||||||
|  | # | ||||||
|  | is_kernel_package="" | ||||||
|  | case "${1:-}" in | ||||||
|  | kernel-module-*)    ;; # Fedora kernel module package names start with | ||||||
|  | 		       # kernel-module. | ||||||
|  | kernel*)	   is_kernel_package=1 ;; | ||||||
|  | esac | ||||||
|  | 
 | ||||||
|  | if ! [ -z "$is_kernel_package" ]; then | ||||||
|  |     cat > /dev/null | ||||||
|  |     exit 0 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # Check for presence of the commands used | ||||||
|  | which /sbin/modinfo >/dev/null || exit 0 | ||||||
|  | which sed >/dev/null || exit 0 | ||||||
|  | which sort >/dev/null || exit 0 | ||||||
|  | 
 | ||||||
|  | print_modaliases() { | ||||||
|  |     declare class=$1 variants=$2 pos=$3 | ||||||
|  |     if [ -n "$variants" ]; then | ||||||
|  | 	echo "${class:0:pos}[$variants]${class:pos+1}" | ||||||
|  |     else | ||||||
|  | 	[ -z "$class" ] || echo "$class" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | combine_modaliases() { | ||||||
|  |     declare tag class variants="" pos="" n | ||||||
|  |     read class | ||||||
|  |     while read tag; do | ||||||
|  | 	for ((n=0; n<${#class}; n++)); do | ||||||
|  | 	    if [ "*" != "${class:n:1}" -a \ | ||||||
|  | 		 "${class:0:n}" = "${tag:0:n}" -a \ | ||||||
|  | 		 "${class:n+1}" = "${tag:n+1}" ] && | ||||||
|  | 	       ( [ -z "$pos" ] || [ $n = $pos ] ); then | ||||||
|  | 		variants="${variants:-${class:n:1}}${tag:n:1}" | ||||||
|  | 		pos=$n | ||||||
|  | 		break | ||||||
|  | 	    fi | ||||||
|  | 	done | ||||||
|  | 	if [ $n -eq ${#class} ]; then | ||||||
|  | 	    print_modaliases "$class" "$variants" "$pos" | ||||||
|  | 	    variants= | ||||||
|  | 	    pos= | ||||||
|  | 	    class=$tag | ||||||
|  | 	fi | ||||||
|  |     done | ||||||
|  |     print_modaliases "$class" "$variants" "$pos" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | for module in $(grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz|\.zst)?$') "$@"; do | ||||||
|  |     # | head -n1 because some modules have *two* version tags. *cough*b44*cough* | ||||||
|  |     modver=$(/sbin/modinfo -F version "$module"| head -n1) | ||||||
|  |     modver=${modver//[^0-9a-zA-Z._]/_} | ||||||
|  |     # only add version tag if it has a version | ||||||
|  |     [ -z "$modver" ] || modver=" = $modver" | ||||||
|  | 
 | ||||||
|  |     /sbin/modinfo -F alias "$module" \ | ||||||
|  |     | sed -nre "s,[^][0-9a-zA-Z._:*?/-],_,g; s,(.+),modalias(\\1)$modver,p" | ||||||
|  | done \ | ||||||
|  | | sort -u \ | ||||||
|  | | combine_modaliases | ||||||
| @ -1,7 +1,6 @@ | |||||||
| Name:           kernel-srpm-macros | Name:           kernel-srpm-macros | ||||||
| Version:        1.0 | Version:        1.0 | ||||||
| # when bumping version and resetting release, don't forget to bump version of kernel-rpm-macros as well | Release:        14%{?dist} | ||||||
| Release:        26%{?dist} |  | ||||||
| Summary:        RPM macros that list arches the full kernel is built on | Summary:        RPM macros that list arches the full kernel is built on | ||||||
| # This package only exist in Fedora repositories | # This package only exist in Fedora repositories | ||||||
| # The license is the standard (MIT) specified in | # The license is the standard (MIT) specified in | ||||||
| @ -11,10 +10,10 @@ License:        MIT | |||||||
| URL:            https://src.fedoraproject.org/rpms/kernel-srpm-macros | URL:            https://src.fedoraproject.org/rpms/kernel-srpm-macros | ||||||
| BuildArch:      noarch | BuildArch:      noarch | ||||||
| # We are now the ones shipping kmod.attr | # We are now the ones shipping kmod.attr | ||||||
| Conflicts:      redhat-rpm-config < 205 | Conflicts:      redhat-rpm-config <= 184 | ||||||
| # macros.kmp, kmodtool and rpmsort were moved from kernel-rpm-macros | # macros.kmp, kmodtool and rpmsort were moved from kernel-rpm-macros | ||||||
| # to kernel-srpm-macros in 1.0-9/185-9 | # to kernel-srpm-macros in 1.0-9/185-9 | ||||||
| Conflicts:      kernel-rpm-macros < 205 | Conflicts:      kernel-rpm-macros < 185-9 | ||||||
| 
 | 
 | ||||||
| # Macros | # Macros | ||||||
| Source0:        macros.kernel-srpm | Source0:        macros.kernel-srpm | ||||||
| @ -54,11 +53,10 @@ the full kernel is built on. | |||||||
| The variable to use is kernel_arches. | The variable to use is kernel_arches. | ||||||
| 
 | 
 | ||||||
| %package -n kernel-rpm-macros | %package -n kernel-rpm-macros | ||||||
| Version: 205 | Version: 185 | ||||||
|  | Release: %{release} | ||||||
| Summary: Macros and scripts for building kernel module packages | Summary: Macros and scripts for building kernel module packages | ||||||
| # rpmsort is GPL-2.0-or-later | Requires: redhat-rpm-config >= 13 | ||||||
| License:        MIT AND GPL-2.0-or-later |  | ||||||
| Requires: redhat-rpm-config >= 205 |  | ||||||
| 
 | 
 | ||||||
| # for brp-kmod-compress | # for brp-kmod-compress | ||||||
| Requires: %{_bindir}/xz | Requires: %{_bindir}/xz | ||||||
| @ -94,7 +92,7 @@ cp -p %{sources} . | |||||||
| mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d | mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d | ||||||
| install -p -m 0644 -t %{buildroot}/%{_rpmconfigdir}/macros.d macros.kernel-srpm | install -p -m 0644 -t %{buildroot}/%{_rpmconfigdir}/macros.d macros.kernel-srpm | ||||||
| %if 0%{?rhel} >= 8 | %if 0%{?rhel} >= 8 | ||||||
|   sed -i 's/^%%kernel_arches.*/%%kernel_arches x86_64 s390x ppc64le aarch64 riscv64/' \ |   sed -i 's/^%%kernel_arches.*/%%kernel_arches x86_64 s390x ppc64le aarch64/' \ | ||||||
|     %{buildroot}/%{_rpmconfigdir}/macros.d/macros.kernel-srpm |     %{buildroot}/%{_rpmconfigdir}/macros.d/macros.kernel-srpm | ||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| @ -115,10 +113,12 @@ install -p -m 644 -t "%{buildroot}%{_fileattrsdir}" modalias.attr | |||||||
| 
 | 
 | ||||||
| %files | %files | ||||||
| %{_rpmconfigdir}/macros.d/macros.kernel-srpm | %{_rpmconfigdir}/macros.d/macros.kernel-srpm | ||||||
|  | %{_rpmconfigdir}/macros.d/macros.kmp | ||||||
| %{_fileattrsdir}/kmod.attr | %{_fileattrsdir}/kmod.attr | ||||||
|  | %{rrcdir}/kmodtool | ||||||
|  | %{rrcdir}/rpmsort | ||||||
| 
 | 
 | ||||||
| %files -n kernel-rpm-macros | %files -n kernel-rpm-macros | ||||||
| %{_rpmconfigdir}/macros.d/macros.kmp |  | ||||||
| %{_rpmconfigdir}/kabi.sh | %{_rpmconfigdir}/kabi.sh | ||||||
| %{_fileattrsdir}/kabi.attr | %{_fileattrsdir}/kabi.attr | ||||||
| %{_fileattrsdir}/modalias.attr | %{_fileattrsdir}/modalias.attr | ||||||
| @ -132,87 +132,56 @@ install -p -m 644 -t "%{buildroot}%{_fileattrsdir}" modalias.attr | |||||||
| %{rrcdir}/find-requires.ksyms | %{rrcdir}/find-requires.ksyms | ||||||
| %{rrcdir}/find-provides.d/firmware.prov | %{rrcdir}/find-provides.d/firmware.prov | ||||||
| %{rrcdir}/find-provides.d/modalias.prov | %{rrcdir}/find-provides.d/modalias.prov | ||||||
| %{rrcdir}/kmodtool |  | ||||||
| %{rrcdir}/rpmsort |  | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
| * Tue Apr 01 2025 Andrea Bolognani <abologna@redhat.com> - 1.0-26 | * Mon Aug 12 2025 Denys Vlasenko <dvlasenk@redhat.com> - 1.0-14 | ||||||
| - Finish adding riscv64 (thanks Zhengyu He) | - macros.kmp: do not run `rpm -qa` | ||||||
|   Resolves: RHEL-85853 | Resolves: RHEL-57823 | ||||||
| 
 | 
 | ||||||
| * Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 1.0-25 | * Mon Jun 12 2023 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-13 | ||||||
| - Bump release for October 2024 mass rebuild: | - Handle symvers.xz in kabi.attr (#2209253). | ||||||
|   Resolves: RHEL-64018 | - Fix indirect __crc_* sumbols parsing in find-provides.ksyms | ||||||
|  |   and find-requires.ksyms to avoid matching multiple sections | ||||||
|  |   producing bogus duplicate provides for kmods that have both __kcrctab | ||||||
|  |   and __kcrctab_gpl sections (#2115811, #2178935). | ||||||
|  | - Call "readelf -R" on a correct section in find-requires.ksyms. | ||||||
|  | - Rewrite section data extraction in find-provides.ksyms and find-requires.ksyms | ||||||
|  |   to avoid garbage at the end of extracted sections, causing unnecessary awk | ||||||
|  |   complaints (#2115811). | ||||||
|  | - Perform section parsing inside the awk script in find-provides.ksyms | ||||||
|  |   and find-requires.ksyms to avoid hitting command line argument limit | ||||||
|  |   when handling large .rodata sections (#2178935). | ||||||
| 
 | 
 | ||||||
| * Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 1.0-24 | * Tue Jan 31 2023 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-12 | ||||||
| - Bump release for June 2024 mass rebuild |  | ||||||
| 
 |  | ||||||
| * Wed Mar 06 2024 David Abdurachmanov <davidlt@rivosinc.com> - 1.0-23 |  | ||||||
| - Add riscv64 |  | ||||||
| 
 |  | ||||||
| * Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-22 |  | ||||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild |  | ||||||
| 
 |  | ||||||
| * Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-21 |  | ||||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild |  | ||||||
| 
 |  | ||||||
| * Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-20 |  | ||||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild |  | ||||||
| 
 |  | ||||||
| * Tue May 09 2023 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-19 |  | ||||||
| - Capture local __crc_* symbols for "Provides: kernel()". |  | ||||||
| - Add support for XZ compression for the symvers file. |  | ||||||
| - Fix "Provides: kernel()" generation when both __kcrctab and __kcrctab_gpl |  | ||||||
|   are present. |  | ||||||
| - Fix regression for "Provides:" generation in cases when modversions are stored |  | ||||||
|   in a section that is over 64K in size. |  | ||||||
| - Speedup and cleanup changes in find-provides.ksyms and find-requires.ksyms. |  | ||||||
| - Fix regex usage in kmod.attr. (Denys Vlasenko) |  | ||||||
| - Implement modalias "Provides:" grouping. (Denys Vlasenko) |  | ||||||
| - Speedup and cleanup changes in modalias.prov and kmod.attr. (Denys Vlasenko) |  | ||||||
| 
 |  | ||||||
| * Tue Mar 30 2023 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-18 |  | ||||||
| - Avoid triggering debuginfod during elfutils tools usage. |  | ||||||
| 
 |  | ||||||
| * Tue Jan 31 2023 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-17 |  | ||||||
| - Support storing of __crc_* symbols in sections other than .rodata. | - Support storing of __crc_* symbols in sections other than .rodata. | ||||||
|  | - Resolves: #2135047 | ||||||
|  | 
 | ||||||
|  | * Thu Feb 17 2022 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-11 | ||||||
| - Work around a change in type of __crc_* symbols for some kmods printed by nm | - Work around a change in type of __crc_* symbols for some kmods printed by nm | ||||||
|   on ppc64le and s390x. |   on ppc64le and s390x | ||||||
| 
 | - Resolves: #2055464 | ||||||
| * Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-16 |  | ||||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild |  | ||||||
| 
 |  | ||||||
| * Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-15 |  | ||||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild |  | ||||||
| 
 |  | ||||||
| * Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-14 |  | ||||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild |  | ||||||
| 
 |  | ||||||
| * Thu Nov 18 2021 Miro Hrončok <mhroncok@redhat.com> - 1.0-13 |  | ||||||
| - Bump kernel-rpm-macros to 205 to provide clear upgrade path |  | ||||||
| 
 |  | ||||||
| * Thu Nov 18 2021 Miro Hrončok <mhroncok@redhat.com> - 1.0-12 |  | ||||||
| - Correct conflicts to redhat-rpm-macros < 205 |  | ||||||
| - Move Perl scripts back to kernel-rpm-macros to avoid Perl in the default buildroot |  | ||||||
| 
 |  | ||||||
| * Thu Nov 18 2021 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-11 |  | ||||||
| - Add conflicts of redhat-rpm-macros < 204 as macros.kmp, kmodtool, |  | ||||||
|   and rpmsort were moved from the latter to the former. |  | ||||||
| - Remove RHEL-specific kABI bits from find-requires.ksyms and macros.kmp. |  | ||||||
| 
 | 
 | ||||||
| * Thu Nov 18 2021 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-10 | * Thu Nov 18 2021 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-10 | ||||||
| - Add conflicts of kernel-srpm-macros with kernel-rpm-macros < 185-9 | - Add conflicts of kernel-srpm-macros with kernel-rpm-macros < 185-9 | ||||||
|   as macros.kmp, kmodtool, and rpmsort were moved from the latter |   as macros.kmp, kmodtool, and rpmsort were moved from the latter | ||||||
|   to the former. |   to the former. | ||||||
| 
 | 
 | ||||||
| * Thu Nov 18 2021 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-9 | * Mon Sep 20 2021 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-9 | ||||||
| - Update scripts with RHEL-specific changes. | - Update scripts with RHEL-specific changes. | ||||||
| 
 | 
 | ||||||
| * Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-6 | * Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1.0-8 | ||||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild | - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags | ||||||
|  |   Related: rhbz#1991688 | ||||||
| 
 | 
 | ||||||
| * Thu Jun 03 2021 Michal Domonkos <mdomonko@redhat.com> - 1.0-5 | * Tue May 25 2021 Michal Domonkos <mdomonko@redhat.com> - 1.0-7 | ||||||
| - Adopt kernel-rpm-macros & kmod.attr subpackage from redhat-rpm-config | - Bump release for a rebuild in a sidetag | ||||||
|  | 
 | ||||||
|  | * Wed May 12 2021 Michal Domonkos <mdomonko@redhat.com> - 1.0-6 | ||||||
|  | - Adopt kernel-rpm-macros subpackage & kmod.attr from redhat-rpm-config | ||||||
|  | - Resolves: #1959914 | ||||||
|  | 
 | ||||||
|  | * Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.0-5 | ||||||
|  | - Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 | ||||||
| 
 | 
 | ||||||
| * Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-4 | * Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-4 | ||||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild | - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild | ||||||
| @ -1,138 +0,0 @@ | |||||||
| #! /bin/bash |  | ||||||
| 
 |  | ||||||
| IFS=$'\n' |  | ||||||
| export LC_ALL=C |  | ||||||
| 
 |  | ||||||
| # Prevent elfutils from trying to download debuginfos |  | ||||||
| unset DEBUGINFOD_URLS |  | ||||||
| 
 |  | ||||||
| for module in $(grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz|\.zst)?$') "$@"; do |  | ||||||
|     dep_pfx="ksym" |  | ||||||
|     # For built-in kmods, "kernel()" syntax is used instead of "ksym()" |  | ||||||
|     printf "%s" "$module" | grep -v "^${RPM_BUILD_ROOT}/\?lib/modules/[1-9][^/]*/kernel" > /dev/null \ |  | ||||||
|         || dep_pfx="kernel" |  | ||||||
| 
 |  | ||||||
|     tmpfile="" |  | ||||||
|     if [ "x${module%.ko}" = "x${module}" ]; then |  | ||||||
|         tmpfile=$(mktemp -t ${0##*/}.XXXXXX.ko) |  | ||||||
|         proc_bin= |  | ||||||
|         case "${module##*.}" in |  | ||||||
|         zst) |  | ||||||
|                 proc_bin=zstd |  | ||||||
|                 ;; |  | ||||||
|         xz) |  | ||||||
|                 proc_bin=xz |  | ||||||
|                 ;; |  | ||||||
|         bz2) |  | ||||||
|                 proc_bin=bzip2 |  | ||||||
|                 ;; |  | ||||||
|         gz) |  | ||||||
|                 proc_bin=gzip |  | ||||||
|                 ;; |  | ||||||
|         esac |  | ||||||
| 
 |  | ||||||
|         [ -n "$proc_bin" ] || continue |  | ||||||
| 
 |  | ||||||
|         "$proc_bin" -d -c - < "$module" > "$tmpfile" || continue |  | ||||||
|         module="$tmpfile" |  | ||||||
|     fi |  | ||||||
| 
 |  | ||||||
|     # A modversion can be stored as an ELF symbol in various ways: |  | ||||||
|     # - An immediate symbol whose value is available directly;  it shows up |  | ||||||
|     #   in the nm or objdump -t output, for example: |  | ||||||
|     #       $ nm mlx5_core_5.14.x86_64.ko | grep '__crc_' | head -n 3 |  | ||||||
|     #       0000000092f175ca A __crc_mlx5_access_reg |  | ||||||
|     #       000000005b88c9f1 A __crc_mlx5_add_flow_rules |  | ||||||
|     #       00000000e7c0ec8a A __crc_mlx5_alloc_bfreg |  | ||||||
|     #       $ objdump -t lib/modules/mlx5_core_5.14.x86_64.ko | grep __crc_ | sort -k 5,5 | head -n 3 |  | ||||||
|     #       0000000092f175ca g       *ABS*	0000000000000000 __crc_mlx5_access_reg |  | ||||||
|     #       000000005b88c9f1 g       *ABS*	0000000000000000 __crc_mlx5_add_flow_rules |  | ||||||
|     #       00000000e7c0ec8a g       *ABS*	0000000000000000 __crc_mlx5_alloc_bfreg |  | ||||||
|     #       $ zgrep mlx5_access_reg ./lib/modules/5.14.0-284.15.1.el9_2.x86_64/symvers.gz |  | ||||||
|     #       0x92f175ca	mlx5_access_reg	drivers/net/ethernet/mellanox/mlx5/core/mlx5_core	EXPORT_SYMBOL_GPL |  | ||||||
|     #   This approach was being used on x86 and arm before Linux 5.19, |  | ||||||
|     #   for example. |  | ||||||
|     # |  | ||||||
|     # - A globally or locally visible symbol in a read-only (or not; |  | ||||||
|     #   sometimes .rodata is not a read-only section, after all, as binutils |  | ||||||
|     #   commit binutils-2_33~1385 has revealed (and binutils-2_35~1768 hasn't |  | ||||||
|     #   concealed back)) section (historically .rodata, __kcrctab/__kcrctab_gpl |  | ||||||
|     #   since Linux v5.19-rc1~139^2~2): |  | ||||||
|     #       $ nm mlx5_core_5.14.s390x.ko | grep '__crc_' | head -n 3 |  | ||||||
|     #       0000000000002f7c R __crc_mlx5_access_reg |  | ||||||
|     #       0000000000003304 R __crc_mlx5_add_flow_rules |  | ||||||
|     #       0000000000002d2c R __crc_mlx5_alloc_bfreg |  | ||||||
|     #   This layout is used on ppc since Linux v4.10-rc7~15^2~1, for example, |  | ||||||
|     #   and on all architectures since Linux 5.19.  To extract the symbol |  | ||||||
|     #   versions in this case, we get the offset and the section name |  | ||||||
|     #   from the "objdump -t" output: |  | ||||||
|     #       $ objdump -t lib/modules/mlx5_core_5.14.s390x.ko | grep '__crc_' | sort -k 5,5 | head -n 2 |  | ||||||
|     #       0000000000002f7c g       .rodata	0000000000000000 __crc_mlx5_access_reg |  | ||||||
|     #       0000000000003304 g       .rodata	0000000000000000 __crc_mlx5_add_flow_rules |  | ||||||
|     #   and the section contents from the "readelf -R" call: |  | ||||||
|     #       $ readelf -R .rodata mlx5_core_5.14.s390x.ko |  | ||||||
|     #       [... skipped output ...] |  | ||||||
|     #         0x00002f70 6c6f635f 6e6f6465 00000000 ed6560a8 loc_node.....e`. |  | ||||||
|     #                                               ^^^^^^^^ |  | ||||||
|     #   comparison with the contents |  | ||||||
|     #   of lib/modules/5.14.0-284.15.1.el9_2.s390x/symvers.gz corroborates |  | ||||||
|     #   its correctness: |  | ||||||
|     #       0xed6560a8	mlx5_access_reg	drivers/net/ethernet/mellanox/mlx5/core/mlx5_core	EXPORT_SYMBOL_GPL |  | ||||||
|     #   As mentioned earlier, for the later kernel versions, __kcrctab{,_gpl} |  | ||||||
|     #   sections are used: |  | ||||||
|     #       $ objdump -t lib/modules/mlx5_core_6.4.x86_64.ko | grep '__crc_' | sort -k 5,5 | head -n 2 |  | ||||||
|     #       0000000000000000 l       __kcrctab_gpl	0000000000000000 __crc_mlx5_access_reg |  | ||||||
|     #       0000000000000090 l       __kcrctab	0000000000000000 __crc_mlx5_add_flow_rules |  | ||||||
|     #       $ readelf -R __kcrctab_gpl mlx5_core_6.4.x86_64.ko |  | ||||||
|     #         0x00000000 38b0d3c3 1840ce35 b99babc7 70b4700c 8....@.5....p.p. |  | ||||||
|     #                    ^^^^^^^^ |  | ||||||
|     #   and in lib/modules/6.4.0-0.rc1.20230511git80e62bc8487b.19.eln126.x86_64/symvers.xz |  | ||||||
|     #   we see that it is correct (when accounted for the little endianness): |  | ||||||
|     #       0xc3d3b038	mlx5_access_reg	drivers/net/ethernet/mellanox/mlx5/core/mlx5_core	EXPORT_SYMBOL_GPL |  | ||||||
|     #   This data, after some post-processing,  can be used in the awk script |  | ||||||
|     #   that extracts parts of the section according to the offsets got |  | ||||||
|     #   from the "objdump -t" output. |  | ||||||
|     objdump -t "$module" \ |  | ||||||
|     | awk \ |  | ||||||
|       -v 'dep_pfx='"$dep_pfx" \ |  | ||||||
|       -v 'module='"$module" \ |  | ||||||
|       --non-decimal-data \ |  | ||||||
|       'BEGIN { revbytes = 0 } |  | ||||||
| 
 |  | ||||||
|       function check_endianness(   t) { |  | ||||||
|           if (revbytes) return revbytes; |  | ||||||
| 
 |  | ||||||
|           revbytes = -1; |  | ||||||
|           while (("readelf -h \"" module "\"" | getline t) > 0) { |  | ||||||
|               if (match(t, /^  Data: *2\047s complement, little endian$/)) { |  | ||||||
|                   revbytes = 1; |  | ||||||
|                   break; |  | ||||||
|               } |  | ||||||
|           } |  | ||||||
| 
 |  | ||||||
|           return revbytes; |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       function readsect(name,   a, t) { |  | ||||||
|           a = ""; |  | ||||||
|           while (("readelf -R \"" name "\" \"" module "\"" | getline t) > 0) { |  | ||||||
|               if (match(t, /^  0x[0-9a-f]{8}/)) |  | ||||||
|                   a = a substr(t, 14, 8) substr(t, 23, 8) substr(t, 32, 8) substr(t, 41, 8); |  | ||||||
|           } |  | ||||||
|           if (check_endianness() == 1) |  | ||||||
|               a = gensub(/(..)(..)(..)(..)/, "\\4\\3\\2\\1", "g", a); |  | ||||||
|           sectdata[name] = a; |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       match($0, /^([0-9a-f]+) [gl]...... (.*)	[0-9a-f]+ __crc_(.*)$/, a) { |  | ||||||
|           if (a[2] == "*ABS*") { |  | ||||||
|               printf("%s(%s) = 0x%08x\n", dep_pfx, a[3], strtonum("0x" a[1])); |  | ||||||
|           } else { |  | ||||||
|               if (!(a[2] in sectdata)) { readsect(a[2]) } |  | ||||||
|               printf("%s(%s) = 0x%08s\n", dep_pfx, a[3], substr(sectdata[a[2]], (strtonum("0x" a[1]) * 2) + 1, 8)) |  | ||||||
|           } |  | ||||||
|       }' |  | ||||||
| 
 |  | ||||||
|     [ -z "$tmpfile" ] || rm -f -- "$tmpfile" |  | ||||||
| done \ |  | ||||||
| | sort -k1,1 -u |  | ||||||
| @ -1,6 +0,0 @@ | |||||||
| --- !Policy |  | ||||||
| product_versions: |  | ||||||
|   - rhel-10 |  | ||||||
| decision_context: osci_compose_gate |  | ||||||
| rules: |  | ||||||
|   - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} |  | ||||||
							
								
								
									
										54
									
								
								kmod.attr
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								kmod.attr
									
									
									
									
									
								
							| @ -1,54 +0,0 @@ | |||||||
| %__kmod_path           ^/lib/modules/.*/(modules.builtin|.*\.ko|.*\.ko\.gz|.*\.ko\.bz2|.*\.ko\.xz|.*\.ko\.zst)$ |  | ||||||
| 
 |  | ||||||
| # Notes on Lua: |  | ||||||
| # The backslash in strings (like "\n" newline) needs to be doubled |  | ||||||
| # because we are inside rpm macro. Single backslashes before most chars |  | ||||||
| # disappear (removed by rpm's parser), so "\n" turns into just "n". |  | ||||||
| # In string.gsub patterns, unlike regexps, backslash has no special meaning. |  | ||||||
| # It can't escape . and such. (Use one-character set [.] to represent |  | ||||||
| # literal period, or lua's percent escape: %.) |  | ||||||
| # Pipe (|) has no special meaning too. |  | ||||||
| 
 |  | ||||||
| %__kmod_provides() %{lua: |  | ||||||
|   function basename(fn) |  | ||||||
|       local b = string.gsub(fn, ".*/", "") |  | ||||||
|       -- the above adjusts gsub() result to 1 value |  | ||||||
|       -- "return f()" construct would return _all_ values, two in case of gsub() |  | ||||||
|       return b |  | ||||||
|   end |  | ||||||
|   function strip_compress_sfx(fn) |  | ||||||
|       local cnt |  | ||||||
|       fn, cnt = string.gsub(fn, "%.gz$", "") |  | ||||||
|       if cnt == 1 then return fn; end |  | ||||||
|       fn, cnt = string.gsub(fn, "%.bz2$", "") |  | ||||||
|       if cnt == 1 then return fn; end |  | ||||||
|       fn, cnt = string.gsub(fn, "%.xz$", "") |  | ||||||
|       if cnt == 1 then return fn; end |  | ||||||
|       fn, cnt = string.gsub(fn, "%.zst$", "") |  | ||||||
|       return fn |  | ||||||
|   end |  | ||||||
|   function printdep(mod) |  | ||||||
|       print("kmod("..mod..") ") |  | ||||||
|   end |  | ||||||
|   local fn = rpm.expand("%1") |  | ||||||
|   local bn = basename(fn) |  | ||||||
|   if bn == "modules.builtin" then |  | ||||||
|       for l in io.lines(fn) do |  | ||||||
|           local builtin_mod = basename(l) |  | ||||||
|           printdep(builtin_mod) |  | ||||||
|           local nocompr = strip_compress_sfx(builtin_mod) |  | ||||||
|           if nocompr ~= builtin_mod then |  | ||||||
|               printdep(nocompr) |  | ||||||
|           end |  | ||||||
|       end |  | ||||||
|   else |  | ||||||
|       local mod = string.match(bn, "%g+%.ko") |  | ||||||
|       if mod then |  | ||||||
|           printdep(mod) |  | ||||||
|           local nocompr = strip_compress_sfx(mod) |  | ||||||
|           if nocompr ~= mod then |  | ||||||
|               printdep(nocompr) |  | ||||||
|           end |  | ||||||
|       end |  | ||||||
|   end |  | ||||||
| } |  | ||||||
							
								
								
									
										128
									
								
								modalias.prov
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								modalias.prov
									
									
									
									
									
								
							| @ -1,128 +0,0 @@ | |||||||
| #! /bin/bash -efu |  | ||||||
| 
 |  | ||||||
| # heavily based upon find-suggests.ksyms by Andreas Gruenbacher <agruen@suse.de>. |  | ||||||
| # with modifications by Michael Brown <Michael_E_Brown@dell.com> |  | ||||||
| # |  | ||||||
| # -- added module versioning info to modalias() symbols |  | ||||||
| # -- removed code which inspects spec files. |  | ||||||
| 
 |  | ||||||
| IFS=$'\n' |  | ||||||
| 
 |  | ||||||
| # |  | ||||||
| # Initially, dont generate modalias() lines for kernel package. This needs |  | ||||||
| # additional discussion. Would like to eventually add them for |  | ||||||
| # completeness, so that we can determine when drivers are folded into |  | ||||||
| # mainline kernel. |  | ||||||
| # |  | ||||||
| is_kernel_package="" |  | ||||||
| case "${1:-}" in |  | ||||||
| kernel-module-*)    ;; # Fedora kernel module package names start with |  | ||||||
| 		       # kernel-module. |  | ||||||
| kernel*)	   is_kernel_package=1 ;; |  | ||||||
| esac |  | ||||||
| 
 |  | ||||||
| if ! [ -z "$is_kernel_package" ]; then |  | ||||||
|     cat > /dev/null |  | ||||||
|     exit 0 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Check for presence of the commands used. |  | ||||||
| # "command" is a builtin, faster to use than fork+execing "which" - see |  | ||||||
| # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/command.html |  | ||||||
| command -v /sbin/modinfo >/dev/null || exit 1 |  | ||||||
| command -v sed >/dev/null || exit 1 |  | ||||||
| command -v sort >/dev/null || exit 1 |  | ||||||
| 
 |  | ||||||
| print_modaliases() { |  | ||||||
|     local class="$1" variants="$2" pos="$3" |  | ||||||
|     if [ -n "$variants" ]; then |  | ||||||
| 	echo "${class:0:pos}[$variants]${class:pos+1}" |  | ||||||
|     else |  | ||||||
| 	[ -z "$class" ] || echo "$class" |  | ||||||
|     fi |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Try to make "provides" list a bit smaller: |  | ||||||
| # find "mergeable" strings a-la |  | ||||||
| # modalias(pci:v0000168Cd00000023sv*sd*bc*sc*i*) |  | ||||||
| # modalias(pci:v0000168Cd00000024sv*sd*bc*sc*i*) |  | ||||||
| # modalias(pci:v0000168Cd00000027sv*sd*bc*sc*i*) |  | ||||||
| # modalias(pci:v0000168Cd00000029sv*sd*bc*sc*i*) |  | ||||||
| # replace with |  | ||||||
| # modalias(pci:v0000168Cd0000002[3479]sv*sd*bc*sc*i*) |  | ||||||
| combine_modaliases() { |  | ||||||
|     local unused_len next prev variants="" pos="" n end xc |  | ||||||
| 
 |  | ||||||
|     # Due to set -e, we can exit with exitcode 1 on read EOF |  | ||||||
|     # and this makes our caller think we failed. "|| return 0" prevents this: |  | ||||||
|     IFS=' ' read unused_len prev || return 0 |  | ||||||
| 
 |  | ||||||
|     # For each line after the first... |  | ||||||
|     while IFS=' ' read unused_len next; do |  | ||||||
| 	if [ -z "$pos" ]; then |  | ||||||
| 	    # 2nd line: after "modalias(" prefix, for each char in prev line... |  | ||||||
| 	    n=9 |  | ||||||
| 	    end=${#prev} |  | ||||||
| 	    # TODO speedup? if [ $end != ${#next} ]; then line is not mergeable |  | ||||||
| 	else |  | ||||||
| 	    # 3rd+ lines: only check the char at the same position |  | ||||||
| 	    n=$pos |  | ||||||
| 	    end=$((pos + 1)) |  | ||||||
| 	fi |  | ||||||
| 	# Search for aaaNbbb,aaaMbbb line pair, where N and M chars differ. |  | ||||||
| 	# sort -u guarantees there are no identical line pairs. |  | ||||||
| 	# We assume that lines will not differ only in " = version" suffix. |  | ||||||
| 	for ((; n < $end; n++)); do |  | ||||||
| 	    if [ "${prev:0:n}" != "${next:0:n}" ]; then |  | ||||||
| 		# the prefixes already aren't the same: break |  | ||||||
| 		n=$end |  | ||||||
| 		break |  | ||||||
| 	    fi |  | ||||||
| 	    # If suffixes differ, go to next char |  | ||||||
| 	    [ x"${prev:n+1}" != x"${next:n+1}" ] && continue |  | ||||||
| 	    # Found aaaNbbb,aaaMbbb. If N and M aren't special... |  | ||||||
| 	    xc=x"${prev:n:1}" |  | ||||||
| 	    [ x"[" = "$xc" -o x"]" = "$xc" ] && continue |  | ||||||
| 	    [ x"?" = "$xc" -o x"*" = "$xc" ] && continue |  | ||||||
| 	    xc=x"${next:n:1}" |  | ||||||
| 	    [ x"[" = "$xc" -o x"]" = "$xc" ] && continue |  | ||||||
| 	    [ x"?" = "$xc" -o x"*" = "$xc" ] && continue |  | ||||||
| 	    # Add M (and maybe N) to $variants, go to next line |  | ||||||
| 	    variants="${variants:-${prev:n:1}}${next:n:1}" |  | ||||||
| 	    pos=$n |  | ||||||
| 	    break |  | ||||||
| 	done |  | ||||||
| 	if [ $n -eq $end ]; then |  | ||||||
| 	    # This line is not mergeable with the previous one(s), |  | ||||||
| 	    # print collected merged line and reset the state |  | ||||||
| 	    print_modaliases "$prev" "$variants" "$pos" |  | ||||||
| 	    variants="" |  | ||||||
| 	    pos="" |  | ||||||
| 	    prev=$next |  | ||||||
| 	fi |  | ||||||
|     done |  | ||||||
|     # Print last collected merged line |  | ||||||
|     print_modaliases "$prev" "$variants" "$pos" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| for module in $(grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz|\.zst)?$') "$@"; do |  | ||||||
|     modver=$(/sbin/modinfo -F version "$module") |  | ||||||
|     # delete possible extra lines because some modules have *two* version tags. *cough*b44*cough* |  | ||||||
|     modver=${modver%%$'\n'*}    # using $'' bashism, avoid running "head -n1" process |  | ||||||
|     # replace any strange chars with underscores. |  | ||||||
|     # [!...] is glob's "match any char not in set" pattern |  | ||||||
|     # (although bash supports [^...] too, it is not standard) |  | ||||||
|     modver=${modver//[!0-9a-zA-Z._]/_} |  | ||||||
|     # only add version tag if it indeed has a version |  | ||||||
|     [ -z "$modver" ] || modver=" = $modver" |  | ||||||
| 
 |  | ||||||
|     /sbin/modinfo -F alias "$module" \ |  | ||||||
|     | sed -E "s,[^][0-9a-zA-Z._:*?/-],_,g; s,(.+),modalias(\\1)$modver," |  | ||||||
| 
 |  | ||||||
|     # Below: combining code can only possibly combine lines of equal length. |  | ||||||
|     # Prepend line lengths before sort, so that same-length lines end up next |  | ||||||
|     # to each other. (The lengths are discarded by combine_modaliases). |  | ||||||
| done \ |  | ||||||
| | { while read line; do echo "${#line} $line"; done } \ |  | ||||||
| | LC_ALL=C sort -u \ |  | ||||||
| | combine_modaliases |  | ||||||
| @ -1,31 +0,0 @@ | |||||||
| #! /bin/bash -efu |  | ||||||
| 
 |  | ||||||
| # This fetches test data from current system's /lib/modules |  | ||||||
| # to /tmp/COLLECT |  | ||||||
| 
 |  | ||||||
| IFS=$'\n' |  | ||||||
| 
 |  | ||||||
| find /lib/modules | grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz|\.zst)?$' \ |  | ||||||
| | while IFS='' read -r module; do |  | ||||||
|     modver=$(/sbin/modinfo -F version "$module") |  | ||||||
|     # delete possible extra lines because some modules have *two* version tags. *cough*b44*cough* |  | ||||||
|     modver=${modver%%$'\n'*}    # using $'' bashism, avoid running "head -n1" process |  | ||||||
|     # replace any strange chars with underscores. |  | ||||||
|     # [!...] is glob's "match any char not in set" pattern |  | ||||||
|     # (although bash supports [^...] too, it is not standard) |  | ||||||
|     modver=${modver//[!0-9a-zA-Z._]/_} |  | ||||||
|     # only add version tag if it has a version |  | ||||||
|     [ -z "$modver" ] || modver=" = $modver" |  | ||||||
| 
 |  | ||||||
|     d="/tmp/COLLECT$module" |  | ||||||
|     d="${d%/*}" |  | ||||||
|     mkdir -p "$d" |  | ||||||
| 
 |  | ||||||
|     out=`/sbin/modinfo -F alias "$module" \ |  | ||||||
|     | sed -E "s,[^][0-9a-zA-Z._:*?/-],_,g; s,(.+),modalias(\\1)$modver,"` |  | ||||||
| 
 |  | ||||||
|     [ "$out" ] || continue |  | ||||||
| 
 |  | ||||||
|     echo "/tmp/COLLECT$module.modalias$modver" >&2 |  | ||||||
|     printf '%s\n' "$out" >"/tmp/COLLECT$module.modalias" |  | ||||||
| done |  | ||||||
| @ -1,42 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
| 
 |  | ||||||
| function die() |  | ||||||
| { |  | ||||||
|     printf '%s\n' "$*" >&2 |  | ||||||
|     exit 1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| set -e |  | ||||||
| 
 |  | ||||||
| cd modalias.prov.testdata |  | ||||||
| test -x ../../modalias.prov || die "No ../../modalias.prov" |  | ||||||
| 
 |  | ||||||
| # Copy and add -t option to modalias.prov |  | ||||||
| cp ../../modalias.prov modalias.prov |  | ||||||
| patch -p1 <<"EOF" |  | ||||||
| --- a/modalias.prov |  | ||||||
| +++ b/modalias.prov |  | ||||||
| @@ -105,6 +105,17 @@ combine_modaliases() { |  | ||||||
|      print_modaliases "$prev" "$variants" "$pos" |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +if [ "$#" = 2 ] && [ "$1" = "-t" ]; then |  | ||||||
| +    cat -- "$2" \ |  | ||||||
| +    | { while read line; do echo "${#line} $line"; done } \ |  | ||||||
| +    | LC_ALL=C sort -u \ |  | ||||||
| +    | combine_modaliases \ |  | ||||||
| +    >"$2.test" |  | ||||||
| +    echo "Comparing results for $2" |  | ||||||
| +    diff -u "$2.right" "$2.test" && rm -- "$2.test" |  | ||||||
| +    exit |  | ||||||
| +fi |  | ||||||
| + |  | ||||||
|  for module in $(grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz|\.zst)?$') "$@"; do |  | ||||||
|      modver=$(/sbin/modinfo -F version "$module") |  | ||||||
|      # delete possible extra lines because some modules have *two* version tags. *cough*b44*cough* |  | ||||||
| EOF |  | ||||||
| 
 |  | ||||||
| find | grep '\.ko.*\.modalias$' | xargs -n1 ./modalias.prov -t |  | ||||||
| 
 |  | ||||||
| # Rename newly generated .test as .right |  | ||||||
| #find | grep '\.ko.*\.modalias$' | xargs -I'{}' mv '{}'.test '{}'.right |  | ||||||
										
											Binary file not shown.
										
									
								
							| @ -1,62 +0,0 @@ | |||||||
| #!/bin/bash
 |  | ||||||
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 |  | ||||||
| #
 |  | ||||||
| #   Description: Gating test for kernel-srpm-macros
 |  | ||||||
| #   Author: Ziqian SUN (Zamir) <zsun@redhat.com>
 |  | ||||||
| #
 |  | ||||||
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 |  | ||||||
| #
 |  | ||||||
| #   Copyright (c) 2024 Red Hat, Inc. All rights reserved.
 |  | ||||||
| #
 |  | ||||||
| #   This copyrighted material is made available to anyone wishing
 |  | ||||||
| #   to use, modify, copy, or redistribute it subject to the terms
 |  | ||||||
| #   and conditions of the GNU General Public License version 2.
 |  | ||||||
| #
 |  | ||||||
| #   This program is distributed in the hope that it will be
 |  | ||||||
| #   useful, but WITHOUT ANY WARRANTY; without even the implied
 |  | ||||||
| #   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 |  | ||||||
| #   PURPOSE. See the GNU General Public License for more details.
 |  | ||||||
| #
 |  | ||||||
| #   You should have received a copy of the GNU General Public
 |  | ||||||
| #   License along with this program; if not, write to the Free
 |  | ||||||
| #   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 |  | ||||||
| #   Boston, MA 02110-1301, USA.
 |  | ||||||
| #
 |  | ||||||
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 |  | ||||||
| 
 |  | ||||||
| TOPLEVEL_NAMESPACE=kernel |  | ||||||
| PACKAGE_NAME=kernel-srpm-macros |  | ||||||
| RELATIVE_PATH=general/kmod/kernel-srpm-macros/gating |  | ||||||
| 
 |  | ||||||
| export TESTVERSION=1.0 |  | ||||||
| export TEST=/$(TOPLEVEL_NAMESPACE)/$(RELATIVE_PATH) |  | ||||||
| 
 |  | ||||||
| .PHONY: all install download clean |  | ||||||
| 
 |  | ||||||
| BUILT_FILES= |  | ||||||
| 
 |  | ||||||
| FILES=$(METADATA) runtest.sh Makefile PURPOSE |  | ||||||
| 
 |  | ||||||
| run: $(FILES) build |  | ||||||
| 	./runtest.sh |  | ||||||
| 
 |  | ||||||
| build: $(BUILT_FILES) |  | ||||||
| 	chmod a+x ./runtest.sh |  | ||||||
| 
 |  | ||||||
| clean: |  | ||||||
| 	rm -f *~ *.rpm $(BUILT_FILES) |  | ||||||
| 
 |  | ||||||
| include /usr/share/rhts/lib/rhts-make.include |  | ||||||
| 
 |  | ||||||
| $(METADATA): Makefile |  | ||||||
| 	@touch $(METADATA) |  | ||||||
| 	@echo "Owner:        Ziqian SUN (Zamir) <zsun@redhat.com>" > $(METADATA) |  | ||||||
| 	@echo "Name:         $(TEST)" >> $(METADATA) |  | ||||||
| 	@echo "Path:         $(TEST_DIR)"	>> $(METADATA) |  | ||||||
| 	@echo "License:      GPLv2" >> $(METADATA) |  | ||||||
| 	@echo "TestVersion:  $(TESTVERSION)"	>> $(METADATA) |  | ||||||
| 	@echo "Description:  kernel-srpm-macros gating test">> $(METADATA) |  | ||||||
| 	@echo "TestTime:     90m" >> $(METADATA) |  | ||||||
| 	@echo "RunFor:       $(PACKAGE_NAME)" >> $(METADATA) |  | ||||||
| 	@echo "Requires:     kernel-srpm-macros" >> $(METADATA) |  | ||||||
| 	@echo "RhtsRequires: " >> $(METADATA) |  | ||||||
| @ -1 +0,0 @@ | |||||||
| Gating test for kernel-srpm-macros |  | ||||||
| @ -1,13 +0,0 @@ | |||||||
| [General] |  | ||||||
| name=kernel-srpm-macros |  | ||||||
| owner= Ziqian SUN (Zamir) <zsun@redhat.com> |  | ||||||
| description=Gating test for kernel-srpm-macros |  | ||||||
| license=GPLv2 |  | ||||||
| confidential=no |  | ||||||
| destructive=no |  | ||||||
| 
 |  | ||||||
| [restraint] |  | ||||||
| entry_point=./runtest.sh |  | ||||||
| max_time=90m |  | ||||||
| dependencies=kernel-srpm-macros |  | ||||||
| repoRequires= |  | ||||||
| @ -1,38 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| # vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k |  | ||||||
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |  | ||||||
| # |  | ||||||
| #   runtest.sh for kernel-srpm-macros gating test. |  | ||||||
| #   Author: Ziqian SUN (Zamir) <zsun@redhat.com> |  | ||||||
| # |  | ||||||
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |  | ||||||
| # |  | ||||||
| #   Copyright (c) 2024 Red Hat, Inc. |  | ||||||
| # |  | ||||||
| #   This program is free software: you can redistribute it and/or |  | ||||||
| #   modify it under the terms of the GNU General Public License as |  | ||||||
| #   published by the Free Software Foundation, either version 2 of |  | ||||||
| #   the License, or (at your option) any later version. |  | ||||||
| # |  | ||||||
| #   This program is distributed in the hope that it will be |  | ||||||
| #   useful, but WITHOUT ANY WARRANTY; without even the implied |  | ||||||
| #   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR |  | ||||||
| #   PURPOSE.  See the GNU General Public License for more details. |  | ||||||
| # |  | ||||||
| #   You should have received a copy of the GNU General Public License |  | ||||||
| #   along with this program. If not, see http://www.gnu.org/licenses/. |  | ||||||
| # |  | ||||||
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |  | ||||||
| 
 |  | ||||||
| # Include Beaker environment |  | ||||||
| . /usr/share/beakerlib/beakerlib.sh || exit 1 |  | ||||||
| 
 |  | ||||||
| rlJournalStart |  | ||||||
|     rlPhaseStartTest "kernel_arches" |  | ||||||
|         rlRun -l "rpm --eval \%kernel_arches" |  | ||||||
|         rlRun -l "rpm --eval \%kernel_arches | grep x86_64" |  | ||||||
|         popd |  | ||||||
|     rlPhaseEnd |  | ||||||
| 
 |  | ||||||
|     rlJournalPrintText |  | ||||||
| rlJournalEnd |  | ||||||
| @ -1,9 +0,0 @@ | |||||||
| - hosts: localhost |  | ||||||
|   tags: |  | ||||||
|   - classic |  | ||||||
|   roles: |  | ||||||
|   - role: standard-test-beakerlib |  | ||||||
|     tests: |  | ||||||
|     - sanity |  | ||||||
|     required_packages: |  | ||||||
|     - kernel-srpm-macros |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user